diff --git a/base/aaa/sess.go b/base/aaa/sess.go index abec4063..1571e22b 100644 --- a/base/aaa/sess.go +++ b/base/aaa/sess.go @@ -88,7 +88,7 @@ func init() { }) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) == 0, "time,hash,username,userrole,ip") + m.Fields(len(arg), "time,hash,username,userrole,ip") m.Cmdy(mdb.SELECT, SESS, "", mdb.HASH, kit.MDB_HASH, arg) m.PushAction(mdb.REMOVE) }}, diff --git a/base/aaa/totp.go b/base/aaa/totp.go index 35aa334a..d2a47c30 100644 --- a/base/aaa/totp.go +++ b/base/aaa/totp.go @@ -75,7 +75,7 @@ func init() { m.Cmdy(mdb.DELETE, TOTP, "", mdb.HASH, kit.MDB_NAME, m.Option(kit.MDB_NAME)) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) == 0, "time,name,secret,period,number") + m.Fields(len(arg), "time,name,secret,period,number") m.Cmd(mdb.SELECT, TOTP, "", mdb.HASH, kit.MDB_NAME, arg).Table(func(index int, value map[string]string, head []string) { m.Push(kit.MDB_TIME, m.Time()) m.Push(kit.MDB_NAME, value[kit.MDB_NAME]) diff --git a/base/aaa/user.go b/base/aaa/user.go index b5257ea9..1c6bc790 100644 --- a/base/aaa/user.go +++ b/base/aaa/user.go @@ -138,7 +138,7 @@ func init() { } }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) == 0, "time,username,userzone,usernick") + m.Fields(len(arg), "time,username,userzone,usernick") m.Cmdy(mdb.SELECT, USER, "", mdb.HASH, USERNAME, arg) m.Table(func(index int, value map[string]string, head []string) { m.Push(USERROLE, UserRole(m, value[USERNAME])) diff --git a/base/cli/daemon.go b/base/cli/daemon.go index 7481367e..ffe0292e 100644 --- a/base/cli/daemon.go +++ b/base/cli/daemon.go @@ -132,7 +132,7 @@ func init() { }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) == 0 { // 进程列表 - m.Fields(len(arg) == 0, "time,hash,status,pid,cmd,dir,env") + m.Fields(len(arg), "time,hash,status,pid,cmd,dir,env") m.Cmdy(mdb.SELECT, DAEMON, "", mdb.HASH).Table(func(index int, value map[string]string, head []string) { switch value[kit.MDB_STATUS] { case START: diff --git a/base/cli/system.go b/base/cli/system.go index 57cc8bb2..c3566a17 100644 --- a/base/cli/system.go +++ b/base/cli/system.go @@ -79,6 +79,7 @@ const ( DARWIN = "darwin" WINDOWS = "windows" SOURCE = "source" + TARGET = "target" USER = "USER" HOME = "HOME" @@ -94,7 +95,7 @@ func init() { Commands: map[string]*ice.Command{ SYSTEM: {Name: "system cmd= 执行:button", Help: "系统命令", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) { if len(arg) == 0 { - m.Fields(len(arg) == 0, "time,id,cmd") + m.Fields(len(arg), "time,id,cmd") m.Cmdy(mdb.SELECT, SYSTEM, "", mdb.LIST) return } diff --git a/base/gdb/event.go b/base/gdb/event.go index 43c9795c..bcc775b8 100644 --- a/base/gdb/event.go +++ b/base/gdb/event.go @@ -37,13 +37,13 @@ func init() { }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) == 0 { // 事件列表 - m.Fields(len(arg) == 0, "time,event,count") + m.Fields(len(arg), "time,event,count") m.Cmdy(mdb.SELECT, EVENT, "", mdb.HASH) m.PushAction(ACTION, mdb.REMOVE) return } - m.Fields(len(arg) == 1, "time,id,cmd") + m.Fields(len(arg[1:]), "time,id,cmd") m.Cmdy(mdb.SELECT, EVENT, kit.Keys(kit.MDB_HASH, kit.Hashs(arg[0])), mdb.LIST, kit.MDB_ID, arg[1:]) }}, }, diff --git a/base/gdb/routine.go b/base/gdb/routine.go index c9906471..209767b6 100644 --- a/base/gdb/routine.go +++ b/base/gdb/routine.go @@ -52,7 +52,7 @@ func init() { } }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) == 0, "time,hash,status,fileline") + m.Fields(len(arg), "time,hash,status,fileline") m.Cmdy(mdb.SELECT, ROUTINE, "", mdb.HASH, kit.MDB_HASH, arg) m.PushAction(INNER, mdb.REMOVE) }}, diff --git a/base/gdb/signal.go b/base/gdb/signal.go index 548bfca4..a9344a81 100644 --- a/base/gdb/signal.go +++ b/base/gdb/signal.go @@ -62,7 +62,7 @@ func init() { m.Cmdy(mdb.DELETE, SIGNAL, "", mdb.HASH, SIGNAL, m.Option(SIGNAL)) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) == 0, "time,signal,name,cmd") + m.Fields(len(arg), "time,signal,name,cmd") m.Cmdy(mdb.SELECT, SIGNAL, "", mdb.HASH, SIGNAL, arg) m.PushAction(ACTION, mdb.REMOVE) m.Sort(SIGNAL) diff --git a/base/gdb/timer.go b/base/gdb/timer.go index b2985e40..c41fa76c 100644 --- a/base/gdb/timer.go +++ b/base/gdb/timer.go @@ -69,13 +69,13 @@ func init() { }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) == 0 { - m.Fields(len(arg) == 0, "time,hash,delay,interval,order,next,cmd") + m.Fields(len(arg), "time,hash,delay,interval,order,next,cmd") m.Cmdy(mdb.SELECT, TIMER, "", mdb.HASH, kit.MDB_HASH, arg) m.PushAction(mdb.REMOVE) return } - m.Fields(len(arg) == 1, "time,id,res") + m.Fields(len(arg[1:]), "time,id,res") m.Cmdy(mdb.SELECT, TIMER, kit.Keys(kit.MDB_HASH, arg[0]), mdb.LIST, kit.MDB_ID, arg[1:]) }}, }, diff --git a/base/lex/matrix.go b/base/lex/matrix.go index c23c413f..c4a3de1d 100644 --- a/base/lex/matrix.go +++ b/base/lex/matrix.go @@ -428,14 +428,14 @@ func init() { }}, }, Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) { if m.Action(mdb.CREATE); len(arg) == 0 { // 矩阵列表 - m.Fields(len(arg) == 0, "time,hash,npage,nhash") + m.Fields(len(arg), "time,hash,npage,nhash") m.Cmdy(mdb.SELECT, m.Prefix(MATRIX), "", mdb.HASH) m.PushAction(mdb.INSERT, "show", mdb.REMOVE) return } if m.Action(mdb.INSERT, "show"); len(arg) == 1 { // 词法列表 - m.Fields(len(arg) == 1, "time,npage,nhash,text") + m.Fields(len(arg[1:]), "time,npage,nhash,text") m.Cmdy(mdb.SELECT, m.Prefix(MATRIX), kit.Keys(kit.MDB_HASH, arg[0]), mdb.LIST) m.PushAction(PARSE) return diff --git a/base/mdb/mdb.go b/base/mdb/mdb.go index 0f4a5d62..90501c67 100644 --- a/base/mdb/mdb.go +++ b/base/mdb/mdb.go @@ -455,6 +455,8 @@ const MDB = "mdb" var Index = &ice.Context{Name: MDB, Help: "数据模块", Commands: map[string]*ice.Command{ INSERT: {Name: "insert key sub type arg...", Help: "添加", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { switch arg[2] { + case ZONE: + _list_insert(m, arg[0], _domain_chain(m, kit.Keys(arg[1], kit.SubKey(arg[3]))), arg[4:]...) case HASH: _hash_insert(m, arg[0], _domain_chain(m, arg[1]), arg[3:]...) case LIST: @@ -521,6 +523,8 @@ var Index = &ice.Context{Name: MDB, Help: "数据模块", Commands: map[string]* }}, INPUTS: {Name: "inputs key sub type field value", Help: "补全", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { switch arg[2] { + case ZONE: + _list_inputs(m, arg[0], _domain_chain(m, kit.Keys(arg[1], kit.SubKey(arg[3]))), kit.Select("name", arg, 4), kit.Select("", arg, 5)) case HASH: _hash_inputs(m, arg[0], _domain_chain(m, arg[1]), kit.Select("name", arg, 3), kit.Select("", arg, 4)) case LIST: diff --git a/base/nfs/tail.go b/base/nfs/tail.go index 27fede71..83bc5989 100644 --- a/base/nfs/tail.go +++ b/base/nfs/tail.go @@ -64,7 +64,7 @@ func init() { mdb.NextPage(m, _tail_count(m, arg[0]), kit.Slice(arg, 2)...) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) < 2 || (len(arg) > 1 && arg[1] == ""), kit.Select("time,name,count,name,file", "time,id,file,text", len(arg) > 0 && arg[0] != "")) + m.Fields(len(kit.Slice(arg, 0, 2)), "time,name,count,name,file", "time,id,file,text") m.Option(mdb.CACHE_FILTER, kit.Select("", arg, 4)) m.Option(mdb.CACHE_OFFEND, kit.Select("0", arg, 3)) m.Option(mdb.CACHE_LIMIT, kit.Select("10", arg, 2)) diff --git a/base/nfs/trash.go b/base/nfs/trash.go index 6c2db297..9fe74f8d 100644 --- a/base/nfs/trash.go +++ b/base/nfs/trash.go @@ -57,7 +57,7 @@ func init() { }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) == 0 { - m.Fields(len(arg) == 0, "time,hash,file,from") + m.Fields(len(arg), "time,hash,file,from") m.Cmdy(mdb.SELECT, TRASH, "", mdb.HASH) m.PushAction(mdb.REVERT, mdb.REMOVE) return diff --git a/base/ssh/channel.go b/base/ssh/channel.go index 9d30b860..d810ed13 100644 --- a/base/ssh/channel.go +++ b/base/ssh/channel.go @@ -94,7 +94,7 @@ func init() { }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) == 0 { // 通道列表 - m.Fields(len(arg) == 0, "time,hash,status,username,hostport,tty,count") + m.Fields(len(arg), "time,hash,status,username,hostport,tty,count") if m.Cmdy(mdb.SELECT, CHANNEL, "", mdb.HASH); len(arg) == 0 { m.Table(func(index int, value map[string]string, head []string) { m.PushButton(kit.Select("", ctx.COMMAND, value[kit.MDB_STATUS] == tcp.OPEN), mdb.REMOVE) @@ -104,7 +104,7 @@ func init() { } // 通道命令 - m.Fields(len(arg) == 1, "time,id,type,text") + m.Fields(len(arg[1:]), "time,id,type,text") m.Cmdy(mdb.SELECT, CHANNEL, kit.Keys(kit.MDB_HASH, arg[0]), mdb.LIST, kit.MDB_ID, arg[1:]) m.PushAction(mdb.REPEAT) }}, diff --git a/base/ssh/connect.go b/base/ssh/connect.go index 76e46ae0..25ab8295 100644 --- a/base/ssh/connect.go +++ b/base/ssh/connect.go @@ -211,7 +211,7 @@ func init() { m.Echo(h) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) == 0, "time,hash,status,username,host,port") + m.Fields(len(arg), "time,hash,status,username,host,port") if m.Cmdy(mdb.SELECT, CONNECT, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 { m.Table(func(index int, value map[string]string, head []string) { m.PushButton(kit.Select("", SESSION, value[kit.MDB_STATUS] == tcp.OPEN), mdb.REMOVE) diff --git a/base/ssh/scripts.go b/base/ssh/scripts.go index 749ca360..9646b545 100644 --- a/base/ssh/scripts.go +++ b/base/ssh/scripts.go @@ -384,7 +384,7 @@ func init() { } if len(arg) == 0 { // 脚本列表 - m.Fields(len(arg) == 0, "time,hash,name,count") + m.Fields(len(arg), "time,hash,name,count") m.Cmdy(mdb.SELECT, SOURCE, "", mdb.HASH) m.Sort(kit.MDB_NAME) return @@ -397,7 +397,7 @@ func init() { } // 命令列表 - m.Fields(len(arg) == 1 || arg[1] == "", "time,id,text") + m.Fields(len(arg[1:]), "time,id,text") m.Cmdy(mdb.SELECT, SOURCE, kit.Keys(kit.MDB_HASH, arg[0]), mdb.LIST, kit.MDB_ID, arg[1:]) m.PushAction(mdb.REPEAT) }}, diff --git a/base/ssh/service.go b/base/ssh/service.go index 42061298..20c3d769 100644 --- a/base/ssh/service.go +++ b/base/ssh/service.go @@ -170,14 +170,14 @@ func init() { }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) == 0 { // 服务列表 - m.Fields(len(arg) == 0, "time,port,status,private,authkey,count") + m.Fields(len(arg), "time,port,status,private,authkey,count") m.Cmdy(mdb.SELECT, SERVICE, "", mdb.HASH) m.PushAction(mdb.IMPORT, mdb.INSERT, mdb.EXPORT, aaa.INVITE) return } // 公钥列表 - m.Fields(len(arg) == 1, "time,id,type,name,text") + m.Fields(len(arg[1:]), "time,id,type,name,text") m.Cmdy(mdb.SELECT, SERVICE, kit.Keys(kit.MDB_HASH, kit.Hashs(arg[0])), mdb.LIST, kit.MDB_ID, arg[1:]) }}, }, diff --git a/base/ssh/session.go b/base/ssh/session.go index d09fbe1a..ef16d985 100644 --- a/base/ssh/session.go +++ b/base/ssh/session.go @@ -85,7 +85,7 @@ func init() { }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) == 0 { - m.Fields(len(arg) == 0, "time,hash,status,count,connect") + m.Fields(len(arg), "time,hash,status,count,connect") if m.Cmdy(mdb.SELECT, SESSION, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 { m.Table(func(index int, value map[string]string, head []string) { m.PushButton(kit.Select("", ctx.COMMAND, value[kit.MDB_STATUS] == tcp.OPEN), mdb.REMOVE) @@ -94,7 +94,7 @@ func init() { return } - m.Fields(len(arg) == 1, "time,id,type,text") + m.Fields(len(arg[1:]), "time,id,type,text") m.Cmdy(mdb.SELECT, SESSION, kit.Keys(kit.MDB_HASH, arg[0]), mdb.LIST, kit.MDB_ID, arg[1:]) m.Table(func(index int, value map[string]string, head []string) { m.PushButton(kit.Select("", mdb.REPEAT, value[kit.MDB_TYPE] == CMD)) diff --git a/base/tcp/client.go b/base/tcp/client.go index 122d1912..41baaf97 100644 --- a/base/tcp/client.go +++ b/base/tcp/client.go @@ -92,7 +92,7 @@ func init() { m.Cmdy(mdb.PRUNES, CLIENT, "", mdb.HASH, kit.MDB_STATUS, CLOSE) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) == 0, "time,hash,status,type,name,host,port,error,nread,nwrite") + m.Fields(len(arg), "time,hash,status,type,name,host,port,error,nread,nwrite") if m.Cmdy(mdb.SELECT, CLIENT, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 { m.Table(func(index int, value map[string]string, head []string) { m.PushButton(kit.Select("", mdb.REMOVE, value[kit.MDB_STATUS] == OPEN)) diff --git a/base/tcp/server.go b/base/tcp/server.go index 127d52c8..d562c24e 100644 --- a/base/tcp/server.go +++ b/base/tcp/server.go @@ -94,7 +94,7 @@ func init() { m.Cmdy(mdb.PRUNES, SERVER, "", mdb.HASH, kit.MDB_STATUS, CLOSE) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) == 0, "time,hash,status,type,name,host,port,error,nconn") + m.Fields(len(arg), "time,hash,status,type,name,host,port,error,nconn") if m.Cmdy(mdb.SELECT, SERVER, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 { m.Table(func(index int, value map[string]string, head []string) { m.PushButton(kit.Select("", mdb.REMOVE, value[kit.MDB_STATUS] == CLOSE)) diff --git a/base/web/cache.go b/base/web/cache.go index 241efc42..7711aef2 100644 --- a/base/web/cache.go +++ b/base/web/cache.go @@ -168,7 +168,7 @@ func init() { } }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) == 0, "time,hash,size,type,name,text") + m.Fields(len(arg), "time,hash,size,type,name,text") if m.Cmdy(mdb.SELECT, CACHE, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 { return } diff --git a/base/web/render.go b/base/web/render.go index 841f8d8a..bc10d654 100644 --- a/base/web/render.go +++ b/base/web/render.go @@ -39,7 +39,7 @@ func Render(msg *ice.Message, cmd string, args ...interface{}) { RenderCookie(msg, arg[0], arg[1:]...) case ice.RENDER_DOWNLOAD: // file [type [name]] - msg.W.Header().Set("Content-Disposition", fmt.Sprintf("filename=%s", kit.Select(path.Base(arg[0]), arg, 2))) + msg.W.Header().Set("Content-Disposition", fmt.Sprintf("filename=%s", kit.Select(path.Base(kit.Select(arg[0], msg.Option("filename"))), arg, 2))) if RenderType(msg.W, arg[0], kit.Select("", arg, 1)); !ice.Dump(msg.W, arg[0], nil) { http.ServeFile(msg.W, msg.R, kit.Path(arg[0])) } diff --git a/base/web/serve.go b/base/web/serve.go index 1ec878b5..5206ef3e 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -253,7 +253,7 @@ func init() { } }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) == 0, "time,status,name,port,dev") + m.Fields(len(arg), "time,status,name,port,dev") m.Cmdy(mdb.SELECT, SERVE, "", mdb.HASH, kit.MDB_NAME, arg) }}, diff --git a/base/web/share.go b/base/web/share.go index a1998cc2..2c29c945 100644 --- a/base/web/share.go +++ b/base/web/share.go @@ -151,7 +151,7 @@ func init() { ))) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) == 0, "time,hash,type,name,text,userrole,username,river,storm") + m.Fields(len(arg), "time,hash,type,name,text,userrole,username,river,storm") m.Cmdy(mdb.SELECT, SHARE, "", mdb.HASH, kit.MDB_HASH, arg) m.PushAction(mdb.REMOVE) @@ -169,7 +169,7 @@ func init() { } }}, "/share/": {Name: "/share/", Help: "共享链", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(true, "time,hash,userrole,username,river,storm,type,name,text") + m.Fields(0, "time,hash,userrole,username,river,storm,type,name,text") msg := m.Cmd(mdb.SELECT, SHARE, "", mdb.HASH, kit.MDB_HASH, kit.Select(m.Option(SHARE), arg, 0)) list := []string{SHARE, kit.Select(m.Option(SHARE), arg, 0)} diff --git a/base/web/space.go b/base/web/space.go index 1e30dcb1..bedb0e52 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -17,7 +17,9 @@ import ( ) func _space_list(m *ice.Message, space string) { - m.Fields(space == "", "time,type,name,text") + if space == "" { + m.Fields(0, "time,type,name,text") + } m.Cmdy(mdb.SELECT, SPACE, "", mdb.HASH, kit.MDB_NAME, space) if space == "" { diff --git a/base/web/spide.go b/base/web/spide.go index 0750090a..f9c92517 100644 --- a/base/web/spide.go +++ b/base/web/spide.go @@ -337,7 +337,7 @@ func init() { }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) < 2 || arg[0] == "" || (len(arg) > 3 && arg[3] == "") { - m.Fields(len(arg) == 0 || arg[0] == "", "time,client.name,client.url") + m.Fields(len(kit.Slice(arg, 0, 1)), "time,client.name,client.url") m.Cmdy(mdb.SELECT, SPIDE, "", mdb.HASH, CLIENT_NAME, arg) m.PushAction(mdb.REMOVE) return diff --git a/base/yac/matrix.go b/base/yac/matrix.go index 44f6a6da..4a1bc2c3 100644 --- a/base/yac/matrix.go +++ b/base/yac/matrix.go @@ -401,14 +401,14 @@ func init() { }, Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) { m.Option(mdb.CACHE_LIMIT, -1) if m.Action(mdb.CREATE); len(arg) == 0 { // 矩阵列表 - m.Fields(len(arg) == 0, "time,name,npage,nhash") + m.Fields(len(arg), "time,name,npage,nhash") m.Cmdy(mdb.SELECT, m.Prefix(MATRIX), "", mdb.HASH) m.PushAction(mdb.INSERT, "show", mdb.REMOVE) return } if m.Action(mdb.INSERT, "show"); len(arg) == 1 { // 词法列表 - m.Fields(len(arg) == 1, "time,npage,nhash,text") + m.Fields(len(arg[1:]), "time,npage,nhash,text") m.Cmdy(mdb.SELECT, m.Prefix(MATRIX), kit.Keys(kit.MDB_HASH, kit.Hashs(arg[0])), mdb.LIST) m.PushAction(PARSE) return diff --git a/conf.go b/conf.go index 6f95c2c8..0e974076 100644 --- a/conf.go +++ b/conf.go @@ -31,12 +31,14 @@ const ( // REPOS ) const ( // DIR USR_VOLCANOS = "usr/volcanos" + USR_LEARNING = "usr/learning" USR_ICEBERGS = "usr/icebergs" USR_INTSHELL = "usr/intshell" USR_INSTALL = "usr/install" USR_PUBLISH = "usr/publish" USR_LOCAL = "usr/local" + FAVICON = "favicon.ico" PROTO_JS = "proto.js" FRAME_JS = "frame.js" INDEX_JS = "index.js" @@ -53,11 +55,13 @@ const ( // DIR VAR_PROXY = "var/proxy" VAR_TRASH = "var/trash" BIN_ICE = "bin/ice.sh" + BIN_ICE_SH = "bin/ice.sh" BIN_ICE_BIN = "bin/ice.bin" BIN_BOOTLOG = "bin/boot.log" ETC_INIT = "etc/init.shy" ETC_EXIT = "etc/exit.shy" ETC_MISS = "etc/miss.sh" + ETC_MISS_SH = "etc/miss.sh" SRC_MAIN = "src/main.shy" SRC_MAIN_GO = "src/main.go" diff --git a/core/chat/files.go b/core/chat/files.go index eccbd585..f4121872 100644 --- a/core/chat/files.go +++ b/core/chat/files.go @@ -26,7 +26,7 @@ func init() { m.Cmdy(mdb.DELETE, m.Prefix(FILES), "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) == 0, m.Conf(FILES, kit.META_FIELD)) + m.Fields(len(arg), m.Conf(FILES, kit.META_FIELD)) m.Cmd(mdb.SELECT, m.Prefix(FILES), "", mdb.HASH, kit.MDB_HASH, arg).Table(func(index int, value map[string]string, head []string) { link := kit.MergeURL("/share/cache/"+value[kit.MDB_DATA], "pod", m.Option(ice.MSG_USERPOD)) m.Push("", value, kit.Split(m.Option(ice.MSG_FIELDS))) diff --git a/core/chat/study.go b/core/chat/study.go index 5c655136..8fe570cc 100644 --- a/core/chat/study.go +++ b/core/chat/study.go @@ -53,7 +53,7 @@ func init() { m.Cmdy(mdb.INPUTS, m.Prefix(TARGET), "", mdb.HASH, arg) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) == 0, "time,hash,type,name,text") + m.Fields(len(arg), "time,hash,type,name,text") m.Cmdy(mdb.SELECT, m.Prefix(TARGET), "", mdb.HASH, "", kit.Select(kit.MDB_FOREACH, arg, 0)) if len(arg) == 0 { m.PushAction("备课", "学习", "测试", "删除") diff --git a/core/code/autogen.go b/core/code/autogen.go index 98fe83d3..96c79986 100644 --- a/core/code/autogen.go +++ b/core/code/autogen.go @@ -1,19 +1,21 @@ package code import ( + "path" + "strings" + ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/nfs" "github.com/shylinux/icebergs/base/web" kit "github.com/shylinux/toolkits" - - "path" - "strings" ) func _autogen_script(m *ice.Message, dir string) { - if b, e := kit.Render(m.Conf(AUTOGEN, kit.Keym(SHY)), m); m.Assert(e) { + if b, e := kit.Render(`chapter "{{.Option "name"}}" +field "{{.Option "name"}}" web.code.{{.Option "name"}}.{{.Option "name"}} +`, m); m.Assert(e) { m.Cmd(nfs.DEFS, dir, string(b)) } } @@ -41,7 +43,7 @@ func _autogen_module(m *ice.Message, dir string, ctx string, from string) (list list = append(list, line) }) - m.Cmd(nfs.SAVE, dir, strings.Join(list, "\n")) + m.Cmd(nfs.SAVE, dir, strings.Join(list, ice.MOD_NL)) return } func _autogen_import(m *ice.Message, main string, ctx string, mod string) (list []string) { @@ -51,7 +53,7 @@ func _autogen_import(m *ice.Message, main string, ctx string, mod string) (list } }) - m.Cmd(nfs.SAVE, main, strings.Join(list, "\n")) + m.Cmd(nfs.SAVE, main, strings.Join(list, ice.MOD_NL)) return } func _autogen_mod(m *ice.Message, file string) (mod string) { @@ -107,56 +109,47 @@ func _autogen_miss(m *ice.Message) { const AUTOGEN = "autogen" func init() { - Index.Merge(&ice.Context{ - Commands: map[string]*ice.Command{ - AUTOGEN: {Name: "autogen path auto create binpack script", Help: "生成", Action: map[string]*ice.Action{ - mdb.CREATE: {Name: "create main=src/main.go@key name=hi@key from=usr/icebergs/misc/bash/bash.go@key", Help: "模块", Hand: func(m *ice.Message, arg ...string) { - if p := path.Join(kit.SSH_SRC, m.Option(kit.MDB_NAME), kit.Keys(m.Option(kit.MDB_NAME), SHY)); !kit.FileExists(p) { - _autogen_script(m, p) - _autogen_source(m, m.Option(kit.MDB_NAME)) - } + Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ + AUTOGEN: {Name: "autogen path auto create binpack script", Help: "生成", Action: map[string]*ice.Action{ + mdb.CREATE: {Name: "create main=src/main.go@key name=hi@key from=usr/icebergs/misc/bash/bash.go@key", Help: "模块", Hand: func(m *ice.Message, arg ...string) { + if p := path.Join(kit.SSH_SRC, m.Option(kit.MDB_NAME), kit.Keys(m.Option(kit.MDB_NAME), SHY)); !kit.FileExists(p) { + _autogen_script(m, p) + _autogen_source(m, m.Option(kit.MDB_NAME)) + } - if p := path.Join(kit.SSH_SRC, m.Option(kit.MDB_NAME), kit.Keys(m.Option(kit.MDB_NAME), GO)); !kit.FileExists(p) { - _autogen_module(m, p, m.Option(kit.MDB_NAME), m.Option(kit.MDB_FROM)) - _autogen_import(m, m.Option(kit.MDB_MAIN), m.Option(kit.MDB_NAME), _autogen_mod(m, "go.mod")) - } - }}, - mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - switch arg[0] { - case kit.MDB_MAIN: - m.Option(nfs.DIR_REG, `.*\.go`) - m.Cmdy(nfs.DIR, kit.SSH_SRC, "path,size,time") - m.RenameAppend(kit.MDB_PATH, arg[0]) - - case kit.MDB_FROM: - m.Option(nfs.DIR_DEEP, true) - m.Option(nfs.DIR_REG, `.*\.go`) - m.Cmdy(nfs.DIR, kit.SSH_SRC, "path,size,time") - m.Cmdy(nfs.DIR, "usr/icebergs/misc/", "path,size,time") - m.RenameAppend(kit.MDB_PATH, arg[0]) - } - }}, - BINPACK: {Name: "binpack", Help: "打包", Hand: func(m *ice.Message, arg ...string) { - _autogen_version(m) - m.Cmd(BINPACK, mdb.CREATE) - }}, - "script": {Name: "script", Help: "脚本", Hand: func(m *ice.Message, arg ...string) { - _autogen_miss(m) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if m.Option(nfs.DIR_ROOT, kit.SSH_SRC); len(arg) == 0 || strings.HasSuffix(arg[0], "/") { - m.Cmdy(nfs.DIR, kit.Select("./", arg, 0)) - } else { - m.Cmdy(nfs.CAT, arg[0]) + if p := path.Join(kit.SSH_SRC, m.Option(kit.MDB_NAME), kit.Keys(m.Option(kit.MDB_NAME), GO)); !kit.FileExists(p) { + _autogen_module(m, p, m.Option(kit.MDB_NAME), m.Option(kit.MDB_FROM)) + _autogen_import(m, m.Option(kit.MDB_MAIN), m.Option(kit.MDB_NAME), _autogen_mod(m, ice.GO_MOD)) } }}, - }, - Configs: map[string]*ice.Config{ - AUTOGEN: {Name: AUTOGEN, Help: "生成", Value: kit.Data( - SHY, `chapter "{{.Option "name"}}" -field "{{.Option "name"}}" web.code.{{.Option "name"}}.{{.Option "name"}} -`, - )}, - }, - }) + mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { + switch arg[0] { + case kit.MDB_MAIN: + m.Option(nfs.DIR_REG, `.*\.go`) + m.Cmdy(nfs.DIR, kit.SSH_SRC, "path,size,time") + m.RenameAppend(kit.MDB_PATH, arg[0]) + + case kit.MDB_FROM: + m.Option(nfs.DIR_REG, `.*\.go`) + m.Option(nfs.DIR_DEEP, ice.TRUE) + m.Cmdy(nfs.DIR, kit.SSH_SRC, "path,size,time") + m.Cmdy(nfs.DIR, "usr/icebergs/misc/", "path,size,time") + m.RenameAppend(kit.MDB_PATH, arg[0]) + } + }}, + BINPACK: {Name: "binpack", Help: "打包:生成 src/binpack.go", Hand: func(m *ice.Message, arg ...string) { + _autogen_version(m) + m.Cmd(BINPACK, mdb.CREATE) + }}, + "script": {Name: "script", Help: "脚本:生成 etc/miss.sh", Hand: func(m *ice.Message, arg ...string) { + _autogen_miss(m) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if m.Option(nfs.DIR_ROOT, kit.SSH_SRC); len(arg) == 0 || strings.HasSuffix(arg[0], "/") { + m.Cmdy(nfs.DIR, kit.Select("./", arg, 0)) + } else { + m.Cmdy(nfs.CAT, arg[0]) + } + }}, + }}) } diff --git a/core/code/bench.go b/core/code/bench.go index 1bd4472a..30ea10d6 100644 --- a/core/code/bench.go +++ b/core/code/bench.go @@ -1,14 +1,6 @@ package code import ( - ice "github.com/shylinux/icebergs" - "github.com/shylinux/icebergs/base/cli" - "github.com/shylinux/icebergs/base/mdb" - "github.com/shylinux/icebergs/base/nfs" - kit "github.com/shylinux/toolkits" - - "github.com/shylinux/toolkits/util/bench" - "io" "io/ioutil" "net/http" @@ -16,6 +8,13 @@ import ( "path" "strings" "sync/atomic" + + ice "github.com/shylinux/icebergs" + "github.com/shylinux/icebergs/base/cli" + "github.com/shylinux/icebergs/base/mdb" + "github.com/shylinux/icebergs/base/nfs" + kit "github.com/shylinux/toolkits" + "github.com/shylinux/toolkits/util/bench" ) func _bench_http(m *ice.Message, name, target string, arg ...string) { @@ -55,11 +54,14 @@ func _bench_http(m *ice.Message, name, target string, arg ...string) { func _bench_redis(m *ice.Message, name, target string, arg ...string) { } +const ( + HTTP = "http" + REDIS = "redis" +) const ( NCONN = "nconn" NREQS = "nreqs" ) - const BENCH = "bench" func init() { @@ -68,37 +70,37 @@ func init() { BENCH: {Name: BENCH, Help: "性能压测", Value: kit.Data(kit.MDB_SHORT, kit.MDB_ZONE)}, }, Commands: map[string]*ice.Command{ + "/bench": {Name: "/bench cmd...", Help: "性能压测", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Cmdy(m.Optionv("cmd")) + }}, BENCH: {Name: "bench zone id auto insert", Help: "性能压测", Action: map[string]*ice.Action{ mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.INSERT, BENCH, "", mdb.HASH, arg) }}, - mdb.INSERT: {Name: "insert zone type=http,redis name text nconn=3 nreqs=10", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + mdb.INSERT: {Name: "insert zone=some type=http,redis name=demo text nconn=3 nreqs=10", Help: "添加", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.INSERT, BENCH, "", mdb.HASH, kit.MDB_ZONE, arg[1]) - m.Cmdy(mdb.INSERT, BENCH, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, arg[2:]) + m.Cmdy(mdb.INSERT, BENCH, "", mdb.ZONE, m.Option(kit.MDB_ZONE), arg[2:]) }}, mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.MODIFY, BENCH, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg) + m.Cmdy(mdb.MODIFY, BENCH, "", mdb.ZONE, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_ID), arg) }}, mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.DELETE, BENCH, "", mdb.HASH, kit.MDB_ZONE, m.Option(kit.MDB_ZONE)) + m.Cmdy(mdb.DELETE, BENCH, "", mdb.HASH, m.OptionSimple(kit.MDB_ZONE)) }}, - cli.RUN: {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) { + cli.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) { switch m.Option(kit.MDB_TYPE) { - case "http": + case HTTP: _bench_http(m, m.Option(kit.MDB_NAME), m.Option(kit.MDB_TEXT)) - case "redis": + case REDIS: _bench_redis(m, m.Option(kit.MDB_NAME), m.Option(kit.MDB_TEXT)) } }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Option(mdb.FIELDS, kit.Select("time,count,zone", kit.Select("time,id,type,name,text,nconn,nreqs", mdb.DETAIL, len(arg) > 1), len(arg) > 0)) + m.Fields(len(arg), "time,zone,count", "time,id,type,name,text,nconn,nreqs") m.Cmdy(mdb.SELECT, BENCH, "", mdb.ZONE, arg) m.PushAction(kit.Select(mdb.REMOVE, cli.RUN, len(arg) > 0)) }}, - "/bench": {Name: "/bench cmd...", Help: "性能压测", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Cmdy(m.Optionv("cmd")) - }}, "test": {Name: "test path func auto run case", Help: "测试用例", Action: map[string]*ice.Action{ "run": {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) { diff --git a/core/code/binpack.go b/core/code/binpack.go index 43d06929..9406ca3e 100644 --- a/core/code/binpack.go +++ b/core/code/binpack.go @@ -1,23 +1,23 @@ package code import ( - ice "github.com/shylinux/icebergs" - "github.com/shylinux/icebergs/base/mdb" - "github.com/shylinux/icebergs/base/nfs" - kit "github.com/shylinux/toolkits" - "fmt" "io/ioutil" "os" "path" "strings" + + ice "github.com/shylinux/icebergs" + "github.com/shylinux/icebergs/base/mdb" + "github.com/shylinux/icebergs/base/nfs" + kit "github.com/shylinux/toolkits" ) func _pack_write(o *os.File, arg ...string) { for _, v := range arg { o.WriteString(v) } - o.WriteString("\n") + o.WriteString(ice.MOD_NL) } func _pack_file(m *ice.Message, file string) string { list := "" @@ -35,9 +35,9 @@ func _pack_file(m *ice.Message, file string) string { return "[]byte{}" } func _pack_dir(m *ice.Message, pack *os.File, dir string) { - m.Option(nfs.DIR_ROOT, dir) - m.Option(nfs.DIR_DEEP, "true") + m.Option(nfs.DIR_DEEP, ice.TRUE) m.Option(nfs.DIR_TYPE, nfs.CAT) + m.Option(nfs.DIR_ROOT, dir) m.Cmd(nfs.DIR, "./").Table(func(index int, value map[string]string, head []string) { switch strings.Split(value[kit.MDB_PATH], "/")[0] { @@ -48,15 +48,15 @@ func _pack_dir(m *ice.Message, pack *os.File, dir string) { pack.WriteString(fmt.Sprintf(" \"%s\": %s,\n", path.Join(dir, value[kit.MDB_PATH]), _pack_file(m, path.Join(dir, value[kit.MDB_PATH])))) }) - pack.WriteString("\n") + pack.WriteString(ice.MOD_NL) } func _pack_volcanos(m *ice.Message, pack *os.File, dir string) { - m.Option(nfs.DIR_ROOT, dir) - m.Option(nfs.DIR_DEEP, "true") + m.Option(nfs.DIR_DEEP, ice.TRUE) m.Option(nfs.DIR_TYPE, nfs.CAT) + m.Option(nfs.DIR_ROOT, dir) - for _, k := range []string{"favicon.ico", "proto.js", "frame.js"} { + for _, k := range []string{ice.FAVICON, ice.PROTO_JS, ice.FRAME_JS} { pack.WriteString(fmt.Sprintf(" \"/%s\": %s,\n", k, _pack_file(m, path.Join(dir, k)))) } for _, k := range []string{"lib", "page", "panel", "plugin"} { @@ -65,55 +65,50 @@ func _pack_volcanos(m *ice.Message, pack *os.File, dir string) { value[kit.MDB_PATH], _pack_file(m, path.Join(dir, value[kit.MDB_PATH])))) }) } - pack.WriteString("\n") + pack.WriteString(ice.MOD_NL) } func _pack_contexts(m *ice.Message, pack *os.File) { _pack_dir(m, pack, "src") - pack.WriteString("\n") + pack.WriteString(ice.MOD_NL) } const BINPACK = "binpack" func init() { - Index.Merge(&ice.Context{ - Configs: map[string]*ice.Config{ - BINPACK: {Name: BINPACK, Help: "binpack", Value: kit.Data()}, - }, - Commands: map[string]*ice.Command{ - BINPACK: {Name: "binpack path auto create", Help: "打包", Action: map[string]*ice.Action{ - mdb.CREATE: {Name: "create", Help: "创建", Hand: func(m *ice.Message, arg ...string) { - if pack, p, e := kit.Create("src/binpack.go"); m.Assert(e) { - defer pack.Close() + Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ + BINPACK: {Name: "binpack path auto create", Help: "打包", Action: map[string]*ice.Action{ + mdb.CREATE: {Name: "create", Help: "创建", Hand: func(m *ice.Message, arg ...string) { + if pack, p, e := kit.Create(ice.SRC_BINPACK); m.Assert(e) { + defer pack.Close() - _pack_write(pack, `package main`) - _pack_write(pack, "") - _pack_write(pack, `import (`) - _pack_write(pack, ` ice "github.com/shylinux/icebergs"`) - _pack_write(pack, `)`) - _pack_write(pack, "") + _pack_write(pack, `package main`) + _pack_write(pack, "") + _pack_write(pack, `import (`) + _pack_write(pack, ` ice "github.com/shylinux/icebergs"`) + _pack_write(pack, `)`) + _pack_write(pack, "") - _pack_write(pack, `func init() {`) - _pack_write(pack, ` ice.Info.BinPack = map[string][]byte{`) + _pack_write(pack, `func init() {`) + _pack_write(pack, ` ice.Info.BinPack = map[string][]byte{`) - _pack_volcanos(m, pack, "usr/volcanos") - _pack_dir(m, pack, "usr/learning") - // _pack_dir(m, pack, "usr/icebergs") - // _pack_dir(m, pack, "usr/toolkits") - _pack_dir(m, pack, "usr/intshell") - // _pack_contexts(m, pack) + _pack_volcanos(m, pack, ice.USR_VOLCANOS) + _pack_dir(m, pack, ice.USR_LEARNING) + // _pack_dir(m, pack, ice.USR_ICEBERGS) + // _pack_dir(m, pack, ice.USR_TOOLKITS) + _pack_dir(m, pack, ice.USR_INTSHELL) + // _pack_contexts(m, pack) - _pack_write(pack, ` }`) - _pack_write(pack, `}`) - m.Echo(p) - } - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - for k, v := range ice.Info.BinPack { - m.Push(kit.MDB_NAME, k) - m.Push(kit.MDB_SIZE, len(v)) + _pack_write(pack, ` }`) + _pack_write(pack, `}`) + m.Echo(p) } - m.Sort(kit.MDB_NAME) }}, - }, - }) + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + for k, v := range ice.Info.BinPack { + m.Push(kit.MDB_NAME, k) + m.Push(kit.MDB_SIZE, len(v)) + } + m.Sort(kit.MDB_NAME) + }}, + }}) } diff --git a/core/code/c.go b/core/code/c.go index f65c46ea..3217d5c3 100644 --- a/core/code/c.go +++ b/core/code/c.go @@ -37,46 +37,40 @@ func _c_help(m *ice.Message, section, key string) string { return string(res) } -const H = "h" -const C = "c" -const CC = "cc" -const MAN1 = "man1" -const MAN2 = "man2" -const MAN3 = "man3" -const MAN8 = "man8" - +const ( + H = "h" + CC = "cc" + MAN1 = "man1" + MAN2 = "man2" + MAN3 = "man3" + MAN8 = "man8" +) const ( FIND = "find" GREP = "grep" MAN = "man" ) +const C = "c" func init() { Index.Register(&ice.Context{Name: C, Help: "系统", Commands: map[string]*ice.Command{ ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Cmd(mdb.PLUGIN, mdb.CREATE, CC, m.Prefix(C)) - m.Cmd(mdb.RENDER, mdb.CREATE, CC, m.Prefix(C)) - m.Cmd(mdb.SEARCH, mdb.CREATE, CC, m.Prefix(C)) - - m.Cmd(mdb.PLUGIN, mdb.CREATE, C, m.Prefix(C)) - m.Cmd(mdb.RENDER, mdb.CREATE, C, m.Prefix(C)) - m.Cmd(mdb.ENGINE, mdb.CREATE, C, m.Prefix(C)) - m.Cmd(mdb.SEARCH, mdb.CREATE, C, m.Prefix(C)) - - m.Cmd(mdb.PLUGIN, mdb.CREATE, H, m.Prefix(C)) - m.Cmd(mdb.RENDER, mdb.CREATE, H, m.Prefix(C)) - m.Cmd(mdb.SEARCH, mdb.CREATE, H, m.Prefix(C)) - - for _, k := range []string{MAN1, MAN2, MAN3, MAN8} { - m.Cmd(mdb.PLUGIN, mdb.CREATE, k, m.Prefix(MAN)) - m.Cmd(mdb.RENDER, mdb.CREATE, k, m.Prefix(MAN)) - m.Cmd(mdb.SEARCH, mdb.CREATE, k, m.Prefix(MAN)) + for _, k := range []string{H, C, CC} { + for _, cmd := range []string{mdb.PLUGIN, mdb.RENDER, mdb.ENGINE, mdb.SEARCH} { + m.Cmd(cmd, mdb.CREATE, k, m.Prefix(C)) + } } + for _, k := range []string{MAN1, MAN2, MAN3, MAN8} { + for _, cmd := range []string{mdb.PLUGIN, mdb.RENDER, mdb.SEARCH} { + m.Cmd(cmd, mdb.CREATE, k, m.Prefix(MAN)) + } + } + LoadPlug(m, C) }}, C: {Name: C, Help: "系统", Action: map[string]*ice.Action{ mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) { - m.Echo(m.Conf(C, "meta.plug")) + m.Echo(m.Conf(C, kit.Keym(PLUG))) }}, mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1])) @@ -84,7 +78,10 @@ func init() { mdb.ENGINE: {Hand: func(m *ice.Message, arg ...string) { m.Option(cli.CMD_DIR, arg[2]) name := strings.TrimSuffix(arg[1], path.Ext(arg[1])) + ".bin" - m.Cmd(cli.SYSTEM, "gcc", arg[1], "-o", name) + if msg := m.Cmd(cli.SYSTEM, "gcc", arg[1], "-o", name); msg.Append(cli.CMD_CODE) != "0" { + m.Copy(msg) + return + } m.Cmdy(cli.SYSTEM, "./"+name) }}, mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { @@ -92,16 +89,17 @@ func init() { return } m.Option(cli.CMD_DIR, kit.Select("src", arg, 2)) - _go_find(m, kit.Select("main", arg, 1)) + _go_find(m, kit.Select(kit.MDB_MAIN, arg, 1)) m.Cmdy(mdb.SEARCH, MAN2, arg[1:]) m.Cmdy(mdb.SEARCH, MAN3, arg[1:]) - _c_tags(m, kit.Select("main", arg, 1)) - _go_grep(m, kit.Select("main", arg, 1)) + _c_tags(m, kit.Select(kit.MDB_MAIN, arg, 1)) + _go_grep(m, kit.Select(kit.MDB_MAIN, arg, 1)) }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {}}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + }}, MAN: {Name: MAN, Help: "手册", Action: map[string]*ice.Action{ mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) { - m.Echo(m.Conf(MAN, "meta.plug")) + m.Echo(m.Conf(MAN, kit.Keym(PLUG))) }}, mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) { m.Echo(_c_help(m, strings.TrimPrefix(arg[0], MAN), strings.TrimSuffix(arg[1], "."+arg[0]))) @@ -111,11 +109,11 @@ func init() { return } for _, i := range []string{"1", "2", "3", "8"} { - if text := _c_help(m, i, kit.Select("main", arg, 1)); text != "" { + if text := _c_help(m, i, kit.Select(kit.MDB_MAIN, arg, 1)); text != "" { for _, k := range kit.Split(m.Option(mdb.FIELDS)) { switch k { case kit.MDB_FILE: - m.Push(k, arg[1]+".man"+i) + m.Push(k, kit.Keys(arg[1], MAN+i)) case kit.MDB_LINE: m.Push(k, 1) case kit.MDB_TEXT: @@ -130,8 +128,67 @@ func init() { }}, }, Configs: map[string]*ice.Config{ + C: {Name: C, Help: "系统", Value: kit.Data( + PLUG, kit.Dict( + SPLIT, kit.Dict( + "space", " ", + "operator", "{[(.,:;!|<>)]}", + ), + PREFIX, kit.Dict( + "//", COMMENT, + "/*", COMMENT, + "*", COMMENT, + ), + PREPARE, kit.Dict( + KEYWORD, kit.Simple( + "#include", + "#define", + "#ifndef", + "#ifdef", + "#else", + "#endif", + + "if", + "else", + "for", + "while", + "do", + "break", + "continue", + "switch", + "case", + "default", + "return", + + "typedef", + "sizeof", + "extern", + "static", + "const", + ), + DATATYPE, kit.Simple( + "union", + "struct", + "unsigned", + "double", + "void", + "long", + "char", + "int", + ), + FUNCTION, kit.Simple( + "assert", + "zmalloc", + ), + CONSTANT, kit.Simple( + "NULL", "-1", "0", "1", "2", + ), + ), + KEYWORD, kit.Dict(), + ), + )}, MAN: {Name: MAN, Help: "手册", Value: kit.Data( - "plug", kit.Dict( + PLUG, kit.Dict( PREFIX, kit.Dict( "NAME", COMMENT, "LIBRARY", COMMENT, @@ -144,63 +201,6 @@ func init() { ), ), )}, - C: {Name: C, Help: "系统", Value: kit.Data( - "plug", kit.Dict( - SPLIT, kit.Dict( - "space", " ", - "operator", "{[(.,:;!|<>)]}", - ), - PREFIX, kit.Dict( - "//", COMMENT, - "/*", COMMENT, - "*", COMMENT, - ), - KEYWORD, kit.Dict( - "#include", KEYWORD, - "#define", KEYWORD, - "#ifndef", KEYWORD, - "#ifdef", KEYWORD, - "#else", KEYWORD, - "#endif", KEYWORD, - - "if", KEYWORD, - "else", KEYWORD, - "for", KEYWORD, - "while", KEYWORD, - "do", KEYWORD, - "break", KEYWORD, - "continue", KEYWORD, - "switch", KEYWORD, - "case", KEYWORD, - "default", KEYWORD, - "return", KEYWORD, - - "typedef", KEYWORD, - "extern", KEYWORD, - "static", KEYWORD, - "const", KEYWORD, - "sizeof", KEYWORD, - - "union", DATATYPE, - "struct", DATATYPE, - "unsigned", DATATYPE, - "double", DATATYPE, - "void", DATATYPE, - "long", DATATYPE, - "char", DATATYPE, - "int", DATATYPE, - - "assert", FUNCTION, - "zmalloc", FUNCTION, - - "NULL", STRING, - "-1", STRING, - "0", STRING, - "1", STRING, - "2", STRING, - ), - ), - )}, }, }, nil) } diff --git a/core/code/code.go b/core/code/code.go index c44a0c09..86b89a9b 100644 --- a/core/code/code.go +++ b/core/code/code.go @@ -2,9 +2,7 @@ package code import ( ice "github.com/shylinux/icebergs" - "github.com/shylinux/icebergs/base/aaa" "github.com/shylinux/icebergs/base/web" - kit "github.com/shylinux/toolkits" ) const CODE = "code" @@ -12,8 +10,6 @@ const CODE = "code" var Index = &ice.Context{Name: CODE, Help: "编程中心", Commands: map[string]*ice.Command{ ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Load() - m.Conf(PUBLISH, kit.Keym(ice.CONTEXTS), _contexts) - m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.Prefix(PUBLISH)) }}, ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save() @@ -22,9 +18,8 @@ var Index = &ice.Context{Name: CODE, Help: "编程中心", Commands: map[string] func init() { web.Index.Register(Index, &web.Frame{}, - INSTALL, COMPILE, BINPACK, WEBPACK, + WEBPACK, BINPACK, AUTOGEN, COMPILE, UPGRADE, PUBLISH, INSTALL, VIMER, INNER, FAVOR, BENCH, PPROF, - AUTOGEN, PUBLISH, UPGRADE, C, SH, SHY, GO, JS, ) } diff --git a/core/code/code.shy b/core/code/code.shy index bf36942a..9bafb164 100644 --- a/core/code/code.shy +++ b/core/code/code.shy @@ -1,13 +1,12 @@ chapter "源码" -field "后端" web.code.binpack field "前端" web.code.webpack - -field "安装" web.code.install +field "后端" web.code.binpack field "生成" web.code.autogen field "编译" web.code.compile -field "发布" web.code.publish field "升级" web.code.upgrade +field "发布" web.code.publish +field "安装" web.code.install field "编辑" web.code.vimer field "查看" web.code.inner @@ -21,37 +20,3 @@ field "脚本" web.code.shy field "后端" web.code.go field "前端" web.code.js -return -vimer.go -inner.go -favor.go -bench.go -pprof.go - -c.go -sh.go -shy.go -go.go -js.go - -autogen.go -compile.go -publish.go -upgrade.go - -webpack.go -binpack.go -install.go - -code.go -code.shy -csdn.go -github.go - -section "python" -refer ` -官网 https://www.python.org/ -源码 https://www.python.org/downloads/source/ -文档 https://docs.python.org/3/reference/index.html -` - diff --git a/core/code/compile.go b/core/code/compile.go index 2b667dca..89e5d816 100644 --- a/core/code/compile.go +++ b/core/code/compile.go @@ -1,15 +1,15 @@ package code import ( + "os" + "path" + "strings" + ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/nfs" kit "github.com/shylinux/toolkits" - - "os" - "path" - "strings" ) const COMPILE = "compile" @@ -18,18 +18,17 @@ func init() { Index.Merge(&ice.Context{ Configs: map[string]*ice.Config{ COMPILE: {Name: COMPILE, Help: "编译", Value: kit.Data( - kit.MDB_PATH, "usr/publish", kit.SSH_ENV, kit.Dict( + kit.MDB_PATH, ice.USR_PUBLISH, kit.SSH_ENV, kit.Dict( "CGO_ENABLED", "0", "GOCACHE", os.Getenv("GOCACHE"), - "HOME", os.Getenv("HOME"), "PATH", os.Getenv("PATH"), + cli.HOME, os.Getenv(cli.HOME), cli.PATH, os.Getenv(cli.PATH), "GOPROXY", "https://goproxy.cn,direct", "GOPRIVATE", "github.com", - ), "go", []interface{}{"go", "build"}, + ), GO, []interface{}{GO, cli.BUILD}, )}, }, Commands: map[string]*ice.Command{ COMPILE: {Name: "compile arch=amd64,386,arm os=linux,darwin,windows src=src/main.go@key 执行:button", Help: "编译", Action: map[string]*ice.Action{ mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - m.Option(nfs.DIR_REG, `.*\.go$`) - m.Cmdy(nfs.DIR, "src", "path,size,time") + m.Cmdy(nfs.DIR, "src", "path,size,time", ice.Option{nfs.DIR_REG, `.*\.go$`}) m.Sort(kit.MDB_PATH) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { @@ -38,12 +37,12 @@ func init() { return } - main := "src/main.go" + main := ice.SRC_MAIN_GO goos := m.Conf(cli.RUNTIME, "host.GOOS") arch := m.Conf(cli.RUNTIME, "host.GOARCH") for _, k := range arg { switch k { - case "linux", "darwin", "windows": + case cli.LINUX, cli.DARWIN, cli.WINDOWS: goos = k case "amd64", "386", "arm": arch = k @@ -51,22 +50,24 @@ func init() { main = k } } - _autogen_version(m) + _autogen_version(m.Spawn()) // 编译目标 - file := path.Join(kit.Select("", m.Conf(cmd, kit.META_PATH), m.Option(cli.CMD_DIR) == ""), kit.Keys(kit.Select("ice", path.Base(strings.TrimSuffix(main, ".go")), main != "src/main.go"), goos, arch)) + file := path.Join(kit.Select("", m.Conf(COMPILE, kit.META_PATH), m.Option(cli.CMD_DIR) == ""), + kit.Keys(kit.Select("ice", path.Base(strings.TrimSuffix(main, ".go")), main != ice.SRC_MAIN_GO), goos, arch)) // 编译参数 - m.Optionv(cli.CMD_ENV, kit.Simple(m.Confv(COMPILE, "meta.env"), "GOARCH", arch, "GOOS", goos)) - if msg := m.Cmd(cli.SYSTEM, m.Confv(COMPILE, "meta.go"), "-o", file, main, "src/version.go", "src/binpack.go"); msg.Append(cli.CMD_CODE) != "0" { + m.Optionv(cli.CMD_ENV, kit.Simple(m.Confv(COMPILE, kit.Keym(cli.ENV)), "GOARCH", arch, "GOOS", goos)) + if msg := m.Cmd(cli.SYSTEM, m.Confv(COMPILE, kit.Keym(GO)), + "-o", file, main, ice.SRC_VERSION, ice.SRC_BINPACK); msg.Append(cli.CMD_CODE) != "0" { m.Copy(msg) return } - m.Log_EXPORT("source", main, "target", file) - m.Push(kit.MDB_TIME, m.Time()) - m.PushDownload(kit.MDB_LINK, file) - m.Echo(file) + m.Log_EXPORT(cli.SOURCE, main, cli.TARGET, file) + m.Cmdy(nfs.DIR, file) + m.EchoDownload(file) + m.StatusTimeCount() }}, }, }) diff --git a/core/code/favor.go b/core/code/favor.go index 866f0660..a6f96ae2 100644 --- a/core/code/favor.go +++ b/core/code/favor.go @@ -6,61 +6,52 @@ import ( kit "github.com/shylinux/toolkits" ) -func _sub_key(m *ice.Message, topic string) string { - return kit.Keys(kit.MDB_HASH, kit.Hashs(topic)) -} - const FAVOR = "favor" func init() { Index.Merge(&ice.Context{ Configs: map[string]*ice.Config{ - FAVOR: {Name: FAVOR, Help: "收藏夹", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TOPIC)}, + FAVOR: {Name: FAVOR, Help: "收藏夹", Value: kit.Data( + kit.MDB_SHORT, kit.MDB_ZONE, kit.MDB_FIELD, "time,id,type,name,text,path,file,line", + )}, }, Commands: map[string]*ice.Command{ - FAVOR: {Name: "favor topic id auto insert export import", Help: "收藏夹", Action: map[string]*ice.Action{ - mdb.CREATE: {Name: "create topic", Help: "创建", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.INSERT, FAVOR, "", mdb.HASH, arg) + FAVOR: {Name: "favor zone id auto insert export import", Help: "收藏夹", Action: map[string]*ice.Action{ + mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, arg) }}, - mdb.INSERT: {Name: "insert topic=数据结构 type=go name=hi text=hello path file line", Help: "添加", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.INSERT, FAVOR, "", mdb.HASH, kit.MDB_TOPIC, arg[1]) - m.Cmdy(mdb.INSERT, FAVOR, _sub_key(m, m.Option(kit.MDB_TOPIC)), mdb.LIST, arg[2:]) + mdb.INSERT: {Name: "insert zone=数据结构 type=go name=hi text=hello path file line", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, kit.MDB_ZONE, arg[1]) + m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.ZONE, m.Option(kit.MDB_ZONE), arg[2:]) }}, mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.MODIFY, FAVOR, _sub_key(m, m.Option(kit.MDB_TOPIC)), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg) + m.Cmdy(mdb.MODIFY, m.Prefix(FAVOR), "", mdb.ZONE, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_ID), arg) }}, mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.DELETE, FAVOR, "", mdb.HASH, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC)) + m.Cmdy(mdb.DELETE, m.Prefix(FAVOR), "", mdb.HASH, m.OptionSimple(kit.MDB_ZONE)) }}, mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { - m.Option(mdb.FIELDS, "topic,id,time,type,name,text,path,file,line") - m.Cmdy(mdb.EXPORT, FAVOR, "", mdb.ZONE) + m.OptionFields(kit.MDB_ZONE, m.Conf(FAVOR, kit.META_FIELD)) + m.Cmdy(mdb.EXPORT, m.Prefix(FAVOR), "", mdb.ZONE) }}, mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { - m.Option(mdb.FIELDS, kit.MDB_TOPIC) - m.Cmdy(mdb.IMPORT, FAVOR, "", mdb.ZONE) + m.OptionFields(kit.MDB_ZONE) + m.Cmdy(mdb.IMPORT, m.Prefix(FAVOR), "", mdb.ZONE) }}, mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { switch arg[0] { - case kit.MDB_TOPIC: - m.Cmdy(mdb.INPUTS, FAVOR, "", mdb.HASH, arg) + case kit.MDB_ZONE: + m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), "", mdb.HASH, arg) default: - m.Cmdy(mdb.INPUTS, FAVOR, _sub_key(m, m.Option(kit.MDB_TOPIC)), mdb.LIST, arg) + m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), "", mdb.ZONE, m.Option(kit.MDB_ZONE), arg) } }}, - - INNER: {Name: "inner", Help: "源代码", Hand: func(m *ice.Message, arg ...string) { - if len(arg) > 0 && arg[0] == mdb.RENDER { - m.Cmdy(INNER, arg[1:]) - return - } - - m.ShowPlugin("", m.Prefix(), INNER, INNER, mdb.RENDER) - m.Push(kit.SSH_ARG, kit.Format([]string{m.Option(kit.MDB_PATH), m.Option(kit.MDB_FILE), m.Option(kit.MDB_LINE)})) + INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) { + m.ProcessCommand(INNER, m.OptionSplit("path,file,line"), arg...) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Option(mdb.FIELDS, kit.Select("time,count,topic", kit.Select("time,id,type,name,text,path,file,line", mdb.DETAIL, len(arg) > 1), len(arg) > 0)) - m.Cmdy(mdb.SELECT, FAVOR, "", mdb.ZONE, arg) + m.Fields(len(arg), "time,zone,count", m.Conf(FAVOR, kit.META_FIELD)) + m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.ZONE, arg) m.PushAction(kit.Select(mdb.REMOVE, INNER, len(arg) > 0)) }}, }, diff --git a/core/code/go.go b/core/code/go.go index 5398388e..eb32e3d6 100644 --- a/core/code/go.go +++ b/core/code/go.go @@ -73,8 +73,6 @@ const MOD = "mod" const SUM = "sum" const PROTO = "proto" -const PLUG = "plug" - func init() { Index.Register(&ice.Context{Name: GO, Help: "后端", Commands: map[string]*ice.Command{ @@ -142,10 +140,10 @@ func init() { if arg[0] == kit.MDB_FOREACH { return } - _go_find(m, kit.Select("main", arg, 1)) - _go_help(m, kit.Select("main", arg, 1)) - _go_tags(m, kit.Select("main", arg, 1)) - _go_grep(m, kit.Select("main", arg, 1)) + _go_find(m, kit.Select(kit.MDB_MAIN, arg, 1)) + _go_help(m, kit.Select(kit.MDB_MAIN, arg, 1)) + _go_tags(m, kit.Select(kit.MDB_MAIN, arg, 1)) + _go_grep(m, kit.Select(kit.MDB_MAIN, arg, 1)) }}, }}, }, @@ -155,7 +153,7 @@ func init() { PREFIX, kit.Dict( "//", COMMENT, ), - "_keyword", kit.Dict( + PREPARE, kit.Dict( KEYWORD, kit.Simple( "syntax", "option", "package", "import", "service", "message", ), @@ -171,7 +169,7 @@ func init() { PREFIX, kit.Dict( "//", COMMENT, ), - "_keyword", kit.Dict( + PREPARE, kit.Dict( KEYWORD, kit.Simple( "module", "require", "replace", "=>", ), @@ -190,7 +188,7 @@ func init() { "/*", COMMENT, "* ", COMMENT, ), - "_keyword", kit.Dict( + PREPARE, kit.Dict( KEYWORD, kit.Simple( "package", "import", "type", "struct", "interface", "const", "var", "func", "if", "else", "for", "range", "break", "continue", @@ -204,7 +202,7 @@ func init() { FUNCTION, kit.Simple( "len", "cap", "copy", "append", "msg", "m", ), - STRING, kit.Simple( + CONSTANT, kit.Simple( "false", "true", "nil", "-1", "0", "1", "2", ), ), diff --git a/core/code/inner.go b/core/code/inner.go index 0ab875cc..6c557f9a 100644 --- a/core/code/inner.go +++ b/core/code/inner.go @@ -1,20 +1,17 @@ package code import ( + "path" + "strings" + ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/ctx" "github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/nfs" kit "github.com/shylinux/toolkits" - - "path" - "strings" ) -func _inner_ext(name string) string { - return strings.ToLower(kit.Select(path.Base(name), strings.TrimPrefix(path.Ext(name), "."))) -} func _inner_list(m *ice.Message, ext, file, dir string, arg ...string) { if m.Warn(!m.Right(dir, file), ice.ErrNotRight, path.Join(dir, file)) { return // 没有权限 @@ -23,7 +20,7 @@ func _inner_list(m *ice.Message, ext, file, dir string, arg ...string) { return // 解析成功 } - if m.Conf(INNER, kit.Keys(kit.META_SOURCE, ext)) == "true" { + if m.Conf(INNER, kit.Keys(kit.META_SOURCE, ext)) == ice.TRUE { m.Cmdy(nfs.CAT, path.Join(dir, file)) } } @@ -35,14 +32,14 @@ func _inner_show(m *ice.Message, ext, file, dir string, arg ...string) { return // 执行成功 } - if ls := kit.Simple(m.Confv(INNER, kit.Keym("show", ext))); len(ls) > 0 { - m.Option(cli.CMD_DIR, dir) - m.Cmdy(cli.SYSTEM, ls, file) + if ls := kit.Simple(m.Confv(INNER, kit.Keym(SHOW, ext))); len(ls) > 0 { + m.Cmdy(cli.SYSTEM, ls, file, ice.Option{cli.CMD_DIR, dir}) m.Set(ice.MSG_APPEND) } } + func LoadPlug(m *ice.Message, language string) { - m.Confm(language, kit.Keym(PLUG, "_keyword"), func(key string, value interface{}) { + m.Confm(language, kit.Keym(PLUG, PREPARE), func(key string, value interface{}) { for _, v := range kit.Simple(value) { m.Conf(language, kit.Keym(PLUG, KEYWORD, v), key) } @@ -52,27 +49,30 @@ func LoadPlug(m *ice.Message, language string) { const ( COMMENT = "comment" KEYWORD = "keyword" - FUNCTION = "function" DATATYPE = "datatype" - STRING = "string" + FUNCTION = "function" + CONSTANT = "constant" ) const ( SPLIT = "split" PREFIX = "prefix" SUFFIX = "suffix" ) - +const ( + PLUG = "plug" + SHOW = "show" +) const INNER = "inner" func init() { Index.Merge(&ice.Context{ Commands: map[string]*ice.Command{ INNER: {Name: "inner path=src/ file=main.go line=1 auto", Help: "源代码", Meta: kit.Dict( - "display", "/plugin/local/code/inner.js", "style", "editor", + ice.Display("/plugin/local/code/inner.js", "editor"), ), Action: map[string]*ice.Action{ mdb.PLUGIN: {Name: "plugin", Help: "插件", Hand: func(m *ice.Message, arg ...string) { if m.Cmdy(mdb.PLUGIN, arg); m.Result() == "" { - m.Echo(kit.Select("{}", m.Conf(INNER, kit.Keym("plug", arg[0])))) + m.Echo(kit.Select("{}", m.Conf(INNER, kit.Keym(PLUG, arg[0])))) } }}, mdb.ENGINE: {Name: "engine", Help: "运行", Hand: func(m *ice.Message, arg ...string) { @@ -88,34 +88,31 @@ func init() { m.Option(nfs.DIR_ROOT, arg[2]) m.Cmdy(mdb.SEARCH, arg[:2], "cmd,file,line,text") }}, - mdb.INPUTS: {Name: "favor inputs", Help: "补全"}, - - FAVOR: {Name: "favor", Help: "收藏"}, + mdb.INPUTS: {Name: "favor inputs", Help: "补全"}, ctx.COMMAND: {Name: "command", Help: "命令"}, + FAVOR: {Name: "favor", Help: "收藏"}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) < 2 { nfs.Dir(m, kit.MDB_PATH) return } - _inner_list(m, _inner_ext(arg[1]), arg[1], arg[0]) + _inner_list(m, kit.Ext(arg[1]), arg[1], arg[0]) }}, }, Configs: map[string]*ice.Config{ INNER: {Name: "inner", Help: "源代码", Value: kit.Data( - "source", kit.Dict( - "s", "true", "S", "true", - "shy", "true", "py", "true", - "csv", "true", "json", "true", - "css", "true", "html", "true", - "txt", "true", "url", "true", - "log", "true", "err", "true", - "yml", "true", + cli.SOURCE, kit.Dict( + "s", ice.TRUE, "S", ice.TRUE, + "shy", ice.TRUE, "py", ice.TRUE, + "csv", ice.TRUE, "json", ice.TRUE, + "css", ice.TRUE, "html", ice.TRUE, + "txt", ice.TRUE, "url", ice.TRUE, + "log", ice.TRUE, "err", ice.TRUE, - "md", "true", "license", "true", "makefile", "true", - "ini", "true", "conf", "true", "toml", "true", "yaml", "true", - "sql", "true", + "md", ice.TRUE, "license", ice.TRUE, "makefile", ice.TRUE, "sql", ice.TRUE, + "ini", ice.TRUE, "conf", ice.TRUE, "toml", ice.TRUE, "yaml", ice.TRUE, "yml", ice.TRUE, ), - "plug", kit.Dict( + PLUG, kit.Dict( "s", kit.Dict( PREFIX, kit.Dict("//", COMMENT), KEYWORD, kit.Dict( @@ -163,7 +160,7 @@ func init() { ), ), ), - "show", kit.Dict( + SHOW, kit.Dict( "py", []string{"python"}, "js", []string{"node"}, ), diff --git a/core/code/install.go b/core/code/install.go index 153ce22e..e07bbf3f 100644 --- a/core/code/install.go +++ b/core/code/install.go @@ -15,135 +15,156 @@ import ( kit "github.com/shylinux/toolkits" ) -const PREPARE = "prepare" +func _install_download(m *ice.Message) { + link := m.Option(kit.MDB_LINK) + name := path.Base(link) + file := path.Join(kit.Select(m.Conf(INSTALL, kit.META_PATH), m.Option(kit.MDB_PATH)), name) + + defer m.Cmdy(nfs.DIR, file) + if _, e := os.Stat(file); e == nil { + return // 文件存在 + } + + // 创建文件 + m.Cmd(nfs.SAVE, file, "") + + m.GoToast(web.DOWNLOAD, func(toast func(string, int, int)) { + // 进度 + m.Cmd(mdb.INSERT, INSTALL, "", mdb.HASH, kit.MDB_NAME, name, kit.MDB_LINK, link) + m.Richs(INSTALL, "", name, func(key string, value map[string]interface{}) { + value = kit.GetMeta(value) + + p := 0 + m.Optionv(kit.Keycb(web.DOWNLOAD), func(size int, total int) { + if n := size * 100 / total; p != n { + value[kit.SSH_STEP], value[kit.MDB_SIZE], value[kit.MDB_TOTAL] = n, size, total + toast(name, size, total) + p = n + } + }) + }) + + // 下载 + msg := m.Cmd(web.SPIDE, web.SPIDE_DEV, web.SPIDE_CACHE, web.SPIDE_GET, link) + m.Cmd(nfs.LINK, file, msg.Append(kit.MDB_FILE)) + + // 解压 + m.Option(cli.CMD_DIR, path.Dir(file)) + m.Cmd(cli.SYSTEM, "tar", "xvf", name) + }) +} +func _install_build(m *ice.Message, arg ...string) { + p := m.Option(cli.CMD_DIR, path.Join(m.Conf(INSTALL, kit.META_PATH), kit.TrimExt(m.Option(kit.MDB_LINK)))) + pp := kit.Path(path.Join(p, "_install")) + + // 推流 + web.PushStream(m) + + // 配置 + switch cb := m.Optionv(PREPARE).(type) { + case func(string): + cb(p) + default: + if msg := m.Cmd(cli.SYSTEM, "./configure", "--prefix="+pp, arg[1:]); msg.Append(cli.CMD_CODE) != "0" { + m.Echo(msg.Append(cli.CMD_ERR)) + return + } + } + + // 编译 + if msg := m.Cmd(cli.SYSTEM, "make", "-j8"); msg.Append(cli.CMD_CODE) != "0" { + m.Echo(msg.Append(cli.CMD_ERR)) + return + } + + // 安装 + if msg := m.Cmd(cli.SYSTEM, "make", "PREFIX="+pp, "install"); msg.Append(cli.CMD_CODE) != "0" { + m.Echo(msg.Append(cli.CMD_ERR)) + return + } + + m.Toast(ice.SUCCESS, cli.BUILD) + m.ProcessHold() +} +func _install_spawn(m *ice.Message, arg ...string) { + port := m.Cmdx(tcp.PORT, aaa.RIGHT) + target := path.Join(m.Conf(cli.DAEMON, kit.META_PATH), port) + source := path.Join(m.Conf(INSTALL, kit.META_PATH), kit.TrimExt(m.Option(kit.MDB_LINK))) + + m.Cmd(nfs.DIR, path.Join(source, kit.Select("_install", m.Option("install")))).Table(func(index int, value map[string]string, head []string) { + m.Cmd(cli.SYSTEM, "cp", "-r", strings.TrimSuffix(value[kit.MDB_PATH], "/"), target) + }) + m.Echo(target) +} +func _install_start(m *ice.Message, arg ...string) { + p := m.Option(cli.CMD_DIR, m.Cmdx(INSTALL, cli.SPAWN)) + + args := []string{} + switch cb := m.Optionv(PREPARE).(type) { + case func(string) []string: + args = append(args, cb(p)...) + } + + m.Cmdy(cli.DAEMON, arg[1:], args) +} +func _install_package(m *ice.Message, arg ...string) { + m.Fields(len(arg), "time,name,path") + m.Cmdy(mdb.SELECT, INSTALL, "", mdb.HASH) +} +func _install_service(m *ice.Message, arg ...string) { + arg = kit.Split(path.Base(arg[0]), "-.")[:1] + + m.Fields(len(arg[1:]), "time,port,status,pid,cmd,dir") + m.Cmd(mdb.SELECT, cli.DAEMON, "", mdb.HASH).Table(func(index int, value map[string]string, head []string) { + if strings.Contains(value[cli.CMD], "bin/"+arg[0]) { + m.Push("", value, kit.Split(m.Option(mdb.FIELDS))) + } + }) + + m.Appendv(tcp.PORT, []string{}) + m.Table(func(index int, value map[string]string, head []string) { + m.Push(tcp.PORT, path.Base(value[nfs.DIR])) + }) +} + +const ( + PREPARE = "prepare" +) const INSTALL = "install" func init() { Index.Merge(&ice.Context{ Configs: map[string]*ice.Config{ - INSTALL: {Name: INSTALL, Help: "安装", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME, kit.MDB_PATH, ice.USR_INSTALL)}, + INSTALL: {Name: INSTALL, Help: "安装", Value: kit.Data( + kit.MDB_SHORT, kit.MDB_NAME, kit.MDB_PATH, ice.USR_INSTALL, + )}, }, Commands: map[string]*ice.Command{ INSTALL: {Name: "install name port path auto download", Help: "安装", Meta: kit.Dict(), Action: map[string]*ice.Action{ web.DOWNLOAD: {Name: "download link path", Help: "下载", Hand: func(m *ice.Message, arg ...string) { - link := m.Option(kit.MDB_LINK) - name := path.Base(link) - file := path.Join(kit.Select(m.Conf(INSTALL, kit.META_PATH), m.Option(kit.MDB_PATH)), name) - - defer m.Cmdy(nfs.DIR, file) - if _, e := os.Stat(file); e == nil { - return // 文件存在 - } - - // 创建文件 - m.Cmd(nfs.SAVE, file, "") - - m.GoToast("download", func(toast func(string, int, int)) { - // 进度 - m.Cmd(mdb.INSERT, INSTALL, "", mdb.HASH, kit.MDB_NAME, name, kit.MDB_LINK, link) - m.Richs(INSTALL, "", name, func(key string, value map[string]interface{}) { - value = kit.GetMeta(value) - - p := 0 - m.Optionv(kit.Keycb(web.DOWNLOAD), func(size int, total int) { - if n := size * 100 / total; p != n { - value[kit.SSH_STEP], value[kit.MDB_SIZE], value[kit.MDB_TOTAL] = n, size, total - toast(name, size, total) - p = n - } - }) - }) - - // 下载 - msg := m.Cmd(web.SPIDE, web.SPIDE_DEV, web.SPIDE_CACHE, web.SPIDE_GET, link) - m.Cmd(nfs.LINK, file, msg.Append(kit.MDB_FILE)) - - // 解压 - m.Option(cli.CMD_DIR, path.Dir(file)) - m.Cmd(cli.SYSTEM, "tar", "xvf", name) - }) + _install_download(m) }}, cli.BUILD: {Name: "build link", Help: "构建", Hand: func(m *ice.Message, arg ...string) { - p := m.Option(cli.CMD_DIR, path.Join(m.Conf(INSTALL, kit.META_PATH), kit.TrimExt(m.Option(kit.MDB_LINK)))) - pp := kit.Path(path.Join(p, "_install")) - - // 推流 - web.PushStream(m) - - // 配置 - switch cb := m.Optionv(PREPARE).(type) { - case func(string): - cb(p) - default: - if msg := m.Cmd(cli.SYSTEM, "./configure", "--prefix="+pp, arg[1:]); msg.Append(cli.CMD_CODE) != "0" { - m.Echo(msg.Append(cli.CMD_ERR)) - return - } - } - - // 编译 - if msg := m.Cmd(cli.SYSTEM, "make", "-j8"); msg.Append(cli.CMD_CODE) != "0" { - m.Echo(msg.Append(cli.CMD_ERR)) - return - } - - // 安装 - if msg := m.Cmd(cli.SYSTEM, "make", "PREFIX="+pp, "install"); msg.Append(cli.CMD_CODE) != "0" { - m.Echo(msg.Append(cli.CMD_ERR)) - return - } - - m.Toast(ice.SUCCESS, cli.BUILD) - m.ProcessHold() + _install_build(m, arg...) }}, cli.SPAWN: {Name: "spawn link", Help: "新建", Hand: func(m *ice.Message, arg ...string) { - port := m.Cmdx(tcp.PORT, aaa.RIGHT) - target := path.Join(m.Conf(cli.DAEMON, kit.META_PATH), port) - source := path.Join(m.Conf(INSTALL, kit.META_PATH), kit.TrimExt(m.Option(kit.MDB_LINK))) - - m.Cmd(nfs.DIR, path.Join(source, kit.Select("_install", m.Option("install")))).Table(func(index int, value map[string]string, head []string) { - m.Cmd(cli.SYSTEM, "cp", "-r", strings.TrimSuffix(value[kit.MDB_PATH], "/"), target) - }) - m.Echo(target) + _install_spawn(m, arg...) }}, cli.START: {Name: "start link cmd", Help: "启动", Hand: func(m *ice.Message, arg ...string) { - p := m.Option(cli.CMD_DIR, m.Cmdx(INSTALL, cli.SPAWN)) - - args := []string{} - switch cb := m.Optionv(PREPARE).(type) { - case func(string) []string: - args = append(args, cb(p)...) - } - - m.Cmdy(cli.DAEMON, arg[1:], args) + _install_start(m, arg...) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if len(arg) == 0 { // 源码列表 - m.Fields(len(arg) == 0, "time,name,path") - m.Cmdy(mdb.SELECT, INSTALL, "", mdb.HASH) - return + switch len(arg) { + case 0: // 源码列表 + _install_package(m, arg...) + + case 1: // 服务列表 + _install_service(m, arg...) + + default: // 目录列表 + m.Option(nfs.DIR_ROOT, path.Join(m.Conf(cli.DAEMON, kit.META_PATH), arg[1])) + m.Cmdy(nfs.CAT, kit.Select("./", arg, 2)) } - - if len(arg) == 1 { // 服务列表 - arg = kit.Split(path.Base(arg[0]), "-.")[:1] - - m.Fields(len(arg) == 1, "time,port,status,pid,cmd,dir") - m.Cmd(mdb.SELECT, cli.DAEMON, "", mdb.HASH).Table(func(index int, value map[string]string, head []string) { - if strings.Contains(value[cli.CMD], "bin/"+arg[0]) { - m.Push("", value, kit.Split(m.Option(mdb.FIELDS))) - } - }) - - m.Appendv(tcp.PORT, []string{}) - m.Table(func(index int, value map[string]string, head []string) { - m.Push(tcp.PORT, path.Base(value[nfs.DIR])) - }) - return - } - - // 目录列表 - m.Option(nfs.DIR_ROOT, path.Join(m.Conf(cli.DAEMON, kit.META_PATH), arg[1])) - m.Cmdy(nfs.CAT, kit.Select("./", arg, 2)) }}, }, }) diff --git a/core/code/js.go b/core/code/js.go index 391a536a..743fe3df 100644 --- a/core/code/js.go +++ b/core/code/js.go @@ -21,19 +21,15 @@ func init() { Index.Register(&ice.Context{Name: JS, Help: "前端", Commands: map[string]*ice.Command{ ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Cmd(mdb.PLUGIN, mdb.CREATE, JS, m.Prefix(JS)) - m.Cmd(mdb.RENDER, mdb.CREATE, JS, m.Prefix(JS)) - m.Cmd(mdb.ENGINE, mdb.CREATE, JS, m.Prefix(JS)) - m.Cmd(mdb.SEARCH, mdb.CREATE, JS, m.Prefix(JS)) - - m.Cmd(mdb.PLUGIN, mdb.CREATE, VUE, m.Prefix(VUE)) - m.Cmd(mdb.RENDER, mdb.CREATE, VUE, m.Prefix(VUE)) - m.Cmd(mdb.ENGINE, mdb.CREATE, VUE, m.Prefix(VUE)) - m.Cmd(mdb.SEARCH, mdb.CREATE, VUE, m.Prefix(VUE)) + for _, cmd := range []string{mdb.PLUGIN, mdb.RENDER, mdb.ENGINE, mdb.SEARCH} { + m.Cmd(cmd, mdb.CREATE, VUE, m.Prefix(VUE)) + m.Cmd(cmd, mdb.CREATE, JS, m.Prefix(JS)) + } + LoadPlug(m, JS) }}, JS: {Name: JS, Help: "前端", Action: map[string]*ice.Action{ mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) { - m.Echo(m.Conf(JS, "meta.plug")) + m.Echo(m.Conf(JS, kit.Keym(PLUG))) }}, mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1])) @@ -47,8 +43,8 @@ func init() { if arg[0] == kit.MDB_FOREACH { return } - _go_find(m, kit.Select("main", arg, 1)) - _go_grep(m, kit.Select("main", arg, 1)) + _go_find(m, kit.Select(kit.MDB_MAIN, arg, 1)) + _go_grep(m, kit.Select(kit.MDB_MAIN, arg, 1)) }}, }}, NODE: {Name: "node", Help: "前端", Action: map[string]*ice.Action{ @@ -58,7 +54,7 @@ func init() { }}, VUE: {Name: "vue", Help: "前端", Action: map[string]*ice.Action{ mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) { - m.Echo(m.Conf(VUE, "meta.plug")) + m.Echo(m.Conf(VUE, kit.Keym(PLUG))) }}, mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1])) @@ -72,30 +68,30 @@ func init() { if arg[0] == kit.MDB_FOREACH { return } - _go_find(m, kit.Select("main", arg, 1)) - _go_grep(m, kit.Select("main", arg, 1)) + _go_find(m, kit.Select(kit.MDB_MAIN, arg, 1)) + _go_grep(m, kit.Select(kit.MDB_MAIN, arg, 1)) }}, }}, }, Configs: map[string]*ice.Config{ VUE: {Name: VUE, Help: "vue", Value: kit.Data( - "plug", kit.Dict( + PLUG, kit.Dict( + SPLIT, kit.Dict( + "space", " \t", + "operator", "{[(&.,;!|<>)]}", + ), PREFIX, kit.Dict( "//", COMMENT, "/*", COMMENT, "*", COMMENT, ), - SPLIT, kit.Dict( - "space", " \t", - "operator", "{[(&.,;!|<>)]}", - ), ), )}, NODE: {Name: NODE, Help: "前端", Value: kit.Data( kit.SSH_SOURCE, "https://nodejs.org/dist/v10.13.0/node-v10.13.0-linux-x64.tar.xz", )}, JS: {Name: JS, Help: "js", Value: kit.Data( - "plug", kit.Dict( + PLUG, kit.Dict( SPLIT, kit.Dict( "space", " \t", "operator", "{[(&.,;!|<>)]}", @@ -105,77 +101,72 @@ func init() { "/*", COMMENT, "*", COMMENT, ), - KEYWORD, kit.Dict( - "import", KEYWORD, - "from", KEYWORD, - "export", KEYWORD, + PREPARE, kit.Dict( + KEYWORD, kit.Simple( + "import", + "from", + "export", - "var", KEYWORD, - "new", KEYWORD, - "delete", KEYWORD, - "typeof", KEYWORD, - "const", KEYWORD, - "function", KEYWORD, + "var", + "new", + "delete", + "typeof", + "const", + "function", - "if", KEYWORD, - "else", KEYWORD, - "for", KEYWORD, - "while", KEYWORD, - "break", KEYWORD, - "continue", KEYWORD, - "switch", KEYWORD, - "case", KEYWORD, - "default", KEYWORD, - "return", KEYWORD, - "try", KEYWORD, - "throw", KEYWORD, - "catch", KEYWORD, - "finally", KEYWORD, + "if", + "else", + "for", + "while", + "break", + "continue", + "switch", + "case", + "default", + "return", + "try", + "throw", + "catch", + "finally", + ), + FUNCTION, kit.Simple( + "window", + "console", + "document", + "arguments", + "event", + "Date", + "JSON", - "window", FUNCTION, - "console", FUNCTION, - "document", FUNCTION, - "arguments", FUNCTION, - "event", FUNCTION, - "Date", FUNCTION, - "JSON", FUNCTION, + "__proto__", + "setTimeout", + "createElement", + "appendChild", + "removeChild", + "parentNode", + "childNodes", - "0", STRING, - "1", STRING, - "10", STRING, - "-1", STRING, - "true", STRING, - "false", STRING, - "undefined", STRING, - "null", STRING, + "Volcanos", + "request", + "require", - "__proto__", FUNCTION, - "setTimeout", FUNCTION, - "createElement", FUNCTION, - "appendChild", FUNCTION, - "removeChild", FUNCTION, - "parentNode", FUNCTION, - "childNodes", FUNCTION, - - "Volcanos", FUNCTION, - "request", FUNCTION, - "require", FUNCTION, - - "cb", FUNCTION, - "cbs", FUNCTION, - "shy", FUNCTION, - "can", FUNCTION, - "sub", FUNCTION, - "msg", FUNCTION, - "res", FUNCTION, - "pane", FUNCTION, - "plugin", FUNCTION, - - "-1", STRING, - "0", STRING, - "1", STRING, - "2", STRING, + "cb", + "cbs", + "shy", + "can", + "sub", + "msg", + "res", + "pane", + "plugin", + ), + CONSTANT, kit.Simple( + "true", "false", + "undefined", "null", + "-1", "0", "1", "2", "10", + ), ), + KEYWORD, kit.Dict(), ), )}, }, diff --git a/core/code/pprof.go b/core/code/pprof.go index e087b012..f72a2e53 100644 --- a/core/code/pprof.go +++ b/core/code/pprof.go @@ -1,6 +1,10 @@ package code import ( + "net/http" + _ "net/http/pprof" + "strings" + ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/aaa" "github.com/shylinux/icebergs/base/cli" @@ -9,10 +13,6 @@ import ( "github.com/shylinux/icebergs/base/tcp" "github.com/shylinux/icebergs/base/web" kit "github.com/shylinux/toolkits" - - "net/http" - _ "net/http/pprof" - "strings" ) const ( @@ -27,80 +27,76 @@ func init() { Index.Merge(&ice.Context{ Configs: map[string]*ice.Config{ PPROF: {Name: PPROF, Help: "性能分析", Value: kit.Data(kit.MDB_SHORT, kit.MDB_ZONE, - PPROF, []string{"go", "tool", "pprof"}, + PPROF, []string{GO, "tool", PPROF}, )}, }, Commands: map[string]*ice.Command{ + "/pprof/": {Name: "/pprof/", Help: "性能分析", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.R.URL.Path = strings.Replace("/code"+m.R.URL.Path, "code", "debug", 1) + http.DefaultServeMux.ServeHTTP(m.W, m.R) + m.Render(ice.RENDER_VOID) + }}, PPROF: {Name: "pprof zone id auto create", Help: "性能分析", Action: map[string]*ice.Action{ - mdb.CREATE: {Name: "create zone binnary service seconds", Help: "创建", Hand: func(m *ice.Message, arg ...string) { + mdb.CREATE: {Name: "create zone=some binnary service seconds=3", Help: "创建", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.INSERT, PPROF, "", mdb.HASH, arg) }}, mdb.INSERT: {Name: "insert zone type name text", Help: "插入", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.INSERT, PPROF, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, arg[2:]) + m.Cmdy(mdb.INSERT, PPROF, "", mdb.HASH, kit.MDB_ZONE, arg[1]) + m.Cmdy(mdb.INSERT, PPROF, "", mdb.ZONE, m.Option(kit.MDB_ZONE), arg[2:]) }}, mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { - if m.Option(kit.MDB_ID) != "" { - m.Cmdy(mdb.MODIFY, PPROF, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg) - } else { - m.Cmdy(mdb.MODIFY, PPROF, "", mdb.HASH, kit.MDB_ZONE, m.Option(kit.MDB_ZONE), arg) - } + m.Cmdy(mdb.MODIFY, PPROF, "", mdb.ZONE, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_ID), arg) }}, mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.DELETE, PPROF, "", mdb.HASH, kit.MDB_ZONE, m.Option(kit.MDB_ZONE)) + m.Cmdy(mdb.DELETE, PPROF, "", mdb.HASH, m.OptionSimple(kit.MDB_ZONE)) }}, mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { switch arg[0] { - case "binnary": + case BINNARY: m.Cmd(nfs.DIR, "bin/", "path,size,time").Table(func(index int, value map[string]string, head []string) { - m.Push("binnary", value["path"]) + m.Push(BINNARY, value["path"]) m.Push("", value, []string{"size,time"}) }) - case "service": + case SERVICE: m.Cmd(web.SPIDE).Table(func(index int, value map[string]string, head []string) { - m.Push("service", kit.MergeURL2(value["client.url"], "/debug/pprof/profile")) + m.Push(SERVICE, kit.MergeURL2(value["client.url"], "/debug/pprof/profile")) }) } }}, - cli.RUN: {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) { + cli.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) { msg := m.Cmd(web.SPIDE, web.SPIDE_DEV, web.SPIDE_CACHE, web.SPIDE_GET, m.Option(SERVICE), SECONDS, m.Option(SECONDS)) - cmd := kit.Simple(m.Confv(PPROF, "meta.pprof"), "-text", m.Option(BINNARY), msg.Append(kit.MDB_FILE)) - res := strings.Split(m.Cmdx(cli.SYSTEM, cmd), "\n") + cmd := kit.Simple(m.Confv(PPROF, kit.Keym(PPROF)), "-text", m.Option(BINNARY), msg.Append(kit.MDB_FILE)) + res := strings.Split(m.Cmdx(cli.SYSTEM, cmd), ice.MOD_NL) if len(res) > 20 { res = res[:20] } - m.Cmd(mdb.INSERT, PPROF, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, kit.MDB_TEXT, strings.Join(res, "\n"), kit.MDB_FILE, msg.Append(kit.MDB_FILE)) - m.Echo(strings.Join(res, "\n")) + m.Cmd(mdb.INSERT, PPROF, "", mdb.ZONE, m.Option(kit.MDB_ZONE), + kit.MDB_TEXT, strings.Join(res, ice.MOD_NL), kit.MDB_FILE, msg.Append(kit.MDB_FILE)) + m.Echo(strings.Join(res, ice.MOD_NL)) m.ProcessInner() }}, web.SERVE: {Name: "serve", Help: "展示", Hand: func(m *ice.Message, arg ...string) { u := kit.ParseURL(m.Option(ice.MSG_USERWEB)) p := u.Hostname() + ":" + m.Cmdx(tcp.PORT, aaa.RIGHT) - m.Cmd(cli.DAEMON, m.Confv(PPROF, "meta.pprof"), "-http="+p, m.Option(BINNARY), m.Option(kit.MDB_FILE)) + m.Cmd(cli.DAEMON, m.Confv(PPROF, kit.Keym(PPROF)), "-http="+p, m.Option(BINNARY), m.Option(kit.MDB_FILE)) m.Echo("http://%s/ui/top", p) m.ProcessInner() }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Option(mdb.FIELDS, kit.Select("time,count,zone,binnary,service,seconds", kit.Select("time,id,text,binnary,file", mdb.DETAIL, len(arg) > 1), len(arg) > 0)) - m.Cmdy(mdb.SELECT, PPROF, "", mdb.ZONE, arg) - if len(arg) == 0 { + m.Fields(len(arg), "time,zone,count,binnary,service,seconds", "time,id,text,file") + if m.Cmdy(mdb.SELECT, PPROF, "", mdb.ZONE, arg); len(arg) == 0 { m.PushAction(cli.RUN, mdb.REMOVE) - - } else { - m.Table(func(index int, value map[string]string, head []string) { - m.PushDownload(kit.MDB_LINK, "pprof.pd.gz", value[kit.MDB_FILE]) - m.PushButton(web.SERVE) - }) + return } - }}, - "/pprof/": {Name: "/pprof/", Help: "性能分析", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.R.URL.Path = strings.Replace("/code"+m.R.URL.Path, "code", "debug", 1) - http.DefaultServeMux.ServeHTTP(m.W, m.R) - m.Render(ice.RENDER_VOID) + m.Table(func(index int, value map[string]string, head []string) { + m.PushDownload(kit.MDB_LINK, "pprof.pd.gz", value[kit.MDB_FILE]) + m.PushButton(web.SERVE) + }) }}, }, }) diff --git a/core/code/publish.go b/core/code/publish.go index 3d4bca07..4cd4729e 100644 --- a/core/code/publish.go +++ b/core/code/publish.go @@ -8,6 +8,7 @@ import ( "strings" ice "github.com/shylinux/icebergs" + "github.com/shylinux/icebergs/base/aaa" "github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/nfs" @@ -43,22 +44,12 @@ const PUBLISH = "publish" func init() { Index.Merge(&ice.Context{ - Configs: map[string]*ice.Config{ - PUBLISH: {Name: PUBLISH, Help: "发布", Value: kit.Data( - kit.MDB_PATH, "usr/publish", ice.CONTEXTS, _contexts, - SH, `#!/bin/bash -echo "hello world" -`, - JS, `Volcanos("onengine", {_init: function(can, sub) { - can.base.Log("hello volcanos world") -}, river: { - -}}) -`, - )}, - }, Commands: map[string]*ice.Command{ - PUBLISH: {Name: "publish path auto dream volcanos icebergs intshell", Help: "发布", Action: map[string]*ice.Action{ + ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.Prefix(PUBLISH)) + m.Conf(PUBLISH, kit.Keym(ice.CONTEXTS), _contexts) + }}, + PUBLISH: {Name: "publish path auto create volcanos icebergs intshell dream", Help: "发布", Action: map[string]*ice.Action{ mdb.CREATE: {Name: "create file", Help: "添加", Hand: func(m *ice.Message, arg ...string) { _publish_file(m, m.Option(kit.MDB_FILE)) }}, @@ -67,22 +58,23 @@ echo "hello world" defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, "miss") }() m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.ETC_MISS) m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.GO_MOD) - m.Cmd(nfs.DEFS, path.Join(m.Conf(PUBLISH, kit.META_PATH), ice.ORDER_JS), m.Conf(PUBLISH, kit.Keym(JS))) - m.Cmd(nfs.DEFS, "usr/volcanos/page/cache.css", "") - m.Cmd(nfs.DEFS, "usr/volcanos/page/cache.js", "") - m.Option(nfs.DIR_DEEP, true) + m.Cmd(nfs.DEFS, path.Join(m.Conf(PUBLISH, kit.META_PATH), ice.ORDER_JS), m.Conf(PUBLISH, kit.Keym(JS))) + m.Cmd(nfs.DEFS, path.Join(ice.USR_VOLCANOS, "page/cache.css"), "") + m.Cmd(nfs.DEFS, path.Join(ice.USR_VOLCANOS, "page/cache.js"), "") + + m.Option(nfs.DIR_DEEP, ice.TRUE) m.Option(nfs.DIR_REG, `.*\.(html|css|js)$`) m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH)) m.Cmdy(nfs.DIR, "./", "time,size,line,path,link") }}, ice.ICEBERGS: {Name: "icebergs", Help: "冰山架", Hand: func(m *ice.Message, arg ...string) { defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, "base") }() + m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.BIN_ICE_SH) m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.BIN_ICE_BIN) - m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.BIN_ICE) p := m.Option(cli.CMD_DIR, m.Conf(PUBLISH, kit.META_PATH)) - ls := strings.Split(strings.TrimSpace(m.Cmd(cli.SYSTEM, "bash", "-c", "ls |xargs file |grep executable").Append(cli.CMD_OUT)), "\n") + ls := strings.Split(strings.TrimSpace(m.Cmd(cli.SYSTEM, "bash", "-c", "ls |xargs file |grep executable").Append(cli.CMD_OUT)), ice.MOD_NL) for _, ls := range ls { if file := strings.TrimSpace(strings.Split(ls, ":")[0]); file != "" { if s, e := os.Stat(path.Join(p, file)); e == nil { @@ -99,17 +91,14 @@ echo "hello world" defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, "tmux") }() m.Cmd(nfs.DEFS, path.Join(m.Conf(PUBLISH, kit.META_PATH), ice.ORDER_SH), m.Conf(PUBLISH, kit.Keym(SH))) - m.Option(nfs.DIR_DEEP, true) + m.Option(nfs.DIR_DEEP, ice.TRUE) m.Option(nfs.DIR_REG, ".*\\.(sh|vim|conf)$") m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH)) m.Cmdy(nfs.DIR, "./", "time,size,line,path,link") }}, ice.CONTEXTS: {Name: "contexts", Help: "环境", Hand: func(m *ice.Message, arg ...string) { u := kit.ParseURL(m.Option(ice.MSG_USERWEB)) - host := u.Host - if strings.Contains(host, "localhost") { - host = strings.Replace(host, "localhost", m.Cmd(tcp.HOST).Append(tcp.IP), 1) - } + host := m.ReplaceLocalhost(u.Host) m.Option("httphost", fmt.Sprintf("%s://%s:%s", u.Scheme, strings.Split(host, ":")[0], kit.Select(kit.Select("80", "443", u.Scheme == "https"), strings.Split(host, ":"), 1))) m.Option("hostport", fmt.Sprintf("%s:%s", strings.Split(host, ":")[0], kit.Select(kit.Select("80", "443", u.Scheme == "https"), strings.Split(host, ":"), 1))) @@ -127,23 +116,37 @@ echo "hello world" } } }}, + mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + p := m.Option(cli.CMD_DIR, m.Conf(PUBLISH, kit.META_PATH)) + os.Remove(path.Join(p, m.Option(kit.MDB_PATH))) + }}, + mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(web.DREAM, mdb.INPUTS, arg) + }}, web.DREAM: {Name: "dream name=hi repos", Help: "启动", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(web.DREAM, tcp.START, arg) m.Process(ice.PROCESS_OPEN, kit.MergeURL(m.Option(ice.MSG_USERWEB), kit.SSH_POD, kit.Keys(m.Option(ice.MSG_USERPOD), m.Option(kit.MDB_NAME)))) }}, - mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(web.DREAM, mdb.INPUTS, arg) - }}, - mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - p := m.Option(cli.CMD_DIR, m.Conf(PUBLISH, kit.META_PATH)) - os.Remove(path.Join(p, m.Option(kit.MDB_PATH))) - }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH)) - m.Cmdy(nfs.DIR, kit.Select("", arg, 0), "time,size,path,link") + m.Cmdy(nfs.DIR, kit.Select("", arg, 0), "time,size,path,action,link") }}, }, + Configs: map[string]*ice.Config{ + PUBLISH: {Name: PUBLISH, Help: "发布", Value: kit.Data( + kit.MDB_PATH, "usr/publish", ice.CONTEXTS, _contexts, + SH, `#!/bin/bash +echo "hello world" +`, + JS, `Volcanos("onengine", {_init: function(can, sub) { + can.base.Log("hello volcanos world") +}, river: { + +}}) +`, + )}, + }, }) } diff --git a/core/code/python.go b/core/code/python.go index 7d60eb00..10f72053 100644 --- a/core/code/python.go +++ b/core/code/python.go @@ -5,6 +5,7 @@ import ( ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/cli" + "github.com/shylinux/icebergs/base/web" kit "github.com/shylinux/toolkits" ) @@ -13,30 +14,30 @@ const PYTHON = "python" func init() { Index.Merge(&ice.Context{ Configs: map[string]*ice.Config{ - PYTHON: {Name: "python", Help: "脚本命令", Value: kit.Data( - PYTHON, "python", cli.SOURCE, "http://mirrors.sohu.com/python/3.5.2/Python-3.5.2.tar.xz", + PYTHON: {Name: PYTHON, Help: "脚本命令", Value: kit.Data( + cli.SOURCE, "http://mirrors.sohu.com/python/3.5.2/Python-3.5.2.tar.xz", + PYTHON, "python", )}, }, Commands: map[string]*ice.Command{ PYTHON: {Name: "python port path auto start build download", Help: "脚本命令", Action: map[string]*ice.Action{ - "download": {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy("web.code.install", "download", m.Conf(PYTHON, "meta.source")) + web.DOWNLOAD: {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(INSTALL, web.DOWNLOAD, m.Conf(PYTHON, kit.Keym(cli.SOURCE))) }}, - "build": {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy("web.code.install", "build", m.Conf(PYTHON, "meta.source")) + cli.BUILD: {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(INSTALL, cli.BUILD, m.Conf(PYTHON, kit.Keym(cli.SOURCE))) }}, - "start": {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy("web.code.install", "start", m.Conf(PYTHON, "meta.source"), "bin/python3") + cli.START: {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(INSTALL, cli.START, m.Conf(PYTHON, kit.Keym(cli.SOURCE)), "bin/python3") + }}, + cli.RUN: {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(cli.SYSTEM, m.Conf(PYTHON, kit.Keym(PYTHON)), arg) }}, - "pip": {Name: "pip", Help: "安装", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(cli.SYSTEM, m.Conf(PYTHON, "meta.pip"), "install", arg) - }}, - "run": {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(cli.SYSTEM, m.Conf(PYTHON, "meta.python"), arg) + m.Cmdy(cli.SYSTEM, m.Conf(PYTHON, kit.Keym("pip")), "install", arg) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Cmdy("web.code.install", path.Base(m.Conf(PYTHON, kit.META_SOURCE)), arg) + m.Cmdy(INSTALL, path.Base(m.Conf(PYTHON, kit.META_SOURCE)), arg) }}, }, }) diff --git a/core/code/python.shy b/core/code/python.shy new file mode 100644 index 00000000..550eb6df --- /dev/null +++ b/core/code/python.shy @@ -0,0 +1,7 @@ +section "python" +refer ` +官网 https://www.python.org/ +源码 https://www.python.org/downloads/source/ +文档 https://docs.python.org/3/reference/index.html +` + diff --git a/core/code/sh.go b/core/code/sh.go index ac667fa2..29cee806 100644 --- a/core/code/sh.go +++ b/core/code/sh.go @@ -1,13 +1,13 @@ package code import ( + "path" + ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/nfs" kit "github.com/shylinux/toolkits" - - "path" ) const SH = "sh" @@ -16,14 +16,14 @@ func init() { Index.Register(&ice.Context{Name: SH, Help: "命令", Commands: map[string]*ice.Command{ ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Cmd(mdb.PLUGIN, mdb.CREATE, SH, SH, c.Cap(ice.CTX_FOLLOW)) - m.Cmd(mdb.RENDER, mdb.CREATE, SH, SH, c.Cap(ice.CTX_FOLLOW)) - m.Cmd(mdb.ENGINE, mdb.CREATE, SH, SH, c.Cap(ice.CTX_FOLLOW)) - m.Cmd(mdb.SEARCH, mdb.CREATE, SH, SH, c.Cap(ice.CTX_FOLLOW)) + for _, cmd := range []string{mdb.PLUGIN, mdb.RENDER, mdb.ENGINE, mdb.SEARCH} { + m.Cmd(cmd, mdb.CREATE, SH, m.Prefix(SH)) + } + LoadPlug(m, SH) }}, SH: {Name: SH, Help: "命令", Action: map[string]*ice.Action{ mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) { - m.Echo(m.Conf(SH, "meta.plug")) + m.Echo(m.Conf(SH, kit.Keym(PLUG))) }}, mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1])) @@ -38,10 +38,10 @@ func init() { return } m.Option(cli.CMD_DIR, kit.Select("src", arg, 2)) - _go_find(m, kit.Select("main", arg, 1)) + _go_find(m, kit.Select(kit.MDB_MAIN, arg, 1)) m.Cmdy(mdb.SEARCH, MAN1, arg[1:]) m.Cmdy(mdb.SEARCH, MAN8, arg[1:]) - _go_grep(m, kit.Select("main", arg, 1)) + _go_grep(m, kit.Select(kit.MDB_MAIN, arg, 1)) }}, MAN: {Hand: func(m *ice.Message, arg ...string) { @@ -51,7 +51,7 @@ func init() { }, Configs: map[string]*ice.Config{ SH: {Name: SH, Help: "命令", Value: kit.Data( - "plug", kit.Dict( + PLUG, kit.Dict( SPLIT, kit.Dict( "space", " ", "operator", "{[(.,;!|<>)]}", @@ -62,44 +62,48 @@ func init() { SUFFIX, kit.Dict( "{", COMMENT, ), - KEYWORD, kit.Dict( - "export", KEYWORD, - "source", KEYWORD, - "require", KEYWORD, + PREPARE, kit.Dict( + KEYWORD, kit.Simple( + "export", + "source", + "require", - "if", KEYWORD, - "then", KEYWORD, - "else", KEYWORD, - "fi", KEYWORD, - "for", KEYWORD, - "while", KEYWORD, - "do", KEYWORD, - "done", KEYWORD, - "esac", KEYWORD, - "case", KEYWORD, - "in", KEYWORD, - "return", KEYWORD, + "if", + "then", + "else", + "fi", + "for", + "while", + "do", + "done", + "esac", + "case", + "in", + "return", - "shift", KEYWORD, - "local", KEYWORD, - "echo", KEYWORD, - "eval", KEYWORD, - "kill", KEYWORD, - "let", KEYWORD, - "cd", KEYWORD, - - "xargs", FUNCTION, - "date", FUNCTION, - "find", FUNCTION, - "grep", FUNCTION, - "sed", FUNCTION, - "awk", FUNCTION, - "pwd", FUNCTION, - "ps", FUNCTION, - "ls", FUNCTION, - "rm", FUNCTION, - "go", FUNCTION, + "shift", + "local", + "echo", + "eval", + "kill", + "let", + "cd", + ), + FUNCTION, kit.Simple( + "xargs", + "date", + "find", + "grep", + "sed", + "awk", + "pwd", + "ps", + "ls", + "rm", + "go", + ), ), + KEYWORD, kit.Dict(), ), )}, }, diff --git a/core/code/shy.go b/core/code/shy.go index 3c9d169b..f76827c3 100644 --- a/core/code/shy.go +++ b/core/code/shy.go @@ -1,12 +1,12 @@ package code import ( + "path" + ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/nfs" kit "github.com/shylinux/toolkits" - - "path" ) const SHY = "shy" @@ -15,14 +15,14 @@ func init() { Index.Register(&ice.Context{Name: SHY, Help: "脚本", Commands: map[string]*ice.Command{ ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Cmd(mdb.PLUGIN, mdb.CREATE, SHY, m.Prefix(SHY)) - m.Cmd(mdb.RENDER, mdb.CREATE, SHY, m.Prefix(SHY)) - m.Cmd(mdb.ENGINE, mdb.CREATE, SHY, m.Prefix(SHY)) - m.Cmd(mdb.SEARCH, mdb.CREATE, SHY, m.Prefix(SHY)) + for _, cmd := range []string{mdb.PLUGIN, mdb.RENDER, mdb.ENGINE, mdb.SEARCH} { + m.Cmd(cmd, mdb.CREATE, SHY, m.Prefix(SHY)) + } + LoadPlug(m, SHY) }}, SHY: {Name: SHY, Help: "脚本", Action: map[string]*ice.Action{ mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) { - m.Echo(m.Conf(SHY, "meta.plug")) + m.Echo(m.Conf(SHY, kit.Keym(PLUG))) }}, mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1])) @@ -34,28 +34,31 @@ func init() { if arg[0] == kit.MDB_FOREACH { return } - _go_find(m, kit.Select("main", arg, 1)) - _go_grep(m, kit.Select("main", arg, 1)) + _go_find(m, kit.Select(kit.MDB_MAIN, arg, 1)) + _go_grep(m, kit.Select(kit.MDB_MAIN, arg, 1)) }}, }}, }, Configs: map[string]*ice.Config{ SHY: {Name: SHY, Help: "脚本", Value: kit.Data( - "plug", kit.Dict( + PLUG, kit.Dict( PREFIX, kit.Dict("#", COMMENT), - KEYWORD, kit.Dict( - "title", KEYWORD, - "premenu", KEYWORD, - "chapter", KEYWORD, - "section", KEYWORD, - "source", KEYWORD, - "refer", KEYWORD, - "field", KEYWORD, - "spark", KEYWORD, - "image", KEYWORD, - "label", KEYWORD, - "chain", KEYWORD, + PREPARE, kit.Dict( + KEYWORD, kit.Simple( + "title", + "premenu", + "chapter", + "section", + "source", + "refer", + "field", + "spark", + "image", + "label", + "chain", + ), ), + KEYWORD, kit.Dict(), ), )}, }, diff --git a/core/code/upgrade.go b/core/code/upgrade.go index 4cd3e556..3689a704 100644 --- a/core/code/upgrade.go +++ b/core/code/upgrade.go @@ -1,12 +1,12 @@ package code import ( + "os" + ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/web" kit "github.com/shylinux/toolkits" - - "os" ) const UPGRADE = "upgrade" @@ -15,19 +15,23 @@ func init() { Index.Merge(&ice.Context{ Configs: map[string]*ice.Config{ UPGRADE: {Name: UPGRADE, Help: "升级", Value: kit.Dict(kit.MDB_HASH, kit.Dict( - kit.MDB_PATH, "usr/upgrade", "system", kit.Dict(kit.MDB_LIST, kit.List( - kit.MDB_INPUT, "bin", kit.MDB_FILE, "ice.sh", kit.MDB_PATH, "bin/ice.sh", - kit.MDB_INPUT, "bin", kit.MDB_FILE, "ice.bin", kit.MDB_PATH, "bin/ice.bin", + cli.SYSTEM, kit.Dict(kit.MDB_LIST, kit.List( + kit.MDB_INPUT, "bin", kit.MDB_FILE, "ice.sh", kit.MDB_PATH, ice.BIN_ICE, + kit.MDB_INPUT, "bin", kit.MDB_FILE, "ice.bin", kit.MDB_PATH, ice.BIN_ICE_BIN, + )), + cli.SOURCE, kit.Dict(kit.MDB_LIST, kit.List( + kit.MDB_INPUT, "txt", kit.MDB_FILE, "main.go", kit.MDB_PATH, ice.SRC_MAIN_GO, + kit.MDB_INPUT, "txt", kit.MDB_FILE, "miss.sh", kit.MDB_PATH, ice.ETC_MISS_SH, + kit.MDB_INPUT, "txt", kit.MDB_FILE, "go.mod", kit.MDB_PATH, ice.GO_MOD, )), ))}, }, Commands: map[string]*ice.Command{ - UPGRADE: {Name: "upgrade item:select=system 执行:button", Help: "升级", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Grows(cmd, kit.Keys(kit.MDB_HASH, kit.Select("system", arg, 0)), "", "", func(index int, value map[string]interface{}) { - m.Option("exit", "true") - if value[kit.MDB_FILE] == "ice.bin" { - // 程序文件 + UPGRADE: {Name: "upgrade item=system,source 执行:button", Help: "升级", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Grows(cmd, kit.Keys(kit.MDB_HASH, kit.Select(cli.SYSTEM, arg, 0)), "", "", func(index int, value map[string]interface{}) { + if value[kit.MDB_PATH] == ice.BIN_ICE_BIN { // 程序文件 value[kit.MDB_FILE] = kit.Keys("ice", m.Conf(cli.RUNTIME, "host.GOOS"), m.Conf(cli.RUNTIME, "host.GOARCH")) + m.Option("exit", ice.TRUE) } // 下载文件 @@ -35,7 +39,7 @@ func init() { m.Cmd(web.STORY, web.WATCH, msg.Append(kit.MDB_FILE), value[kit.MDB_PATH]) os.Chmod(kit.Format(value[kit.MDB_PATH]), 0770) }) - if m.Option("exit") == "true" { + if m.Option("exit") == ice.TRUE { m.Sleep("1s").Go(func() { m.Cmd("exit", 1) }) } }}, diff --git a/core/code/vimer.go b/core/code/vimer.go index aab5daec..ec25b2ab 100644 --- a/core/code/vimer.go +++ b/core/code/vimer.go @@ -16,7 +16,7 @@ const VIMER = "vimer" func init() { Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ VIMER: {Name: "vimer path=src/ file=main.go line=1 刷新:button=auto save", Help: "编辑器", Meta: kit.Dict( - "display", "/plugin/local/code/vimer.js", "style", "editor", + ice.Display("/plugin/local/code/vimer.js", "editor"), ), Action: map[string]*ice.Action{ mdb.ENGINE: {Name: "engine", Help: "运行", Hand: func(m *ice.Message, arg ...string) { if m.Cmdy(mdb.ENGINE, arg); len(m.Resultv()) > 0 || len(m.Appendv(ice.MSG_APPEND)) > 0 { @@ -32,6 +32,8 @@ func init() { nfs.SAVE: {Name: "save type file path", Help: "保存", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(nfs.SAVE, path.Join(m.Option(kit.MDB_PATH), m.Option(kit.MDB_FILE))) }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Cmdy(INNER, arg) }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Cmdy(INNER, arg) + }}, }}) } diff --git a/core/code/webpack.go b/core/code/webpack.go index e7e438fc..7ac273a8 100644 --- a/core/code/webpack.go +++ b/core/code/webpack.go @@ -15,7 +15,7 @@ const WEBPACK = "webpack" func init() { Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ - WEBPACK: {Name: "webpack path auto create", Help: "打包", Action: map[string]*ice.Action{ + WEBPACK: {Name: "webpack path auto create prunes", Help: "打包", Action: map[string]*ice.Action{ mdb.CREATE: {Name: "create name=demo", Help: "创建", Hand: func(m *ice.Message, arg ...string) { dir := m.Conf(web.SERVE, kit.Keym(ice.VOLCANOS, kit.SSH_PATH)) css, _, e := kit.Create(path.Join(dir, "page/cache.css")) @@ -32,8 +32,7 @@ func init() { for _, k := range []string{"lib", "panel", "plugin"} { m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) { - switch kit.Ext(value[kit.MDB_PATH]) { - case CSS: + if kit.Ext(value[kit.MDB_PATH]) == CSS { js.WriteString(`Volcanos.meta.cache["` + path.Join("/", value[kit.MDB_PATH]) + "\"] = []\n") css.WriteString(m.Cmdx(nfs.CAT, value[kit.MDB_PATH])) } @@ -41,8 +40,7 @@ func init() { } for _, k := range []string{"lib", "panel", "plugin"} { m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) { - switch kit.Ext(value[kit.MDB_PATH]) { - case JS: + if kit.Ext(value[kit.MDB_PATH]) == JS { js.WriteString(`_can_name = "` + path.Join("/", value[kit.MDB_PATH]) + "\";\n") js.WriteString(m.Cmdx(nfs.CAT, value[kit.MDB_PATH])) } @@ -54,7 +52,7 @@ func init() { js.WriteString(m.Cmdx(nfs.CAT, k)) } - if f, _, e := kit.Create("usr/publish/webpack/" + m.Option(kit.MDB_NAME) + ".js"); m.Assert(e) { + if f, _, e := kit.Create(path.Join(ice.USR_PUBLISH, WEBPACK, kit.Keys(m.Option(kit.MDB_NAME), JS))); m.Assert(e) { defer f.Close() f.WriteString("\n") @@ -64,13 +62,13 @@ func init() { } m.Option(nfs.DIR_ROOT, "") - if f, p, e := kit.Create("usr/publish/webpack/" + m.Option(kit.MDB_NAME) + ".html"); m.Assert(e) { + if f, p, e := kit.Create(path.Join(ice.USR_PUBLISH, WEBPACK, kit.Keys(m.Option(kit.MDB_NAME), HTML))); m.Assert(e) { f.WriteString(fmt.Sprintf(_pack, m.Cmdx(nfs.CAT, path.Join(ice.USR_VOLCANOS, "page/cache.css")), m.Cmdx(nfs.CAT, path.Join(ice.USR_VOLCANOS, "page/index.css")), m.Cmdx(nfs.CAT, path.Join(ice.USR_VOLCANOS, ice.PROTO_JS)), - m.Cmdx(nfs.CAT, path.Join(ice.USR_PUBLISH, "webpack/"+m.Option(kit.MDB_NAME)+".js")), + m.Cmdx(nfs.CAT, path.Join(ice.USR_PUBLISH, path.Join(WEBPACK, kit.Keys(m.Option(kit.MDB_NAME), JS)))), m.Cmdx(nfs.CAT, path.Join(ice.USR_VOLCANOS, "page/cache.js")), m.Cmdx(nfs.CAT, path.Join(ice.USR_VOLCANOS, "page/index.js")), @@ -78,14 +76,16 @@ func init() { m.Echo(p) } }}, + mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(nfs.SAVE, path.Join(ice.USR_VOLCANOS, "page/cache.css"), "") + m.Cmd(nfs.SAVE, path.Join(ice.USR_VOLCANOS, "page/cache.js"), "") + }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH)) - m.Option(nfs.DIR_TYPE, nfs.CAT) m.Option(nfs.DIR_DEEP, true) + m.Option(nfs.DIR_TYPE, nfs.CAT) + m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH)) - m.Cmdy(nfs.DIR, WEBPACK).Table(func(index int, value map[string]string, head []string) { - m.PushDownload(kit.MDB_LINK, path.Join(m.Option(nfs.DIR_ROOT), value[kit.MDB_PATH])) - }) + m.Cmdy(nfs.DIR, WEBPACK, "time,size,path,action,link") }}, }}) } @@ -93,8 +93,13 @@ func init() { const _pack = ` + + + + + + - volcanos diff --git a/core/team/plan.go b/core/team/plan.go index ec627d61..bd80538d 100644 --- a/core/team/plan.go +++ b/core/team/plan.go @@ -12,7 +12,7 @@ import ( func _plan_list(m *ice.Message, begin_time, end_time time.Time) *ice.Message { m.Option(mdb.CACHE_LIMIT, "100") - m.Fields(true, "begin_time,close_time,zone,id,level,status,score,type,name,text,extra") + m.Fields(0, "begin_time,close_time,zone,id,level,status,score,type,name,text,extra") m.Option(kit.Keycb(mdb.SELECT), func(key string, fields []string, value, val map[string]interface{}) { begin, _ := time.ParseInLocation(ice.MOD_TIME, kit.Format(value[BEGIN_TIME]), time.Local) if begin_time.After(begin) || begin.After(end_time) { diff --git a/core/team/task.go b/core/team/task.go index dfcda280..5bc9208e 100644 --- a/core/team/task.go +++ b/core/team/task.go @@ -57,18 +57,6 @@ func _task_action(m *ice.Message, status interface{}, action ...string) string { return strings.Join(action, ",") } -func _task_list(m *ice.Message, zone string, id string) *ice.Message { - if zone == "" { - m.Fields(zone == "", "time,zone,count") - defer func() { m.PushAction(mdb.REMOVE) }() - } else { - m.Fields(id == "", "begin_time,id,status,level,score,type,name,text") - defer m.Table(func(index int, value map[string]string, head []string) { - m.PushButton(_task_action(m, value[STATUS])) - }) - } - return m.Cmdy(mdb.SELECT, TASK, "", mdb.ZONE, zone, id) -} func _task_create(m *ice.Message, zone string) { m.Cmdy(mdb.INSERT, TASK, "", mdb.HASH, kit.MDB_ZONE, zone) } @@ -217,7 +205,14 @@ func init() { _task_modify(m, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_ID), STATUS, FINISH) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - _task_list(m, kit.Select("", arg, 0), kit.Select("", arg, 1)) + m.Fields(len(arg), "time,zone,count", "begin_time,id,status,level,score,type,name,text") + if m.Cmdy(mdb.SELECT, TASK, "", mdb.ZONE, arg); len(arg) == 0 { + m.PushAction(mdb.REMOVE) + } else { + m.Table(func(index int, value map[string]string, head []string) { + m.PushButton(_task_action(m, value[STATUS])) + }) + } }}, }, }) diff --git a/misc.go b/misc.go index 23601525..1e6381e7 100644 --- a/misc.go +++ b/misc.go @@ -131,14 +131,19 @@ func Render(m *Message, cmd string, args ...interface{}) string { if arg[0] == "" { return "" } + list := []string{} + if m.Option(MSG_USERPOD) != "" { + list = append(list, kit.SSH_POD, m.Option(MSG_USERPOD)) + } if len(arg) == 1 { arg[0] = kit.MergeURL2(m.Option(MSG_USERWEB), path.Join(kit.Select("", "/share/local", - !strings.HasPrefix(arg[0], "/")), arg[0]), kit.SSH_POD, m.Option(MSG_USERPOD)) + !strings.HasPrefix(arg[0], "/")), arg[0]), list) } else { arg[1] = kit.MergeURL2(m.Option(MSG_USERWEB), path.Join(kit.Select("", "/share/local", - !strings.HasPrefix(arg[1], "/")), arg[1]), kit.SSH_POD, m.Option(MSG_USERPOD)) + !strings.HasPrefix(arg[1], "/")), arg[1]), list, "filename", arg[0]) } - return fmt.Sprintf(`%s`, kit.Select(arg[0], arg, 1), path.Base(arg[0]), arg[0]) + arg[0] = m.ReplaceLocalhost(arg[0]) + return fmt.Sprintf(`%s`, m.ReplaceLocalhost(kit.Select(arg[0], arg, 1)), path.Base(arg[0]), arg[0]) case RENDER_ANCHOR: // [name] link return fmt.Sprintf(`%s`, kit.Select(arg[0], arg, 1), arg[0]) @@ -236,6 +241,9 @@ func (m *Message) EchoImages(src string, arg ...string) *Message { func (m *Message) EchoQRCode(text string, arg ...string) *Message { // text [size] return m.Echo(Render(m, RENDER_QRCODE, text, arg)) } +func (m *Message) EchoDownload(arg ...interface{}) { // [name] file + m.Echo(Render(m, RENDER_DOWNLOAD, arg...)) +} func (m *Message) SortInt(key string) { m.Sort(key, "int") } func (m *Message) SortIntR(key string) { m.Sort(key, "int_r") } @@ -312,8 +320,8 @@ func (m *Message) OptionLoad(file string) *Message { } return m } -func (m *Message) Fields(condition bool, fields string) string { - return m.Option(MSG_FIELDS, kit.Select(kit.Select("detail", fields, condition), m.Option(MSG_FIELDS))) +func (m *Message) Fields(length int, fields ...string) string { + return m.Option(MSG_FIELDS, kit.Select(kit.Select("detail", fields, length), m.Option(MSG_FIELDS))) } func (m *Message) Upload(dir string) { up := kit.Simple(m.Optionv(MSG_UPLOAD)) @@ -391,7 +399,7 @@ func (m *Message) ProcessRefresh(delay string) { func (m *Message) ProcessRefresh30ms() { m.ProcessRefresh("30ms") } func (m *Message) ProcessRefresh300ms() { m.ProcessRefresh("300ms") } func (m *Message) ProcessRefresh3s() { m.ProcessRefresh("3s") } -func (m *Message) ProcessCommand(cmd, val string, arg ...string) { +func (m *Message) ProcessCommand(cmd string, val []string, arg ...string) { if len(arg) > 0 && arg[0] == "run" { m.Cmdy(cmd, arg[1:]) return @@ -399,7 +407,7 @@ func (m *Message) ProcessCommand(cmd, val string, arg ...string) { m.Cmdy("command", cmd) m.ProcessField(cmd, "run") - m.Push("arg", kit.Format(kit.Split(val))) + m.Push("arg", kit.Format(val)) } func (m *Message) ProcessCommandOpt(arg ...string) { m.Push("opt", kit.Format(m.OptionSimple(arg...))) @@ -523,3 +531,24 @@ func (m *Message) IsCliUA() bool { } return false } +func (m *Message) ReplaceLocalhost(url string) string { + if strings.Contains(url, "://localhost") { + return strings.Replace(url, "localhost", m.Cmd("tcp.host").Append("ip"), 1) + } + return url +} + +func Display(file string, arg ...string) map[string]string { + if file != "" && !strings.HasPrefix(file, "/") { + ls := strings.Split(kit.FileLine(2, 100), "usr") + file = kit.Select(file+".js", file, strings.HasSuffix(file, ".js")) + file = path.Join("/require/github.com/shylinux", path.Dir(ls[len(ls)-1]), file) + } + return map[string]string{kit.MDB_DISPLAY: file, kit.MDB_STYLE: kit.Select("", arg, 0)} +} +func (m *Message) OptionSplit(fields ...string) (res []string) { + for _, k := range strings.Split(strings.Join(fields, ","), ",") { + res = append(res, m.Option(k)) + } + return res +} diff --git a/misc/bash/favor.go b/misc/bash/favor.go index eb7b095d..cba1ed96 100644 --- a/misc/bash/favor.go +++ b/misc/bash/favor.go @@ -61,11 +61,11 @@ func init() { }}, cli.SYSTEM: {Name: "system", Help: "命令", Hand: func(m *ice.Message, arg ...string) { m.Option(cli.CMD_DIR, m.Option(cli.PWD)) - m.ProcessCommand(cli.SYSTEM, m.Option(kit.MDB_TEXT), arg...) + m.ProcessCommand(cli.SYSTEM, kit.Split(m.Option(kit.MDB_TEXT)), arg...) m.ProcessCommandOpt(cli.PWD) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) < 2, kit.Select(m.Conf(FAVOR, kit.META_FIELD), "time,zone,count", len(arg) == 0)) + m.Fields(len(arg), "time,zone,count", m.Conf(FAVOR, kit.META_FIELD)) if m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.ZONE, arg); len(arg) == 0 { m.Action(mdb.CREATE, mdb.EXPORT, mdb.IMPORT) m.PushAction(mdb.REMOVE) diff --git a/misc/bash/sess.go b/misc/bash/sess.go index e09d6eda..5060ec2b 100644 --- a/misc/bash/sess.go +++ b/misc/bash/sess.go @@ -77,7 +77,7 @@ func init() { m.Cmdy(mdb.PRUNES, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, aaa.LOGOUT) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) == 0, m.Conf(SESS, kit.META_FIELD)) + m.Fields(len(arg), m.Conf(SESS, kit.META_FIELD)) m.Cmdy(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, arg) m.PushAction(mdb.REMOVE) }}, diff --git a/misc/bash/sync.go b/misc/bash/sync.go index 3235d19f..5edf4270 100644 --- a/misc/bash/sync.go +++ b/misc/bash/sync.go @@ -67,7 +67,7 @@ func init() { }}, cli.SYSTEM: {Name: "system", Help: "命令", Hand: func(m *ice.Message, arg ...string) { m.Option(cli.CMD_DIR, m.Option(cli.PWD)) - m.ProcessCommand(cli.SYSTEM, m.Option(kit.MDB_TEXT), arg...) + m.ProcessCommand(cli.SYSTEM, kit.Split(m.Option(kit.MDB_TEXT)), arg...) m.ProcessCommandOpt(cli.PWD) }}, FAVOR: {Name: "favor zone=some@key type name text pwd", Help: "收藏", Hand: func(m *ice.Message, arg ...string) { @@ -75,7 +75,7 @@ func init() { }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.OptionPage(kit.Slice(arg, _sync_index)...) - m.Fields(len(arg) == 0 || arg[0] == "", m.Conf(SYNC, kit.META_FIELD)) + m.Fields(len(kit.Slice(arg, 0, 1)), m.Conf(SYNC, kit.META_FIELD)) m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_ID, arg) m.PushAction(cli.SYSTEM, FAVOR) m.StatusTimeCountTotal(_sync_count(m)) diff --git a/misc/bash/trash.go b/misc/bash/trash.go index 6db91dd8..40001f4e 100644 --- a/misc/bash/trash.go +++ b/misc/bash/trash.go @@ -45,11 +45,11 @@ func init() { }}, nfs.DIR: {Name: "dir", Help: "目录", Hand: func(m *ice.Message, arg ...string) { m.Option(nfs.DIR_ROOT, m.Option(TO)) - m.ProcessCommand(nfs.DIR, "", arg...) + m.ProcessCommand(nfs.DIR, []string{}, arg...) m.ProcessCommandOpt(TO) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) == 0, m.Conf(TRASH, kit.META_FIELD)) + m.Fields(len(arg), m.Conf(TRASH, kit.META_FIELD)) m.Cmdy(mdb.SELECT, m.Prefix(TRASH), "", mdb.HASH, kit.MDB_HASH, arg) m.PushAction(nfs.DIR, mdb.REVERT, mdb.REMOVE) }}, diff --git a/misc/chrome/cache.go b/misc/chrome/cache.go index c2de03e3..a0805d5b 100644 --- a/misc/chrome/cache.go +++ b/misc/chrome/cache.go @@ -45,7 +45,7 @@ func init() { m.Cmdy(mdb.PRUNES, m.Prefix(CACHE), "", mdb.HASH, kit.SSH_STEP, "100") }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) == 0, m.Conf(CACHE, kit.META_FIELD)) + m.Fields(len(arg), m.Conf(CACHE, kit.META_FIELD)) m.Cmdy(mdb.SELECT, m.Prefix(CACHE), "", mdb.HASH, kit.MDB_HASH, arg) m.PushAction(mdb.REMOVE) }}, diff --git a/misc/chrome/favor.go b/misc/chrome/favor.go index 89bf85fa..5aeb8589 100644 --- a/misc/chrome/favor.go +++ b/misc/chrome/favor.go @@ -48,7 +48,7 @@ func init() { } }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) < 2, kit.Select(m.Conf(FAVOR, kit.META_FIELD), "time,zone,count", len(arg) == 0)) + m.Fields(len(arg), "time,zone,count", m.Conf(FAVOR, kit.META_FIELD)) if m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.ZONE, arg); len(arg) == 0 { m.Action(mdb.CREATE) m.PushAction(mdb.REMOVE) diff --git a/misc/chrome/sync.go b/misc/chrome/sync.go index 0611b41e..a707b326 100644 --- a/misc/chrome/sync.go +++ b/misc/chrome/sync.go @@ -53,7 +53,7 @@ func init() { }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.OptionPage(kit.Slice(arg, _sync_index)...) - m.Fields(len(arg) == 0 || arg[0] == "", m.Conf(SYNC, kit.META_FIELD)) + m.Fields(len(kit.Slice(arg, 0, 1)), m.Conf(SYNC, kit.META_FIELD)) m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_ID, arg) m.StatusTimeCountTotal(_sync_count(m)) m.PushAction(FAVOR) diff --git a/misc/git/repos.go b/misc/git/repos.go index 715f34cc..722bc1ef 100644 --- a/misc/git/repos.go +++ b/misc/git/repos.go @@ -80,7 +80,7 @@ func init() { }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) == 0 { // 仓库列表 - m.Fields(len(arg) == 0, m.Conf(REPOS, kit.META_FIELD)) + m.Fields(len(arg), m.Conf(REPOS, kit.META_FIELD)) m.Cmdy(mdb.SELECT, m.Prefix(REPOS), "", mdb.HASH) m.Sort(kit.MDB_NAME) return diff --git a/misc/lark/app.go b/misc/lark/app.go index 2af262ad..38722c3f 100644 --- a/misc/lark/app.go +++ b/misc/lark/app.go @@ -49,7 +49,7 @@ func init() { m.Echo(msg.Append(TOKEN)) }}, }, Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) { - m.Fields(len(arg) == 0, m.Conf(APP, kit.META_FIELD)) + m.Fields(len(arg), m.Conf(APP, kit.META_FIELD)) m.Cmdy(mdb.SELECT, m.Prefix(APP), "", mdb.HASH, APPID, arg) }}, }, diff --git a/misc/tmux/script.go b/misc/tmux/script.go index d85f72ef..51dbd482 100644 --- a/misc/tmux/script.go +++ b/misc/tmux/script.go @@ -31,7 +31,7 @@ func init() { m.Cmdy(mdb.IMPORT, m.Prefix(SCRIPT), "", mdb.HASH) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) == 0, m.Conf(SCRIPT, kit.META_FIELD)) + m.Fields(len(arg), m.Conf(SCRIPT, kit.META_FIELD)) m.Cmdy(mdb.SELECT, m.Prefix(SCRIPT), "", mdb.HASH, kit.MDB_NAME, arg) m.PushAction(mdb.REMOVE) }}, diff --git a/misc/vim/favor.go b/misc/vim/favor.go index fbbf2739..1c4df9bd 100644 --- a/misc/vim/favor.go +++ b/misc/vim/favor.go @@ -65,14 +65,14 @@ func init() { } }}, code.INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) { - m.ProcessCommand(code.INNER, kit.Format([]string{ + m.ProcessCommand(code.INNER, []string{ kit.Select("./", path.Dir(m.Option(kit.MDB_FILE))), path.Base(m.Option(kit.MDB_FILE)), m.Option(kit.MDB_LINE), - }), arg...) + }, arg...) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) < 2, kit.Select(m.Conf(FAVOR, kit.META_FIELD), "time,zone,count", len(arg) == 0)) + m.Fields(len(arg), "time,zone,count", m.Conf(FAVOR, kit.META_FIELD)) if m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.ZONE, arg); len(arg) == 0 { m.Action(mdb.CREATE) m.PushAction(mdb.REMOVE) diff --git a/misc/vim/input.go b/misc/vim/input.go index 51f5f11a..57725303 100644 --- a/misc/vim/input.go +++ b/misc/vim/input.go @@ -58,7 +58,7 @@ func init() { m.Cmdy(mdb.IMPORT, m.Prefix(INPUT), "", mdb.LIST) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) == 0, m.Conf(INPUT, kit.META_FIELD)) + m.Fields(len(arg), m.Conf(INPUT, kit.META_FIELD)) m.Cmdy(mdb.SELECT, m.Prefix(INPUT), "", mdb.LIST, kit.MDB_ID, arg) }}, }, diff --git a/misc/vim/sess.go b/misc/vim/sess.go index bca291ce..4982f63b 100644 --- a/misc/vim/sess.go +++ b/misc/vim/sess.go @@ -77,7 +77,7 @@ func init() { m.Cmdy(mdb.PRUNES, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, aaa.LOGOUT) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) == 0, m.Conf(SESS, kit.META_FIELD)) + m.Fields(len(arg), m.Conf(SESS, kit.META_FIELD)) m.Cmdy(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, arg) m.PushAction(mdb.REMOVE) }}, diff --git a/misc/vim/sync.go b/misc/vim/sync.go index 9d0ed9e8..c4b99f3f 100644 --- a/misc/vim/sync.go +++ b/misc/vim/sync.go @@ -43,7 +43,7 @@ func init() { }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.OptionPage(kit.Slice(arg, _sync_index)...) - m.Fields(len(arg) == 0 || arg[0] == "", m.Conf(SYNC, kit.META_FIELD)) + m.Fields(len(kit.Slice(arg, 0, 1)), m.Conf(SYNC, kit.META_FIELD)) m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_ID, arg) m.StatusTimeCountTotal(_sync_count(m)) }}, diff --git a/misc/vim/vim.go b/misc/vim/vim.go index e33ce096..b82e21ab 100644 --- a/misc/vim/vim.go +++ b/misc/vim/vim.go @@ -71,7 +71,7 @@ var Index = &ice.Context{Name: VIM, Help: "编辑器", code.PREFIX, kit.Dict( "\"", "comment", ), - "_keyword", kit.Dict( + code.PREPARE, kit.Dict( code.KEYWORD, kit.Simple( "source", "finish", "set", "let", "end", diff --git a/misc/wx/favor.go b/misc/wx/favor.go index e9952d17..b3696ed1 100644 --- a/misc/wx/favor.go +++ b/misc/wx/favor.go @@ -26,7 +26,7 @@ func init() { m.Cmdy(mdb.DELETE, m.Prefix(FAVOR), "", mdb.HASH, m.OptionSimple(kit.MDB_TEXT)) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) == 0, m.Conf(FAVOR, kit.META_FIELD)) + m.Fields(len(arg), m.Conf(FAVOR, kit.META_FIELD)) m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.HASH, kit.MDB_TEXT, arg) m.Table(func(index int, value map[string]string, head []string) { m.PushImages(cli.QRCODE, kit.MergeURL("https://open.weixin.qq.com/qr/code", aaa.USERNAME, value[kit.MDB_TEXT])) diff --git a/misc/wx/menu.go b/misc/wx/menu.go index 856a7b73..cd9cdca6 100644 --- a/misc/wx/menu.go +++ b/misc/wx/menu.go @@ -31,7 +31,7 @@ func init() { m.Cmdy(mdb.DELETE, m.Prefix(MENU), "", mdb.ZONE, m.OptionSimple(kit.MDB_ZONE)) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg) < 2, kit.Select(m.Conf(MENU, kit.META_FIELD), "time,zone,count", len(arg) == 0)) + m.Fields(len(arg), "time,zone,count", m.Conf(MENU, kit.META_FIELD)) if m.Cmdy(mdb.SELECT, m.Prefix(MENU), "", mdb.ZONE, arg); len(arg) == 0 { m.PushAction(mdb.REMOVE) } diff --git a/type.go b/type.go index fcf00107..8b52396d 100644 --- a/type.go +++ b/type.go @@ -198,7 +198,14 @@ func (c *Context) Merge(s *Context) *Context { } for k, a := range v.Action { - kit.Value(v.Meta, kit.Keys("trans", k), a.Help) + help := strings.SplitN(a.Help, ":", 2) + if len(help) == 1 || help[1] == "" { + help = strings.SplitN(help[0], ":", 2) + } + kit.Value(v.Meta, kit.Keys("trans", k), help[0]) + if len(help) > 1 { + kit.Value(v.Meta, kit.Keys("title", k), help[1]) + } if a.Hand == nil { continue }