diff --git a/base/tcp/host.go b/base/tcp/host.go index 7d1dabb5..e7e7fa6b 100644 --- a/base/tcp/host.go +++ b/base/tcp/host.go @@ -63,6 +63,8 @@ func IsLocalHost(m *ice.Message, ip string) bool { return _islocalhost(m, ip) } const ( HOSTPORT = "hostport" HOSTNAME = "hostname" + + LOCALHOST = "localhost" ) const HOST = "host" diff --git a/base/web/dream.go b/base/web/dream.go index 45ad5407..d9a2800c 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -66,13 +66,16 @@ func _dream_show(m *ice.Message, name string) { // 启动任务 m.Optionv(cli.CMD_STDERR, path.Join(p, m.Conf(DREAM, "meta.env.ctx_log"))) m.Cmd(cli.DAEMON, m.Confv(DREAM, "meta.cmd"), "self", name) + m.Event(DREAM_CREATE, kit.MDB_TYPE, m.Option(kit.MDB_TYPE), kit.MDB_NAME, name) + m.Sleep("1s") } m.Cmdy(nfs.DIR, p) } const ( - DREAM_START = "dream.start" - DREAM_STOP = "dream.stop" + DREAM_CREATE = "dream.create" + DREAM_START = "dream.start" + DREAM_STOP = "dream.stop" ) const DREAM = "dream" diff --git a/base/web/route.go b/base/web/route.go index 151a41f5..b0f318cc 100644 --- a/base/web/route.go +++ b/base/web/route.go @@ -64,6 +64,12 @@ func init() { m.Cmdy("web.wiki.image", "qrcode", m.Option(ice.MSG_USERWEB)) }}, mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { + switch m.Option("action") { + case "autogen": + m.Cmdy(SPACE, m.Option(ROUTE), "web.code.autogen", "inputs", arg) + return + } + switch arg[0] { case "cmd": m.Cmdy(SPACE, m.Option(ROUTE), ctx.COMMAND) @@ -82,9 +88,8 @@ func init() { m.Cmdy(SPACE, m.Option(ROUTE), "exit") m.Sleep("3s") }}, - "gen": {Name: "gen module=hi@key template=usr/icebergs/misc/zsh/zsh.go@key", Help: "创建", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(SPACE, m.Option(ROUTE), "web.code.autogen", - "create", "name", m.Option("module"), "from", m.Option("template")) + "autogen": {Name: "autogen main=src/main.go@key name=hi@key from=usr/icebergs/misc/bash/bash.go@key", Help: "创建", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(SPACE, m.Option(ROUTE), "web.code.autogen", "create", arg) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) == 0 || arg[0] == "" { @@ -102,7 +107,7 @@ func init() { case SERVER: m.PushButton(gdb.START) case WORKER: - m.PushButton(gdb.STOP) + m.PushButton("autogen") default: m.PushButton("") } @@ -132,7 +137,7 @@ func init() { } else if len(arg) > 2 { // 加载插件 m.Cmdy(SPACE, arg[0], ctx.CONTEXT, arg[1], ctx.COMMAND, arg[2]) m.Option("_prefix", arg[0], arg[1], arg[2], "run") - m.Option("_process", "_field") + m.Option(ice.MSG_PROCESS, ice.PROCESS_FIELD) } else if len(arg) > 1 { // 命令列表 m.Cmd(SPACE, arg[0], ctx.CONTEXT, arg[1], ctx.COMMAND).Table(func(index int, value map[string]string, head []string) { diff --git a/core/code/autogen.go b/core/code/autogen.go index abff9a0f..91e8aae2 100644 --- a/core/code/autogen.go +++ b/core/code/autogen.go @@ -2,6 +2,7 @@ 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" @@ -60,7 +61,7 @@ func _autogen_mod(m *ice.Message, file string) (mod string) { m.Option(nfs.CAT_CB, func(line string, index int) { if strings.HasPrefix(line, "module") { mod = strings.Split(line, " ")[1] - m.Info("module", mod) + m.Info("module %s", mod) } }) m.Cmd(nfs.CAT, "go.mod") @@ -81,7 +82,7 @@ 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/zsh/zsh.go@key", Help: "创建", Hand: func(m *ice.Message, arg ...string) { + 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) { if p := path.Join("src", m.Option("name"), m.Option("name")+".shy"); !kit.FileExists(p) { _autogen_script(m, p) _autogen_source(m, m.Option("name")) @@ -91,15 +92,18 @@ field "{{.Option "name"}}" web.code.{{.Option "name"}}.{{.Option "name"}} _autogen_index(m, p, m.Option("from"), m.Option("name")) _autogen_main(m, m.Option("main"), _autogen_mod(m, "go.mod"), m.Option("name")) } + m.Cmdy(cli.SYSTEM, "make") }}, mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { switch arg[0] { case "main": + m.Option(nfs.DIR_REG, ".*.go") m.Cmdy(nfs.DIR, "src", "path,size,time") m.Sort(kit.MDB_PATH) case "from": m.Option(nfs.DIR_DEEP, true) - m.Cmdy(nfs.DIR, "usr/icebergs", "path,size,time") + m.Option(nfs.DIR_REG, ".*.go") + m.Cmdy(nfs.DIR, "usr/icebergs/misc/", "path,size,time") m.Sort(kit.MDB_PATH) } }}, diff --git a/core/code/install.go b/core/code/install.go index 8d2c6f22..c53d7bd4 100644 --- a/core/code/install.go +++ b/core/code/install.go @@ -16,6 +16,7 @@ import ( "strings" ) +const PREPARE = "prepare" const INSTALL = "install" func init() { diff --git a/init.go b/init.go index ac3c4685..8c455333 100644 --- a/init.go +++ b/init.go @@ -101,6 +101,9 @@ var Index = &Context{Name: "ice", Help: "冰山模块", }) }}, "init": {Name: "init", Help: "启动", Hand: func(m *Message, c *Context, cmd string, arg ...string) { + if m.target != m.target.root { + return + } m.root.Cmd(CTX_INIT) m.target.root.wg = &sync.WaitGroup{} for _, k := range kit.Split(kit.Select("gdb,log,ssh,mdb")) { @@ -112,7 +115,10 @@ var Index = &Context{Name: "ice", Help: "冰山模块", "help": {Name: "help", Help: "帮助", Hand: func(m *Message, c *Context, cmd string, arg ...string) { m.Echo(strings.Join(kit.Simple(m.Confv("help", "index")), "\n")) }}, - "exit": {Name: "exit", Help: "结束", Hand: func(m *Message, c *Context, cmd string, arg ...string) { + "exit": {Name: "exit restart:button", Help: "结束", Action: map[string]*Action{ + "restart": {Name: "restart", Help: "重启", Hand: func(m *Message, arg ...string) { + }}, + }, Hand: func(m *Message, c *Context, cmd string, arg ...string) { m.root.target.server.(*Frame).code = kit.Int(kit.Select("0", arg, 0)) m.Cmd("ssh.source", "etc/exit.shy", "exit.shy", "退出配置") m.root.Cmd(CTX_EXIT) diff --git a/misc.go b/misc.go index d4278a06..67e3c19b 100644 --- a/misc.go +++ b/misc.go @@ -21,17 +21,17 @@ func (m *Message) Save(arg ...string) *Message { } } for _, k := range arg { - list = append(list, kit.Keys(m.Cap(CTX_FOLLOW), k)) + list = append(list, m.Prefix(k)) } - m.Cmd("ctx.config", "save", kit.Keys(m.Cap(CTX_FOLLOW), "json"), list) + m.Cmd("ctx.config", "save", m.Prefix("json"), list) return m } func (m *Message) Load(arg ...string) *Message { list := []string{} for _, k := range arg { - list = append(list, kit.Keys(m.Cap(CTX_FOLLOW), k)) + list = append(list, m.Prefix(k)) } - m.Cmd("ctx.config", "load", kit.Keys(m.Cap(CTX_FOLLOW), "json"), list) + m.Cmd("ctx.config", "load", m.Prefix("json"), list) return m } @@ -57,7 +57,7 @@ func (m *Message) Space(arg interface{}) []string { } func (m *Message) PushPlugin(key string, arg ...string) *Message { - m.Option("_process", "_field") + m.Option(MSG_PROCESS, PROCESS_FIELD) m.Option("_prefix", arg) m.Cmdy("command", key) return m diff --git a/misc/git/repos.go b/misc/git/repos.go index fbc567c8..900626f1 100644 --- a/misc/git/repos.go +++ b/misc/git/repos.go @@ -12,6 +12,12 @@ import ( "strings" ) +func _repos_path(name string) string { + if wd, _ := os.Getwd(); name != path.Base(wd) { + return path.Join("usr", name) + } + return "./" +} func _repos_insert(m *ice.Message, name string, dir string) { if s, e := os.Stat(m.Option(cli.CMD_DIR, path.Join(dir, ".git"))); e == nil && s.IsDir() { ls := strings.SplitN(strings.Trim(m.Cmdx(cli.SYSTEM, GIT, "log", "-n1", `--pretty=format:"%ad %s"`, "--date=iso"), "\""), " ", 4) @@ -29,7 +35,6 @@ const ( ORIGIN = "origin" BRANCH = "branch" MASTER = "master" - COMMIT = "commit" ) const REPOS = "repos" diff --git a/misc/git/status.go b/misc/git/status.go index 0a0d6707..a8ff0286 100644 --- a/misc/git/status.go +++ b/misc/git/status.go @@ -4,6 +4,7 @@ import ( ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/mdb" + "github.com/shylinux/icebergs/core/code" kit "github.com/shylinux/toolkits" "path" @@ -11,14 +12,18 @@ import ( ) const ( - PULL = "pull" + PULL = "pull" + COMPILE = "compile" + ADD = "add" + COMMIT = "commit" + PUSH = "push" ) const STATUS = "status" func init() { Index.Merge(&ice.Context{ Commands: map[string]*ice.Command{ - STATUS: {Name: "status name auto submit compile pull", Help: "代码状态", Action: map[string]*ice.Action{ + STATUS: {Name: "status name auto commit compile pull", Help: "代码状态", Action: map[string]*ice.Action{ PULL: {Name: "pull", Help: "下载", Hand: func(m *ice.Message, arg ...string) { m.Option(cli.PROGRESS_CB, func(cb func(name string, count, total int)) { count, total := 0, len(m.Confm(REPOS, kit.MDB_HASH)) @@ -34,35 +39,26 @@ func init() { }) m.Cmdy(cli.PROGRESS, mdb.CREATE) }}, - "compile": {Name: "compile", Help: "编译", Hand: func(m *ice.Message, arg ...string) { + COMPILE: {Name: "compile", Help: "编译", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(cli.SYSTEM, "make") }}, - - "add": {Name: "add", Help: "添加", Hand: func(m *ice.Message, arg ...string) { - if strings.Contains(m.Option(kit.MDB_NAME), ":\\") { - m.Option(cli.CMD_DIR, m.Option(kit.MDB_NAME)) - } else { - m.Option(cli.CMD_DIR, path.Join("usr", m.Option(kit.MDB_NAME))) - } - m.Cmdy(cli.SYSTEM, GIT, "add", m.Option(kit.MDB_FILE)) + ADD: {Name: "add", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + m.Option(cli.CMD_DIR, _repos_path(m.Option(kit.MDB_NAME))) + m.Cmdy(cli.SYSTEM, GIT, ADD, m.Option(kit.MDB_FILE)) }}, - "submit": {Name: "submit action=opt,add comment=some", Help: "提交", Hand: func(m *ice.Message, arg ...string) { + COMMIT: {Name: "commit action=opt,add comment=some", Help: "提交", Hand: func(m *ice.Message, arg ...string) { if m.Option(kit.MDB_NAME) == "" { return } - if strings.Contains(m.Option(kit.MDB_NAME), ":\\") { - m.Option(cli.CMD_DIR, m.Option(kit.MDB_NAME)) - } else { - m.Option(cli.CMD_DIR, path.Join("usr", m.Option(kit.MDB_NAME))) - } + m.Option(cli.CMD_DIR, _repos_path(m.Option(kit.MDB_NAME))) if arg[0] == "action" { - m.Cmdy(cli.SYSTEM, GIT, "commit", "-am", kit.Select("opt some", arg[1]+" "+arg[3])) + m.Cmdy(cli.SYSTEM, GIT, COMMIT, "-am", kit.Select("opt some", arg[1]+" "+arg[3])) } else { - m.Cmdy(cli.SYSTEM, GIT, "commit", "-am", kit.Select("opt some", strings.Join(arg, " "))) + m.Cmdy(cli.SYSTEM, GIT, COMMIT, "-am", kit.Select("opt some", strings.Join(arg, " "))) } }}, - "push": {Name: "push", Help: "上传", Hand: func(m *ice.Message, arg ...string) { + PUSH: {Name: "push", Help: "上传", Hand: func(m *ice.Message, arg ...string) { if m.Option(kit.MDB_NAME) == "" { return } @@ -71,7 +67,14 @@ func init() { } else { m.Option(cli.CMD_DIR, path.Join("usr", m.Option(kit.MDB_NAME))) } - m.Cmdy(cli.SYSTEM, GIT, "push") + m.Cmdy(cli.SYSTEM, GIT, PUSH) + }}, + + 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) { + m.Cmdy(code.AUTOGEN, mdb.CREATE, arg) + }}, + mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(code.AUTOGEN, mdb.INPUTS, arg) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Richs(REPOS, nil, kit.Select(kit.MDB_FOREACH, arg, 0), func(key string, value map[string]interface{}) { @@ -83,7 +86,7 @@ func init() { } // 更改列表 - for _, v := range strings.Split(strings.TrimSpace(m.Cmdx(cli.SYSTEM, GIT, "status", "-sb")), "\n") { + for _, v := range strings.Split(strings.TrimSpace(m.Cmdx(cli.SYSTEM, GIT, STATUS, "-sb")), "\n") { vs := strings.SplitN(strings.TrimSpace(v), " ", 2) m.Push("name", value[kit.MDB_NAME]) m.Push("tags", vs[0]) @@ -92,14 +95,15 @@ func init() { list := []string{} switch vs[0] { case "##": + list = append(list, mdb.CREATE) if strings.Contains(vs[1], "ahead") { - list = append(list, "push") + list = append(list, PUSH) } default: if strings.Contains(vs[0], "??") { - list = append(list, "add") + list = append(list, ADD) } else { - list = append(list, "submit") + list = append(list, COMMIT) } } m.PushButton(strings.Join(list, ",")) diff --git a/misc/lark/lark.go b/misc/lark/lark.go index a2ca2bbd..dfaa5e1e 100644 --- a/misc/lark/lark.go +++ b/misc/lark/lark.go @@ -1,14 +1,14 @@ package lark import ( - "github.com/shylinux/icebergs" + ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/aaa" "github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/web" "github.com/shylinux/icebergs/core/chat" "github.com/shylinux/icebergs/core/wiki" - "github.com/shylinux/toolkits" + kit "github.com/shylinux/toolkits" "encoding/json" "math/rand" @@ -98,7 +98,7 @@ var Index = &ice.Context{Name: LARK, Help: "机器人", ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Load() m.Cmd(web.SPIDE, mdb.CREATE, LARK, m.Conf(APP, kit.Keys(kit.MDB_META, LARK))) - m.Cmd(DUTY, "boot", m.Conf(cli.RUNTIME, "boot.hostname"), m.Time()) + // m.Cmd(DUTY, "boot", m.Conf(cli.RUNTIME, "boot.hostname"), m.Time()) }}, ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save() diff --git a/misc/tmux/tmux.go b/misc/tmux/tmux.go index c4904349..713503b2 100644 --- a/misc/tmux/tmux.go +++ b/misc/tmux/tmux.go @@ -52,7 +52,7 @@ var Index = &ice.Context{Name: TMUX, Help: "工作台", Commands: map[string]*ice.Command{ ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Load() - m.Watch(web.DREAM_START, m.Prefix(SESSION)) + m.Watch(web.DREAM_CREATE, m.Prefix(SESSION)) }}, ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save() @@ -161,7 +161,7 @@ var Index = &ice.Context{Name: TMUX, Help: "工作台", m.PushAction(mdb.REMOVE) }}, SESSION: {Name: "session session window pane cmd auto create script", Help: "会话管理", Action: map[string]*ice.Action{ - web.DREAM_START: {Name: "dream.start type name share river", Help: "梦想", Hand: func(m *ice.Message, arg ...string) { + web.DREAM_CREATE: {Name: "dream.create type name", Help: "梦想", Hand: func(m *ice.Message, arg ...string) { m.Cmd(m.Prefix(SESSION), mdb.CREATE) }}, mdb.CREATE: {Name: "create name", Help: "添加", Hand: func(m *ice.Message, arg ...string) { @@ -178,7 +178,20 @@ var Index = &ice.Context{Name: TMUX, Help: "工作台", } else { // 创建会话 m.Option(cli.CMD_DIR, path.Join(m.Conf(web.DREAM, kit.META_PATH), m.Option(kit.MDB_NAME))) - m.Cmdy(cli.SYSTEM, TMUX, "new-session", "-ds", m.Option(kit.MDB_NAME)) + ls := kit.Split(m.Option(kit.MDB_NAME), "-_") + name := ls[len(ls)-1] + + m.Cmdy(cli.SYSTEM, TMUX, "new-session", "-ds", m.Option(kit.MDB_NAME), "-n", name) + name = m.Option(kit.MDB_NAME) + ":" + ls[len(ls)-1] + + m.Cmdy(cli.SYSTEM, TMUX, "split-window", "-t", kit.Keys(name, "1"), "-p", "20") + m.Cmdy(cli.SYSTEM, TMUX, "split-window", "-t", kit.Keys(name, "2"), "-h") + + m.Cmd(cli.SYSTEM, TMUX, "send-keys", "-t", kit.Keys(name, "3"), "ish_miss_log", "Enter") + m.Cmd(cli.SYSTEM, TMUX, "send-keys", "-t", kit.Keys(name, "2"), "ish_miss_space dev") + m.Cmd(cli.SYSTEM, TMUX, "send-keys", "-t", kit.Keys(name, "1"), "vi etc/miss.sh", "Enter") + + m.Cmdy(cli.SYSTEM, TMUX, "link-window", "-s", name, "-t", "miss:") } m.Option(ice.MSG_PROCESS, "_refresh") }}, diff --git a/type.go b/type.go index 6e412a07..f456f8d8 100644 --- a/type.go +++ b/type.go @@ -219,7 +219,7 @@ func (c *Context) _split(name string) []interface{} { switch kit.Value(item, kit.MDB_INPUT, ls[i+1]); ls[i+1] { case "textarea": kit.Value(item, "style.width", "360") - kit.Value(item, "style.height", "120") + kit.Value(item, "style.height", "60") case "button": kit.Value(item, kit.MDB_VALUE, "") button = true @@ -632,6 +632,10 @@ func (m *Message) _hand(arg ...interface{}) *Message { m.TryCatch(m.Spawn(), true, func(msg *Message) { m = m.target.cmd(msg, cmd, list[0], list[1:]...) }) + } else if cmd, ok := m.source.Commands[list[0]]; ok { + m.TryCatch(m.Spawn(m.source), true, func(msg *Message) { + m = m.source.cmd(msg, cmd, list[0], list[1:]...) + }) } else { m.Search(list[0], func(p *Context, s *Context, key string, cmd *Command) { m.TryCatch(m.Spawn(s), true, func(msg *Message) {