From 987e84f4288130172d3246683b8d5c5c70e47e0e Mon Sep 17 00:00:00 2001 From: "shylinux@163.com" Date: Mon, 19 Sep 2022 23:07:20 +0800 Subject: [PATCH] opt vimer --- base/cli/qrcode.go | 4 +- base/cli/system.go | 3 - base/ctx/process.go | 3 + base/mdb/mdb.go | 2 +- base/mdb/zone.go | 6 +- base/nfs/cat.go | 3 + base/web/dream.go | 7 +- core/code/c.go | 8 ++- core/code/code.shy | 15 ++-- core/code/favor.go | 2 +- core/code/go.go | 13 ++-- core/code/inner.go | 120 ++++++++++---------------------- core/code/py.go | 5 +- core/code/sh.go | 5 +- core/code/shy.go | 5 +- core/code/vimer.go | 161 +++++++++++++++--------------------------- core/code/xterm.go | 2 +- core/code/zml.go | 9 ++- core/wiki/field.go | 1 + core/wiki/word.go | 10 ++- misc/tmux/tmux.shy | 165 +++++++++++++++++++++++++++++++++++++++++++- 21 files changed, 313 insertions(+), 236 deletions(-) diff --git a/base/cli/qrcode.go b/base/cli/qrcode.go index c8f5b21b..9e746e3d 100644 --- a/base/cli/qrcode.go +++ b/base/cli/qrcode.go @@ -135,8 +135,8 @@ func init() { }}, }, Hand: func(m *ice.Message, arg ...string) { m.Option(SIZE, kit.Select("240", arg, 3)) - m.Option(BG, kit.Select(WHITE, arg, 2)) - m.Option(FG, kit.Select(BLUE, arg, 1)) + m.Option(BG, kit.Select(kit.Select(WHITE, BLACK, m.Option("topic") == BLACK), arg, 2)) + m.Option(FG, kit.Select(kit.Select(BLUE, CYAN, m.Option("topic") == BLACK), arg, 1)) if m.IsCliUA() { _qrcode_cli(m, kit.Select(kit.Select(ice.Info.Make.Domain, ice.Info.Domain), arg, 0)) } else { diff --git a/base/cli/system.go b/base/cli/system.go index 0c55660a..1e1b3455 100644 --- a/base/cli/system.go +++ b/base/cli/system.go @@ -173,9 +173,6 @@ func init() { } m.Option(CMD_ENV, "COLUMNS", kit.Int(kit.Select("1920", m.Option("width")))/12) m.Cmdy(SYSTEM, "sh", "-c", kit.Format("man %s %s|col -b", kit.Select("", arg[1], arg[1] != "1"), arg[0])) - if IsSuccess(m) && m.Append(CMD_ERR) == "" { - m.SetAppend() - } }}, }, Hand: func(m *ice.Message, arg ...string) { if len(arg) == 0 { diff --git a/base/ctx/process.go b/base/ctx/process.go index b6ca44f0..c025ae3f 100644 --- a/base/ctx/process.go +++ b/base/ctx/process.go @@ -51,6 +51,9 @@ func ProcessHold(m *ice.Message, text ...ice.Any) { func ProcessRefresh(m *ice.Message) { m.ProcessRefresh("300ms") } +func ProcessRewrite(m *ice.Message, arg ...ice.Any) { + m.ProcessRewrite(arg...) +} func ProcessAction() ice.Actions { return ice.Actions{ diff --git a/base/mdb/mdb.go b/base/mdb/mdb.go index 414f4392..54433b6a 100644 --- a/base/mdb/mdb.go +++ b/base/mdb/mdb.go @@ -37,7 +37,7 @@ func _mdb_args(m *ice.Message, field string, arg ...Any) []string { } for i := 0; i < len(args); i += 2 { if !strings.Contains(field, args[i]) && !strings.HasPrefix(args[i], EXTRA) { - args[i] = kit.Keys(EXTRA, args[i]) + // args[i] = kit.Keys(EXTRA, args[i]) } } return args diff --git a/base/mdb/zone.go b/base/mdb/zone.go index ac6c70d7..35610138 100644 --- a/base/mdb/zone.go +++ b/base/mdb/zone.go @@ -170,13 +170,15 @@ func ZoneAction(args ...ice.Any) ice.Actions { func ZoneShort(m *ice.Message) string { return kit.Select(ZONE, m.Config(SHORT), m.Config(SHORT) != UNIQ) } -func ZoneField(m *ice.Message) string { return kit.Select(ZONE_FIELD, m.Config(FIELD)) } +func ZoneField(m *ice.Message) string { + return kit.Select(ZONE_FIELD, m.Config(FIELD)) +} func ZoneArgs(m *ice.Message, arg ...Any) []string { return _mdb_args(m, ZoneField(m), arg...) } func ZoneInputs(m *ice.Message, arg ...Any) { - m.Cmdy(INPUTS, m.PrefixKey(), "", ZONE, ZoneArgs(m, arg...)) + m.Cmdy(INPUTS, m.PrefixKey(), "", ZONE, m.Option(ZoneShort(m)), ZoneArgs(m, arg...)) } func ZoneCreate(m *ice.Message, arg ...Any) { m.Cmdy(INSERT, m.PrefixKey(), "", HASH, arg) diff --git a/base/nfs/cat.go b/base/nfs/cat.go index 4be26c12..8af95fe2 100644 --- a/base/nfs/cat.go +++ b/base/nfs/cat.go @@ -158,6 +158,9 @@ func init() { }}, }}) } +func IsSourceFile(m *ice.Message, ext string) bool { + return m.Conf(CAT, kit.Keym(SOURCE, ext)) == ice.TRUE +} func OptionLoad(m *ice.Message, file string) *ice.Message { if f, e := OpenFile(m, file); e == nil { defer f.Close() diff --git a/base/web/dream.go b/base/web/dream.go index e8b3a89c..0db02ce0 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -138,14 +138,13 @@ func init() { _dream_show(m, m.Option(mdb.NAME)) }}, cli.OPEN: {Name: "open", Help: "打开", Hand: func(m *ice.Message, arg ...string) { - m.ProcessOpen(MergePod(m, m.Option(mdb.NAME), "", "")) + ProcessWebsite(m, m.Option(mdb.NAME), "", "", "") }}, "vimer": {Name: "vimer", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { - m.ProcessOpen(MergePod(m, m.Option(mdb.NAME)+"/cmd/web.code.vimer", "", "")) + ProcessWebsite(m, m.Option(mdb.NAME), "web.code.vimer", "", "") }}, "xterm": {Name: "xterm", Help: "命令", Hand: func(m *ice.Message, arg ...string) { - m.ProcessOpen(MergePod(m, m.Option(mdb.NAME)+"/cmd/web.code.xterm", mdb.HASH, - m.Cmdx(SPACE, m.Option(mdb.NAME), "web.code.xterm", mdb.CREATE, mdb.TYPE, nfs.SH, mdb.NAME, "xterm"))) + ProcessWebsite(m, m.Option(mdb.NAME), "web.code.xterm", mdb.HASH, m.Cmdx(SPACE, m.Option(mdb.NAME), "web.code.xterm", mdb.CREATE, mdb.TYPE, nfs.SH, mdb.NAME, "xterm")) }}, cli.STOP: {Name: "stop", Help: "停止", Hand: func(m *ice.Message, arg ...string) { m.Cmd(SPACE, mdb.MODIFY, m.OptionSimple(mdb.NAME), mdb.STATUS, cli.STOP) diff --git a/core/code/c.go b/core/code/c.go index a26a9e2f..c8de13d4 100644 --- a/core/code/c.go +++ b/core/code/c.go @@ -51,7 +51,7 @@ func init() { Index.Register(&ice.Context{Name: C, Help: "系统", Commands: ice.Commands{ C: {Name: C, Help: "系统", Actions: ice.MergeActions(ice.Actions{ ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { - for _, cmd := range []string{mdb.SEARCH, mdb.ENGINE, mdb.RENDER, mdb.PLUGIN} { + for _, cmd := range []string{mdb.SEARCH, mdb.ENGINE, mdb.RENDER, mdb.PLUGIN, NAVIGATE} { for _, k := range []string{H, C, CC} { m.Cmd(cmd, mdb.CREATE, k, m.PrefixKey()) } @@ -80,6 +80,12 @@ func init() { // _go_find(m, kit.Select(cli.MAIN, arg, 1), arg[2]) // _go_grep(m, kit.Select(cli.MAIN, arg, 1), arg[2]) }}, + NAVIGATE: {Name: "navigate", Help: "跳转", Hand: func(m *ice.Message, arg ...string) { + if !nfs.ExistsFile(m, path.Join(m.Option(nfs.PATH), nfs.TAGS)) { + m.Cmd(cli.SYSTEM, "ctags", "-a", "-R", nfs.PWD, kit.Dict(cli.CMD_DIR, m.Option(nfs.PATH))) + } + _inner_tags(m, m.Option(nfs.PATH), m.Option(mdb.NAME)) + }}, }, PlugAction())}, MAN: {Name: MAN, Help: "手册", Actions: ice.MergeActions(ice.Actions{ ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { diff --git a/core/code/code.shy b/core/code/code.shy index a54b733a..781f4040 100644 --- a/core/code/code.shy +++ b/core/code/code.shy @@ -11,14 +11,15 @@ compile.go publish.go upgrade.go -xterm.shy -xterm.go -vimer.go -inner.go +oauth.go favor.go +xterm.go +xterm.shy +inner.go +vimer.go bench.go pprof.go -oauth.go +case.go c.go sh.go @@ -27,7 +28,3 @@ go.go js.go py.go zml.go - -template.go -case.go - diff --git a/core/code/favor.go b/core/code/favor.go index d7cd2654..32363b66 100644 --- a/core/code/favor.go +++ b/core/code/favor.go @@ -20,7 +20,7 @@ func init() { XTERM: {Name: "xterm", Help: "命令", Hand: func(m *ice.Message, arg ...string) { ctx.Process(m, m.ActionKey(), append(m.OptionSimple(mdb.TYPE, mdb.NAME), ice.INIT, m.Option(mdb.TEXT)), arg...) }}, - }, mdb.ZoneAction(mdb.FIELD, "time,id,type,name,text,path,file,line")), Hand: func(m *ice.Message, arg ...string) { + }, 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.ZoneSelectPage(m, arg...); len(arg) > 0 && arg[0] != "" { m.Tables(func(value ice.Maps) { m.PushButton(kit.Select(INNER, XTERM, value[mdb.TEXT] == "" || value[nfs.FILE] == "")) diff --git a/core/code/go.go b/core/code/go.go index 237c6b48..08a00c7f 100644 --- a/core/code/go.go +++ b/core/code/go.go @@ -75,16 +75,19 @@ func _go_doc(m *ice.Message, mod string, pkg string) *ice.Message { if mod != "" { m.Cmd(cli.SYSTEM, "go", "get", mod) } - if msg := _vimer_go_complete(m.Spawn(), key); msg.Length() > 0 { - _cache_mods[key] = msg - return msg - } + // if msg := _vimer_go_complete(m.Spawn(), key); msg.Length() > 0 { + // _cache_mods[key] = msg + // return msg + // } return nil } func _go_exec(m *ice.Message, arg ...string) { if m.Option("some") == "run" { - args := []string{"./bin/ice.bin", ctx.GetFileCmd(path.Join(arg[2], arg[1]))} + args := []string{"./bin/ice.bin"} + if cmd := ctx.GetFileCmd(path.Join(arg[2], arg[1])); cmd != "" { + args = append(args, cmd) + } m.Cmdy(cli.SYSTEM, args) m.StatusTime("args", kit.Join(args, " ")) return diff --git a/core/code/inner.go b/core/code/inner.go index 928af4f3..1a3f5869 100644 --- a/core/code/inner.go +++ b/core/code/inner.go @@ -11,44 +11,34 @@ import ( "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" - "shylinux.com/x/icebergs/base/ssh" - "shylinux.com/x/icebergs/base/web" kit "shylinux.com/x/toolkits" ) func _inner_list(m *ice.Message, ext, file, dir string, arg ...string) { - if !aaa.Right(m, dir, file) { - return // 没有权限 - } - if m.Conf(nfs.CAT, kit.Keym(ssh.SOURCE, ext)) == ice.TRUE { - m.Cmdy(nfs.CAT, path.Join(dir, file)) - } else { - _inner_show(m, ext, file, dir, arg...) + if aaa.Right(m, dir, file) { + if nfs.IsSourceFile(m, ext) { + m.Cmdy(nfs.CAT, path.Join(dir, file)) + } else { + _inner_show(m, ext, file, dir, arg...) + } } } func _inner_show(m *ice.Message, ext, file, dir string, arg ...string) { - if !aaa.Right(m, dir, file) { - return // 没有权限 + if aaa.Right(m, dir, file) { + m.Cmdy(mdb.RENDER, ext, file, dir, arg) } - m.Cmdy(mdb.RENDER, ext, file, dir, arg) } func _inner_exec(m *ice.Message, ext, file, dir string, arg ...string) { - if !aaa.Right(m, dir, file) { - return // 没有权限 - } - // defer m.StatusTime() - if m.Cmdy(mdb.ENGINE, ext, file, dir, arg); m.Result() != "" { - return // 执行成功 - } - if ls := kit.Simple(m.Configv(kit.Keys(EXEC, ext))); len(ls) > 0 { - m.Cmdy(cli.SYSTEM, ls, file, kit.Dict(cli.CMD_DIR, dir)).SetAppend() + if aaa.Right(m, dir, file) { + m.Cmdy(mdb.ENGINE, ext, file, dir, arg) } } -func _inner_make(m *ice.Message, msg *ice.Message) { +func _inner_make(m *ice.Message, dir string, msg *ice.Message) { for _, line := range strings.Split(msg.Append(cli.CMD_ERR), ice.NL) { if strings.Contains(line, ice.DF) { if ls := strings.SplitN(line, ice.DF, 4); len(ls) > 3 { - m.Push(nfs.FILE, strings.TrimPrefix(ls[0], m.Option(nfs.PATH))) + m.Push(nfs.PATH, dir) + m.Push(nfs.FILE, strings.TrimPrefix(ls[0], dir)) m.Push(nfs.LINE, ls[1]) m.Push(mdb.TEXT, ls[3]) } @@ -62,14 +52,12 @@ func _inner_make(m *ice.Message, msg *ice.Message) { } func _inner_tags(m *ice.Message, dir string, value string) { for _, l := range strings.Split(m.Cmdx(cli.SYSTEM, nfs.GREP, "^"+value+"\\>", nfs.TAGS, kit.Dict(cli.CMD_DIR, dir)), ice.NL) { - ls := strings.SplitN(l, ice.TB, 2) - if len(ls) < 2 { + ls := strings.SplitN(l, ice.TB, 3) + if len(ls) < 3 { continue } - ls = strings.SplitN(ls[1], ice.TB, 2) - file := ls[0] - ls = strings.SplitN(ls[1], ";\"", 2) + file, ls := ls[1], strings.SplitN(ls[2], ";\"", 2) text := strings.TrimSuffix(strings.TrimPrefix(ls[0], "/^"), "$/") line := kit.Int(text) @@ -114,16 +102,27 @@ const INNER = "inner" func init() { Index.Merge(&ice.Context{Commands: ice.Commands{ - INNER: {Name: "inner path=src/@key file=main.go@key line=1 auto", Help: "源代码", Meta: kit.Dict(ice.DisplayLocal("")), Actions: ice.MergeActions(ice.Actions{ + INNER: {Name: "inner path=src/@key file=main.go@key line=1 auto", Help: "源代码", Actions: ice.MergeActions(ice.Actions{ ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.PrefixKey()) m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, ice.SRC_MAIN_GO) }}, + mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { + switch arg[0] { + case nfs.PATH: + m.Cmdy(nfs.DIR, arg[1:], nfs.DIR_CLI_FIELDS).ProcessAgain() + case nfs.FILE: + p := kit.Select(nfs.PWD, arg, 1) + m.Option(nfs.DIR_ROOT, m.Option(nfs.PATH)) + m.Cmdy(nfs.DIR, kit.Select(path.Dir(p), p, strings.HasSuffix(p, ice.FS))+ice.PS, nfs.DIR_CLI_FIELDS).ProcessAgain() + default: + m.Cmdy(FAVOR, mdb.INPUTS, arg) + } + }}, 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.Config(kit.Keys(PLUG, arg[0])))) } - m.Set(ice.MSG_STATUS) }}, mdb.RENDER: {Name: "render", Help: "渲染", Hand: func(m *ice.Message, arg ...string) { _inner_show(m, arg[0], arg[1], arg[2]) @@ -136,33 +135,6 @@ func init() { _inner_tags(m, "", arg[1]) } }}, - mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - if m.Option(ctx.ACTION) == web.WEBSITE { - switch arg[0] { - case nfs.FILE: - m.Cmdy(nfs.DIR, nfs.PWD, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_ROOT, "src/website/")).ProcessAgain() - } - return - } - - switch arg[0] { - case cli.MAIN: - m.Cmdy(nfs.DIR, ice.SRC, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_REG, `.*\.go`)).ProcessAgain() - case mdb.ZONE: - m.Cmdy(nfs.DIR, nfs.PWD, mdb.NAME, kit.Dict(nfs.DIR_ROOT, ice.SRC, nfs.DIR_TYPE, nfs.DIR)).RenameAppend(mdb.NAME, mdb.ZONE) - case nfs.PATH: - m.Cmdy(nfs.DIR, arg[1:], nfs.DIR_CLI_FIELDS).ProcessAgain() - case nfs.FILE: - p := kit.Select(nfs.PWD, arg, 1) - m.Option(nfs.DIR_ROOT, m.Option(nfs.PATH)) - m.Cmdy(nfs.DIR, kit.Select(path.Dir(p), p, strings.HasSuffix(p, ice.FS))+ice.PS, nfs.DIR_CLI_FIELDS).ProcessAgain() - case "url": - m.Option(nfs.DIR_ROOT, "usr/volcanos/plugin/local/code/") - m.Cmdy(nfs.DIR, nfs.PWD, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_DEEP, ice.TRUE)).ProcessAgain() - default: - m.Cmdy(FAVOR, mdb.INPUTS, arg) - } - }}, nfs.GREP: {Name: "grep", Help: "搜索", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(nfs.GREP, m.Option(nfs.PATH), arg[0]).StatusTimeCount(mdb.INDEX, 0) @@ -173,17 +145,21 @@ func init() { } }}, cli.MAKE: {Name: "make", Help: "构建", Hand: func(m *ice.Message, arg ...string) { - _inner_make(m, m.Cmd(cli.SYSTEM, cli.MAKE, arg)) + _inner_make(m, m.Option(nfs.PATH), m.Cmd(cli.SYSTEM, cli.MAKE, arg)) + }}, + + "listTags": {Name: "listTags", Help: "索引", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy("web.code.vim.tags", "listTags", arg) }}, - FAVOR: {Name: "favor", Help: "收藏"}, NAVIGATE: {Name: "navigate", Help: "跳转", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(NAVIGATE, kit.Ext(m.Option(mdb.FILE)), m.Option(nfs.FILE), m.Option(nfs.PATH)) }}, + FAVOR: {Name: "favor", Help: "收藏"}, }, ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) { - if arg[0] = strings.Split(arg[0], ice.FS)[0]; !strings.HasSuffix(arg[0], ice.PS) { + if arg[0] = strings.Split(arg[0], ice.FS)[0]; !strings.HasSuffix(arg[0], ice.PS) && len(arg) == 1 { arg[1] = kit.Slice(strings.Split(arg[0], ice.PS), -1)[0] arg[0] = strings.TrimSuffix(arg[0], arg[1]) - m.ProcessRewrite(nfs.PATH, arg[0], nfs.FILE, arg[1]) + ctx.ProcessRewrite(m, nfs.PATH, arg[0], nfs.FILE, arg[1]) return } if len(arg) < 2 { @@ -205,29 +181,9 @@ func init() { m.Option("exts", m.Config("show.exts")) arg[1] = strings.Split(arg[1], ice.FS)[0] - if _inner_list(m, kit.Ext(arg[1]), arg[1], arg[0]); m.IsErrNotFound() { - m.SetResult("") - } + _inner_list(m, kit.Ext(arg[1]), arg[1], arg[0]) ctx.DisplayLocal(m, "") - m.Set(ice.MSG_STATUS) }}, - }, Configs: ice.Configs{ - INNER: {Name: "inner", Help: "源代码", Value: kit.Data( - EXEC, kit.Dict("py", []string{"python"}), - PLUG, kit.Dict( - "S", kit.Dict(PREFIX, kit.Dict("//", COMMENT)), - "s", kit.Dict(PREFIX, kit.Dict("//", COMMENT), KEYWORD, kit.Dict("TEXT", KEYWORD, "RET", KEYWORD)), - "py", kit.Dict(PREFIX, kit.Dict("#", COMMENT), KEYWORD, kit.Dict("print", KEYWORD)), - nfs.HTML, kit.Dict(SPLIT, kit.Dict(SPACE, " ", OPERATE, "<>"), KEYWORD, kit.Dict("head", KEYWORD, "body", KEYWORD)), - nfs.CSS, kit.Dict(SUFFIX, kit.Dict("{", COMMENT)), - "yaml", kit.Dict(PREFIX, kit.Dict("#", COMMENT)), - "yml", kit.Dict(PREFIX, kit.Dict("#", COMMENT)), - - "makefile", kit.Dict(PREFIX, kit.Dict("#", COMMENT), SUFFIX, kit.Dict(":", COMMENT), - KEYWORD, kit.Dict("ifeq", KEYWORD, "ifneq", KEYWORD, "else", KEYWORD, "endif", KEYWORD), - ), - ), - )}, }}) } func PlugAction() ice.Actions { diff --git a/core/code/py.go b/core/code/py.go index 21bf7383..721da83b 100644 --- a/core/code/py.go +++ b/core/code/py.go @@ -5,7 +5,6 @@ import ( ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/cli" - "shylinux.com/x/icebergs/base/gdb" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" kit "shylinux.com/x/toolkits" @@ -40,9 +39,9 @@ func init() { }) m.Cmd(mdb.ENGINE, mdb.CREATE, PY, m.PrefixKey()) m.Cmd(mdb.RENDER, mdb.CREATE, PY, m.PrefixKey()) - gdb.Watch(m, VIMER_TEMPLATE) + m.Cmd(TEMPLATE, mdb.CREATE, m.CommandKey(), m.PrefixKey()) }}, - VIMER_TEMPLATE: {Hand: func(m *ice.Message, arg ...string) { + TEMPLATE: {Hand: func(m *ice.Message, arg ...string) { if kit.Ext(m.Option(mdb.FILE)) != m.CommandKey() { return } diff --git a/core/code/sh.go b/core/code/sh.go index 2d29ad71..50eab499 100644 --- a/core/code/sh.go +++ b/core/code/sh.go @@ -6,7 +6,6 @@ import ( ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/ctx" - "shylinux.com/x/icebergs/base/gdb" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" kit "shylinux.com/x/toolkits" @@ -67,9 +66,9 @@ func init() { m.Cmd(cmd, mdb.CREATE, m.CommandKey(), m.PrefixKey()) } LoadPlug(m, m.CommandKey()) - gdb.Watch(m, VIMER_TEMPLATE) + m.Cmd(TEMPLATE, mdb.CREATE, m.CommandKey(), m.PrefixKey()) }}, - VIMER_TEMPLATE: {Hand: func(m *ice.Message, arg ...string) { + TEMPLATE: {Hand: func(m *ice.Message, arg ...string) { if kit.Ext(m.Option(mdb.FILE)) != m.CommandKey() { return } diff --git a/core/code/shy.go b/core/code/shy.go index 3a610636..a7c1c067 100644 --- a/core/code/shy.go +++ b/core/code/shy.go @@ -7,7 +7,6 @@ import ( ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/ctx" - "shylinux.com/x/icebergs/base/gdb" "shylinux.com/x/icebergs/base/mdb" kit "shylinux.com/x/toolkits" ) @@ -42,9 +41,9 @@ func init() { m.Cmd(cmd, mdb.CREATE, SHY, m.PrefixKey()) } LoadPlug(m, SHY) - gdb.Watch(m, VIMER_TEMPLATE) + m.Cmd(TEMPLATE, mdb.CREATE, m.CommandKey(), m.PrefixKey()) }}, - VIMER_TEMPLATE: {Hand: func(m *ice.Message, arg ...string) { + TEMPLATE: {Hand: func(m *ice.Message, arg ...string) { if kit.Ext(m.Option(mdb.FILE)) != m.CommandKey() { return } diff --git a/core/code/vimer.go b/core/code/vimer.go index 2dc7325f..966ecf03 100644 --- a/core/code/vimer.go +++ b/core/code/vimer.go @@ -7,7 +7,6 @@ import ( ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/ctx" - "shylinux.com/x/icebergs/base/gdb" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/web" @@ -55,94 +54,60 @@ func _vimer_inputs(m *ice.Message, arg ...string) { } } } -func _vimer_go_complete(m *ice.Message, name string, arg ...string) *ice.Message { - kit.Fetch(kit.Split(m.Cmdx(cli.SYSTEM, GO, "doc", name), ice.NL, ice.NL, ice.NL), func(index int, value string) { - if ls := kit.Split(value); len(ls) > 1 { - switch ls[0] { - case "const", "type", "func", "var": - if ls[1] == "(" { - m.Push(mdb.NAME, strings.TrimSpace(ls[5])) - } else { - m.Push(mdb.NAME, strings.TrimSpace(ls[1])) - } - m.Push(mdb.TEXT, strings.TrimSpace(value)) - } - } - }) - return m -} -const ( - VIMER_TEMPLATE = "vimer.template" - VIMER_COMPLETE = "vimer.complete" -) const VIMER = "vimer" func init() { Index.MergeCommands(ice.Commands{ - VIMER: {Name: "vimer path=src/ file=main.go line=1 list", Help: "编辑器", Meta: kit.Dict(ice.DisplayLocal("", INNER)), Actions: ice.Actions{ - mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) { - if arg[0] == mdb.FOREACH && arg[1] == "" { - m.PushSearch(mdb.TYPE, "go", mdb.NAME, "src/main.go", mdb.TEXT, chat.MergeCmd(m, "")) + VIMER: {Name: "vimer path=src/ file=main.go line=1 list", Help: "编辑器", Actions: ice.Actions{ + mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { + switch arg[0] { + case nfs.FILE: + m.Cmdy(COMPLETE, mdb.FOREACH, arg[1], m.Option(ctx.ACTION)) + } + if m.Option(ctx.ACTION) == web.WEBSITE { + switch arg[0] { + case nfs.FILE: + m.Cmdy(nfs.DIR, nfs.PWD, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_ROOT, "src/website/")).ProcessAgain() + } + return + } + + switch arg[0] { + case cli.MAIN: + m.Cmdy(nfs.DIR, ice.SRC, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_REG, `.*\.go`)).ProcessAgain() + case mdb.ZONE: + m.Cmdy(nfs.DIR, nfs.PWD, mdb.NAME, kit.Dict(nfs.DIR_ROOT, ice.SRC, nfs.DIR_TYPE, nfs.DIR)).RenameAppend(mdb.NAME, mdb.ZONE) + case "url": + m.Option(nfs.DIR_ROOT, "usr/volcanos/plugin/local/code/") + m.Cmdy(nfs.DIR, nfs.PWD, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_DEEP, ice.TRUE)).ProcessAgain() + default: + _vimer_inputs(m, arg...) } }}, + nfs.SAVE: {Name: "save type file path", Help: "保存", Hand: func(m *ice.Message, arg ...string) { if m.Option(nfs.CONTENT) == "" { - m.Option(nfs.CONTENT, gdb.Event(m.Spawn(), VIMER_TEMPLATE).Result()) + m.Option(nfs.CONTENT, m.Cmdx(TEMPLATE, m.Option(mdb.TYPE), m.Option(nfs.FILE), m.Option(nfs.PATH))) } m.Cmdy(nfs.SAVE, path.Join(m.Option(nfs.PATH), m.Option(nfs.FILE))) }}, nfs.TRASH: {Name: "trash path", Help: "删除", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(nfs.TRASH, arg[0]) }}, - COMPILE: {Name: "compile", Help: "编译", Hand: func(m *ice.Message, arg ...string) { - if msg := m.Cmd(COMPILE, ice.SRC_MAIN_GO, ice.BIN_ICE_BIN); cli.IsSuccess(msg) { - m.Cmd(UPGRADE, cli.RESTART) - } else { - _inner_make(m, msg) - } - }}, - AUTOGEN: {Name: "create name=hi help=示例 type=Zone,Hash,Data,Code main=main.go zone key", Help: "模块", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(AUTOGEN, mdb.CREATE, arg) - }}, nfs.SCRIPT: {Name: "script file=hi/hi.js", Help: "脚本", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(nfs.DEFS, path.Join(m.Option(nfs.PATH), m.Option(nfs.FILE)), m.Cmdx(TEMPLATE, kit.Ext(m.Option(nfs.FILE)), m.Option(nfs.FILE), m.Option(nfs.PATH))) }}, web.WEBSITE: {Name: "website file=hi.zml", Help: "网页", Hand: func(m *ice.Message, arg ...string) { - if m.Option(mdb.TEXT) == "" { - m.Option(mdb.TEXT, gdb.Event(m.Spawn(), VIMER_TEMPLATE).Result()) - } - m.Option(nfs.FILE, path.Join(web.WEBSITE, m.Option(nfs.FILE))) - m.Cmdy(TEMPLATE, nfs.DEFS) + m.Cmdy(nfs.DEFS, path.Join(m.Option(nfs.PATH), m.Option(nfs.FILE)), m.Cmdx(TEMPLATE, kit.Ext(m.Option(nfs.FILE)), m.Option(nfs.FILE), m.Option(nfs.PATH))) }}, web.DREAM: {Name: "dream name=hi repos", Help: "空间", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(web.DREAM, cli.START, arg) }}, - XTERM: {Name: "xterm type=sh name", Help: "终端", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(XTERM, mdb.CREATE, arg) - }}, - PUBLISH: {Name: "publish", Help: "发布", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(PUBLISH, ice.CONTEXTS) - }}, - mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - switch arg[0] { - case nfs.FILE: - m.Cmdy(COMPLETE, mdb.FOREACH, arg[1], m.Option(ctx.ACTION)) - } - _vimer_inputs(m, arg...) + AUTOGEN: {Name: "create name=hi help=示例 type=Zone,Hash,Data,Code main=main.go zone key", Help: "模块", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(AUTOGEN, mdb.CREATE, arg) }}, - TEMPLATE: {Name: "template", Help: "模板", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(TEMPLATE, kit.Ext(m.Option(mdb.FILE)), m.Option(nfs.FILE), m.Option(nfs.PATH)) - }}, - COMPLETE: {Name: "complete", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(COMPLETE, kit.Ext(m.Option(mdb.FILE)), m.Option(nfs.FILE), m.Option(nfs.PATH)) - }}, - - "listTags": {Name: "listTags", Help: "索引", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy("web.code.vim.tags", "listTags", arg) - }}, - DEVPACK: {Name: "devpack", Help: "开发模式", Hand: func(m *ice.Message, arg ...string) { m.Cmd(nfs.LINK, ice.GO_SUM, path.Join(ice.SRC_DEBUG, ice.GO_SUM)) m.Cmd(nfs.LINK, ice.GO_MOD, path.Join(ice.SRC_DEBUG, ice.GO_MOD)) @@ -157,6 +122,26 @@ func init() { m.ProcessInner() web.ToastSuccess(m) }}, + COMPILE: {Name: "compile", Help: "编译", Hand: func(m *ice.Message, arg ...string) { + if msg := m.Cmd(COMPILE, ice.SRC_MAIN_GO, ice.BIN_ICE_BIN); cli.IsSuccess(msg) { + m.Cmd(UPGRADE, cli.RESTART) + } else { + _inner_make(m, nfs.PWD, msg) + } + }}, + PUBLISH: {Name: "publish", Help: "发布", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(PUBLISH, ice.CONTEXTS) + }}, + + TEMPLATE: {Name: "template", Help: "模板", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(TEMPLATE, kit.Ext(m.Option(mdb.FILE)), m.Option(nfs.FILE), m.Option(nfs.PATH)) + }}, + COMPLETE: {Name: "complete", Help: "补全", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(COMPLETE, kit.Ext(m.Option(mdb.FILE)), m.Option(nfs.FILE), m.Option(nfs.PATH)) + }}, + XTERM: {Name: "xterm type=sh name", Help: "终端", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(XTERM, mdb.CREATE, arg) + }}, }, Hand: func(m *ice.Message, arg ...string) { m.Cmdy(INNER, arg) m.Option("tabs", m.Config("show.tabs")) @@ -164,20 +149,22 @@ func init() { m.Option("exts", m.Config("show.exts")) if arg[0] != ctx.ACTION { - ctx.DisplayLocal(m, "") m.Action(nfs.SAVE, COMPILE, AUTOGEN, nfs.SCRIPT, chat.WEBSITE, web.DREAM, XTERM) + ctx.DisplayLocal(m, "") } }}, }) } -func ProcessVimer(m *ice.Message, path, file, line string, arg ...string) { - ctx.ProcessField(m, Prefix(VIMER), kit.Simple(path, file, line), arg...) -} const TEMPLATE = "template" const COMPLETE = "complete" const NAVIGATE = "navigate" +func init() { + Index.MergeCommands(ice.Commands{TEMPLATE: {Name: "template type name text auto", Help: "模板", Actions: mdb.RenderAction()}}) + Index.MergeCommands(ice.Commands{COMPLETE: {Name: "complete type name text auto", Help: "补全", Actions: mdb.RenderAction()}}) + Index.MergeCommands(ice.Commands{NAVIGATE: {Name: "navigate type name text auto", Help: "跳转", Actions: mdb.RenderAction()}}) +} func Complete(m *ice.Message, text string, data ice.Map) { if strings.HasSuffix(text, ".") { key := kit.Slice(kit.Split(text, " ."), -1)[0] @@ -188,42 +175,4 @@ func Complete(m *ice.Message, text string, data ice.Map) { m.Push(mdb.TEXT, k) } } - return - - if strings.TrimSpace(text) == "" { - m.Push(mdb.TEXT, kit.Simple(data[""])) - return - } - - name := kit.Slice(kit.Split(text), -1)[0] - if name == "" { - m.Push(mdb.TEXT, kit.Simple(data[""])) - return - } - - key := kit.Slice(kit.Split(name, "."), -1)[0] - if strings.HasSuffix(name, ".") { - m.Push(mdb.TEXT, kit.Simple(data[key])) - } else { - for k := range data { - if strings.HasPrefix(k, key) { - m.Push(mdb.TEXT, key) - } - } - list := kit.Simple(data[key]) - for i, v := range list { - list[i] = "." + v - } - m.Push(mdb.TEXT, list) - } -} - -func init() { - Index.MergeCommands(ice.Commands{COMPLETE: {Name: "complete type name text auto", Help: "补全", Actions: mdb.RenderAction()}}) -} -func init() { - Index.MergeCommands(ice.Commands{TEMPLATE: {Name: "template type name text auto", Help: "模板", Actions: mdb.RenderAction()}}) -} -func init() { - Index.MergeCommands(ice.Commands{NAVIGATE: {Name: "navigate type name text auto", Help: "跳转", Actions: mdb.RenderAction()}}) } diff --git a/core/code/xterm.go b/core/code/xterm.go index e93c061a..046f8f5f 100644 --- a/core/code/xterm.go +++ b/core/code/xterm.go @@ -103,7 +103,7 @@ func init() { web.WEBSITE: {Name: "website", Help: "打开", Hand: func(m *ice.Message, arg ...string) { web.ProcessWebsite(m, "", "", m.OptionSimple(mdb.HASH)) }}, - }, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text,init", mdb.TOOLS, FAVOR), ctx.CmdAction(), ctx.ProcessAction()), Hand: func(m *ice.Message, arg ...string) { + }, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text,init", mdb.TOOLS, FAVOR), ctx.ProcessAction()), Hand: func(m *ice.Message, arg ...string) { if mdb.HashSelect(m, arg...); len(arg) == 0 { m.PushAction(web.WEBSITE, mdb.REMOVE) m.Action(mdb.CREATE, mdb.PRUNES) diff --git a/core/code/zml.go b/core/code/zml.go index 144ba30a..7e83a50a 100644 --- a/core/code/zml.go +++ b/core/code/zml.go @@ -6,7 +6,6 @@ import ( ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/ctx" - "shylinux.com/x/icebergs/base/gdb" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/core/chat" @@ -28,10 +27,10 @@ func init() { ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(mdb.RENDER, mdb.CREATE, nfs.ZML, m.PrefixKey()) m.Cmd(mdb.ENGINE, mdb.CREATE, nfs.ZML, m.PrefixKey()) - gdb.Watch(m, VIMER_TEMPLATE) - gdb.Watch(m, VIMER_COMPLETE) + m.Cmd(TEMPLATE, mdb.CREATE, m.CommandKey(), m.PrefixKey()) + m.Cmd(COMPLETE, mdb.CREATE, m.CommandKey(), m.PrefixKey()) }}, - VIMER_TEMPLATE: {Hand: func(m *ice.Message, arg ...string) { + TEMPLATE: {Hand: func(m *ice.Message, arg ...string) { switch kit.Ext(m.Option(mdb.FILE)) { case ZML: m.Echo(` @@ -70,7 +69,7 @@ func init() { `) } }}, - VIMER_COMPLETE: {Hand: func(m *ice.Message, arg ...string) { + COMPLETE: {Hand: func(m *ice.Message, arg ...string) { switch kit.Select("", kit.Slice(kit.Split(m.Option(mdb.TEXT), "\t \n`"), -1), 0) { case mdb.TYPE: m.Push(mdb.NAME, "menu") diff --git a/core/wiki/field.go b/core/wiki/field.go index 1fd1bbfb..f8651ed8 100644 --- a/core/wiki/field.go +++ b/core/wiki/field.go @@ -78,6 +78,7 @@ func _field_show(m *ice.Message, name, text string, arg ...string) { kit.Value(meta, kit.Keys(FEATURE, "mode"), "simple") if meta["msg"] = msg.FormatMeta(); text == "web.code.inner" { meta["plug"] = kit.UnMarshal(m.Cmdx(mdb.PLUGIN, kit.Ext(name))) + kit.Value(meta, kit.Keys(FEATURE, "display"), "/plugin/local/code/inner.js") kit.Value(meta, ARGS, kit.List(path.Dir(name)+ice.PS, path.Base(name))) } diff --git a/core/wiki/word.go b/core/wiki/word.go index 283a68d8..8dd027c9 100644 --- a/core/wiki/word.go +++ b/core/wiki/word.go @@ -2,6 +2,7 @@ package wiki import ( "path" + "strings" ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/aaa" @@ -25,7 +26,7 @@ const WORD = "word" func init() { Index.Merge(&ice.Context{Configs: ice.Configs{ - WORD: {Name: WORD, Help: "语言文字", Value: kit.Data( + WORD: {Name: WORD, Help: "笔记文档", Value: kit.Data( nfs.PATH, "", lex.REGEXP, ".*\\.shy", mdb.ALIAS, kit.Dict( NAVMENU, kit.List(TITLE, NAVMENU), PREMENU, kit.List(TITLE, PREMENU), @@ -40,7 +41,7 @@ func init() { mdb.FIELD, "time,hash,type,name,text", )}, }, Commands: ice.Commands{ - WORD: {Name: "word path=src/main.shy@key list play", Help: "语言文字", Actions: ice.MergeActions(ice.Actions{ + WORD: {Name: "word path=src/main.shy@key list play", Help: "笔记文档", Actions: ice.MergeActions(ice.Actions{ ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.PrefixKey()) m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, ice.SRC_MAIN_SHY) @@ -57,6 +58,11 @@ func init() { m.PushSearch(value) } }) + m.Cmd("", mdb.INPUTS).Tables(func(value ice.Maps) { + if strings.Contains(value[nfs.PATH], arg[1]) { + m.PushSearch(mdb.TYPE, "shy", mdb.NAME, value[nfs.PATH], value) + } + }) }}, mdb.CREATE: {Name: "create", Help: "创建", Hand: func(m *ice.Message, arg ...string) { m.Cmd(mdb.INSERT, m.PrefixKey(), "", mdb.HASH, arg) diff --git a/misc/tmux/tmux.shy b/misc/tmux/tmux.shy index 28c9fad7..e0caf7ad 100644 --- a/misc/tmux/tmux.shy +++ b/misc/tmux/tmux.shy @@ -6,10 +6,170 @@ refer ` ` chapter "源码" -field "下载" web.code.tmux.tmux -field "源码" web.code.inner args `usr/install/tmux-3.2/ cmd-bind-key.c` +field "终端" web.code.tmux.tmux +field "源码" web.code.ctags.inner args `usr/install/tmux-3.2/ cmd-bind-key.c` +field "文档" web.code.ctags.nroff args `usr/install/tmux-3.2/ tmux.1` +field "计数" web.code.git.count args `usr/install/tmux-3.2/` + +option ctags.path `usr/install/tmux-3.2/` + +web.code.ctags.chain ` +tmux + tmux.c + tmux.h + client.c + server.c + server-client.c + server-fn.c + session.c + window.c + window-buffer.c + window-client.c + window-clock.c + window-copy.c + window-customize.c + window-tree.c + layout.c + layout-custom.c + layout-set.c + status.c + popup.c + menu.c + + mode-tree.c + names.c + screen.c + screen-redraw.c + screen-write.c + grid-reader.c + grid-view.c + attributes.c + grid.c + resize.c + arguments.c + environ.c + options.c + options-table.c + control.c + control-notify.c + notify.c + paste.c + alerts.c + + input.c + input-keys.c + key-string.c + key-bindings.c + + tty.c + tty-acs.c + tty-keys.c + tty-term.c + tty-features.c + + compat + compat.h + + cfg.c + log.c + job.c + file.c + proc.c + spawn.c + + utf8.c + regsub.c + style.c + colour.c + format.c + format-draw.c + + xmalloc.c + xmalloc.h + + osdep-aix.c + osdep-cygwin.c + osdep-darwin.c + osdep-dragonfly.c + osdep-freebsd.c + osdep-haiku.c + osdep-hpux.c + osdep-linux.c + osdep-netbsd.c + osdep-openbsd.c + osdep-sunos.c + osdep-unknown.c + + cmd.c + cmd-attach-session.c + cmd-bind-key.c + cmd-break-pane.c + cmd-capture-pane.c + cmd-choose-tree.c + cmd-command-prompt.c + cmd-confirm-before.c + cmd-copy-mode.c + cmd-detach-client.c + cmd-display-menu.c + cmd-display-message.c + cmd-display-panes.c + cmd-find.c + cmd-find-window.c + cmd-if-shell.c + cmd-join-pane.c + cmd-kill-pane.c + cmd-kill-server.c + cmd-kill-session.c + cmd-kill-window.c + cmd-list-buffers.c + cmd-list-clients.c + cmd-list-keys.c + cmd-list-panes.c + cmd-list-sessions.c + cmd-list-windows.c + cmd-load-buffer.c + cmd-lock-server.c + cmd-move-window.c + cmd-new-session.c + cmd-new-window.c + cmd-parse.y + cmd-paste-buffer.c + cmd-pipe-pane.c + cmd-queue.c + cmd-refresh-client.c + cmd-rename-session.c + cmd-rename-window.c + cmd-resize-pane.c + cmd-resize-window.c + cmd-respawn-pane.c + cmd-respawn-window.c + cmd-rotate-window.c + cmd-run-shell.c + cmd-save-buffer.c + cmd-select-layout.c + cmd-select-pane.c + cmd-select-window.c + cmd-send-keys.c + cmd-set-buffer.c + cmd-set-environment.c + cmd-set-option.c + cmd-show-environment.c + cmd-show-messages.c + cmd-show-options.c + cmd-source-file.c + cmd-split-window.c + cmd-swap-pane.c + cmd-swap-window.c + cmd-switch-client.c + cmd-unbind-key.c + cmd-wait-for.c +` section "构建" +refer ` +https://github.com/libevent/libevent +https://invisible-mirror.net/archives/ncurses/ +` shell ` yum install -y wget make gcc yum install -y libevent-devel.x86_64 ncurses-devel.x86_64 @@ -33,4 +193,3 @@ field "文本" web.code.tmux.text field "缓存" web.code.tmux.buffer field "脚本" web.code.tmux.script field "会话" web.code.tmux.session -