From 5669803c4fe8650ea2890abe6c52f1f29f0d62e5 Mon Sep 17 00:00:00 2001 From: harveyshao Date: Sat, 15 Oct 2022 01:50:02 +0800 Subject: [PATCH] opt code --- core/code/code.go | 2 +- core/code/favor.go | 5 ++--- core/code/inner.go | 44 +++++++++++++++++++++++++------------------- core/code/vimer.go | 33 ++++++++++----------------------- core/code/xterm.go | 3 +-- misc/git/status.go | 1 + 6 files changed, 40 insertions(+), 48 deletions(-) diff --git a/core/code/code.go b/core/code/code.go index 07238230..2720ded9 100644 --- a/core/code/code.go +++ b/core/code/code.go @@ -22,7 +22,7 @@ var Index = &ice.Context{Name: CODE, Help: "编程中心", Commands: ice.Command func init() { web.Index.Register(Index, &web.Frame{}, INSTALL, UPGRADE, WEBPACK, BINPACK, AUTOGEN, COMPILE, PUBLISH, - FAVOR, XTERM, INNER, VIMER, PPROF, BENCH, + VIMER, INNER, FAVOR, XTERM, PPROF, BENCH, C, SH, SHY, GO, JS, ) } diff --git a/core/code/favor.go b/core/code/favor.go index 5024c493..5f76faef 100644 --- a/core/code/favor.go +++ b/core/code/favor.go @@ -21,7 +21,7 @@ func init() { INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) { ctx.Process(m, m.ActionKey(), m.OptionSplit(nfs.PATH, nfs.FILE, nfs.LINE), arg...) }}, - "click": {Name: "click", Help: "源码", Hand: func(m *ice.Message, arg ...string) { + "click": {Name: "click", Help: "应用", Hand: func(m *ice.Message, arg ...string) { m.Cmd(cli.DAEMON, m.Option(mdb.TYPE)) }}, }, mdb.ZoneAction(mdb.SHORT, mdb.ZONE, mdb.FIELD, "time,id,type,name,text,path,file,line")), Hand: func(m *ice.Message, arg ...string) { @@ -29,8 +29,7 @@ func init() { 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] == "")) - }) - m.Option(ctx.STYLE, arg[0]) + }).Option(ctx.STYLE, arg[0]) } }}, }) diff --git a/core/code/inner.go b/core/code/inner.go index 44cadb0e..1fcb0ffc 100644 --- a/core/code/inner.go +++ b/core/code/inner.go @@ -1,5 +1,5 @@ package code - + import ( "bufio" "path" @@ -37,6 +37,9 @@ func _inner_exec(m *ice.Message, ext, file, dir string) { } 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) { + if strings.HasPrefix(l, "!_") { + continue + } ls := strings.SplitN(l, ice.TB, 3) if len(ls) < 3 { continue @@ -44,25 +47,28 @@ func _inner_tags(m *ice.Message, dir string, value string) { file, ls := ls[1], strings.SplitN(ls[2], ";\"", 2) text := strings.TrimSuffix(strings.TrimPrefix(ls[0], "/^"), "$/") - line := kit.Int(text) - - f, e := nfs.OpenFile(m, kit.Path(dir, file)) - m.Assert(e) - defer f.Close() - - bio := bufio.NewScanner(f) - for i := 1; bio.Scan(); i++ { - if i == line || bio.Text() == text { - if dir == "" { - m.PushRecord(kit.Dict(nfs.PATH, path.Dir(file)+ice.PS, nfs.FILE, path.Base(file), nfs.LINE, kit.Format(i), mdb.TEXT, bio.Text())) - } else { - m.PushRecord(kit.Dict(nfs.PATH, dir, nfs.FILE, strings.TrimPrefix(file, nfs.PWD), nfs.LINE, kit.Format(i), mdb.TEXT, bio.Text())) - } - break - } + if text, line := _inner_line(m, kit.Path(dir, file), text); dir == "" { + m.PushRecord(kit.Dict(nfs.PATH, path.Dir(file)+ice.PS, nfs.FILE, path.Base(file), nfs.LINE, kit.Format(line), mdb.TEXT, text)) + } else { + m.PushRecord(kit.Dict(nfs.PATH, dir, nfs.FILE, strings.TrimPrefix(file, nfs.PWD), nfs.LINE, kit.Format(line), mdb.TEXT, text)) } } } +func _inner_line(m *ice.Message, file, text string) (string, int) { + line := kit.Int(text) + + f, e := nfs.OpenFile(m, file) + m.Assert(e) + defer f.Close() + + bio := bufio.NewScanner(f) + for i := 1; bio.Scan(); i++ { + if i == line || bio.Text() == text { + return bio.Text(), i + } + } + return "", 0 +} const ( COMMENT = "comment" @@ -127,7 +133,7 @@ func init() { if len(arg) == 2 && arg[0] == mdb.SEARCH && arg[1] == ctx.COMMAND { return } - m.Cmd(FAVOR, mdb.INSERT, mdb.ZONE, "_vimer", nfs.FILE, arg[0]) + m.Cmd(FAVOR, mdb.INSERT, mdb.ZONE, "_recent_cmd", nfs.FILE, arg[0]) }}, }, 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) && len(arg) == 1 { @@ -143,11 +149,11 @@ func init() { arg[1] = strings.Split(arg[1], ice.FS)[0] _inner_list(m, kit.Ext(arg[1]), arg[1], arg[0]) + defer m.Cmd(FAVOR, mdb.INSERT, mdb.ZONE, "_recent_file", nfs.PATH, arg[0], nfs.FILE, arg[1]) m.Option("tabs", m.Config("show.tabs")) m.Option("plug", m.Config("show.plug")) m.Option("exts", m.Config("show.exts")) ctx.DisplayLocal(m, "") - m.Cmd(FAVOR, mdb.INSERT, mdb.ZONE, "_recent", nfs.PATH, arg[0], nfs.FILE, arg[1]) }}, }}) } diff --git a/core/code/vimer.go b/core/code/vimer.go index c48d0d10..b75c916f 100644 --- a/core/code/vimer.go +++ b/core/code/vimer.go @@ -12,7 +12,6 @@ import ( "shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/tcp" "shylinux.com/x/icebergs/base/web" - "shylinux.com/x/icebergs/core/chat" kit "shylinux.com/x/toolkits" ) @@ -49,6 +48,8 @@ func init() { switch m.Option(ctx.ACTION) { case AUTOGEN, web.DREAM, XTERM: m.Cmdy(m.Option(ctx.ACTION), mdb.INPUTS, arg) + case nfs.SCRIPT, web.WEBSITE: + m.Cmdy(COMPLETE, mdb.FOREACH, kit.Select("", arg, 1), m.Option(ctx.ACTION)) case "extension": nfs.DirDeepAll(m, "usr/volcanos/plugin/local/code/", "inner/", nil, nfs.PATH) default: @@ -56,24 +57,19 @@ func init() { case ctx.INDEX: m.Cmdy(ctx.COMMAND, mdb.SEARCH, ctx.COMMAND, ice.OptionFields(ctx.INDEX)) default: - m.Cmdy(COMPLETE, mdb.FOREACH, kit.Select("", arg, 1), m.Option(ctx.ACTION)) - m.Cmd(mdb.RENDER, kit.Ext(m.Option(nfs.FILE)), m.Option(nfs.FILE), m.Option(nfs.PATH), ice.Option{nfs.DIR_ROOT, ""}).Tables(func(value ice.Maps) { + m.Cmd(mdb.RENDER, kit.Ext(m.Option(nfs.FILE)), m.Option(nfs.FILE), m.Option(nfs.PATH)).Tables(func(value ice.Maps) { m.Push(nfs.PATH, kit.Format("line:%s:%s:%s", value[nfs.LINE], value["kind"], value[mdb.NAME])) }) - m.Option(nfs.DIR_REG, "") for _, p := range kit.Split(kit.Select(m.Option(nfs.PATH), m.Option("paths"))) { nfs.DirDeepAll(m, nfs.PWD, p, nil, nfs.PATH) } m.Cmd(ctx.COMMAND, mdb.SEARCH, ctx.COMMAND, ice.OptionFields(ctx.INDEX)).Tables(func(value ice.Maps) { m.Push(nfs.PATH, "index:"+value[ctx.INDEX]) }) - m.Option(nfs.DIR_TYPE, "") - m.Option(nfs.DIR_DEEP, "") - m.Option(nfs.DIR_ROOT, "") - m.Cmd(web.DREAM).Tables(func(value ice.Maps) { + m.Cmd(web.DREAM, ice.Map{nfs.DIR_TYPE: "", nfs.DIR_DEEP: "", nfs.DIR_ROOT: ""}).Tables(func(value ice.Maps) { m.Push(nfs.PATH, "dream:"+value[mdb.NAME]) }) - m.Cmd(FAVOR, "_open").Tables(func(value ice.Maps) { + m.Cmd(FAVOR, "_system_app").Tables(func(value ice.Maps) { m.Push(nfs.PATH, "_open:"+strings.ToLower(value[mdb.NAME])) }) } @@ -84,17 +80,14 @@ func init() { m.Option(nfs.CONTENT, m.Cmdx("", TEMPLATE)) } m.Cmdy(nfs.SAVE, path.Join(m.Option(nfs.PATH), m.Option(nfs.FILE))) - web.ToastSuccess(m) }}, nfs.TRASH: {Name: "trash path", Help: "删除", Hand: func(m *ice.Message, arg ...string) { m.Cmd(nfs.TRASH, arg[0]) }}, nfs.SCRIPT: {Name: "script file=hi/hi.js", Help: "脚本", Hand: func(m *ice.Message, arg ...string) { - m.Option(nfs.PATH, "src/") m.Cmdy(nfs.DEFS, path.Join(m.Option(nfs.PATH), m.Option(nfs.FILE)), m.Cmdx("", TEMPLATE)) }}, web.WEBSITE: {Name: "website file=hi.zml", Help: "网页", Hand: func(m *ice.Message, arg ...string) { - m.Option(nfs.PATH, "src/website/") m.Cmdy(nfs.DEFS, path.Join(m.Option(nfs.PATH), m.Option(nfs.FILE)), m.Cmdx("", TEMPLATE)) }}, web.DREAM: {Name: "dream name=hi repos", Help: "空间", Hand: func(m *ice.Message, arg ...string) { @@ -103,9 +96,7 @@ func init() { XTERM: {Name: "xterm type=sh name text", Help: "终端", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(XTERM, mdb.CREATE, arg) }}, - FAVOR: {Name: "favor", Help: "收藏", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(FAVOR, arg) - }}, + FAVOR: {Name: "favor", Help: "收藏"}, "keyboard": {Name: "keyboard", Help: "远程控制", Hand: func(m *ice.Message, arg ...string) { hash := m.Cmdx("web.chat.keyboard", mdb.CREATE, web.SPACE, m.Option(ice.MSG_DAEMON), ctx.INDEX, m.Option(ctx.INDEX), "input", "") @@ -113,11 +104,8 @@ func init() { m.PushQRCode(mdb.TEXT, link) m.Push(mdb.NAME, link) }}, - "_open": {Name: "_open", Help: "索引", Hand: func(m *ice.Message, arg ...string) { - m.Cmd(cli.DAEMON, "open", "-a", kit.Split(arg[0], ".", ".")[0]) - }}, - "listTags": {Name: "listTags", Help: "索引", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy("web.code.vim.tags", "listTags", arg) + "_open": {Name: "_open", Help: "打开", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(cli.DAEMON, cli.OPEN, "-a", kit.Split(arg[0], ice.PT, ice.PT)[0]) }}, cli.MAKE: {Name: "make", Help: "构建", Hand: func(m *ice.Message, arg ...string) { _vimer_make(m, m.Option(nfs.PATH), m.Cmd(cli.SYSTEM, cli.MAKE, arg)) @@ -145,13 +133,12 @@ func init() { m.ProcessInner() }}, AUTOGEN: {Name: "create name=h2 help=示例 type=Zone,Hash,Data,Code main=main.go zone key", Help: "模块", Hand: func(m *ice.Message, arg ...string) { - m.Option(nfs.PATH, "src/") m.Cmdy(AUTOGEN, mdb.CREATE, arg) }}, COMPILE: {Name: "compile", Help: "编译", Hand: func(m *ice.Message, arg ...string) { cmds := []string{COMPILE, ice.SRC_MAIN_GO, ice.BIN_ICE_BIN} if strings.HasSuffix(os.Args[0], "contexts.app/Contents/MacOS/contexts") { - m.Option(cli.CMD_ENV, kit.Path("usr/local/go/bin")) + m.Option(cli.CMD_ENV, nfs.PATH, kit.Path("usr/local/go/bin")) cmds = []string{cli.SYSTEM, "make", "app"} } if msg := m.Cmd(cmds); cli.IsSuccess(msg) { @@ -165,7 +152,7 @@ func init() { }}, }, Hand: func(m *ice.Message, arg ...string) { if m.Cmdy(INNER, arg); arg[0] != ctx.ACTION { - m.Action(nfs.SAVE, COMPILE, AUTOGEN, nfs.SCRIPT, chat.WEBSITE, web.DREAM, XTERM) + m.Action(nfs.SAVE, COMPILE, AUTOGEN, nfs.SCRIPT, web.WEBSITE, web.DREAM, XTERM) m.Option("tabs", m.Config("show.tabs")) m.Option("plug", m.Config("show.plug")) m.Option("exts", m.Config("show.exts")) diff --git a/core/code/xterm.go b/core/code/xterm.go index 725b2c51..cbec2c37 100644 --- a/core/code/xterm.go +++ b/core/code/xterm.go @@ -77,9 +77,8 @@ func init() { ctx.ProcessField(m, "", arg, arg...) }}, mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - switch mdb.HashInputs(m, arg).Cmdy(FAVOR, "_xterm", ice.OptionFields(arg[0])).Cut(arg[0]); arg[0] { + switch mdb.HashInputs(m, arg).Cmdy(FAVOR, "_system_term", ice.OptionFields(arg[0])).Cut(arg[0]); arg[0] { case mdb.TYPE: - m.Debug("what %v ", m.FormatsMeta()) if m.Option(nfs.LINE) != "" && m.Option(nfs.FILE) != "" { m.Push(arg[0], "vim +"+m.Option(nfs.LINE)+" "+m.Option(nfs.PATH)+m.Option(nfs.FILE)) } diff --git a/misc/git/status.go b/misc/git/status.go index 89f36aca..4cbc7d84 100644 --- a/misc/git/status.go +++ b/misc/git/status.go @@ -322,6 +322,7 @@ func init() { return } if len(arg) == 0 { + web.ToastProcess(m) m.Action(PULL, MAKE, PUSH, TAGS, PIE, code.PUBLISH) files, adds, dels, last := _status_list(m) m.Status("cost", m.FormatCost(), "repos", m.Length(), "files", files, "adds", adds, "dels", dels, "last", last.Format(ice.MOD_TIME))