From 03a7527f4bcd40448e382e29f7500a48dc22240f Mon Sep 17 00:00:00 2001 From: shaoying Date: Sat, 30 Jan 2021 17:50:14 +0800 Subject: [PATCH] opt code --- base/ssh/service.go | 56 ---------- base/ssh/service_darwin.go | 6 ++ base/ssh/service_linux.go | 63 +++++++++++ base/ssh/service_windows.go | 8 ++ base/web/serve.go | 5 +- conf.go | 9 +- core/code/autogen.go | 23 ++-- core/code/bench.go | 66 ++++++------ core/code/c.go | 7 ++ core/code/code.go | 3 +- core/code/code.shy | 19 ++-- core/code/compile.go | 24 ++--- core/code/favor.go | 2 +- core/code/go.go | 57 ++-------- core/code/inner.go | 22 ++-- core/code/install.go | 2 +- core/code/js.go | 9 +- core/code/pack.go | 209 ------------------------------------ core/code/pprof.go | 18 +++- core/code/publish.go | 18 ++-- core/code/shy.go | 10 +- core/code/vimer.go | 14 ++- misc.go | 9 ++ 23 files changed, 233 insertions(+), 426 deletions(-) delete mode 100644 core/code/pack.go diff --git a/base/ssh/service.go b/base/ssh/service.go index 04169892..d9cf632e 100644 --- a/base/ssh/service.go +++ b/base/ssh/service.go @@ -13,13 +13,10 @@ import ( "encoding/base64" "errors" "fmt" - "io" "net" "os" "path" "strings" - - "github.com/kr/pty" ) func _ssh_meta(conn ssh.ConnMetadata) map[string]string { @@ -93,59 +90,6 @@ func _ssh_accept(m *ice.Message, h string, c net.Conn) { }(channel, requests) } } -func _ssh_handle(m *ice.Message, meta map[string]string, c net.Conn, channel ssh.Channel, requests <-chan *ssh.Request) { - m.Logs(CHANNEL, tcp.HOSTPORT, c.RemoteAddr(), "->", c.LocalAddr()) - defer m.Logs("dischan", tcp.HOSTPORT, c.RemoteAddr(), "->", c.LocalAddr()) - - shell := kit.Select("bash", os.Getenv("SHELL")) - list := []string{"PATH=" + os.Getenv("PATH")} - - pty, tty, err := pty.Open() - if m.Warn(err != nil, err) { - return - } - defer tty.Close() - - h := m.Rich(CHANNEL, "", kit.Data(kit.MDB_STATUS, tcp.OPEN, TTY, tty.Name(), meta)) - meta[CHANNEL] = h - - for request := range requests { - m.Logs("request", tcp.HOSTPORT, c.RemoteAddr(), kit.MDB_TYPE, request.Type) - - switch request.Type { - case "pty-req": - termLen := request.Payload[3] - termEnv := string(request.Payload[4 : termLen+4]) - _ssh_size(pty.Fd(), request.Payload[termLen+4:]) - list = append(list, "TERM="+termEnv) - - case "window-change": - _ssh_size(pty.Fd(), request.Payload) - - case "env": - var env struct{ Name, Value string } - if err := ssh.Unmarshal(request.Payload, &env); err != nil { - continue - } - list = append(list, env.Name+"="+env.Value) - - case "exec": - _ssh_exec(m, shell, []string{"-c", string(request.Payload[4 : request.Payload[3]+4])}, list, channel, func() { - channel.Close() - }) - case "shell": - m.Go(func() { io.Copy(channel, pty) }) - - _ssh_exec(m, shell, nil, list, tty, func() { - defer m.Cmd(mdb.MODIFY, CHANNEL, "", mdb.HASH, kit.MDB_HASH, h, kit.MDB_STATUS, tcp.CLOSE) - _ssh_close(m, c, channel) - }) - - _ssh_watch(m, meta, h, channel, pty, channel) - } - request.Reply(true, nil) - } -} const SERVICE = "service" diff --git a/base/ssh/service_darwin.go b/base/ssh/service_darwin.go index 266d3410..c5e7740f 100644 --- a/base/ssh/service_darwin.go +++ b/base/ssh/service_darwin.go @@ -1,7 +1,11 @@ package ssh import ( + ice "github.com/shylinux/icebergs" + "golang.org/x/crypto/ssh" + "encoding/binary" + "net" "syscall" "unsafe" ) @@ -13,3 +17,5 @@ func _ssh_size(fd uintptr, b []byte) { ws := &Winsize{Width: uint16(w), Height: uint16(h)} syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(syscall.TIOCSWINSZ), uintptr(unsafe.Pointer(ws))) } +func _ssh_handle(m *ice.Message, meta map[string]string, c net.Conn, channel ssh.Channel, requests <-chan *ssh.Request) { +} diff --git a/base/ssh/service_linux.go b/base/ssh/service_linux.go index 266d3410..73773596 100644 --- a/base/ssh/service_linux.go +++ b/base/ssh/service_linux.go @@ -1,7 +1,17 @@ package ssh import ( + ice "github.com/shylinux/icebergs" + "github.com/shylinux/icebergs/base/mdb" + "github.com/shylinux/icebergs/base/tcp" + kit "github.com/shylinux/toolkits" + "golang.org/x/crypto/ssh" + "encoding/binary" + "github.com/kr/pty" + "io" + "net" + "os" "syscall" "unsafe" ) @@ -13,3 +23,56 @@ func _ssh_size(fd uintptr, b []byte) { ws := &Winsize{Width: uint16(w), Height: uint16(h)} syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(syscall.TIOCSWINSZ), uintptr(unsafe.Pointer(ws))) } +func _ssh_handle(m *ice.Message, meta map[string]string, c net.Conn, channel ssh.Channel, requests <-chan *ssh.Request) { + m.Logs(CHANNEL, tcp.HOSTPORT, c.RemoteAddr(), "->", c.LocalAddr()) + defer m.Logs("dischan", tcp.HOSTPORT, c.RemoteAddr(), "->", c.LocalAddr()) + + shell := kit.Select("bash", os.Getenv("SHELL")) + list := []string{"PATH=" + os.Getenv("PATH")} + + pty, tty, err := pty.Open() + if m.Warn(err != nil, err) { + return + } + defer tty.Close() + + h := m.Rich(CHANNEL, "", kit.Data(kit.MDB_STATUS, tcp.OPEN, TTY, tty.Name(), meta)) + meta[CHANNEL] = h + + for request := range requests { + m.Logs("request", tcp.HOSTPORT, c.RemoteAddr(), kit.MDB_TYPE, request.Type) + + switch request.Type { + case "pty-req": + termLen := request.Payload[3] + termEnv := string(request.Payload[4 : termLen+4]) + _ssh_size(pty.Fd(), request.Payload[termLen+4:]) + list = append(list, "TERM="+termEnv) + + case "window-change": + _ssh_size(pty.Fd(), request.Payload) + + case "env": + var env struct{ Name, Value string } + if err := ssh.Unmarshal(request.Payload, &env); err != nil { + continue + } + list = append(list, env.Name+"="+env.Value) + + case "exec": + _ssh_exec(m, shell, []string{"-c", string(request.Payload[4 : request.Payload[3]+4])}, list, channel, func() { + channel.Close() + }) + case "shell": + m.Go(func() { io.Copy(channel, pty) }) + + _ssh_exec(m, shell, nil, list, tty, func() { + defer m.Cmd(mdb.MODIFY, CHANNEL, "", mdb.HASH, kit.MDB_HASH, h, kit.MDB_STATUS, tcp.CLOSE) + _ssh_close(m, c, channel) + }) + + _ssh_watch(m, meta, h, channel, pty, channel) + } + request.Reply(true, nil) + } +} diff --git a/base/ssh/service_windows.go b/base/ssh/service_windows.go index ca29f9b8..0064d21e 100644 --- a/base/ssh/service_windows.go +++ b/base/ssh/service_windows.go @@ -1,4 +1,12 @@ package ssh +import ( + ice "github.com/shylinux/icebergs" + "golang.org/x/crypto/ssh" + "net" +) + func _ssh_size(fd uintptr, b []byte) { } +func _ssh_handle(m *ice.Message, meta map[string]string, c net.Conn, channel ssh.Channel, requests <-chan *ssh.Request) { +} diff --git a/base/web/serve.go b/base/web/serve.go index 35c05c82..732f4d86 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -52,7 +52,7 @@ func _serve_main(m *ice.Message, w http.ResponseWriter, r *http.Request) bool { // 调试接口 if strings.HasPrefix(r.URL.Path, "/debug") { r.URL.Path = strings.Replace(r.URL.Path, "/debug", "/code", -1) - return false + return true } // 主页接口 @@ -61,6 +61,9 @@ func _serve_main(m *ice.Message, w http.ResponseWriter, r *http.Request) bool { if msg.W, msg.R = w, r; strings.Contains(r.Header.Get("User-Agent"), "curl") { Render(msg, ice.RENDER_DOWNLOAD, kit.Path(m.Conf(SERVE, "meta.intshell.path"), m.Conf(SERVE, "meta.intshell.index"))) } else { + if ice.DumpBinPack(w, r.URL.Path, func(name string) { RenderType(w, name, "") }) { + return false + } Render(msg, ice.RENDER_DOWNLOAD, kit.Path(m.Conf(SERVE, "meta.volcanos.path"), m.Conf(SERVE, "meta.volcanos.index"))) } return false diff --git a/conf.go b/conf.go index 1f189fe3..8b13c86e 100644 --- a/conf.go +++ b/conf.go @@ -62,10 +62,11 @@ const ( // RENDER RENDER_TEMPLATE = "_template" ) const ( // PROCESS - PROCESS_REFRESH = "_refresh" - PROCESS_FOLLOW = "_follow" - PROCESS_INNER = "_inner" - PROCESS_FIELD = "_field" + PROCESS_PROGRESS = "_progress" + PROCESS_REFRESH = "_refresh" + PROCESS_FOLLOW = "_follow" + PROCESS_INNER = "_inner" + PROCESS_FIELD = "_field" FIELD_PREFIX = "_prefix" CONTROL_PAGE = "_page" diff --git a/core/code/autogen.go b/core/code/autogen.go index 6cb541b5..eba736a0 100644 --- a/core/code/autogen.go +++ b/core/code/autogen.go @@ -70,14 +70,6 @@ const AUTOGEN = "autogen" func init() { Index.Merge(&ice.Context{ - Configs: map[string]*ice.Config{ - AUTOGEN: {Name: AUTOGEN, Help: "生成", Value: kit.Data( - kit.MDB_FIELD, "time,id,name,from", "shy", ` -chapter "{{.Option "name"}}" -field "{{.Option "name"}}" web.code.{{.Option "name"}}.{{.Option "name"}} -`, - )}, - }, Commands: map[string]*ice.Command{ AUTOGEN: {Name: "autogen path auto create", Help: "生成", Action: map[string]*ice.Action{ mdb.CREATE: {Name: "create main=src/main.go@key name=hi@key from=usr/icebergs/misc/bash/bash.go@key", Help: "创建", Hand: func(m *ice.Message, arg ...string) { @@ -97,13 +89,14 @@ field "{{.Option "name"}}" web.code.{{.Option "name"}}.{{.Option "name"}} case "main": m.Option(nfs.DIR_REG, ".*.go") m.Cmdy(nfs.DIR, "src", "path,size,time") - m.Sort(kit.MDB_PATH) + m.RenameAppend("path", arg[0]) + case "from": m.Option(nfs.DIR_DEEP, true) m.Option(nfs.DIR_REG, ".*.go") - m.Cmdy(nfs.DIR, "usr/icebergs/misc/", "path,size,time") m.Cmdy(nfs.DIR, "src/", "path,size,time") - m.SortTimeR(kit.MDB_PATH) + m.Cmdy(nfs.DIR, "usr/icebergs/misc/", "path,size,time") + m.RenameAppend("path", arg[0]) } }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { @@ -114,5 +107,13 @@ field "{{.Option "name"}}" web.code.{{.Option "name"}}.{{.Option "name"}} } }}, }, + Configs: map[string]*ice.Config{ + AUTOGEN: {Name: AUTOGEN, Help: "生成", Value: kit.Data( + "shy", ` +chapter "{{.Option "name"}}" +field "{{.Option "name"}}" web.code.{{.Option "name"}}.{{.Option "name"}} +`, + )}, + }, }) } diff --git a/core/code/bench.go b/core/code/bench.go index ee8ec4c1..6097d36d 100644 --- a/core/code/bench.go +++ b/core/code/bench.go @@ -50,7 +50,7 @@ func _bench_http(m *ice.Message, name, target string, arg ...string) { m.Echo(s.Show()) m.Echo("body: %d\n", body) - m.Option(ice.MSG_PROCESS, "_inner") + m.Option(ice.MSG_PROCESS, ice.PROCESS_INNER) } func _bench_redis(m *ice.Message, name, target string, arg ...string) { } @@ -68,6 +68,38 @@ func init() { BENCH: {Name: BENCH, Help: "性能压测", Value: kit.Data(kit.MDB_SHORT, kit.MDB_ZONE)}, }, Commands: map[string]*ice.Command{ + BENCH: {Name: "bench zone id auto insert", Help: "性能压测", Action: map[string]*ice.Action{ + mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(mdb.INSERT, BENCH, "", mdb.HASH, arg) + }}, + mdb.INSERT: {Name: "insert zone type=http,redis name text nconn=3 nreqs=10", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(mdb.INSERT, BENCH, "", mdb.HASH, kit.MDB_ZONE, arg[1]) + m.Cmdy(mdb.INSERT, BENCH, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, arg[2:]) + }}, + mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(mdb.MODIFY, BENCH, _sub_key(m, m.Option(kit.MDB_ZONE)), 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, BENCH, "", mdb.HASH, kit.MDB_ZONE, m.Option(kit.MDB_ZONE)) + }}, + + cli.RUN: {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) { + switch m.Option(kit.MDB_TYPE) { + case "http": + _bench_http(m, m.Option(kit.MDB_NAME), m.Option(kit.MDB_TEXT)) + case "redis": + _bench_redis(m, m.Option(kit.MDB_NAME), m.Option(kit.MDB_TEXT)) + } + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Option(mdb.FIELDS, kit.Select("time,count,zone", kit.Select("time,id,type,name,text,nconn,nreqs", mdb.DETAIL, len(arg) > 1), len(arg) > 0)) + m.Cmdy(mdb.SELECT, BENCH, "", mdb.ZONE, arg) + m.PushAction(kit.Select(mdb.REMOVE, cli.RUN, len(arg) > 0)) + }}, + "/bench": {Name: "/bench cmd...", Help: "性能压测", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Cmdy(m.Optionv("cmd")) + }}, + "test": {Name: "test path func auto run case", Help: "测试用例", Action: map[string]*ice.Action{ "run": {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) { cli.Follow(m, "run", func() { @@ -115,38 +147,6 @@ func init() { m.Option(cli.CMD_DIR, kit.Select(path.Dir(arg[0]), arg[0], strings.HasSuffix(arg[0], "/"))) m.Cmdy(cli.SYSTEM, "go", "test", "./", "-v", "-run="+arg[1]) }}, - BENCH: {Name: "bench zone id auto insert", Help: "性能压测", Action: map[string]*ice.Action{ - mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.INSERT, BENCH, "", mdb.HASH, arg) - }}, - mdb.INSERT: {Name: "insert zone type=http,redis name text nconn=3 nreqs=10", Help: "添加", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.INSERT, BENCH, "", mdb.HASH, kit.MDB_ZONE, arg[1]) - m.Cmdy(mdb.INSERT, BENCH, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, arg[2:]) - }}, - mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.MODIFY, BENCH, _sub_key(m, m.Option(kit.MDB_ZONE)), 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, BENCH, "", mdb.HASH, kit.MDB_ZONE, m.Option(kit.MDB_ZONE)) - }}, - - cli.RUN: {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) { - switch m.Option(kit.MDB_TYPE) { - case "http": - _bench_http(m, m.Option(kit.MDB_NAME), m.Option(kit.MDB_TEXT)) - case "redis": - _bench_redis(m, m.Option(kit.MDB_NAME), m.Option(kit.MDB_TEXT)) - } - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Option(mdb.FIELDS, kit.Select("time,count,zone", kit.Select("time,id,type,name,text,nconn,nreqs", mdb.DETAIL, len(arg) > 1), len(arg) > 0)) - m.Cmdy(mdb.SELECT, BENCH, "", mdb.ZONE, arg) - m.PushAction(kit.Select(mdb.REMOVE, cli.RUN, len(arg) > 0)) - }}, - - "/bench": {Name: "/bench cmd...", Help: "性能压测", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Cmdy(m.Optionv("cmd")) - }}, }, }) } diff --git a/core/code/c.go b/core/code/c.go index fc95c6a6..1a9d918d 100644 --- a/core/code/c.go +++ b/core/code/c.go @@ -61,6 +61,7 @@ func init() { m.Cmd(mdb.PLUGIN, mdb.CREATE, C, m.Prefix(C)) m.Cmd(mdb.RENDER, mdb.CREATE, C, m.Prefix(C)) + m.Cmd(mdb.ENGINE, mdb.CREATE, C, m.Prefix(C)) m.Cmd(mdb.SEARCH, mdb.CREATE, C, m.Prefix(C)) m.Cmd(mdb.PLUGIN, mdb.CREATE, H, m.Prefix(C)) @@ -80,6 +81,12 @@ func init() { mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1])) }}, + mdb.ENGINE: {Hand: func(m *ice.Message, arg ...string) { + m.Option(cli.CMD_DIR, arg[2]) + name := strings.TrimSuffix(arg[1], path.Ext(arg[1])) + ".bin" + m.Cmd(cli.SYSTEM, "gcc", arg[1], "-o", name) + m.Cmdy(cli.SYSTEM, "./"+name) + }}, mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { if arg[0] == kit.MDB_FOREACH { return diff --git a/core/code/code.go b/core/code/code.go index 0ef63532..7282033c 100644 --- a/core/code/code.go +++ b/core/code/code.go @@ -20,8 +20,9 @@ var Index = &ice.Context{Name: CODE, Help: "编程中心", func init() { web.Index.Register(Index, &web.Frame{}, - INSTALL, AUTOGEN, COMPILE, PUBLISH, UPGRADE, + INSTALL, COMPILE, BINPACK, WEBPACK, VIMER, INNER, FAVOR, BENCH, PPROF, + AUTOGEN, PUBLISH, UPGRADE, C, SH, SHY, GO, JS, ) } diff --git a/core/code/code.shy b/core/code/code.shy index 4a56d122..5339f73e 100644 --- a/core/code/code.shy +++ b/core/code/code.shy @@ -22,27 +22,28 @@ field "后端" web.code.go field "前端" web.code.js return - -inner.go vimer.go +inner.go favor.go bench.go pprof.go -install.go -compile.go -autogen.go -publish.go -upgrade.go - c.go sh.go shy.go go.go js.go +install.go +compile.go +binpack.go +webpack.go + +publish.go +upgrade.go +autogen.go + code.go code.shy csdn.go github.go -pack.go diff --git a/core/code/compile.go b/core/code/compile.go index 72fbcf6d..a071d23d 100644 --- a/core/code/compile.go +++ b/core/code/compile.go @@ -7,7 +7,6 @@ import ( "github.com/shylinux/icebergs/base/nfs" kit "github.com/shylinux/toolkits" - "fmt" "os" "path" "strings" @@ -27,7 +26,7 @@ func init() { )}, }, Commands: map[string]*ice.Command{ - COMPILE: {Name: "compile os=linux,darwin,windows arch=amd64,386,arm src=src/main.go@key 执行:button", Help: "编译", Action: map[string]*ice.Action{ + COMPILE: {Name: "compile arch=amd64,386,arm os=linux,darwin,windows src=src/main.go@key 执行:button", Help: "编译", Action: map[string]*ice.Action{ mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(nfs.DIR, "src", "path,size,time") m.Sort(kit.MDB_PATH) @@ -53,26 +52,19 @@ func init() { } // 编译目标 - file := path.Join(kit.Select("", m.Conf(cmd, kit.META_PATH), m.Option(cli.CMD_DIR) == ""), kit.Keys(kit.Select("ice", path.Base(strings.TrimSuffix(main, ".go")), main != "src/main.go"), goos, arch)) - args := []string{"-ldflags"} - list := []string{ - fmt.Sprintf(`-X main.Time="%s"`, m.Time()), - fmt.Sprintf(`-X main.Version="%s"`, m.Cmdx(cli.SYSTEM, "git", "describe", "--tags")), - fmt.Sprintf(`-X main.HostName="%s"`, m.Conf(cli.RUNTIME, "boot.hostname")), - fmt.Sprintf(`-X main.UserName="%s"`, m.Conf(cli.RUNTIME, "boot.username")), - } // 编译参数 m.Optionv(cli.CMD_ENV, kit.Simple(m.Confv(COMPILE, "meta.env"), "GOARCH", arch, "GOOS", goos)) - if msg := m.Cmd(cli.SYSTEM, m.Confv(COMPILE, "meta.go"), args, "'"+strings.Join(list, " ")+"'", "-o", file, main); msg.Append(cli.CMD_CODE) != "0" { + if msg := m.Cmd(cli.SYSTEM, m.Confv(COMPILE, "meta.go"), "-o", file, main); msg.Append(cli.CMD_CODE) != "0" { m.Copy(msg) - } else { - m.Log_EXPORT("source", main, "target", file) - m.Push(kit.MDB_TIME, m.Time()) - m.PushDownload(kit.MergeURL2(m.Option(ice.MSG_USERWEB), "/publish/"+path.Base(file))) - m.Echo(file) + return } + + m.Log_EXPORT("source", main, "target", file) + m.Push(kit.MDB_TIME, m.Time()) + m.PushDownload(file) + m.Echo(file) }}, }, }) diff --git a/core/code/favor.go b/core/code/favor.go index d0b399e2..8ce4e539 100644 --- a/core/code/favor.go +++ b/core/code/favor.go @@ -53,7 +53,7 @@ func init() { return } - m.ShowPlugin("", INNER, mdb.RENDER) + m.ShowPlugin("", m.Prefix(), INNER, INNER, mdb.RENDER) m.Push(kit.SSH_ARG, kit.Format([]string{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) { diff --git a/core/code/go.go b/core/code/go.go index 699cfcbb..7c851453 100644 --- a/core/code/go.go +++ b/core/code/go.go @@ -11,34 +11,22 @@ import ( "os" "path" "strings" + "time" ) func _go_find(m *ice.Message, key string) { - fields := kit.Split(m.Option(mdb.FIELDS)) for _, p := range strings.Split(m.Cmdx(cli.SYSTEM, "find", ".", "-name", key), "\n") { if p == "" { continue } - for _, k := range fields { - switch k { - case kit.MDB_FILE: - m.Push(k, strings.TrimPrefix(p, "./")) - case kit.MDB_LINE: - m.Push(k, 1) - case kit.MDB_TEXT: - m.Push(k, "") - default: - m.Push(k, "") - } - } + m.PushSearch(kit.SSH_CMD, "find", kit.MDB_FILE, strings.TrimPrefix(p, "./"), kit.MDB_LINE, 1, kit.MDB_TEXT, "") } } func _go_tags(m *ice.Message, key string) { - if _, e := os.Stat(path.Join(m.Option(cli.CMD_DIR), ".tags")); e != nil { + if s, e := os.Stat(path.Join(m.Option(cli.CMD_DIR), ".tags")); os.IsNotExist(e) || s.ModTime().Before(time.Now().Add(kit.Duration("-72h"))) { m.Cmd(cli.SYSTEM, "gotags", "-R", "-f", ".tags", "./") } - fields := kit.Split(m.Option(mdb.FIELDS)) ls := strings.Split(key, ".") key = ls[len(ls)-1] @@ -61,54 +49,22 @@ func _go_tags(m *ice.Message, key string) { bio := bufio.NewScanner(f) for i := 1; bio.Scan(); i++ { if i == line || bio.Text() == text { - for _, k := range fields { - switch k { - case kit.MDB_FILE: - m.Push(k, strings.TrimPrefix(file, "./")) - case kit.MDB_LINE: - m.Push(k, i) - case kit.MDB_TEXT: - m.Push(k, bio.Text()) - default: - m.Push(k, "") - } - } + m.PushSearch(kit.SSH_CMD, "tags", kit.MDB_FILE, strings.TrimPrefix(file, "./"), kit.MDB_LINE, kit.Format(i), kit.MDB_TEXT, bio.Text()) } } } } func _go_grep(m *ice.Message, key string) { - fields := kit.Split(m.Option(mdb.FIELDS)) - msg := m.Spawn() msg.Split(m.Cmd(cli.SYSTEM, "grep", "--exclude-dir=.git", "--exclude=.[a-z]*", "-rn", key, ".").Append(cli.CMD_OUT), "file:line:text", ":", "\n") - msg.Table(func(index int, value map[string]string, head []string) { - m.Push("", value, fields) - }) + msg.Table(func(index int, value map[string]string, head []string) { m.PushSearch(kit.SSH_CMD, "grep", value) }) } func _go_help(m *ice.Message, key string) { p := m.Cmd(cli.SYSTEM, "go", "doc", key).Append(cli.CMD_OUT) if p == "" { return } - ls := strings.Split(p, "\n") - if len(ls) > 10 { - ls = ls[:10] - } - res := strings.Join(ls, "\n") - - for _, k := range kit.Split(m.Option(mdb.FIELDS)) { - switch k { - case kit.MDB_FILE: - m.Push(k, key+".godoc") - case kit.MDB_LINE: - m.Push(k, 1) - case kit.MDB_TEXT: - m.Push(k, string(res)) - default: - m.Push(k, "") - } - } + m.PushSearch(kit.SSH_CMD, "help", kit.MDB_FILE, key+".godoc", kit.MDB_LINE, 1, kit.MDB_TEXT, p) } const GO = "go" @@ -134,7 +90,6 @@ func init() { m.Cmd(mdb.PLUGIN, mdb.CREATE, SUM, m.Prefix(SUM)) m.Cmd(mdb.RENDER, mdb.CREATE, SUM, m.Prefix(SUM)) - }}, SUM: {Name: SUM, Help: "版本", Action: map[string]*ice.Action{ mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) { diff --git a/core/code/inner.go b/core/code/inner.go index 15683b81..aa51837a 100644 --- a/core/code/inner.go +++ b/core/code/inner.go @@ -72,23 +72,19 @@ func init() { _inner_show(m, arg[0], arg[1], arg[2]) }}, mdb.SEARCH: {Name: "search", Help: "搜索", Hand: func(m *ice.Message, arg ...string) { + if strings.Contains(arg[1], ";") { + ls := strings.Split(arg[1], ";") + arg[0] = ls[0] + arg[1] = ls[1] + } m.Option(cli.CMD_DIR, arg[2]) m.Option(nfs.DIR_ROOT, arg[2]) - m.Cmdy(mdb.SEARCH, arg[:2], "file,line,text") + m.Cmdy(mdb.SEARCH, arg[:2], "cmd,file,line,text") }}, + mdb.INPUTS: {Name: "favor inputs", Help: "补全"}, - FAVOR: {Name: "favor", Help: "收藏"}, - ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) { - if arg[0] == "run" { - if arg = kit.Split(strings.Join(arg[1:], " ")); !m.Warn(!m.Right(arg)) { - if m.Cmdy(arg); len(m.Appendv(ice.MSG_APPEND)) == 0 && len(m.Resultv()) == 0 { - m.Cmdy(cli.SYSTEM, arg) - } - } - return - } - m.Cmdy(ctx.COMMAND, arg[0]) - }}, + FAVOR: {Name: "favor", Help: "收藏"}, + ctx.COMMAND: {Name: "command", Help: "命令"}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) < 2 { m.Cmdy(nfs.DIR, kit.Select("./", arg, 0)) diff --git a/core/code/install.go b/core/code/install.go index aa759f20..d3704941 100644 --- a/core/code/install.go +++ b/core/code/install.go @@ -34,7 +34,7 @@ func init() { name := path.Base(link) p := path.Join(m.Conf(INSTALL, kit.META_PATH), name) - m.Option(ice.MSG_PROCESS, "_progress") + m.Option(ice.MSG_PROCESS, ice.PROCESS_PROGRESS) m.Option(mdb.FIELDS, m.Conf(INSTALL, kit.META_FIELD)) if m.Cmd(mdb.SELECT, INSTALL, "", mdb.HASH, kit.MDB_NAME, name).Table(func(index int, value map[string]string, head []string) { if _, e := os.Stat(p); e == nil { diff --git a/core/code/js.go b/core/code/js.go index c5de7eb2..8038c856 100644 --- a/core/code/js.go +++ b/core/code/js.go @@ -22,6 +22,7 @@ func init() { ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Cmd(mdb.PLUGIN, mdb.CREATE, JS, m.Prefix(JS)) m.Cmd(mdb.RENDER, mdb.CREATE, JS, m.Prefix(JS)) + m.Cmd(mdb.ENGINE, mdb.CREATE, JS, m.Prefix(JS)) m.Cmd(mdb.SEARCH, mdb.CREATE, JS, m.Prefix(JS)) }}, JS: {Name: JS, Help: "前端", Action: map[string]*ice.Action{ @@ -31,11 +32,15 @@ func init() { mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1])) }}, - mdb.SEARCH: {Name: "search type name text", Hand: func(m *ice.Message, arg ...string) { + mdb.ENGINE: {Hand: func(m *ice.Message, arg ...string) { + m.Option(cli.CMD_DIR, arg[2]) + m.Cmdy(cli.SYSTEM, NODE, arg[1]) + m.Set(ice.MSG_APPEND) + }}, + mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { if arg[0] == kit.MDB_FOREACH { return } - m.Option(cli.CMD_DIR, kit.Select("src", arg, 2)) _go_find(m, kit.Select("main", arg, 1)) _go_grep(m, kit.Select("main", arg, 1)) }}, diff --git a/core/code/pack.go b/core/code/pack.go deleted file mode 100644 index f210fcb7..00000000 --- a/core/code/pack.go +++ /dev/null @@ -1,209 +0,0 @@ -package code - -import ( - ice "github.com/shylinux/icebergs" - "github.com/shylinux/icebergs/base/cli" - "github.com/shylinux/icebergs/base/mdb" - "github.com/shylinux/icebergs/base/nfs" - kit "github.com/shylinux/toolkits" - - "fmt" - "io/ioutil" - "os" - "path" - "strings" -) - -func _pack_file(m *ice.Message, file string) string { - list := "" - if f, e := os.Open(file); e == nil { - defer f.Close() - - if b, e := ioutil.ReadAll(f); e == nil { - list = fmt.Sprintf("%v", b) - } - } - - if list = strings.ReplaceAll(list, " ", ","); len(list) > 0 { - return fmt.Sprintf(`[]byte{%v}`, list[1:len(list)-1]) - } - return "[]byte{}" -} -func _pack_dir(m *ice.Message, pack *os.File, dir string) { - m.Option(nfs.DIR_ROOT, dir) - m.Option(nfs.DIR_DEEP, "true") - m.Option(nfs.DIR_TYPE, nfs.FILE) - - m.Cmd(nfs.DIR, "./").Table(func(index int, value map[string]string, head []string) { - switch strings.Split(value[kit.MDB_PATH], "/")[0] { - case "pluged", "trash": - return - } - - pack.WriteString(fmt.Sprintf(" \"/%s\": %s,\n", - path.Join(dir, value[kit.MDB_PATH]), _pack_file(m, path.Join(dir, value[kit.MDB_PATH])))) - }) - pack.WriteString("\n") -} - -func _pack_volcanos(m *ice.Message, pack *os.File, dir string) { - m.Option(nfs.DIR_ROOT, dir) - m.Option(nfs.DIR_DEEP, "true") - m.Option(nfs.DIR_TYPE, nfs.FILE) - - for _, k := range []string{"favicon.ico", "index.html", "index.css", "index.js", "proto.js", "frame.js", "cache.js", "cache.css"} { - pack.WriteString(fmt.Sprintf(" \"/%s\": %s,\n", - kit.Select("", k, k != "index.html"), _pack_file(m, path.Join(dir, k)))) - } - for _, k := range []string{"lib", "pane", "plugin"} { - m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) { - pack.WriteString(fmt.Sprintf(" \"/%s\": %s,\n", - value[kit.MDB_PATH], _pack_file(m, path.Join(dir, value[kit.MDB_PATH])))) - }) - } - pack.WriteString("\n") -} -func _pack_contexts(m *ice.Message, pack *os.File) { - for _, k := range []string{"src/main.go", "src/main.shy", "src/main.svg"} { - pack.WriteString(fmt.Sprintf(" \"/%s\": %s,\n", - k, _pack_file(m, k))) - } - pack.WriteString("\n") -} - -const WEBPACK = "webpack" -const BINPACK = "binpack" - -func init() { - Index.Merge(&ice.Context{ - Commands: map[string]*ice.Command{ - BINPACK: {Name: "binpack path auto create", Help: "打包", Action: map[string]*ice.Action{ - mdb.CREATE: {Name: "create name=demo from=src/main.go", Help: "创建", Hand: func(m *ice.Message, arg ...string) { - name := kit.Keys(m.Option(kit.MDB_NAME), "go") - if pack, p, e := kit.Create(path.Join(m.Conf(PUBLISH, kit.META_PATH), BINPACK, name)); m.Assert(e) { - defer pack.Close() - - pack.WriteString(m.Cmdx(nfs.CAT, m.Option("from"))) - - pack.WriteString("\n") - pack.WriteString(`func init() {` + "\n") - pack.WriteString(` ice.BinPack = map[string][]byte{` + "\n") - - _pack_volcanos(m, pack, "usr/volcanos") - _pack_dir(m, pack, "usr/learning") - _pack_dir(m, pack, "usr/icebergs") - _pack_dir(m, pack, "usr/toolkits") - _pack_dir(m, pack, "usr/intshell") - _pack_contexts(m, pack) - - pack.WriteString(` }` + "\n") - pack.WriteString(`}` + "\n") - m.Echo(p) - } - - m.Option(cli.CMD_DIR, path.Join(m.Conf(PUBLISH, kit.META_PATH), BINPACK)) - m.Cmd(COMPILE, "windows", "amd64", name) - m.Cmd(COMPILE, "darwin", "amd64", name) - m.Cmd(COMPILE, "linux", "amd64", name) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Option(nfs.DIR_ROOT, path.Join(m.Conf(PUBLISH, kit.META_PATH))) - m.Option(nfs.DIR_TYPE, nfs.FILE) - - m.Cmdy(nfs.DIR, BINPACK).Table(func(index int, value map[string]string, head []string) { - m.PushDownload(value[kit.MDB_PATH]) - }) - }}, - - WEBPACK: {Name: "webpack path auto create", Help: "打包", Action: map[string]*ice.Action{ - mdb.CREATE: {Name: "create name=demo", Help: "创建", Hand: func(m *ice.Message, arg ...string) { - css, _, e := kit.Create(path.Join(m.Conf(WEBPACK, kit.META_PATH), "page/cache.css")) - m.Assert(e) - defer css.Close() - - js, _, e := kit.Create(path.Join(m.Conf(WEBPACK, kit.META_PATH), "page/cache.js")) - m.Assert(e) - defer js.Close() - - m.Option(nfs.DIR_ROOT, m.Conf(WEBPACK, kit.META_PATH)) - m.Option(nfs.DIR_TYPE, nfs.FILE) - m.Option(nfs.DIR_DEEP, true) - - for _, k := range []string{"lib", "pane", "plugin"} { - m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) { - if strings.HasSuffix(value[kit.MDB_PATH], ".css") { - js.WriteString(`Volcanos.meta.cache["` + path.Join("/", value[kit.MDB_PATH]) + "\"] = []\n") - css.WriteString(m.Cmdx(nfs.CAT, value[kit.MDB_PATH])) - } - }) - } - - for _, k := range []string{"lib", "pane", "plugin"} { - m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) { - if strings.HasSuffix(value[kit.MDB_PATH], ".js") { - js.WriteString(`_can_name = "` + path.Join("/", value[kit.MDB_PATH]) + "\";\n") - js.WriteString(m.Cmdx(nfs.CAT, value[kit.MDB_PATH])) - } - }) - } - - for _, k := range []string{"frame.js"} { - js.WriteString(`_can_name = "` + path.Join("/", k) + "\"\n") - js.WriteString(m.Cmdx(nfs.CAT, k)) - } - - if f, _, e := kit.Create("usr/publish/webpack/" + m.Option("name") + ".js"); m.Assert(e) { - defer f.Close() - - f.WriteString(`Volcanos.meta.pack = ` + kit.Formats(kit.UnMarshal(kit.Select("{}", m.Option("content"))))) - } - - m.Option(nfs.DIR_ROOT, "") - if f, p, e := kit.Create("usr/publish/webpack/" + m.Option("name") + ".html"); m.Assert(e) { - f.WriteString(fmt.Sprintf(_pack, - m.Cmdx(nfs.CAT, "usr/volcanos/page/cache.css"), - m.Cmdx(nfs.CAT, "usr/volcanos/page/index.css"), - - m.Cmdx(nfs.CAT, "usr/volcanos/page/proto.js"), - m.Cmdx(nfs.CAT, "usr/volcanos/page/cache.js"), - m.Cmdx(nfs.CAT, "usr/publish/webpack/"+m.Option("name")+".js"), - m.Cmdx(nfs.CAT, "usr/volcanos/page/index.js"), - )) - m.Echo(p) - } - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH)) - m.Option(nfs.DIR_TYPE, nfs.FILE) - m.Option(nfs.DIR_DEEP, true) - - m.Cmdy(nfs.DIR, WEBPACK).Table(func(index int, value map[string]string, head []string) { - m.PushDownload(path.Join(m.Option(nfs.DIR_ROOT), value[kit.MDB_PATH])) - }) - }}, - }, - Configs: map[string]*ice.Config{ - WEBPACK: {Name: WEBPACK, Help: "webpack", Value: kit.Data(kit.MDB_PATH, "usr/volcanos")}, - BINPACK: {Name: BINPACK, Help: "binpack", Value: kit.Data()}, - }, - }) -} - -const _pack = ` - - - - - volcanos - - - - - - - - - - - -` diff --git a/core/code/pprof.go b/core/code/pprof.go index 8fbdde81..99c077a1 100644 --- a/core/code/pprof.go +++ b/core/code/pprof.go @@ -5,6 +5,7 @@ import ( "github.com/shylinux/icebergs/base/aaa" "github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/mdb" + "github.com/shylinux/icebergs/base/nfs" "github.com/shylinux/icebergs/base/tcp" "github.com/shylinux/icebergs/base/web" kit "github.com/shylinux/toolkits" @@ -47,6 +48,19 @@ func init() { mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.DELETE, PPROF, "", mdb.HASH, kit.MDB_ZONE, m.Option(kit.MDB_ZONE)) }}, + mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { + switch arg[0] { + case "binnary": + m.Cmd(nfs.DIR, "bin/", "path,size,time").Table(func(index int, value map[string]string, head []string) { + m.Push("binnary", value["path"]) + m.Push("", value, []string{"size,time"}) + }) + case "service": + m.Cmd(web.SPIDE).Table(func(index int, value map[string]string, head []string) { + m.Push("service", kit.MergeURL2(value["client.url"], "/debug/pprof/profile")) + }) + } + }}, cli.RUN: {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) { msg := m.Cmd(web.SPIDE, web.SPIDE_DEV, web.SPIDE_CACHE, web.SPIDE_GET, m.Option(SERVICE), SECONDS, m.Option(SECONDS)) @@ -59,10 +73,10 @@ func init() { m.Cmd(mdb.INSERT, PPROF, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, kit.MDB_TEXT, strings.Join(res, "\n"), kit.MDB_FILE, msg.Append(kit.MDB_FILE)) m.Echo(strings.Join(res, "\n")) - m.Option(ice.MSG_PROCESS, "_inner") + m.Option(ice.MSG_PROCESS, ice.PROCESS_INNER) }}, web.SERVE: {Name: "serve", Help: "展示", Hand: func(m *ice.Message, arg ...string) { - m.Option(ice.MSG_PROCESS, "_inner") + m.Option(ice.MSG_PROCESS, ice.PROCESS_INNER) u := kit.ParseURL(m.Option(ice.MSG_USERWEB)) p := u.Hostname() + ":" + m.Cmdx(tcp.PORT, aaa.RIGHT) diff --git a/core/code/publish.go b/core/code/publish.go index e354e3cd..31b7af9f 100644 --- a/core/code/publish.go +++ b/core/code/publish.go @@ -28,7 +28,6 @@ func _publish_file(m *ice.Message, file string, arg ...string) string { m.Cmd(nfs.LINK, target, file) // 发布记录 - // m.Cmdy(web.STORY, web.CATCH, "bin", target) m.Log_EXPORT(PUBLISH, target, "from", file) return target } @@ -41,7 +40,10 @@ func init() { )}, }, Commands: map[string]*ice.Command{ - PUBLISH: {Name: "publish path auto ish ice can", Help: "发布", Action: map[string]*ice.Action{ + PUBLISH: {Name: "publish path auto publish ish ice can", Help: "发布", Action: map[string]*ice.Action{ + "publish": {Name: "publish file", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + _publish_file(m, m.Option(kit.MDB_FILE)) + }}, "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))) @@ -55,16 +57,16 @@ func init() { arg = append(arg, "base") } for _, k := range arg { - if buf, err := kit.Render(m.Conf(PUBLISH, kit.Keys("meta.contexts", k)), m); m.Assert(err) { - m.Cmdy("web.wiki.spark", "shell", string(buf)) + if buf, err := kit.Render(m.Conf(PUBLISH, kit.Keym("contexts", k)), m); m.Assert(err) { + m.EchoScript(string(buf)) } } }}, "ish": {Name: "ish", Help: "神农架", Hand: func(m *ice.Message, arg ...string) { m.Option(nfs.DIR_DEEP, true) - m.Option(nfs.DIR_REG, ".*\\.(sh|vim|conf)") + m.Option(nfs.DIR_REG, ".*\\.(sh|vim|conf)$") m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH)) - m.Cmdy(nfs.DIR, "./", "time size line path link") + m.Cmdy(nfs.DIR, "./", "time,size,line,path,link") m.Cmdy(PUBLISH, "contexts", "tmux") }}, "ice": {Name: "ice", Help: "冰山架", Hand: func(m *ice.Message, arg ...string) { @@ -85,9 +87,9 @@ func init() { }}, "can": {Name: "can", Help: "火山架", Hand: func(m *ice.Message, arg ...string) { m.Option(nfs.DIR_DEEP, true) - m.Option(nfs.DIR_REG, ".*\\.(js|css|html)") + m.Option(nfs.DIR_REG, ".*\\.(js|css|html)$") m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH)) - m.Cmdy(nfs.DIR, "./", "time size line path link") + m.Cmdy(nfs.DIR, "./", "time,size,line,path,link") m.Cmdy(PUBLISH, "contexts", "miss") }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { diff --git a/core/code/shy.go b/core/code/shy.go index 3f1291bd..3c9d169b 100644 --- a/core/code/shy.go +++ b/core/code/shy.go @@ -2,7 +2,6 @@ package code import ( ice "github.com/shylinux/icebergs" - "github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/nfs" kit "github.com/shylinux/toolkits" @@ -16,10 +15,10 @@ func init() { Index.Register(&ice.Context{Name: SHY, Help: "脚本", Commands: map[string]*ice.Command{ ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Cmd(mdb.PLUGIN, mdb.CREATE, SHY, SHY, c.Cap(ice.CTX_FOLLOW)) - m.Cmd(mdb.RENDER, mdb.CREATE, SHY, SHY, c.Cap(ice.CTX_FOLLOW)) - m.Cmd(mdb.ENGINE, mdb.CREATE, SHY, SHY, c.Cap(ice.CTX_FOLLOW)) - m.Cmd(mdb.SEARCH, mdb.CREATE, SHY, SHY, c.Cap(ice.CTX_FOLLOW)) + m.Cmd(mdb.PLUGIN, mdb.CREATE, SHY, m.Prefix(SHY)) + m.Cmd(mdb.RENDER, mdb.CREATE, SHY, m.Prefix(SHY)) + m.Cmd(mdb.ENGINE, mdb.CREATE, SHY, m.Prefix(SHY)) + m.Cmd(mdb.SEARCH, mdb.CREATE, SHY, m.Prefix(SHY)) }}, SHY: {Name: SHY, Help: "脚本", Action: map[string]*ice.Action{ mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) { @@ -35,7 +34,6 @@ func init() { if arg[0] == kit.MDB_FOREACH { return } - m.Option(cli.CMD_DIR, kit.Select("src", arg, 2)) _go_find(m, kit.Select("main", arg, 1)) _go_grep(m, kit.Select("main", arg, 1)) }}, diff --git a/core/code/vimer.go b/core/code/vimer.go index 22dd76b8..58522284 100644 --- a/core/code/vimer.go +++ b/core/code/vimer.go @@ -1,11 +1,14 @@ package code import ( + "path" + "strings" + ice "github.com/shylinux/icebergs" + "github.com/shylinux/icebergs/base/cli" + "github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/nfs" kit "github.com/shylinux/toolkits" - - "path" ) const VIMER = "vimer" @@ -15,6 +18,13 @@ func init() { VIMER: {Name: "vimer path=src/ file=main.go line=1 刷新:button=auto save", Help: "编辑器", Meta: kit.Dict( "display", "/plugin/local/code/vimer.js", "style", "editor", ), Action: map[string]*ice.Action{ + mdb.ENGINE: {Name: "engine", Help: "运行", Hand: func(m *ice.Message, arg ...string) { + if arg = kit.Split(strings.Join(arg, " ")); !m.Warn(!m.Right(arg)) { + if m.Cmdy(arg); len(m.Appendv(ice.MSG_APPEND)) == 0 && len(m.Resultv()) == 0 { + m.Cmdy(cli.SYSTEM, arg) + } + } + }}, nfs.SAVE: {Name: "save type file path", Help: "保存", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(nfs.SAVE, path.Join(m.Option(kit.MDB_PATH), m.Option(kit.MDB_FILE))) }}, diff --git a/misc.go b/misc.go index c34f51e3..a228d10a 100644 --- a/misc.go +++ b/misc.go @@ -223,3 +223,12 @@ func (m *Message) SortTime(key string) { m.Sort(key, "time") } func (m *Message) SortTimeR(key string) { m.Sort(key, "time_r") } func (m *Message) FormatMeta() string { return m.Format("meta") } +func (m *Message) RenameAppend(from, to string) { + for i, v := range m.meta[MSG_APPEND] { + if v == from { + m.meta[MSG_APPEND][i] = to + m.meta[to] = m.meta[from] + delete(m.meta, from) + } + } +}