diff --git a/core/code/code.go b/core/code/code.go index f8b34152..c66040c8 100644 --- a/core/code/code.go +++ b/core/code/code.go @@ -3,6 +3,7 @@ package code import ( ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/web" + kit "shylinux.com/x/toolkits" ) const CODE = "code" @@ -16,3 +17,5 @@ func init() { C, SH, SHY, GO, JS, ) } + +func Prefix(arg ...string) string { return kit.Keys(web.WEB, CODE, arg) } diff --git a/core/code/inner.go b/core/code/inner.go index 14a9f57b..1fab662a 100644 --- a/core/code/inner.go +++ b/core/code/inner.go @@ -12,6 +12,7 @@ import ( "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" ) @@ -131,27 +132,12 @@ func init() { _inner_exec(m, arg[0], arg[1], arg[2]) }}, mdb.SEARCH: {Name: "search", Help: "搜索", Hand: func(m *ice.Message, arg ...string) { - _inner_tags(m, m.Option(nfs.PATH), arg[1]) - if m.Length() == 0 { + if _inner_tags(m, m.Option(nfs.PATH), arg[1]); m.Length() == 0 { _inner_tags(m, "", arg[1]) } - return - m.Option(nfs.DIR_ROOT, arg[2]) - m.Option(cli.CMD_DIR, kit.Path(arg[2])) - m.Cmdy(mdb.SEARCH, arg[0], arg[1], arg[2]) - m.Cmd(FAVOR, arg[1], ice.OptionFields(""), func(value ice.Maps) { - if p := path.Join(value[nfs.PATH], value[nfs.FILE]); strings.HasPrefix(p, m.Option(nfs.PATH)) { - m.Push(nfs.FILE, strings.TrimPrefix(p, m.Option(nfs.PATH))) - m.Push(nfs.LINE, value[nfs.LINE]) - m.Push(mdb.TEXT, value[mdb.TEXT]) - } - }) - if m.StatusTimeCount(mdb.INDEX, 0); m.Length() == 0 { - m.Cmdy(INNER, nfs.GREP, arg[1]) - } }}, mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - if m.Option(ctx.ACTION) == "website" { + 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() @@ -163,16 +149,13 @@ func init() { case cli.MAIN: m.Cmdy(nfs.DIR, ice.SRC, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_REG, `.*\.go`)).ProcessAgain() case mdb.ZONE: - m.Option(nfs.DIR_ROOT, ice.SRC) - m.Option(nfs.DIR_TYPE, nfs.DIR) - m.Cmdy(nfs.DIR, nfs.PWD, mdb.NAME).RenameAppend(mdb.NAME, 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) - m.ProcessAgain() + 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() @@ -182,8 +165,7 @@ func init() { }}, nfs.GREP: {Name: "grep", Help: "搜索", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(nfs.GREP, m.Option(nfs.PATH), arg[0]) - m.StatusTimeCount(mdb.INDEX, 0) + m.Cmdy(nfs.GREP, m.Option(nfs.PATH), arg[0]).StatusTimeCount(mdb.INDEX, 0) }}, nfs.TAGS: {Name: "tags", Help: "索引", Hand: func(m *ice.Message, arg ...string) { if _inner_tags(m, m.Option(nfs.PATH), arg[0]); m.Length() == 0 { @@ -215,9 +197,9 @@ func init() { m.Option("keys", list) m.Option("module", ice.Info.Make.Module) + m.Option("tabs", m.Config("show.tabs")) m.Option("plug", m.Config("show.plug")) m.Option("exts", m.Config("show.exts")) - m.Option("tabs", m.Config("show.tabs")) arg[1] = strings.Split(arg[1], ice.FS)[0] if _inner_list(m, kit.Ext(arg[1]), arg[1], arg[0]); m.IsErrNotFound() { @@ -245,7 +227,6 @@ func init() { )}, }}) } - func PlugAction() ice.Actions { return ice.Actions{ mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) { m.Echo(m.Config(PLUG)) }}, diff --git a/core/code/vimer.go b/core/code/vimer.go index 9bd4f1f2..6d74270d 100644 --- a/core/code/vimer.go +++ b/core/code/vimer.go @@ -91,6 +91,8 @@ func _vimer_inputs(m *ice.Message, arg ...string) { m.Cmdy(web.DREAM, mdb.INPUTS, arg) case AUTOGEN: m.Cmdy(AUTOGEN, mdb.INPUTS, arg) + case XTERM: + m.Cmdy(XTERM, mdb.INPUTS, arg) default: switch arg[0] { case ctx.INDEX: @@ -105,7 +107,6 @@ func _vimer_inputs(m *ice.Message, arg ...string) { } } } - func _vimer_complete(m *ice.Message, arg ...string) { switch left := kit.Select("", kit.Slice(kit.Split(m.Option(mdb.TEXT), "\t \n`"), -1), 0); kit.Ext(m.Option(nfs.FILE)) { case nfs.ZML: @@ -156,11 +157,27 @@ func _vimer_go_complete(m *ice.Message, name string, arg ...string) *ice.Message return m } +const ( + VIMER_TEMPLATE = "vimer.template" + VIMER_COMPLETE = "vimer.complete" + + COMPLETE = "complete" + // TEMPLATE = "template" +) 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, "")) + } + }}, + mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { + _vimer_inputs(m, arg...) + }}, + nfs.SAVE: {Name: "save type file path", Help: "保存", Hand: func(m *ice.Message, arg ...string) { m.Option(nfs.CONTENT, kit.Select(_vimer_defs(m, kit.Ext(m.Option(nfs.FILE))), m.Option(nfs.CONTENT))) m.Cmdy(nfs.SAVE, path.Join(m.Option(nfs.PATH), m.Option(nfs.FILE))) @@ -168,9 +185,7 @@ func init() { nfs.TRASH: {Name: "trash path", Help: "删除", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(nfs.TRASH, arg[0]) }}, - 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) - }}, + 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) @@ -178,6 +193,9 @@ func init() { _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.Option(mdb.TEXT, strings.TrimSpace(kit.Select(_vimer_defs(m, kit.Ext(m.Option(nfs.FILE))), m.Option(mdb.TEXT)))) m.Cmdy(TEMPLATE, nfs.DEFS) @@ -190,28 +208,23 @@ func init() { 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.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, "")) - } + TEMPLATE: {Name: "template", Help: "模板", Hand: func(m *ice.Message, arg ...string) { + // _vimer_template(m, arg...) }}, - mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - _vimer_inputs(m, arg...) - }}, - "complete": {Name: "complete", Help: "补全", Hand: func(m *ice.Message, arg ...string) { + COMPLETE: {Name: "complete", Help: "补全", Hand: func(m *ice.Message, arg ...string) { _vimer_complete(m, arg...) }}, "listTags": {Name: "listTags", Help: "索引", Hand: func(m *ice.Message, arg ...string) { m.Cmdy("web.code.vim.tags", "listTags", arg) }}, - "unpack": {Name: "unpack", Help: "导出文件", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(BINPACK, mdb.EXPORT) - }}, 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)) @@ -228,16 +241,17 @@ func init() { }}, }, Hand: func(m *ice.Message, arg ...string) { m.Cmdy(INNER, arg) + m.Option("tabs", m.Config("show.tabs")) m.Option("plug", m.Config("show.plug")) m.Option("exts", m.Config("show.exts")) - m.Option("tabs", m.Config("show.tabs")) + if arg[0] != ctx.ACTION { ctx.DisplayLocal(m, "") - m.Action(nfs.SAVE, COMPILE, AUTOGEN, nfs.SCRIPT, chat.WEBSITE, web.DREAM) + m.Action(nfs.SAVE, COMPILE, AUTOGEN, nfs.SCRIPT, chat.WEBSITE, web.DREAM, XTERM) } }}, }) } func ProcessVimer(m *ice.Message, path, file, line string, arg ...string) { - ctx.ProcessField(m, "web.code.vimer", kit.Simple(path, file, line), arg...) + ctx.ProcessField(m, Prefix(VIMER), kit.Simple(path, file, line), arg...) } diff --git a/core/code/xterm.go b/core/code/xterm.go index 20f921f6..2aaf25bc 100644 --- a/core/code/xterm.go +++ b/core/code/xterm.go @@ -30,7 +30,6 @@ func _xterm_get(m *ice.Message, h string) _xterm { return mdb.HashTarget(m, h, func() ice.Any { ls := kit.Split(kit.Select(nfs.SH, t)) cmd := exec.Command(cli.SystemFind(m, ls[0]), ls[1:]...) - cmd.Env = append(os.Environ(), "TERM=xterm") tty, err := pty.Start(cmd) m.Assert(err) @@ -66,7 +65,8 @@ func init() { } }}, mdb.CREATE: {Name: "create type=sh name", Help: "创建", Hand: func(m *ice.Message, arg ...string) { - mdb.HashCreate(m.Spawn(), mdb.NAME, m.Option(mdb.TYPE), m.OptionSimple(mdb.TYPE, mdb.NAME)) + mdb.HashCreate(m, mdb.NAME, kit.Split(m.Option(mdb.TYPE))[0], m.OptionSimple(mdb.TYPE, mdb.NAME)) + m.ProcessRefresh3ms() }}, "resize": {Name: "resize", Help: "大小", Hand: func(m *ice.Message, arg ...string) { pty.Setsize(_xterm_get(m, m.Option(mdb.HASH)).File, &pty.Winsize{Rows: uint16(kit.Int(m.Option("rows"))), Cols: uint16(kit.Int(m.Option("cols")))}) @@ -97,7 +97,7 @@ func init() { func ProcessXterm(m *ice.Message, args []string, arg ...string) { if len(arg) == 0 || arg[0] != ice.RUN { - args = []string{m.Cmdx("web.code.xterm", mdb.CREATE, args)} + args = []string{m.Cmdx(Prefix(XTERM), mdb.CREATE, args)} } - ctx.ProcessField(m, "web.code.xterm", args, arg...) + ctx.ProcessField(m, Prefix(XTERM), args, arg...) } diff --git a/misc/vim/tags.go b/misc/vim/tags.go index 3835ae1f..5fd18c7e 100644 --- a/misc/vim/tags.go +++ b/misc/vim/tags.go @@ -104,6 +104,15 @@ func init() { }) 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) {