diff --git a/base/cli/python.go b/base/cli/python.go index 14fe1d4d..904552d5 100644 --- a/base/cli/python.go +++ b/base/cli/python.go @@ -13,6 +13,7 @@ func init() { Index.Merge(&ice.Context{ Configs: map[string]*ice.Config{ PYTHON: {Name: "python", Help: "脚本命令", Value: kit.Data( + "python", "python", "source", "http://mirrors.sohu.com/python/3.5.2/Python-3.5.2.tar.xz", "qrcode", `import pyqrcode; print(pyqrcode.create('%s').terminal(module_color='%s', quiet_zone=1))`, )}, @@ -30,9 +31,9 @@ func init() { }}, "qrcode": {Name: "qrcode text color", Help: "安装", Hand: func(m *ice.Message, arg ...string) { - prefix := []string{SYSTEM, m.Conf(PYTHON, kit.Keys(kit.MDB_META, PYTHON))} + prefix := []string{SYSTEM, m.Conf(PYTHON, "meta.python")} m.Cmdy(prefix, "-c", kit.Format(m.Conf(PYTHON, "meta.qrcode"), - kit.Select("hello world", arg, 0), kit.Select("blue", arg, 1))) + kit.Select("hello world", m.Option("text")), kit.Select("blue", m.Option("color")))) }}, "pip": {Name: "pip", Help: "安装", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(SYSTEM, m.Conf(PYTHON, "meta.pip"), "install", arg) diff --git a/base/cli/system.go b/base/cli/system.go index 6d0ab296..d6bc295b 100644 --- a/base/cli/system.go +++ b/base/cli/system.go @@ -1,6 +1,7 @@ package cli import ( + qrcodeTerminal "github.com/Baozisoftware/qrcode-terminal-go" ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/mdb" kit "github.com/shylinux/toolkits" @@ -60,6 +61,9 @@ const ( CMD_CODE = "cmd_code" ) +const ( + QRCODE = "qrcode" +) const SYSTEM = "system" func init() { @@ -68,7 +72,32 @@ func init() { SYSTEM: {Name: SYSTEM, Help: "系统命令", Value: kit.Data()}, }, Commands: map[string]*ice.Command{ - SYSTEM: {Name: "system id auto", Help: "系统命令", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) { + SYSTEM: {Name: "system id auto", Help: "系统命令", Action: map[string]*ice.Action{ + QRCODE: {Name: "qrcode text fg bg lv", Help: "二维码", Hand: func(m *ice.Message, arg ...string) { + fg := qrcodeTerminal.ConsoleColors.BrightBlue + bg := qrcodeTerminal.ConsoleColors.BrightWhite + switch m.Option("fg") { + case "black": + fg = qrcodeTerminal.ConsoleColors.BrightBlack + case "red": + fg = qrcodeTerminal.ConsoleColors.BrightRed + case "green": + fg = qrcodeTerminal.ConsoleColors.BrightGreen + case "yellow": + fg = qrcodeTerminal.ConsoleColors.BrightYellow + case "blue": + fg = qrcodeTerminal.ConsoleColors.BrightBlue + case "cyan": + fg = qrcodeTerminal.ConsoleColors.BrightCyan + case "magenta": + fg = qrcodeTerminal.ConsoleColors.BrightMagenta + case "white": + fg = qrcodeTerminal.ConsoleColors.BrightWhite + } + obj := qrcodeTerminal.New2(fg, bg, qrcodeTerminal.QRCodeRecoveryLevels.Medium) + m.Echo("%s", *obj.Get(m.Option(kit.MDB_TEXT))) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) { if len(arg) == 0 || kit.Int(arg[0]) > 0 { m.Option("_control", "_page") m.Option(mdb.FIELDS, kit.Select("time,id,cmd,dir,env", mdb.DETAIL, len(arg) > 0)) diff --git a/base/mdb/mdb.go b/base/mdb/mdb.go index 218eb2d8..b9fd0480 100644 --- a/base/mdb/mdb.go +++ b/base/mdb/mdb.go @@ -411,6 +411,7 @@ const ( INPUTS = "inputs" INVITE = "invite" COMMIT = "commit" + SOURCE = "source" ) const ( CACHE_LIMIT = "cache.limit" diff --git a/base/web/dream.go b/base/web/dream.go index 57d301cb..45ad5407 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -99,6 +99,9 @@ ish_miss_prepare_install Commands: map[string]*ice.Command{ DREAM: {Name: "dream name path auto 启动", Help: "梦想家", Action: map[string]*ice.Action{ gdb.START: {Name: "start type=worker,server repos name", Help: "启动", Hand: func(m *ice.Message, arg ...string) { + if m.Option(kit.MDB_NAME) == "self" { + m.Option(kit.MDB_NAME, "") + } _dream_show(m, m.Option(kit.MDB_NAME, kit.Select(path.Base(m.Option(kit.SSH_REPOS)), m.Option(kit.MDB_NAME)))) }}, gdb.STOP: {Name: "stop", Help: "停止", Hand: func(m *ice.Message, arg ...string) { diff --git a/core/chat/chat.go b/core/chat/chat.go index aab80c8e..0dc38ce8 100644 --- a/core/chat/chat.go +++ b/core/chat/chat.go @@ -69,6 +69,6 @@ var Index = &ice.Context{Name: CHAT, Help: "聊天中心", func init() { web.Index.Register(Index, &web.Frame{}, HEADER, RIVER, STORM, ACTION, FOOTER, - LOCATION, PASTE, SCAN, + LOCATION, PASTE, SCAN, FILES, ) } diff --git a/exec.go b/exec.go index 61022b24..afced35f 100644 --- a/exec.go +++ b/exec.go @@ -110,9 +110,14 @@ func (m *Message) Back(res *Message) *Message { return m } func (m *Message) Gos(msg *Message, cb interface{}, args ...interface{}) *Message { - task.Put(m.Cmdx("gdb.routine", "create", "fileline", kit.FileLine(cb, 3), "status", "start"), func(task *task.Task) error { - msg.Optionv("task.hash", task.Arg) - msg.Optionv("_task", task) + // h := m.Cmdx("gdb.routine", "create", "fileline", kit.FileLine(cb, 3), "status", "start") + task.Put(kit.FileLine(3, 3), func(task *task.Task) error { + // msg.Optionv("task.hash", task.Arg) + // msg.Optionv("_task", task) + // defer func() { + // msg.Option(kit.MDB_HASH, task.Arg) + // msg.Cmdx("gdb.routine", "modify", "status", "stop") + // }() msg.TryCatch(msg, true, func(msg *Message) { switch cb := cb.(type) { @@ -122,9 +127,6 @@ func (m *Message) Gos(msg *Message, cb interface{}, args ...interface{}) *Messag cb() } }) - - msg.Option(kit.MDB_HASH, task.Arg) - msg.Cmdx("gdb.routine", "modify", "status", "stop") return nil }) return msg diff --git a/go.mod b/go.mod index b138b205..ac8f2450 100644 --- a/go.mod +++ b/go.mod @@ -3,8 +3,10 @@ module github.com/shylinux/icebergs go 1.13 require ( + github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f github.com/gorilla/websocket v1.4.2 github.com/kr/pty v1.1.1 + github.com/mattn/go-colorable v0.1.8 // indirect github.com/nareix/joy4 v0.0.0-20200507095837-05a4ffbb5369 github.com/shylinux/toolkits v0.1.9 github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e diff --git a/go.sum b/go.sum index 00923c8e..31f2f8e7 100644 --- a/go.sum +++ b/go.sum @@ -1,9 +1,15 @@ +github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f h1:2dk3eOnYllh+wUOuDhOoC2vUVoJF/5z478ryJ+wzEII= +github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f/go.mod h1:4a58ifQTEe2uwwsaqbh3i2un5/CBPg+At/qHpt18Tmk= github.com/google/uuid v1.1.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/maruel/rs v0.0.0-20150922171536-2c81c4312fe4/go.mod h1:kcRFpEzolcEklV6rD7W95mG49/sbdX/PlFmd7ni3RvA= +github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/nareix/joy4 v0.0.0-20200507095837-05a4ffbb5369/go.mod h1:aFJ1ZwLjvHN4yEzE5Bkz8rD8/d8Vlj3UIuvz2yfET7I= github.com/shylinux/toolkits v0.1.9 h1:gfQnXSBBuCtUueNF5eL0kZAjJS8pzODrjxIL0WynqsQ= github.com/shylinux/toolkits v0.1.9/go.mod h1:Y68Ot6xOmo1bun67YvqC3chDGeU2gDxtsUnvVDGJm4g= @@ -17,4 +23,7 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae h1:/WDfKMnPU+m5M4xB+6x4kaepxRw6jWvR5iDRdvjHgy8= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/misc/vim/_trash.go b/misc/vim/_trash.go deleted file mode 100644 index e0753f0e..00000000 --- a/misc/vim/_trash.go +++ /dev/null @@ -1,24 +0,0 @@ -package vim - -/* - m.Conf(web.FAVOR, "meta.render.vimrc", m.AddCmd(&ice.Command{Name: "render favor id", Help: "渲染引擎", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - value := m.Optionv("value").(map[string]interface{}) - switch value["name"] { - case "read", "write", "exec": - p := path.Join(kit.Format(kit.Value(value, "extra.pwd")), kit.Format(kit.Value(value, "extra.buf"))) - if strings.HasPrefix(kit.Format(kit.Value(value, "extra.buf")), "/") { - p = path.Join(kit.Format(kit.Value(value, "extra.buf"))) - } - - f, e := os.Open(p) - m.Assert(e) - defer f.Close() - b, e := ioutil.ReadAll(f) - m.Assert(e) - m.Echo(string(b)) - default: - m.Cmdy(cli.SYSTEM, "sed", "-n", fmt.Sprintf("/%s/,/^}$/p", value["text"]), kit.Value(value, "extra.buf")) - } - }})) - -*/ diff --git a/misc/vim/favor.go b/misc/vim/favor.go index 781f166b..9279e5d8 100644 --- a/misc/vim/favor.go +++ b/misc/vim/favor.go @@ -3,6 +3,7 @@ package vim import ( ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/mdb" + "github.com/shylinux/icebergs/core/code" kit "github.com/shylinux/toolkits" "strings" @@ -14,26 +15,23 @@ func init() { Index.Merge(&ice.Context{ Configs: map[string]*ice.Config{ FAVOR: {Name: FAVOR, Help: "收藏夹", Value: kit.Data( - kit.MDB_SHORT, "topic", kit.MDB_FIELD, "time,id,type,name,text,file,line", + kit.MDB_SHORT, kit.MDB_TOPIC, kit.MDB_FIELD, "time,id,type,name,text,file,line", )}, }, Commands: map[string]*ice.Command{ - FAVOR: {Name: "favor topic=auto id=auto auto 创建 导出 导入", Help: "收藏夹", Action: map[string]*ice.Action{ + FAVOR: {Name: "favor topic=auto id=auto auto create 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, m.Prefix(FAVOR), "", mdb.HASH, arg) }}, mdb.INSERT: {Name: "insert topic=数据结构 name=hi text=hello", Help: "添加", Hand: func(m *ice.Message, arg ...string) { - m.Richs(m.Prefix(FAVOR), "", m.Option("topic"), func(key string, value map[string]interface{}) { - m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), kit.Keys(kit.MDB_HASH, key), mdb.LIST, arg) - }) + m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC)) + m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), kit.SubKey(m.Option(kit.MDB_TOPIC)), mdb.LIST, arg[2:]) }}, mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { - m.Richs(m.Prefix(FAVOR), "", m.Option("topic"), func(key string, value map[string]interface{}) { - m.Cmdy(mdb.MODIFY, m.Prefix(FAVOR), kit.Keys(kit.MDB_HASH, key), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg) - }) + m.Cmdy(mdb.MODIFY, m.Prefix(FAVOR), kit.SubKey(m.Option(kit.MDB_TOPIC)), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg) }}, mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.DELETE, m.Prefix(FAVOR), "", mdb.HASH, "topic", m.Option("topic")) + m.Cmdy(mdb.DELETE, m.Prefix(FAVOR), "", mdb.HASH, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC)) }}, mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.EXPORT, m.Prefix(FAVOR), "", mdb.HASH) @@ -43,42 +41,51 @@ func init() { }}, mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { switch arg[0] { - case "topic": - m.Option(mdb.FIELDS, "time,count,topic") - m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.HASH) + case kit.MDB_TOPIC: + m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), "", mdb.HASH, arg) + default: + m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), kit.SubKey(m.Option(kit.MDB_TOPIC)), mdb.LIST, arg) } }}, + code.INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) { + if len(arg) > 0 && arg[0] == mdb.RENDER { + m.Cmdy(code.INNER, arg[1:]) + return + } + + m.PushPlugin(code.INNER, code.INNER, mdb.RENDER) + m.Push(kit.SSH_ARG, kit.Format([]string{kit.Select("./", m.Option(kit.MDB_PATH)), m.Option(kit.MDB_FILE), m.Option(kit.MDB_LINE)})) + }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if len(arg) > 0 { - m.Option(mdb.FIELDS, kit.Select(m.Conf(m.Prefix(FAVOR), kit.META_FIELD), mdb.DETAIL, len(arg) > 1)) - m.Richs(m.Prefix(FAVOR), "", arg[0], func(key string, value map[string]interface{}) { - m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), kit.Keys(kit.MDB_HASH, key), mdb.LIST, kit.MDB_ID, arg[1:]) - }) + if len(arg) == 0 { + m.Option(mdb.FIELDS, "time,count,topic") + m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.HASH) + m.PushAction(mdb.REMOVE) return } - m.Option(mdb.FIELDS, "time,count,topic") - m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.HASH) - m.PushAction("删除") + + m.Option(mdb.FIELDS, kit.Select(m.Conf(m.Prefix(FAVOR), kit.META_FIELD), mdb.DETAIL, len(arg) > 1)) + m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), kit.SubKey(arg[0]), mdb.LIST, kit.MDB_ID, arg[1:]) + m.PushAction(code.INNER) }}, "/favor": {Name: "/favor", Help: "收藏", Action: map[string]*ice.Action{ - "select": {Name: "select", Help: "主题", Hand: func(m *ice.Message, arg ...string) { - list := []string{} - m.Cmd(m.Prefix(FAVOR)).Table(func(index int, value map[string]string, head []string) { - list = append(list, value["topic"]) - }) - m.Render(ice.RENDER_RESULT, strings.Join(list, "\n")) - }}, - "insert": {Name: "insert", Help: "添加", Hand: func(m *ice.Message, arg ...string) { - m.Cmd(m.Prefix(FAVOR), mdb.INSERT, "topic", m.Option("tab"), - "name", m.Option("note"), "text", m.Option("arg"), "file", m.Option("buf"), "line", m.Option("row"), + mdb.INSERT: {Name: "insert", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(m.Prefix(FAVOR), mdb.INSERT, kit.MDB_TOPIC, m.Option(TAB), + kit.MDB_NAME, m.Option("note"), kit.MDB_TEXT, m.Option(ARG), kit.MDB_FILE, m.Option(BUF), kit.MDB_LINE, m.Option(ROW), ) }}, + mdb.SELECT: {Name: "select", Help: "主题", Hand: func(m *ice.Message, arg ...string) { + list := []string{} + m.Cmd(m.Prefix(FAVOR)).Table(func(index int, value map[string]string, head []string) { + list = append(list, value[kit.MDB_TOPIC]) + }) + m.Echo(strings.Join(list, "\n")) + }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Render(ice.RENDER_RESULT) - m.Cmd(m.Prefix(FAVOR), m.Option("tab")).Table(func(index int, value map[string]string, head []string) { - m.Echo("%v\n", m.Option("tab")).Echo("%v:%v:%v:(%v): %v\n", - value["file"], value["line"], "1", value["name"], value["text"]) + m.Cmd(m.Prefix(FAVOR), m.Option(TAB)).Table(func(index int, value map[string]string, head []string) { + m.Echo("%v\n", m.Option(TAB)).Echo("%v:%v:%v:(%v): %v\n", + value[kit.MDB_FILE], value[kit.MDB_LINE], "1", value[kit.MDB_NAME], value[kit.MDB_TEXT]) }) }}, }, diff --git a/misc/vim/input.go b/misc/vim/input.go index cc0f7766..5356c62c 100644 --- a/misc/vim/input.go +++ b/misc/vim/input.go @@ -19,7 +19,7 @@ func init() { )}, }, Commands: map[string]*ice.Command{ - INPUT: {Name: "sync id=auto auto 导出 导入", Help: "同步流", Action: map[string]*ice.Action{ + INPUT: {Name: "sync id=auto auto export import", Help: "同步流", Action: map[string]*ice.Action{ mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.EXPORT, m.Prefix(INPUT), "", mdb.LIST) }}, @@ -30,9 +30,8 @@ func init() { m.Option(mdb.FIELDS, kit.Select(m.Conf(INPUT, kit.META_FIELD), mdb.DETAIL, len(arg) > 0)) m.Cmdy(mdb.SELECT, m.Prefix(INPUT), "", mdb.LIST, kit.MDB_ID, arg) }}, - "/input": {Name: "/input", Help: "补全", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Render(ice.RENDER_RESULT) + "/input": {Name: "/input", Help: "补全", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if arg[0] = strings.TrimSpace(arg[0]); strings.HasPrefix(arg[0], "ice ") { list := kit.Split(arg[0]) switch list[1] { diff --git a/misc/vim/sess.go b/misc/vim/sess.go index 897ddd09..a66e33d1 100644 --- a/misc/vim/sess.go +++ b/misc/vim/sess.go @@ -8,7 +8,6 @@ import ( "github.com/shylinux/icebergs/base/web" kit "github.com/shylinux/toolkits" - "fmt" "io/ioutil" "strings" ) @@ -19,6 +18,10 @@ const ( SUB = "sub" PWD = "pwd" PID = "pid" + BUF = "buf" + TAB = "tab" + ROW = "row" + COL = "col" ) const SESS = "sess" @@ -27,45 +30,19 @@ func init() { Configs: map[string]*ice.Config{ SESS: {Name: SESS, Help: "会话流", Value: kit.Data( kit.MDB_FIELD, "time,hash,status,username,hostname,pid,pwd", - "contexts", `export ctx_dev={{.Option "httphost"}} ctx_temp=$(mktemp); curl -sL $ctx_dev >$ctx_temp; source $ctx_temp`, )}, }, Commands: map[string]*ice.Command{ - SESS: {Name: "sess hash auto 清理", Help: "会话流", Action: map[string]*ice.Action{ - "contexts": {Name: "contexts", Help: "环境", Hand: func(m *ice.Message, arg ...string) { - u := kit.ParseURL(m.Option(ice.MSG_USERWEB)) - m.Option("httphost", fmt.Sprintf("%s://%s:%s", u.Scheme, strings.Split(u.Host, ":")[0], kit.Select(kit.Select("80", "443", u.Scheme == "https"), strings.Split(u.Host, ":"), 1))) - - if buf, err := kit.Render(m.Conf(m.Prefix(SESS), "meta.contexts"), m); m.Assert(err) { - m.Cmdy("web.wiki.spark", "shell", string(buf)) - } - }}, - mdb.DELETE: {Name: "delete", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.DELETE, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)) - }}, + SESS: {Name: "sess hash auto prunes", Help: "会话流", Action: map[string]*ice.Action{ mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) { + m.Option(mdb.FIELDS, m.Conf(m.Prefix(SESS), kit.META_FIELD)) m.Cmdy(mdb.PRUNES, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, "logout") }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Option(mdb.FIELDS, kit.Select(m.Conf(m.Prefix(SESS), kit.META_FIELD), mdb.DETAIL, len(arg) > 0)) m.Cmdy(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, arg) - m.PushAction("删除") - }}, - "/sess": {Name: "/sess", Help: "会话", Action: map[string]*ice.Action{ - "logout": {Name: "logout", Help: "退出", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.MODIFY, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(SID), kit.MDB_STATUS, "logout") - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Render(ice.RENDER_RESULT) - m.Option(mdb.FIELDS, m.Conf(m.Prefix(SESS), kit.META_FIELD)) - if strings.TrimSpace(m.Option(SID)) == "" { - m.Option(SID, m.Cmdx(mdb.INSERT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, "login", - aaa.USERNAME, m.Option(aaa.USERNAME), tcp.HOSTNAME, m.Option(tcp.HOSTNAME), PID, m.Option(PID), PWD, m.Option(PWD))) - } else { - m.Cmdy(mdb.MODIFY, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(SID), kit.MDB_STATUS, "login") - } - m.Echo(m.Option(SID)) }}, + web.LOGIN: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if f, _, e := m.R.FormFile(SUB); e == nil { defer f.Close() @@ -75,8 +52,8 @@ func init() { } } - m.Option(mdb.FIELDS, m.Conf(m.Prefix(SESS), kit.META_FIELD)) if strings.TrimSpace(m.Option(SID)) != "" { + m.Option(mdb.FIELDS, m.Conf(m.Prefix(SESS), kit.META_FIELD)) msg := m.Cmd(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, strings.TrimSpace(m.Option(SID))) if m.Option(SID, msg.Append(kit.MDB_HASH)) != "" { m.Option(aaa.USERNAME, msg.Append(aaa.USERNAME)) @@ -85,6 +62,19 @@ func init() { } m.Render(ice.RENDER_RESULT) }}, + "/sess": {Name: "/sess", Help: "会话", Action: map[string]*ice.Action{ + "logout": {Name: "logout", Help: "退出", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(mdb.MODIFY, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(SID), kit.MDB_STATUS, "logout") + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if strings.TrimSpace(m.Option(SID)) == "" { + m.Option(SID, m.Cmdx(mdb.INSERT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, "login", + aaa.USERNAME, m.Option(aaa.USERNAME), tcp.HOSTNAME, m.Option(tcp.HOSTNAME), PID, m.Option(PID), PWD, m.Option(PWD))) + } else { + m.Cmdy(mdb.MODIFY, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(SID), kit.MDB_STATUS, "login") + } + m.Echo(m.Option(SID)) + }}, }, }) } diff --git a/misc/vim/sync.go b/misc/vim/sync.go index 92c52344..56a43ff8 100644 --- a/misc/vim/sync.go +++ b/misc/vim/sync.go @@ -3,10 +3,7 @@ package vim import ( ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/mdb" - "github.com/shylinux/icebergs/base/web" kit "github.com/shylinux/toolkits" - - "io/ioutil" ) const SYNC = "sync" @@ -19,15 +16,6 @@ func init() { )}, }, Commands: map[string]*ice.Command{ - web.LOGIN: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if f, _, e := m.R.FormFile("sub"); e == nil { - defer f.Close() - if b, e := ioutil.ReadAll(f); e == nil { - m.Option("sub", string(b)) - } - } - }}, - SYNC: {Name: "sync id=auto auto 导出 导入", Help: "同步流", Action: map[string]*ice.Action{ mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.EXPORT, m.Prefix(SYNC), "", mdb.LIST) @@ -35,23 +23,37 @@ func init() { mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.IMPORT, m.Prefix(SYNC), "", mdb.LIST) }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Option(mdb.FIELDS, kit.Select(m.Conf(SYNC, kit.META_FIELD), mdb.DETAIL, len(arg) > 0)) - if len(arg) > 0 { - m.Option("cache.field", kit.MDB_ID) - m.Option("cache.value", arg[0]) - } else { - if m.Option("_control", "page"); m.Option("cache.limit") == "" { - m.Option("cache.limit", "10") + mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { + switch arg[0] { + case kit.MDB_TOPIC: + m.Cmdy(m.Prefix(FAVOR)).Appendv(ice.MSG_APPEND, kit.MDB_TOPIC, kit.MDB_COUNT, kit.MDB_TIME) } + }}, + FAVOR: {Name: "favor topic type name text", Help: "收藏", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(m.Prefix(FAVOR), mdb.INSERT, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC), + kit.MDB_TYPE, m.Option(kit.MDB_TYPE), kit.MDB_NAME, m.Option(kit.MDB_NAME), kit.MDB_TEXT, m.Option(kit.MDB_TEXT)) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if len(arg) > 0 { + m.Option(mdb.FIELDS, mdb.DETAIL) + m.Option(mdb.CACHE_FILED, kit.MDB_ID) + m.Option(mdb.CACHE_VALUE, arg[0]) + } else { + m.Option(mdb.FIELDS, m.Conf(SYNC, kit.META_FIELD)) + m.Option(ice.MSG_CONTROL, ice.CONTROL_PAGE) + defer m.PushAction(FAVOR) } - m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, m.Option("cache.field"), m.Option("cache.value")) + m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, m.Option(mdb.CACHE_FILED), m.Option(mdb.CACHE_VALUE)) }}, "/sync": {Name: "/sync", Help: "同步", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Render(ice.RENDER_RESULT) - m.Cmd(mdb.INSERT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_TYPE, VIMRC, kit.MDB_NAME, arg[0], kit.MDB_TEXT, kit.Select(m.Option("arg"), m.Option("sub")), - "pwd", m.Option("pwd"), "buf", m.Option("buf"), "row", m.Option("row"), "col", m.Option("col")) + if m.Option(ARG) == "qa" { + m.Cmdy(mdb.MODIFY, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(SID), kit.MDB_STATUS, "logout") + } + + m.Cmd(mdb.INSERT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_TYPE, VIMRC, kit.MDB_NAME, arg[0], + kit.MDB_TEXT, kit.Select(m.Option(ARG), m.Option(SUB)), + PWD, m.Option(PWD), BUF, m.Option(BUF), ROW, m.Option(ROW), COL, m.Option(COL)) }}, }, }) diff --git a/misc/vim/trash.vim b/misc/vim/trash.vim deleted file mode 100644 index 768bd37a..00000000 --- a/misc/vim/trash.vim +++ /dev/null @@ -1,67 +0,0 @@ - -" 自动刷新 -let ShyComeList = {} -fun! ShyCome(buf, row, action, extra) - " 低配命令 - if !exists("appendbufline") - execute a:extra["row"] - - if a:extra["count"] > 0 - execute "+1,+" . a:extra["count"] ."delete" - endif - - let a:extra["count"] = 0 - for line in reverse(split(ShySend("sync", {"cmds": "trans", "arg": getline(".")}), "\n")) - let a:extra["count"] += 1 - call append(".", line) - endfor - return - endif - if a:action == "refresh" - " 清空历史 - if a:extra["count"] > 0 | call deletebufline(a:buf, a:row+1, a:row+a:extra["count"]) | endif - let a:extra["count"] = 0 - endif - " 刷新命令 - for line in reverse(split(ShySend({"cmd": "trans", "arg": getbufline(a:buf, a:row)[0]}), "\n")) - call appendbufline(a:buf, a:row, line) - let a:extra["count"] += 1 - endfor - " 插入表头 - call appendbufline(a:buf, a:row, strftime(" ~~ %Y-%m-%d %H:%M:%S")) - let a:extra["count"] += 1 -endfun -fun! ShyUpdate(timer) - let what = g:ShyComeList[a:timer] - call ShyLog("timer", a:timer, what) - call ShyCome(what["buf"], what["row"], what["action"], what) -endfun -fun! ShyComes(action) - if !exists("b:timer") | let b:timer = -1 | endif - " 清除定时 - if b:timer > 0 | call timer_stop(b:timer) | let b:timer = -2 | return | endif - " 添加定时 - let b:timer = timer_start(1000, funcref('ShyUpdate'), {"repeat": -1}) - let g:ShyComeList[b:timer] = {"buf": bufname("."), "row": line("."), "pre": getline("."), "action": a:action, "count": 0} - call ShyLog("new timer", b:timer) -endfun -fun! ShyCheck(target) - if a:target == "cache" - call ShySync("bufs") - call ShySync("regs") - call ShySync("marks") - call ShySync("tags") - elseif a:target == "fixs" - let l = len(getqflist()) - if l > 0 - execute "copen " . (l > 10? 10: l + 1) - call ShySync("fixs") - else - cclose - end - end -endfun - - -" nnoremap :call ShyCheck("cache") -nnoremap :call ShyComes("refresh") diff --git a/misc/vim/vim.go b/misc/vim/vim.go index 6335c80e..35481a6e 100644 --- a/misc/vim/vim.go +++ b/misc/vim/vim.go @@ -2,40 +2,44 @@ package vim import ( ice "github.com/shylinux/icebergs" + "github.com/shylinux/icebergs/base/gdb" "github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/nfs" "github.com/shylinux/icebergs/base/web" "github.com/shylinux/icebergs/core/code" kit "github.com/shylinux/toolkits" - "os" "path" "strings" ) -const VIM = "vim" +func _vim_pkg(m *ice.Message) string { + return strings.Replace(strings.Replace(kit.TrimExt(m.Conf(VIM, kit.META_SOURCE)), ".", "", -1), "-", "", -1) +} + const VIMRC = "vimrc" +const VIM = "vim" var Index = &ice.Context{Name: VIM, Help: "编辑器", Commands: map[string]*ice.Command{ - VIM: {Name: "vim port=auto path=auto auto 启动 构建 下载", Help: "编辑器", Action: map[string]*ice.Action{ - "download": {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(code.INSTALL, "download", m.Conf(VIM, kit.META_SOURCE)) + VIM: {Name: "vim port=auto path=auto auto start build download", Help: "编辑器", Action: map[string]*ice.Action{ + web.DOWNLOAD: {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(code.INSTALL, web.DOWNLOAD, m.Conf(VIM, kit.META_SOURCE)) }}, - "build": {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(code.INSTALL, "build", strings.Replace(strings.Replace(kit.TrimExt(m.Conf(VIM, kit.META_SOURCE)), ".", "", -1), "-", "", -1)) + gdb.BUILD: {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(code.INSTALL, gdb.BUILD, _vim_pkg(m), m.Confv(VIM, "meta.build")) }}, - "start": {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) { + gdb.START: {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) { m.Optionv("prepare", func(p string) []string { - return []string{} list := kit.Simple(m.Confv(VIM, "meta.start")) for i := 0; i < len(list); i += 2 { - m.Cmd(web.SPIDE, "dev", web.SPIDE_SAVE, path.Join(os.Getenv("HOME"), list[i]), - web.SPIDE_GET, m.Conf(VIM, "meta.remote")+list[i+1]) + m.Cmd(web.SPIDE, web.SPIDE_DEV, web.SPIDE_SAVE, path.Join(p, list[i]), + web.SPIDE_GET, "/share/local/usr/intshell/misc/vim/"+list[i+1]) } + return []string{} return []string{"-T", "screen", "-c", "PlugInstall", "-c", "exit", "-c", "exit"} }) - m.Cmdy(code.INSTALL, "start", strings.Replace(strings.Replace(kit.TrimExt(m.Conf(VIM, kit.META_SOURCE)), ".", "", -1), "-", "", -1), "bin/vim") + m.Cmdy(code.INSTALL, gdb.START, _vim_pkg(m), "bin/vim") // 安装插件 m.Echo("\n") @@ -48,7 +52,7 @@ var Index = &ice.Context{Name: VIM, Help: "编辑器", }}, mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) { if strings.HasPrefix(arg[2], "http") { - m.Cmdy(web.SPIDE, "dev", "raw", "GET", arg[2]+arg[1]) + m.Cmdy(web.SPIDE, web.SPIDE_DEV, web.SPIDE_RAW, web.SPIDE_GET, arg[2]+arg[1]) return } m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1])) @@ -62,17 +66,15 @@ var Index = &ice.Context{Name: VIM, Help: "编辑器", }}, ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Load() - - m.Cmd(mdb.PLUGIN, mdb.CREATE, VIMRC, VIM, c.Cap(ice.CTX_FOLLOW)) - m.Cmd(mdb.RENDER, mdb.CREATE, VIMRC, VIM, c.Cap(ice.CTX_FOLLOW)) - m.Cmd(mdb.PLUGIN, mdb.CREATE, VIM, VIM, c.Cap(ice.CTX_FOLLOW)) - m.Cmd(mdb.RENDER, mdb.CREATE, VIM, VIM, c.Cap(ice.CTX_FOLLOW)) + m.Cmd(mdb.PLUGIN, mdb.CREATE, VIM, m.Prefix(VIM)) + m.Cmd(mdb.RENDER, mdb.CREATE, VIM, m.Prefix(VIM)) + m.Cmd(mdb.PLUGIN, mdb.CREATE, VIMRC, m.Prefix(VIM)) + m.Cmd(mdb.RENDER, mdb.CREATE, VIMRC, m.Prefix(VIM)) }}, }, Configs: map[string]*ice.Config{ VIM: {Name: "vim", Help: "编辑器", Value: kit.Data( "source", "ftp://ftp.vim.org/pub/vim/unix/vim-8.1.tar.bz2", - "remote", "https://raw.githubusercontent.com/shylinux/contexts/master/etc/conf/", "build", []interface{}{ "--enable-multibyte=yes", "--enable-pythoninterp=yes", @@ -82,13 +84,13 @@ var Index = &ice.Context{Name: VIM, Help: "编辑器", "start", []interface{}{ ".vimrc", "vimrc", ".vim/autoload/plug.vim", "plug.vim", + ".vim/autoload/auto.vim", "auto.vim", ".vim/syntax/javascript.vim", "javascript.vim", ".vim/syntax/shy.vim", "shy.vim", + ".vim/syntax/shy.vim", "sh.vim", ".vim/syntax/go.vim", "go.vim", }, - "history", "vim.history", - "plug", kit.Dict( "split", kit.Dict( "space", " \t", diff --git a/misc/vim/vim.shy b/misc/vim/vim.shy index 14c0cd23..8431d66d 100644 --- a/misc/vim/vim.shy +++ b/misc/vim/vim.shy @@ -8,21 +8,24 @@ premenu chapter "源码" field "安装" web.code.vim.vim -field "源码" web.code.inner args `[ usr/install/vim81/ src/main.c 110 ]` -field "脚本" web.code.inner args `[ usr/install/vim81/install/share/vim/vim81/ filetype.vim ]` -field "文档" web.code.inner args `[ usr/install/vim81/install/share/vim/vim81/doc/ help.txt ]` +field "源码" web.code.inner args `usr/install/vim81/ src/main.c 110` +field "脚本" web.code.inner args `usr/install/vim81/_install/share/vim/vim81/ filetype.vim` +field "文档" web.code.inner args `usr/install/vim81/_install/share/vim/vim81/doc/ help.txt` section "构建" spark shell ` +yum install -y wget make gcc + wget ftp://ftp.vim.org/pub/vim/unix/vim-8.1.tar.bz2 tar xvf vim-8.1.tar.bz2 && cd vim81 -./configure --prefix=$PWD/install --enable-multibyte=yes + +./configure --prefix=$PWD/_install --enable-multibyte=yes make -j4 && make install ` section "启动" spark shell ` -cd ./install +cd ./_install ./bin/vim ` diff --git a/misc/zsh/bash.shy b/misc/zsh/bash.shy index 29764bc4..1e105420 100644 --- a/misc/zsh/bash.shy +++ b/misc/zsh/bash.shy @@ -30,6 +30,7 @@ cd ./_install chapter "应用" web.code.zsh.sess contexts +field "文件夹" web.chat.files field "会话流" web.code.zsh.sess field "回收站" web.code.zsh.trash field "收藏夹" web.code.zsh.favor diff --git a/misc/zsh/download.go b/misc/zsh/download.go index a10e7ff8..9424b5e8 100644 --- a/misc/zsh/download.go +++ b/misc/zsh/download.go @@ -8,28 +8,23 @@ import ( func init() { Index.Merge(&ice.Context{ - Configs: map[string]*ice.Config{}, Commands: map[string]*ice.Command{ "/download": {Name: "/download", Help: "下载", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) == 0 || arg[0] == "" { - // 文件列表 - m.Cmdy(web.SPACE, m.Option("you"), web.STORY).Table() + m.Cmdy("web.chat.files").Table() return } - // 查找文件 - if m.Cmdy(web.STORY, "index", arg[0]).Append("text") == "" && m.Option("you") != "" { - // 上发文件 - m.Cmd(web.SPACE, m.Option("you"), web.STORY, "push", arg[0], "dev", arg[0]) - m.Cmdy(web.STORY, "index", arg[0]) - } - // 下载文件 + m.Cmdy(web.CACHE, m.Cmd("web.chat.files", arg[0]).Append("data")) m.Render(kit.Select(ice.RENDER_DOWNLOAD, ice.RENDER_RESULT, m.Append("file") == ""), m.Append("text")) }}, "/upload": {Name: "/upload", Help: "上传", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { // 缓存文件 - msg := m.Cmd(web.STORY, "upload") + msg := m.Cmd(web.CACHE, web.UPLOAD) + m.Option(ice.MSG_UPLOAD, msg.Append(kit.MDB_HASH), msg.Append(kit.MDB_NAME)) + m.Cmd("web.chat.files", "upload") + m.Echo("data: %s\n", msg.Append("data")) m.Echo("time: %s\n", msg.Append("time")) m.Echo("type: %s\n", msg.Append("type")) diff --git a/misc/zsh/favor.go b/misc/zsh/favor.go index c1ecf2c8..3389c4b7 100644 --- a/misc/zsh/favor.go +++ b/misc/zsh/favor.go @@ -2,6 +2,7 @@ package zsh import ( ice "github.com/shylinux/icebergs" + "github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/mdb" kit "github.com/shylinux/toolkits" ) @@ -16,7 +17,7 @@ func init() { )}, }, Commands: map[string]*ice.Command{ - FAVOR: {Name: "favor topic id auto 创建 导出 导入", Help: "收藏夹", Action: map[string]*ice.Action{ + FAVOR: {Name: "favor topic id auto create 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, m.Prefix(FAVOR), "", mdb.HASH, arg) }}, @@ -44,6 +45,15 @@ func init() { m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), kit.SubKey(m.Option(kit.MDB_TOPIC)), mdb.LIST, arg) } }}, + cli.SYSTEM: {Name: "system", Help: "命令", Hand: func(m *ice.Message, arg ...string) { + if len(arg) > 0 && arg[0] == mdb.RENDER { + m.Cmdy(cli.SYSTEM, arg[1:]) + return + } + + m.PushPlugin(cli.SYSTEM, cli.SYSTEM, mdb.RENDER) + m.Push(kit.SSH_ARG, kit.Format([]string{m.Option(kit.MDB_TEXT)})) + }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) == 0 { m.Option(mdb.FIELDS, "time,count,topic") @@ -52,12 +62,9 @@ func init() { return } - if len(arg) > 0 { - m.Option(mdb.FIELDS, kit.Select(m.Conf(m.Prefix(FAVOR), kit.META_FIELD), mdb.DETAIL, len(arg) > 1)) - m.Richs(m.Prefix(FAVOR), "", arg[0], func(key string, value map[string]interface{}) { - m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), kit.Keys(kit.MDB_HASH, key), mdb.LIST, kit.MDB_ID, arg[1:]) - }) - } + m.Option(mdb.FIELDS, kit.Select(m.Conf(m.Prefix(FAVOR), kit.META_FIELD), mdb.DETAIL, len(arg) > 1)) + m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), kit.SubKey(arg[0]), mdb.LIST, kit.MDB_ID, arg[1:]) + m.PushAction(cli.SYSTEM) }}, "/favor": {Name: "/favor", Help: "收藏", Action: map[string]*ice.Action{ diff --git a/misc/zsh/input.go b/misc/zsh/input.go index 008f9dcd..004e58f7 100644 --- a/misc/zsh/input.go +++ b/misc/zsh/input.go @@ -13,8 +13,8 @@ func init() { Index.Merge(&ice.Context{ Configs: map[string]*ice.Config{}, Commands: map[string]*ice.Command{ - "/qrcode": {Name: "/qrcode", Help: "同步", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Cmdy(cli.PYTHON, "qrcode", "hi") + "/qrcode": {Name: "/qrcode", Help: "二维码", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Cmdy(cli.SYSTEM, cli.QRCODE, kit.MDB_TEXT, m.Option(kit.MDB_TEXT)) }}, "/input": {Name: "/input", Help: "补全", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { list := kit.Split(m.Option("line"), m.Option("break")) diff --git a/misc/zsh/sync.go b/misc/zsh/sync.go index 33a3fcec..127b14cf 100644 --- a/misc/zsh/sync.go +++ b/misc/zsh/sync.go @@ -30,33 +30,31 @@ func init() { mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.IMPORT, m.Prefix(SYNC), "", mdb.LIST) }}, - FAVOR: {Name: "favor topic type name text", Help: "收藏", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(m.Prefix(FAVOR), mdb.INSERT, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC), - kit.MDB_TYPE, m.Option(kit.MDB_TYPE), kit.MDB_NAME, m.Option(kit.MDB_NAME), kit.MDB_TEXT, m.Option(kit.MDB_TEXT)) - }}, mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { switch arg[0] { case kit.MDB_TOPIC: m.Cmdy(m.Prefix(FAVOR)).Appendv(ice.MSG_APPEND, kit.MDB_TOPIC, kit.MDB_COUNT, kit.MDB_TIME) } }}, + FAVOR: {Name: "favor topic type name text", Help: "收藏", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(m.Prefix(FAVOR), mdb.INSERT, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC), + kit.MDB_TYPE, m.Option(kit.MDB_TYPE), kit.MDB_NAME, m.Option(kit.MDB_NAME), kit.MDB_TEXT, m.Option(kit.MDB_TEXT)) + }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Option(mdb.FIELDS, kit.Select(m.Conf(SYNC, kit.META_FIELD), mdb.DETAIL, len(arg) > 0)) if len(arg) > 0 { + m.Option(mdb.FIELDS, mdb.DETAIL) m.Option(mdb.CACHE_FILED, kit.MDB_ID) m.Option(mdb.CACHE_VALUE, arg[0]) } else { + m.Option(mdb.FIELDS, m.Conf(SYNC, kit.META_FIELD)) + m.Option(ice.MSG_CONTROL, ice.CONTROL_PAGE) defer m.PushAction(FAVOR) - if m.Option(ice.MSG_CONTROL, "_page"); m.Option(mdb.CACHE_LIMIT) == "" { - m.Option(mdb.CACHE_LIMIT, "10") - } } m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, m.Option(mdb.CACHE_FILED), m.Option(mdb.CACHE_VALUE)) }}, - "/sync": {Name: "/sync", Help: "同步", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - switch arg[0] { - case "history": + "/sync": {Name: "/sync", Help: "同步", Action: map[string]*ice.Action{ + "history": {Name: "history", Help: "历史", Hand: func(m *ice.Message, arg ...string) { ls := strings.SplitN(strings.TrimSpace(m.Option(ARG)), " ", 4) if text := strings.TrimSpace(strings.Join(ls[3:], " ")); text != "" { m.Cmd(mdb.INSERT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_TYPE, SHELL, kit.MDB_NAME, ls[0], @@ -64,10 +62,10 @@ func init() { kit.MDB_TEXT, text, PWD, m.Option(PWD), kit.MDB_TIME, ls[1]+" "+ls[2]) } - default: - m.Cmd(mdb.INSERT, m.Prefix(SYNC), "", mdb.HASH, kit.MDB_TYPE, SHELL, kit.MDB_NAME, arg[0], - kit.MDB_TEXT, m.Option(SUB), PWD, m.Option(PWD)) - } + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Cmd(mdb.INSERT, m.Prefix(SYNC), "", mdb.HASH, kit.MDB_TYPE, SHELL, kit.MDB_NAME, arg[0], + kit.MDB_TEXT, m.Option(SUB), PWD, m.Option(PWD)) }}, }, }) diff --git a/misc/zsh/trash.go b/misc/zsh/trash.go index 43355d73..221f7573 100644 --- a/misc/zsh/trash.go +++ b/misc/zsh/trash.go @@ -5,6 +5,7 @@ import ( "github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/nfs" + "github.com/shylinux/icebergs/base/tcp" kit "github.com/shylinux/toolkits" "path" @@ -15,12 +16,12 @@ const TRASH = "trash" func init() { Index.Merge(&ice.Context{ Configs: map[string]*ice.Config{ - TRASH: {Name: TRASH, Help: "收藏夹", Value: kit.Data( + TRASH: {Name: TRASH, Help: "回收站", Value: kit.Data( kit.MDB_FIELD, "time,hash,hostname,size,from,to", )}, }, Commands: map[string]*ice.Command{ - TRASH: {Name: "TRASH hash path auto 清理", Help: "收藏夹", Action: map[string]*ice.Action{ + TRASH: {Name: "TRASH hash path auto prunes", Help: "回收站", Action: map[string]*ice.Action{ mdb.INSERT: {Name: "insert from= to=", Help: "添加", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.INSERT, m.Prefix(TRASH), "", mdb.HASH, "from", m.Option("from"), "to", m.Option("to")) }}, @@ -28,12 +29,12 @@ func init() { m.Cmdy(cli.SYSTEM, "rm", "-rf", m.Option("to")) m.Cmdy(mdb.DELETE, m.Prefix(TRASH), "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)) }}, - mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) { - }}, "reback": {Name: "reback", Help: "恢复", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(cli.SYSTEM, "mv", m.Option("to"), m.Option("from")) m.Cmdy(mdb.DELETE, m.Prefix(TRASH), "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)) }}, + mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) { + }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) > 0 { m.Cmd(mdb.SELECT, m.Prefix(TRASH), "", mdb.HASH, kit.MDB_HASH, arg).Table(func(index int, value map[string]string, head []string) { @@ -43,15 +44,15 @@ func init() { } m.Option(mdb.FIELDS, kit.Select(m.Conf(m.Prefix(TRASH), kit.META_FIELD), mdb.DETAIL, len(arg) > 0)) m.Cmdy(mdb.SELECT, m.Prefix(TRASH), "", mdb.HASH, kit.MDB_HASH, arg) - m.PushAction("恢复", "删除") + m.PushAction("reback", mdb.REMOVE) }}, "/trash": {Name: "/trash", Help: "回收", Action: map[string]*ice.Action{ mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Cmdy(mdb.INSERT, m.Prefix(TRASH), "", mdb.HASH, "hostname", m.Option("hostname"), - "size", m.Option("size"), "from", m.Option("from"), "to", m.Option("to")) + m.Cmdy(mdb.INSERT, m.Prefix(TRASH), "", mdb.HASH, tcp.HOSTNAME, m.Option(tcp.HOSTNAME), + kit.MDB_SIZE, m.Option(kit.MDB_SIZE), "from", m.Option("from"), "to", m.Option("to")) }}, }, }) diff --git a/misc/zsh/trash.sh b/misc/zsh/trash.sh deleted file mode 100644 index eeb60b76..00000000 --- a/misc/zsh/trash.sh +++ /dev/null @@ -1,213 +0,0 @@ -#!/bin/sh - -# 连接配置 -if [ "${ctx_dev}" = "" ] || [ "${ctx_dev}" = "-" ]; then - ctx_dev="http://localhost:9020" -fi -ctx_sid=${ctx_sid:=""} -ctx_share=${ctx_share:=""} -ctx_sh=`ps|grep $$|grep -v grep` - -# 请求配置 -ctx_head=${ctx_head:="Content-Type: application/json"} -ctx_curl=${ctx_curl:="curl"} -ctx_url=$ctx_dev"/code/zsh/" -ctx_cmd=${ctx_cmd:=""} - -# 输出配置 -ctx_silent=${ctx_silent:=""} -ctx_err=${ctx_err:="/dev/null"} -ctx_welcome=${ctx_welcome:="^_^ \033[32mWelcome to Context world\033[0m ^_^"} -ctx_goodbye=${ctx_goodbye:="v_v \033[31mGoodbye to Context world\033[0m v_v"} - -# 输出信息 -ShyRight() { - [ "$1" = "" ] && return 1 - [ "$1" = "0" ] && return 1 - [ "$1" = "false" ] && return 1 - return 0 -} -ShyEcho() { - ShyRight "$ctx_silent" || echo "$@" -} -ShyLog() { - echo "$@" > $ctx_err -} - -# 发送数据 -ShyWord() { - echo "$*"|sed "s/\ /%20/g"|sed "s/|/%7C/g"|sed "s/\;/%3B/g"|sed "s/\[/%5B/g"|sed "s/\]/%5D/g" -} -ShyLine() { - echo "$*"|sed -e 's/\"/\\\"/g' -e 's/\n/\\n/g' -} -ShyJSON() { - [ $# -eq 1 ] && echo \"`ShyLine "$1"`\" && return - echo -n "{" - while [ $# -gt 1 ]; do - echo -n \"`ShyLine "$1"`\"\:\"`ShyLine "$2"`\" - shift 2 && [ $# -gt 1 ] && echo -n "," - done - echo -n "}" -} -ShyPost() { - ctx_cmd="$1" && shift - case $ctx_sh in - *zsh) - ShyJSON SHELL "${SHELL:=bash}" pwd "${PWD:=/root}" sid "${ctx_sid:=0}" cmds "$@"|read data - ;; - *) - local data=`ShyJSON SHELL "${SHELL:=bash}" pwd "${PWD:=/root}" sid "${ctx_sid:=0}" cmds "$@"` - ;; - esac - echo $data > $ctx_err - ${ctx_curl} -s "${ctx_url}${ctx_cmd}" -H "${ctx_head}" -d "${data}" -} - -# 终端登录 -ShyHelp() { - ShyPost help "$@" -} -ShyLogin() { - HOST=`hostname` ctx_sid=`ShyPost login "" share "${ctx_share}" pid "$$" pane "${TMUX_PANE}" hostname "${HOST}" username "${USER}"` - echo "${ctx_welcome}" - echo "${ctx_dev} " - echo -n "sid: ${ctx_sid} " - echo "begin: ${ctx_begin} " - export ctx_sid -} -ShyLogout() { - ShySync history - echo ${ctx_goodbye} && [ "$ctx_sid" != "" ] && ShyPost logout -} - -# 发送文件 -ShySend() { - local TEMP=`mktemp /tmp/tmp.XXXXXX` && "$@" > $TEMP - ShyRight "$ctx_silent" || cat $TEMP - ${ctx_curl} -s "${ctx_url}sync" -F "cmds=$1" -F "cmds=$*" -F "sub=@$TEMP" \ - -F "SHELL=${SHELL}" -F "pwd=${PWD}" -F "sid=${ctx_sid}" -} -ShyUpload() { - ${ctx_curl} -s "${ctx_url}upload" -F "upload=@$1" \ - -F "SHELL=${SHELL}" -F "pwd=${PWD}" -F "sid=${ctx_sid}" -} -ShyDownload() { - ${ctx_curl} -s "${ctx_url}download" -F "cmds=$1" \ - -F "SHELL=${SHELL}" -F "pwd=${PWD}" -F "sid=${ctx_sid}" -} -ShyInstall() { - case "$1" in - "vim") - # git vim - curl -fLo ~/.vimrc https://raw.githubusercontent.com/shylinux/contexts/master/etc/conf/vimrc - curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim - vim -c PlugInstall - ;; - *) - ;; - esac -} -ShyUpgrade() { - file=auto.sh && [ "$1" != "" ] && file=$1 - ${ctx_curl} -s $ctx_dev/publish/$file > $file && source auto.sh -} - -ShyRelay() { - which=relay && [ "$1" != "" ] && which=$1 && shift - favor=tmux.auto && [ "$1" != "" ] && favor=$1 && shift - step=before arg="" && for cmd in "$@"; do - [ "$cmd" = after ] && step=after && continue - arg="$arg&$step="`ShyWord $cmd` - done - ${ctx_curl} -s "$ctx_dev/code/tmux/favor?relay=$which&cmds=$favor&$arg" & -} -ShyLocal() { - which=alpine && [ "$1" != "" ] && which=$1 && shift - favor=tmux.auto && [ "$1" != "" ] && favor=$1 && shift - step=before arg="" && for cmd in "$@"; do - [ "$cmd" = after ] && step=after && continue - arg="$arg&$step="`ShyWord $cmd` - done - ${ctx_curl} -s "$ctx_dev/code/tmux/favor?local=$which&cmds=$favor&$arg" & -} -ShyFavor() { - cmd=$1; [ "$READLINE_LINE" != "" ] && set $READLINE_LINE && READLINE_LINE="" - if [ "$cmd" = "sh" ] ; then - # 查看收藏 - ctx_word="sh" - shift && [ "$1" != "" ] && ctx_tab="$1" - shift && ctx_note="$1" - else - # 添加收藏 - [ "$1" != "" ] && ctx_word="$*" || ctx_word=`history|tail -n1|head -n1|sed -e 's/^[\ 0-9]*//g'` - fi - ShyPost favor "${ctx_word}" tab "${ctx_tab}" note "${ctx_note}" -} -ShyInput() { - if [ "$1" = "line" ] ; then - READLINE_LINE=`ShyPost input "$1" line "$READLINE_LINE" point "$READLINE_POINT"` - else - COMPREPLY=(`ShyPost input "$COMP_WORDS" line "$COMP_LINE" index "$COMP_CWORD" break "$COMP_WORDBREAKS"`) - fi -} -# 同步数据 -ShySync() { - case "$1" in - "base") - ShySync df &>/dev/null - ShySync ps &>/dev/null - ShySync env &>/dev/null - ShySync free &>/dev/null - ShySync history - ;; - "history") - ctx_end=`history|tail -n1|awk '{print $1}'` - ctx_begin=${ctx_begin:=$ctx_end} - ctx_count=`expr $ctx_end - $ctx_begin` - ShyEcho "sync $ctx_begin-$ctx_end count $ctx_count to $ctx_dev" - HISTTIMEFORMAT="%F %T " history|tail -n $ctx_count |while read line; do - ShyPost sync history arg "$line" >/dev/null - done - ctx_begin=$ctx_end - ;; - ps) ShySend ps -ef ;; - *) ShySend "$@" - esac -} -ShyInit() { - [ "$ctx_begin" = "" ] && ctx_begin=`history|tail -n1|awk '{print $1}'` - - case "${SHELL##*/}" in - "zsh") PROMPT='%![%*]%c$ ' ;; - *) PS1="\!-$$-\u@\h[\t]\W\$ " ;; - esac - - if bind &>/dev/null; then - # bash - bind -x '"\C-G\C-R":ShySync base' - bind -x '"\C-G\C-G":ShySync history' - # bind -x '"\C-P":history-search-backward' - # bind -x '"\C-N":history-search-forward' - - # bind 'TAB:complete' - bind 'TAB:menu-complete' - complete -F ShyInput word - bind -x '"\C-K":ShyInput line' - bind -x '"\C-G\C-F":ShyFavor' - bind -x '"\C-GF":ShyFavor sh' - bind -x '"\C-Gf":ShyFavor sh' - - elif bindkey &>/dev/null; then - # zsh - setopt nosharehistory - bindkey -s '\C-G\C-R' 'ShySync base\n' - bindkey -s '\C-G\C-G' 'ShySync history\n' - fi - - echo "url: ${ctx_url}" - echo -n "pid: $$" - echo -n "begin: ${ctx_begin}" - echo -n "share: ${ctx_share}" - echo "pane: $TMUX_PANE" -}