From d98d392a61c376bc4e289f932f7a7c9d2706574c Mon Sep 17 00:00:00 2001 From: harveyshao Date: Mon, 12 Dec 2022 19:42:06 +0800 Subject: [PATCH] opt vim --- base/ctx/command.go | 3 + base/ctx/process.go | 2 +- base/mdb/zone.go | 4 +- base/nfs/tar.go | 4 + base/web/serve.go | 1 + core/chat/iframe.go | 2 +- core/chat/location.go | 2 +- core/code/xterm.go | 2 +- misc/bash/favor.go | 4 +- misc/bash/sess.go | 4 +- misc/bash/sync.go | 4 +- misc/git/repos.go | 2 +- misc/misc.shy | 16 +-- misc/vim/favor.go | 41 ++++--- misc/vim/input.go | 53 +++++---- misc/vim/sess.go | 52 +-------- misc/vim/sync.go | 40 +++---- misc/vim/tags.go | 250 ++++++++++++++++++------------------------ misc/vim/vim.go | 10 +- misc/vim/vimrc.go | 41 +------ 20 files changed, 214 insertions(+), 323 deletions(-) diff --git a/base/ctx/command.go b/base/ctx/command.go index 8e32fba1..abd11ef2 100644 --- a/base/ctx/command.go +++ b/base/ctx/command.go @@ -205,3 +205,6 @@ func TravelCmd(m *ice.Message, cb func(key, file, line string)) *ice.Message { }) return m } +func CmdList(m *ice.Message) *ice.Message { + return m.Cmdy(COMMAND, mdb.SEARCH, COMMAND, ice.OptionFields(INDEX)) +} diff --git a/base/ctx/process.go b/base/ctx/process.go index 43824fc1..e6aa7edd 100644 --- a/base/ctx/process.go +++ b/base/ctx/process.go @@ -46,7 +46,7 @@ func ProcessFloat(m *ice.Message, arg ...string) { m.Cmdy(COMMAND, arg[0]) } func ProcessField(m *ice.Message, cmd string, args []string, arg ...string) { - if cmd = kit.Select(m.PrefixKey(), cmd); len(arg) == 0 || arg[0] != ice.RUN { + if cmd = kit.Select(m.ActionKey(), cmd); len(arg) == 0 || arg[0] != ice.RUN { m.Option("_index", m.PrefixKey()) if m.Cmdy(COMMAND, cmd).ProcessField(ACTION, m.ActionKey(), ice.RUN); len(args) > 0 { m.Push(ARGS, kit.Format(args)) diff --git a/base/mdb/zone.go b/base/mdb/zone.go index 8e97d873..68577b53 100644 --- a/base/mdb/zone.go +++ b/base/mdb/zone.go @@ -176,7 +176,9 @@ func ZoneRemove(m *ice.Message, arg ...Any) { m.Cmdy(DELETE, m.PrefixKey(), "", HASH, arg) } func ZoneInsert(m *ice.Message, arg ...Any) { - if args := kit.Simple(arg...); args[0] == ZoneKey(m) { + if args := kit.Simple(arg...); len(args) == 0 { + m.Cmdy(INSERT, m.PrefixKey(), "", ZONE, m.Option(ZoneShort(m)), m.OptionSimple(ZoneField(m))) + } else if args[0] == ZoneKey(m) { m.Cmdy(INSERT, m.PrefixKey(), "", ZONE, args[1:]) } else { m.Cmdy(INSERT, m.PrefixKey(), "", ZONE, arg) diff --git a/base/nfs/tar.go b/base/nfs/tar.go index 7ccd89b1..e7e2cd1f 100644 --- a/base/nfs/tar.go +++ b/base/nfs/tar.go @@ -42,6 +42,10 @@ func _tar_list(m *ice.Message, p string, cb func(*tar.Header, *tar.Reader, int)) if m.Warn(e) { break } + if h.Size == 0 { + i-- + continue + } cb(h, r, i) } m.StatusTimeCount(mdb.TOTAL, i) diff --git a/base/web/serve.go b/base/web/serve.go index 403ec082..8a5b6457 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -75,6 +75,7 @@ func _serve_handle(key string, cmd *ice.Command, m *ice.Message, w http.Response gdb.Event(m, SERVE_PARSE, strings.Split(strings.TrimPrefix(u.Path, ice.PS), ice.PS)) kit.Fetch(u.Query(), func(k string, v []string) { m.Logs("Refer", k, v).Optionv(k, v) }) } + m.Option(ice.MSG_USERUA, r.Header.Get(UserAgent)) for k, v := range kit.ParseQuery(r.URL.RawQuery) { kit.If(m.IsCliUA(), func() { v = kit.Simple(v, func(v string) (string, error) { return url.QueryUnescape(v) }) }) m.Optionv(k, v) diff --git a/core/chat/iframe.go b/core/chat/iframe.go index 6f880e04..4670b134 100644 --- a/core/chat/iframe.go +++ b/core/chat/iframe.go @@ -43,7 +43,7 @@ func init() { case web.OPEN: ctx.ProcessOpen(m, m.Option(mdb.TEXT)) default: - ctx.ProcessField(m, "", []string{m.Option(mdb.TEXT)}, arg...) + ctx.ProcessField(m, m.PrefixKey(), []string{m.Option(mdb.TEXT)}, arg...) } }}, mdb.CREATE: {Hand: func(m *ice.Message, arg ...string) { diff --git a/core/chat/location.go b/core/chat/location.go index b69e08de..9a364f3f 100644 --- a/core/chat/location.go +++ b/core/chat/location.go @@ -48,7 +48,7 @@ func init() { if m.Option(mdb.TYPE) != LOCATION { return } - ctx.ProcessField(m, "", []string{m.Option(mdb.TEXT)}, arg...) + ctx.ProcessField(m, m.PrefixKey(), []string{m.Option(mdb.TEXT)}, arg...) }}, FAVOR_TABLES: {Hand: func(m *ice.Message, arg ...string) { switch arg[1] { diff --git a/core/code/xterm.go b/core/code/xterm.go index d39f2fcb..c60cbb63 100644 --- a/core/code/xterm.go +++ b/core/code/xterm.go @@ -70,7 +70,7 @@ func init() { if len(arg) == 0 || arg[0] != ice.RUN { arg = []string{m.Cmdx("", mdb.CREATE, arg)} } - ctx.ProcessField(m, "", arg, arg...) + ctx.ProcessField(m, m.PrefixKey(), arg, arg...) }}, mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { switch mdb.HashInputs(m, arg).Cmdy(FAVOR, "_system_term", ice.OptionFields(arg[0])).Cut(arg[0]); arg[0] { diff --git a/misc/bash/favor.go b/misc/bash/favor.go index 39b73adb..341ea4d3 100644 --- a/misc/bash/favor.go +++ b/misc/bash/favor.go @@ -21,9 +21,9 @@ func init() { if msg := mdb.ZoneSelect(m.Spawn(), m.Option(mdb.ZONE), m.Option(mdb.ID)); nfs.ExistsFile(m, msg.Append(cli.PWD)) { m.Option(cli.CMD_DIR, msg.Append(cli.PWD)) } - ctx.ProcessField(m, cli.SYSTEM, nil, arg...) + ctx.ProcessField(m, "", nil, arg...) } else { - ctx.ProcessField(m, cli.SYSTEM, kit.Split(m.Option(mdb.TEXT))) + ctx.ProcessField(m, "", kit.Split(m.Option(mdb.TEXT))) } }}, web.DOWNLOAD: {Hand: func(m *ice.Message, arg ...string) { web.RenderCache(m, m.Option(mdb.TEXT)) }}, diff --git a/misc/bash/sess.go b/misc/bash/sess.go index a0221ca2..c5254922 100644 --- a/misc/bash/sess.go +++ b/misc/bash/sess.go @@ -31,7 +31,7 @@ func init() { } } switch m.RenderResult(); arg[0] { - case web.P(cli.QRCODE), web.PP(SESS): + case web.P(cli.QRCODE), web.P("input"), web.PP(SESS): return } if m.Warn(m.Option(SID, strings.TrimSpace(m.Option(SID))) == "", ice.ErrNotLogin, arg) { @@ -43,7 +43,7 @@ func init() { } }}, web.P(cli.QRCODE): {Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(cli.QRCODE, m.Option(mdb.TEXT), m.Option(cli.FG), m.Option(cli.BG)) + m.Cmdy(cli.QRCODE, tcp.PublishLocalhost(m, m.Option(mdb.TEXT)), m.Option(cli.FG), m.Option(cli.BG)) }}, web.PP(SESS): {Actions: ice.Actions{ aaa.LOGOUT: {Hand: func(m *ice.Message, arg ...string) { diff --git a/misc/bash/sync.go b/misc/bash/sync.go index d8456c8e..fa9e0dc8 100644 --- a/misc/bash/sync.go +++ b/misc/bash/sync.go @@ -29,9 +29,9 @@ func init() { if msg := mdb.ListSelect(m.Spawn(), m.Option(mdb.ID)); nfs.ExistsFile(m, msg.Append(cli.PWD)) { m.Option(cli.CMD_DIR, msg.Append(cli.PWD)) } - ctx.ProcessField(m, cli.SYSTEM, nil, arg...) + ctx.ProcessField(m, "", nil, arg...) } else { - ctx.ProcessField(m, cli.SYSTEM, kit.Split(m.Option(mdb.TEXT))) + ctx.ProcessField(m, "", kit.Split(m.Option(mdb.TEXT))) } }}, FAVOR: {Name: "favor zone=demo type name text pwd", Help: "收藏", Hand: func(m *ice.Message, arg ...string) { diff --git a/misc/git/repos.go b/misc/git/repos.go index 77b43f6e..d1c7f299 100644 --- a/misc/git/repos.go +++ b/misc/git/repos.go @@ -223,7 +223,7 @@ func init() { } return } - ctx.ProcessField(m, web.CODE_INNER, arg, arg...) + ctx.ProcessField(m, "", arg, arg...) }}, }, mdb.HashAction(mdb.SHORT, REPOS, mdb.FIELD, "time,repos,branch,commit,origin"), mdb.ClearHashOnExitAction()), Hand: func(m *ice.Message, arg ...string) { if len(arg) == 0 || arg[0] == "" { diff --git a/misc/misc.shy b/misc/misc.shy index e2810ef7..1498bef4 100644 --- a/misc/misc.shy +++ b/misc/misc.shy @@ -1,18 +1,18 @@ -git ssh +git input alpha tmux - -vim bash +vim + coder java node -mp -wx -lark -wework -chrome webview +chrome +wework +lark +wx +mp diff --git a/misc/vim/favor.go b/misc/vim/favor.go index 5bba95a4..412fae6e 100644 --- a/misc/vim/favor.go +++ b/misc/vim/favor.go @@ -8,6 +8,7 @@ import ( "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" + "shylinux.com/x/icebergs/base/web" "shylinux.com/x/icebergs/core/code" ) @@ -15,32 +16,30 @@ const FAVOR = "favor" func init() { Index.MergeCommands(ice.Commands{ - "/favor": {Name: "/favor", Help: "收藏", Actions: ice.Actions{ - mdb.SELECT: {Name: "select", Help: "主题", Hand: func(m *ice.Message, arg ...string) { - m.Cmd(FAVOR, func(value ice.Maps) { m.Echo(value[mdb.ZONE]).Echo(ice.NL) }) + FAVOR: {Name: "favor zone id auto insert", Help: "收藏夹", Actions: ice.MergeActions(ice.Actions{ + mdb.INSERT: {Name: "insert zone=数据结构 type name=hi text=hello file line"}, + code.INNER: {Help: "源码", Hand: func(m *ice.Message, arg ...string) { + if len(arg) > 0 && arg[0] == ice.RUN { + ctx.ProcessField(m, "", nil, arg...) + } else { + p := path.Join(m.Option(cli.PWD), m.Option(nfs.FILE)) + ctx.ProcessField(m, "", []string{path.Dir(p) + ice.PS, path.Base(p), m.Option(nfs.LINE)}) + } }}, - mdb.INSERT: {Name: "insert", Help: "添加", Hand: func(m *ice.Message, arg ...string) { - m.Cmd(FAVOR, mdb.INSERT) + }, mdb.ZoneAction(mdb.FIELD, "time,id,type,name,text,file,line,pwd")), Hand: func(m *ice.Message, arg ...string) { + if mdb.ZoneSelect(m, arg...).PushAction(code.INNER); len(arg) == 0 { + m.Action(mdb.EXPORT, mdb.IMPORT) + } + }}, + web.PP(FAVOR): {Actions: ice.Actions{ + mdb.INSERT: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(FAVOR, mdb.INSERT) }}, + mdb.SELECT: {Hand: func(m *ice.Message, arg ...string) { + m.Cmd(FAVOR, func(value ice.Maps) { m.Echo(value[mdb.ZONE]).Echo(ice.NL) }) }}, }, Hand: func(m *ice.Message, arg ...string) { m.Cmd(FAVOR, m.Option(mdb.ZONE), func(value ice.Maps) { - m.Echo("%v\n", m.Option(mdb.ZONE)).Echo("%v:%v:%v:(%v): %v\n", - value[nfs.FILE], value[nfs.LINE], "1", value[mdb.NAME], value[mdb.TEXT]) + m.Echo("%v\n", m.Option(mdb.ZONE)).Echo("%v:%v:%v:(%v): %v\n", value[nfs.FILE], value[nfs.LINE], "1", value[mdb.NAME], value[mdb.TEXT]) }) }}, - FAVOR: {Name: "favor zone id auto", Help: "收藏夹", Actions: ice.MergeActions(ice.Actions{ - mdb.INSERT: {Name: "insert zone=数据结构 type name=hi text=hello file line", Help: "添加"}, - code.INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) { - p := path.Join(m.Option(cli.PWD), m.Option(nfs.FILE)) - ctx.ProcessCommand(m, code.INNER, []string{path.Dir(p) + ice.PS, path.Base(p), m.Option(nfs.LINE)}, arg...) - }}, - }, mdb.ZoneAction(mdb.SHORT, mdb.ZONE, mdb.FIELD, "time,id,type,name,text,file,line,pwd")), Hand: func(m *ice.Message, arg ...string) { - if mdb.ZoneSelect(m, arg...); len(arg) == 0 { - m.Action(mdb.CREATE, mdb.EXPORT, mdb.IMPORT) - } else { - m.PushAction(code.INNER) - m.StatusTimeCount() - } - }}, }) } diff --git a/misc/vim/input.go b/misc/vim/input.go index f665e462..cb5687fe 100644 --- a/misc/vim/input.go +++ b/misc/vim/input.go @@ -5,38 +5,51 @@ import ( ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/cli" + "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/mdb" + "shylinux.com/x/icebergs/base/web" kit "shylinux.com/x/toolkits" ) const INPUT = "input" func init() { + const ( + CMDS = "cmds" + WUBI = "wubi" + ICE_ = "ice " + ) Index.MergeCommands(ice.Commands{ - "/input": {Name: "/input", Help: "输入法", Hand: func(m *ice.Message, arg ...string) { - if m.Cmdy(TAGS, INPUT, arg[0], m.Option("pre")); m.Length() > 0 { - mdb.HashCreate(m, kit.SimpleKV("", TAGS, arg[0], m.Result())) - return // 代码补全 - } + INPUT: {Name: "input hash auto export import", Help: "输入法", Actions: mdb.HashAction(mdb.SHORT, mdb.NAME, mdb.FIELD, "time,hash,type,name,text")}, + web.P(INPUT): {Hand: func(m *ice.Message, arg ...string) { if arg[0] == ice.PT { - return - } - if m.Cmdy("web.code.input.wubi", INPUT, arg[0]); m.Length() > 0 { - mdb.HashCreate(m, kit.SimpleKV("", "wubi", arg[0], m.Result())) - return // 五笔输入 - } - if arg[0] = strings.TrimSpace(arg[0]); strings.HasPrefix(arg[0], "ice") { - list := kit.Split(arg[0]) - if m.Cmdy(list[1:]); m.IsErrNotFound() { - m.SetResult().Cmdy(cli.SYSTEM, list[1:]) + + } else if strings.HasPrefix(arg[0], "ice") { + args := kit.Split(arg[0]) + if list := ctx.CmdList(m.Spawn()).Appendv(ctx.INDEX); len(args) == 1 || kit.IndexOf(list, args[1]) == -1 { + if len(args) > 1 { + list = kit.Simple(list, func(item string) bool { return strings.HasPrefix(item, args[1]) }) + } + m.Echo(ICE_ + kit.Join(list, ice.NL+ICE_)).Echo(ice.NL) + return } - if m.Result() == "" { - m.Table() + msg := m.Cmd(args[1:]) + if msg.IsErrNotFound() { + msg.SetResult().Cmdy(cli.SYSTEM, args[1:]) } - mdb.HashCreate(m, kit.SimpleKV("", "cmds", strings.TrimSpace(strings.Join(list[1:], ice.SP)), m.Result())) - return // 本地命令 + if msg.Result() == "" { + msg.Table() + } + m.Echo(arg[0]).Echo(ice.NL).Search(args[1], func(p *ice.Context, s *ice.Context, key string, cmd *ice.Command) { + m.Echo(arg[0] + ice.SP + kit.Join(msg.Appendv(kit.Format(kit.Value(cmd.List, kit.Keys(len(args)-2, mdb.NAME)))), ice.NL+arg[0]+ice.SP)).Echo(ice.NL) + }).Copy(msg) + kit.Fetch(kit.UnMarshal(msg.Option(ice.MSG_STATUS)), func(index int, value ice.Map) { m.Echo("%s: %v ", value[mdb.NAME], value[mdb.VALUE]) }) + mdb.HashCreate(m.Spawn(), kit.SimpleKV("", CMDS, strings.TrimSpace(strings.Join(args[1:], ice.SP)), m.Result())) + } else if m.Cmdy(TAGS, INPUT, arg[0], m.Option("pre")); m.Length() > 0 { + mdb.HashCreate(m, kit.SimpleKV("", TAGS, arg[0], m.Result())) + } else if m.Cmdy("web.code.input.wubi", INPUT, arg[0]); len(m.Result()) > 0 { + mdb.HashCreate(m.Spawn(), kit.SimpleKV("", WUBI, arg[0], m.Result())) } }}, - INPUT: {Name: "input id auto export import", Help: "输入法", Actions: mdb.ListAction(mdb.FIELD, "time,id,type,name,text")}, }) } diff --git a/misc/vim/sess.go b/misc/vim/sess.go index 17afdfce..e4c0dc0b 100644 --- a/misc/vim/sess.go +++ b/misc/vim/sess.go @@ -1,14 +1,7 @@ package vim import ( - "io/ioutil" - "strings" - ice "shylinux.com/x/icebergs" - "shylinux.com/x/icebergs/base/aaa" - "shylinux.com/x/icebergs/base/cli" - "shylinux.com/x/icebergs/base/mdb" - "shylinux.com/x/icebergs/base/tcp" "shylinux.com/x/icebergs/base/web" ) @@ -25,48 +18,5 @@ const ( const SESS = "sess" func init() { - Index.MergeCommands(ice.Commands{ - web.WEB_LOGIN: {Hand: func(m *ice.Message, 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)) // 文件参数 - } - } - - switch m.RenderResult(); arg[0] { - case "/input", "/sess": - return // 登录入口 - } - - if m.Warn(m.Option(SID, strings.TrimSpace(m.Option(SID))) == "", ice.ErrNotLogin, arg[0]) { - return - } - - msg := m.Cmd(SESS, m.Option(SID)) - m.Option(aaa.USERNAME, msg.Append(aaa.USERNAME)) - m.Option(tcp.HOSTNAME, msg.Append(tcp.HOSTNAME)) - m.Warn(m.Option(aaa.USERNAME) == "", ice.ErrNotLogin, arg[0]) - }}, - "/sess": {Name: "/sess", Help: "会话", Actions: ice.Actions{ - aaa.LOGOUT: {Name: "logout", Help: "退出", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(SESS, mdb.MODIFY, mdb.STATUS, aaa.LOGOUT, ice.Option{mdb.HASH, m.Option(SID)}) - }}, - }, Hand: func(m *ice.Message, arg ...string) { - if m.Option(SID) == "" { // 终端登录 - m.Option(SID, m.Cmdx(SESS, mdb.CREATE, mdb.STATUS, aaa.LOGIN, m.OptionSimple(aaa.USERNAME, tcp.HOSTNAME, cli.PID, cli.PWD))) - } else { - m.Cmdy(SESS, mdb.MODIFY, mdb.STATUS, aaa.LOGIN, ice.Option{mdb.HASH, m.Option(SID)}) - } - m.Echo(m.Option(SID)) - }}, - SESS: {Name: "sess hash auto prunes", Help: "会话流", Actions: ice.MergeActions(ice.Actions{ - mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) { - m.OptionFields(mdb.HashField(m)) - m.Cmdy(mdb.PRUNES, m.PrefixKey(), "", mdb.HASH, mdb.STATUS, aaa.LOGOUT) - }}, - }, mdb.HashAction(mdb.FIELD, "time,hash,status,username,hostname,pid,pwd")), Hand: func(m *ice.Message, arg ...string) { - mdb.HashSelect(m, arg...) - }}, - }) + Index.MergeCommands(ice.Commands{web.WEB_LOGIN: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy("web.code.bash._login", arg) }}}) } diff --git a/misc/vim/sync.go b/misc/vim/sync.go index 184fc811..b70a6c14 100644 --- a/misc/vim/sync.go +++ b/misc/vim/sync.go @@ -4,11 +4,11 @@ import ( "path" ice "shylinux.com/x/icebergs" - "shylinux.com/x/icebergs/base/aaa" "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" + "shylinux.com/x/icebergs/base/web" "shylinux.com/x/icebergs/core/code" kit "shylinux.com/x/toolkits" ) @@ -17,32 +17,24 @@ const SYNC = "sync" func init() { Index.MergeCommands(ice.Commands{ - "/sync": {Name: "/sync", Help: "同步", Hand: func(m *ice.Message, arg ...string) { - switch m.Option(ARG) { - case "wq", "q", "qa": - m.Cmd("/sess", aaa.LOGOUT) - } - - m.Cmd(SYNC, mdb.INSERT, mdb.TYPE, VIMRC, mdb.NAME, arg[0], mdb.TEXT, kit.Select(m.Option(ARG), m.Option(SUB)), - m.OptionSimple(cli.PWD, BUF, ROW, COL)) - }}, SYNC: {Name: "sync id auto page export import", Help: "同步流", Actions: ice.MergeActions(ice.Actions{ - code.INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) { - p := path.Join(m.Option(cli.PWD), m.Option(BUF)) - ctx.ProcessCommand(m, code.INNER, []string{path.Dir(p) + ice.PS, path.Base(p), m.Option(ROW)}, arg...) + mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(FAVOR, mdb.INPUTS, arg) }}, + code.INNER: {Help: "源码", Hand: func(m *ice.Message, arg ...string) { + if len(arg) > 0 && arg[0] == ice.RUN { + ctx.ProcessField(m, "", nil, arg...) + } else { + p := path.Join(m.Option(cli.PWD), m.Option(BUF)) + ctx.ProcessField(m, "", []string{path.Dir(p) + ice.PS, path.Base(p), m.Option(ROW)}) + } }}, - mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(FAVOR, mdb.INPUTS, arg) + FAVOR: {Name: "favor zone*=some type name text pwd buf row", Help: "收藏", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(FAVOR, mdb.INSERT, m.OptionSimple(mdb.ZONE, "type,name,text,pwd"), nfs.FILE, m.Option(BUF), nfs.LINE, m.Option(ROW)) }}, - FAVOR: {Name: "favor zone=some@key type name text buf row pwd", Help: "收藏", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(FAVOR, mdb.INSERT, m.OptionSimple(mdb.ZONE, "type,name,text,pwd"), - nfs.FILE, m.Option(BUF), nfs.LINE, m.Option(ROW)) - }}, - }, mdb.ListAction(mdb.FIELD, "time,id,type,name,text,pwd,buf,row,col")), Hand: func(m *ice.Message, arg ...string) { - mdb.OptionPage(m, kit.Slice(arg, 1)...) - mdb.ListSelect(m, kit.Slice(arg, 0, 1)...) - m.PushAction(code.INNER, FAVOR) - m.StatusTimeCountTotal(m.Config(mdb.COUNT)) + }, mdb.PageListAction(mdb.FIELD, "time,id,type,name,text,pwd,buf,row,col")), Hand: func(m *ice.Message, arg ...string) { + mdb.PageListSelect(m, arg...).PushAction(code.INNER, FAVOR) + }}, + web.P(SYNC): {Hand: func(m *ice.Message, arg ...string) { + m.Cmd(SYNC, mdb.INSERT, mdb.TYPE, VIMRC, mdb.NAME, arg[0], mdb.TEXT, kit.Select(m.Option(ARG), m.Option(SUB)), m.OptionSimple(cli.PWD, BUF, ROW, COL)) }}, }) } diff --git a/misc/vim/tags.go b/misc/vim/tags.go index 06c6cfce..58d9fce5 100644 --- a/misc/vim/tags.go +++ b/misc/vim/tags.go @@ -5,74 +5,99 @@ import ( "strings" ice "shylinux.com/x/icebergs" + "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" + "shylinux.com/x/icebergs/base/tcp" + "shylinux.com/x/icebergs/base/web" "shylinux.com/x/icebergs/core/code" + "shylinux.com/x/icebergs/core/wiki" kit "shylinux.com/x/toolkits" ) +func _tags_split(pre, col string) []string { + ls := kit.Split(pre[:kit.Int(col)-1]) + ls[len(ls)-1] += kit.Split(pre[kit.Int(col)-1:])[0] + return ls +} +func _tags_field(m *ice.Message, arg ...string) { + if arg[0] == "" { + return + } + pre, sp := "", "" + if word := kit.Slice(kit.Split(arg[1]+arg[0]), -1)[0]; arg[0] == ice.SP { + sp = ice.SP + } else if strings.HasSuffix(word, ice.PT) { + pre = strings.TrimSuffix(word, ice.PT) + } else if p := kit.Split(word, ice.PT); true { + sp, pre = p[len(p)-1], word + } + list0, list := map[string]bool{}, map[string]bool{} + push := func(index string) { + if strings.HasPrefix(index, pre) { + p := kit.Split(sp+strings.TrimPrefix(index, pre), ice.PT)[0] + list0[p+kit.Select("", ice.PT, !strings.HasSuffix(index, p))] = true + } + list[strings.TrimPrefix(index, kit.Join(kit.Slice(kit.Split(pre, ice.PT), 0, -1), ice.PT)+ice.PT)] = true + } + ctx.CmdList(m).Tables(func(value ice.Maps) { + if ls := kit.Split(pre, ice.PT); len(ls) == 1 && strings.Contains(value[ctx.INDEX], pre) && !strings.HasSuffix(arg[0], ice.PT) { + push(value[ctx.INDEX]) + } else if len(ls) > 1 && strings.HasPrefix(value[ctx.INDEX], kit.Join(ls[:len(ls)-1], ice.PT)) && strings.Contains(value[ctx.INDEX], ls[len(ls)-1]) && !strings.HasSuffix(arg[0], ice.PT) { + push(value[ctx.INDEX]) + } else if strings.HasPrefix(value[ctx.INDEX], pre) { + res := sp + strings.TrimPrefix(value[ctx.INDEX], pre) + ls := kit.Split(res, ice.PT) + if len(ls) == 0 { + return + } else if len(ls) > 1 { + ls[0] += ice.PT + } + if strings.HasPrefix(res, ice.PT) { + list[ice.PT+ls[0]] = true + } else { + list[ls[0]] = true + } + } + }) + kit.Fetch(list0, func(k string) { m.Echo("%s\n", k) }) + kit.Fetch(list, func(k string) { m.Echo("%s\n", k) }) +} +func _tags_input(m *ice.Message, arg ...string) { + if kit.Ext(m.Option(BUF)) == nfs.SHY && arg[1] == "" { + kit.Fetch([]string{"field", "shell", "refer", "section", "chapter", "title"}, func(k string) { + kit.If(strings.HasPrefix(k, arg[0]), func() { m.Echo("%s \n", k) }) + }) + _tags_field(m, arg...) + return + } else if arg[1] == "" { + _tags_field(m, arg...) + return + } else if kit.Ext(m.Option(BUF)) == nfs.SHY && strings.HasPrefix(arg[1], "field") { + _tags_field(m, arg...) + return + } + name := kit.Select("", kit.Slice(kit.Split(arg[1], "\t \n."), -1), 0) + switch name { + case "can": + mdb.ZoneSelectCB(m, "", func(value ice.Maps) { m.Echo(value[mdb.NAME] + ice.NL) }) + return + } + mdb.ZoneSelectCB(m, name, func(value ice.Maps) { + if !strings.Contains(value[mdb.NAME], arg[0]) && arg[0] != ice.PT { + return + } else if m.Length() == 0 { + m.Echo("func" + ice.NL) + } + m.Echo(value[mdb.NAME] + ice.NL) + m.Echo("%s: %s"+ice.NL, value[mdb.NAME], strings.Split(value[mdb.TEXT], ice.NL)[0]) + }) +} + const TAGS = "tags" func init() { - _tags_split := func(pre, col string) []string { - ls := kit.Split(pre[:kit.Int(col)-1]) - ls[len(ls)-1] += kit.Split(pre[kit.Int(col)-1:])[0] - return ls - } - _tags_field := func(m *ice.Message, arg ...string) { - if arg[0] == "" { - return - } - pre, sp := "", "" - if word := kit.Slice(kit.Split(arg[1]+arg[0]), -1)[0]; arg[0] == ice.SP { - sp = ice.SP - } else if strings.HasSuffix(word, ice.PT) { - pre = strings.TrimSuffix(word, ice.PT) - } else if p := kit.Split(word, ice.PT); true { - sp, pre = p[len(p)-1], word - } - - m.OptionFields(ctx.INDEX) - list0 := map[string]bool{} - list := map[string]bool{} - push := func(index string) { - if strings.HasPrefix(index, pre) { - p := kit.Split(sp+strings.TrimPrefix(index, pre), ice.PT)[0] - list0[p+kit.Select("", ice.PT, !strings.HasSuffix(index, p))] = true - } - list[strings.TrimPrefix(index, kit.Join(kit.Slice(kit.Split(pre, ice.PT), 0, -1), ice.PT)+ice.PT)] = true - } - m.Cmd(ctx.COMMAND, mdb.SEARCH, ctx.COMMAND).Tables(func(value ice.Maps) { - if ls := kit.Split(pre, ice.PT); len(ls) == 1 && strings.Contains(value[ctx.INDEX], pre) && !strings.HasSuffix(arg[0], ice.PT) { - push(value[ctx.INDEX]) - - } else if len(ls) > 1 && strings.HasPrefix(value[ctx.INDEX], kit.Join(ls[:len(ls)-1], ice.PT)) && strings.Contains(value[ctx.INDEX], ls[len(ls)-1]) && !strings.HasSuffix(arg[0], ice.PT) { - push(value[ctx.INDEX]) - - } else if strings.HasPrefix(value[ctx.INDEX], pre) { - res := sp + strings.TrimPrefix(value[ctx.INDEX], pre) - ls := kit.Split(res, ice.PT) - if len(ls) == 0 { - return - } - if len(ls) > 1 { - ls[0] += ice.PT - } - if strings.HasPrefix(res, ice.PT) { - list[ice.PT+ls[0]] = true - } else { - list[ls[0]] = true - } - } - }) - for _, k := range kit.SortedKey(list0) { - m.Echo("%s\n", k) - } - for _, k := range kit.SortedKey(list) { - m.Echo("%s\n", k) - } - } const ( MODULE = "module" PATTERN = "pattern" @@ -86,33 +111,37 @@ func init() { libs_pattern = "4\nusr/volcanos/lib/%s.js\n/\\<%s: \\(shy\\|func\\)/\n" ) Index.MergeCommands(ice.Commands{ - "/tags": {Name: "/tags", Help: "跳转", Actions: ice.Actions{ - "server": {Name: "server", Help: "服务", Hand: func(m *ice.Message, arg ...string) { + TAGS: {Name: "tags zone id auto insert", Help: "索引", Actions: ice.MergeActions(ice.Actions{ + "listTags": {Help: "索引", Hand: func(m *ice.Message, arg ...string) { + kit.Fetch(kit.UnMarshal(m.Option(mdb.TEXT)), func(value ice.Map) { + kit.If(value != nil, func() { mdb.ZoneInsert(m, value[mdb.ZONE], kit.Simple(value)) }) + }) + }}, + code.INNER: {Hand: func(m *ice.Message, arg ...string) { ctx.ProcessField(m, "", m.OptionSplit("path,file,line"), arg...) }}, + INPUT: {Hand: func(m *ice.Message, arg ...string) { _tags_input(m, arg...) }}, + }, mdb.ZoneAction(mdb.FIELD, "time,id,type,name,text,path,file,line"), ctx.ACTION, code.INNER), Hand: func(m *ice.Message, arg ...string) { + if mdb.ZoneSelectAll(m, arg...); len(arg) == 0 { + m.Action("listTags", mdb.EXPORT, mdb.IMPORT) + } + }}, + web.P(TAGS): {Actions: ice.Actions{ + tcp.SERVER: {Hand: func(m *ice.Message, arg ...string) { switch args := _tags_split(m.Option(PRE), m.Option(COL)); args[0] { - case "field": - m.Echo(`!curl "localhost:9020/code/bash/qrcode?text=%s"`, kit.Format("http://2022.shylinux.com:9020/chat/cmd/%s?topic=black", args[1])) - case "qrcode": - m.Echo(`!curl "localhost:9020/code/bash/qrcode?text=%s"`, args[1]) + case cli.QRCODE: + m.Echo(`!curl "http://localhost:9020/code/bash/qrcode?text=%s"`, args[1]) + case wiki.FIELD: + m.Echo(`!curl "http://localhost:9020/code/bash/qrcode?text=%s"`, kit.Format("http://2022.shylinux.com:9020/chat/cmd/%s?topic=black", args[1])) } }}, - "source": {Name: "source", Help: "源码", Hand: func(m *ice.Message, arg ...string) { + nfs.SOURCE: {Hand: func(m *ice.Message, arg ...string) { switch args := _tags_split(m.Option(PRE), m.Option(COL)); args[0] { - case "field": + case cli.QRCODE: + m.Echo(`!curl "http://localhost:9020/code/bash/qrcode?text=%s"`, args[1]) + case wiki.FIELD: m.Search(kit.Select(args[1], args, 2), func(key string, cmd *ice.Command) { - ls := kit.Split(cmd.GetFileLines(), ":") + ls := kit.Split(cmd.GetFileLines(), ice.DF) m.Echo("vi +%s %s", ls[1], ls[0]) }) - case "qrcode": - m.Echo(`!curl "localhost:9020/code/bash/qrcode?text=%s"`, args[1]) - default: - switch kit.Ext(m.Option(BUF)) { - case "js": - ls := kit.Split(args[len(args)-1], ".", ".") - switch ls[0] { - case "chat": - - } - } } }}, }, Hand: func(m *ice.Message, arg ...string) { @@ -132,70 +161,5 @@ func init() { } } }}, - TAGS: {Name: "tags zone id auto", Help: "索引", Actions: ice.MergeActions(ice.Actions{ - "listTags": {Name: "listTags", Help: "索引", Hand: func(m *ice.Message, arg ...string) { - kit.Fetch(kit.UnMarshal(m.Option(mdb.TEXT)), func(index int, value ice.Map) { - if value == nil { - return - } - m.Cmd(TAGS, mdb.INSERT, mdb.ZONE, value[mdb.ZONE], kit.Simple(value)) - }) - m.ProcessRefresh() - }}, - mdb.INSERT: {Name: "insert zone=core type name=hi text=hello path file line", Help: "添加"}, - code.INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) { - ctx.ProcessCommand(m, code.INNER, m.OptionSplit("path,file,line"), arg...) - }}, - INPUT: {Name: "input name text", Hand: func(m *ice.Message, arg ...string) { - if kit.Ext(m.Option(BUF)) == nfs.SHY && arg[1] == "" { - for _, k := range []string{ - "field", - "shell", - "refer", - "section", - "chapter", - "title", - } { - if strings.HasPrefix(k, arg[0]) { - m.Echo("%s \n", k) - } - } - _tags_field(m, arg...) - return - } - if arg[1] == "" { - _tags_field(m, arg...) - return - } - if kit.Ext(m.Option(BUF)) == nfs.SHY && strings.HasPrefix(arg[1], "field") { - _tags_field(m, arg...) - return - } - name := kit.Select("", kit.Slice(kit.Split(arg[1], "\t \n."), -1), 0) - switch name { - case "can": - mdb.ZoneSelectCB(m, "", func(value ice.Maps) { - m.Echo(value[mdb.NAME] + ice.NL) - }) - return - } - mdb.ZoneSelectCB(m, name, func(value ice.Maps) { - if !strings.Contains(value[mdb.NAME], arg[0]) && arg[0] != ice.PT { - return - } - if m.Length() == 0 { - m.Echo("func" + ice.NL) - } - m.Echo(value[mdb.NAME] + ice.NL) - m.Echo("%s: %s"+ice.NL, value[mdb.NAME], strings.Split(value[mdb.TEXT], ice.NL)[0]) - }) - }}, - }, mdb.ZoneAction(mdb.SHORT, mdb.ZONE, mdb.FIELD, "time,id,type,name,text,path,file,line")), Hand: func(m *ice.Message, arg ...string) { - if mdb.ZoneSelectAll(m, arg...); len(arg) == 0 { - m.Action("listTags", mdb.CREATE, mdb.EXPORT, mdb.IMPORT) - } else { - m.Action(mdb.INSERT).PushAction(code.INNER).StatusTimeCount() - } - }}, }) } diff --git a/misc/vim/vim.go b/misc/vim/vim.go index 7beb6037..82293773 100644 --- a/misc/vim/vim.go +++ b/misc/vim/vim.go @@ -12,15 +12,11 @@ const VIM = "vim" var Index = &ice.Context{Name: VIM, Help: "编辑器", Commands: ice.Commands{ VIM: {Name: "vim path auto order build download", Help: "编辑器", Actions: ice.MergeActions(ice.Actions{ - cli.BUILD: {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(code.INSTALL, cli.BUILD, m.Config(nfs.SOURCE), "--enable-multibyte=yes", - "--enable-pythoninterp=yes", "--enable-luainterp=yes", "--enable-cscope=yes") - }}, - cli.ORDER: {Name: "order", Help: "加载", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(code.INSTALL, cli.ORDER, m.Config(nfs.SOURCE), "_install/bin") + cli.BUILD: {Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(code.INSTALL, cli.BUILD, m.Config(nfs.SOURCE), "--enable-multibyte=yes", "--enable-cscope=yes", "--enable-luainterp=yes", "--enable-pythoninterp=yes") }}, }, code.InstallAction(nfs.SOURCE, "http://mirrors.tencent.com/macports/distfiles/vim/vim-8.2.2681.tar.gz")), Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(code.INSTALL, nfs.SOURCE, m.Config(nfs.SOURCE), arg) + m.Cmdy(code.INSTALL, m.ConfigSimple(nfs.SOURCE), arg) }}, }} diff --git a/misc/vim/vimrc.go b/misc/vim/vimrc.go index 05953219..656c2a10 100644 --- a/misc/vim/vimrc.go +++ b/misc/vim/vimrc.go @@ -2,47 +2,14 @@ package vim import ( ice "shylinux.com/x/icebergs" - "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/core/code" - kit "shylinux.com/x/toolkits" ) const VIMRC = "vimrc" func init() { - Index.Merge(&ice.Context{Commands: ice.Commands{ - VIMRC: {Name: "vimrc", Help: "收藏夹", Actions: ice.MergeActions(ice.Actions{ - ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { - m.Cmd(mdb.PLUGIN, mdb.CREATE, VIMRC, m.PrefixKey()) - m.Cmd(mdb.RENDER, mdb.CREATE, VIMRC, m.PrefixKey()) - m.Cmd(mdb.PLUGIN, mdb.CREATE, VIM, m.PrefixKey()) - m.Cmd(mdb.RENDER, mdb.CREATE, VIM, m.PrefixKey()) - code.LoadPlug(m, VIMRC) - }}, - }, code.PlugAction())}, - }, Configs: ice.Configs{ - VIMRC: {Name: VIMRC, Help: "收藏夹", Value: kit.Data( - code.PLUG, kit.Dict( - code.SPLIT, kit.Dict("space", " \t", "operator", "{[(&.,;!|<>)]}"), - code.PREFIX, kit.Dict("\"", "comment"), code.PREPARE, kit.Dict( - code.KEYWORD, kit.Simple( - "source", "finish", - "set", "let", "end", - "if", "else", "elseif", "endif", - "for", "in", "continue", "break", "endfor", - "try", "catch", "finally", "endtry", - "call", "function", "return", "endfunction", - - "autocmd", "command", "execute", - "nnoremap", "cnoremap", "inoremap", - "colorscheme", "highlight", "syntax", - ), - code.FUNCTION, kit.Simple( - "has", "type", "empty", - "exists", "executable", - ), - ), - ), - )}, - }}) + Index.MergeCommands(ice.Commands{ + VIM: {Name: "vim", Actions: code.PlugAction()}, + VIMRC: {Name: "vimrc", Actions: code.PlugAction()}, + }) }