From f226c5f08e39f092697701e1131be02aacc43ebc Mon Sep 17 00:00:00 2001 From: harveyshao Date: Mon, 1 Aug 2022 20:07:11 +0800 Subject: [PATCH] opt some --- base/cli/forever.go | 2 +- base/mdb/hash.go | 28 ++++++++++++++-------------- base/web/dream.go | 5 +++-- core/code/xterm.go | 14 +++++++++++--- init.go | 1 + 5 files changed, 30 insertions(+), 20 deletions(-) diff --git a/base/cli/forever.go b/base/cli/forever.go index b9a60734..2b81707d 100644 --- a/base/cli/forever.go +++ b/base/cli/forever.go @@ -54,7 +54,7 @@ func init() { for { logs.Println("run %s", kit.Join(arg, ice.SP)) - if m.Sleep("1s"); IsSuccess(m.Cmd(SYSTEM, arg)) { + if m.Sleep("100ms"); IsSuccess(m.Cmd(SYSTEM, arg)) { logs.Println("exit") break } diff --git a/base/mdb/hash.go b/base/mdb/hash.go index 36bd0419..ce3a1c4e 100644 --- a/base/mdb/hash.go +++ b/base/mdb/hash.go @@ -40,7 +40,7 @@ func _hash_inputs(m *ice.Message, prefix, chain string, field, value string) { func _hash_insert(m *ice.Message, prefix, chain string, arg ...string) string { defer m.Lock(prefix, chain)() - if value := m.Confm(prefix, kit.Keys(HASH, arg[1])); value != nil { + if value := m.Confm(prefix, kit.Keys(HASH, arg[1])); value != nil && arg[1] != "" { value = kit.GetMeta(value) for i := 2; i < len(arg)-1; i += 2 { kit.Value(value, arg[i], arg[i+1]) @@ -231,19 +231,19 @@ func HashImport(m *ice.Message, arg ...Any) *ice.Message { return m.Cmdy(IMPORT, m.PrefixKey(), "", HASH, arg) } -func HashTarget(m *ice.Message, h string, add func() Any) Any { - defer m.Lock()() - - p := m.Confv(m.PrefixKey(), kit.Keys(HASH, h, TARGET)) - if pp, ok := p.(Map); ok && len(pp) == 0 { - p = nil - } - - if p == nil && add != nil { - p = add() - m.Confv(m.PrefixKey(), kit.Keys(HASH, h, TARGET), p) - } - return p +func HashTarget(m *ice.Message, h string, add func() Any) (p Any) { + m.Assert(h != "") + HashSelectUpdate(m, h, func(value ice.Map) { + p = value[TARGET] + if pp, ok := p.(Map); ok && len(pp) == 0 { + p = nil + } + if p == nil && add != nil { + p = add() + value[TARGET] = p + } + }) + return } func HashPrunesValue(m *ice.Message, field, value string) { m.OptionFields(m.Config(FIELD)) diff --git a/base/web/dream.go b/base/web/dream.go index e12021b5..fd816ab0 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -48,8 +48,9 @@ func _dream_show(m *ice.Message, name string) { if !strings.Contains(name, "-") || !strings.HasPrefix(name, "20") { name = m.Time("20060102-") + kit.ReplaceAll(name, "-", "_") } - // defer m.ProcessOpen(m.MergePod(m.Option(mdb.NAME, name))) + defer m.ProcessOpen(m.MergePod(m.Option(mdb.NAME, name))) defer m.Echo(m.MergePod(m.Option(mdb.NAME, name))) + defer m.PushRefresh() p := path.Join(ice.USR_LOCAL_WORK, name) if pid := m.Cmdx(nfs.CAT, path.Join(p, ice.Info.PidPath)); pid != "" && kit.FileExists("/proc/"+pid) { @@ -146,7 +147,7 @@ func init() { m.Cmd(mdb.DELETE, m.Prefix(SPACE), "", mdb.HASH, m.OptionSimple(mdb.NAME)) } else { m.Cmd(mdb.DELETE, m.Prefix(SPACE), "", mdb.HASH, m.OptionSimple(mdb.NAME)) - m.Sleep("1s", DREAM, cli.START, m.OptionSimple(mdb.NAME)) + m.Sleep("3s", DREAM, cli.START, m.OptionSimple(mdb.NAME)) } }}, nfs.TRASH: {Name: "trash", Help: "删除", Hand: func(m *ice.Message, arg ...string) { diff --git a/core/code/xterm.go b/core/code/xterm.go index 7884ac89..050b02bc 100644 --- a/core/code/xterm.go +++ b/core/code/xterm.go @@ -35,6 +35,7 @@ func _xterm_get(m *ice.Message, h string, must bool) (f *os.File) { m.Assert(err) m.Go(func() { + mdb.HashSelectUpdate(m, h, func(value ice.Map) { value["_cmd"] = cmd }) buf := make([]byte, ice.MOD_BUFS) for { if n, e := tty.Read(buf); !m.Warn(e) { @@ -56,6 +57,13 @@ const XTERM = "xterm" func init() { Index.MergeCommands(ice.Commands{ XTERM: {Name: "xterm hash refresh", Help: "终端", Actions: ice.MergeAction(ice.Actions{ + ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) { + mdb.HashSelectValue(m, func(value ice.Map) { + if cmd, ok := value["_cmd"].(*exec.Cmd); ok { + cmd.Process.Kill() + } + }) + }}, mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { switch mdb.HashInputs(m, arg); arg[0] { case mdb.TYPE: @@ -95,14 +103,14 @@ func init() { pty.Setsize(_xterm_get(m, m.Option(mdb.HASH), true), &pty.Winsize{Rows: uint16(kit.Int(m.Option("rows"))), Cols: uint16(kit.Int(m.Option("cols")))}) }}, "rename": {Name: "rename", Help: "重命名", Hand: func(m *ice.Message, arg ...string) { - mdb.HashModify(m, m.OptionSimple(mdb.HASH), arg) + mdb.HashModify(m, arg) }}, "select": {Name: "select", Help: "连接", Hand: func(m *ice.Message, arg ...string) { - mdb.HashModify(m, m.OptionSimple(mdb.HASH), mdb.TEXT, m.Option(ice.MSG_DAEMON)) + mdb.HashModify(m, mdb.TEXT, m.Option(ice.MSG_DAEMON)) m.Cmd("", "input", arg) }}, "input": {Name: "input", Help: "输入", Hand: func(m *ice.Message, arg ...string) { - mdb.HashModify(m, m.OptionSimple(mdb.HASH), mdb.TIME, m.Time()) + mdb.HashModify(m, mdb.TIME, m.Time()) if b, e := base64.StdEncoding.DecodeString(strings.Join(arg, "")); m.Assert(e) { _xterm_get(m, m.Option(mdb.HASH), true).Write(b) } diff --git a/init.go b/init.go index bc9bd290..13d34824 100644 --- a/init.go +++ b/init.go @@ -100,6 +100,7 @@ func Run(arg ...string) string { if Index.Start(Pulse, arg...) { conf.Wait() os.Exit(kit.Int(Pulse.Option(EXIT))) + println() } default: // 执行命令 if logs.Disable(true); len(arg) == 0 {