diff --git a/base/cli/daemon.go b/base/cli/daemon.go index d51e3898..91216431 100644 --- a/base/cli/daemon.go +++ b/base/cli/daemon.go @@ -169,12 +169,12 @@ func Opens(m *ice.Message, arg ...string) { } } } -func OpenCmds(m *ice.Message, arg ...string) { +func OpenCmds(m *ice.Message, arg ...string) *ice.Message { if !tcp.IsLocalHost(m, m.Option(ice.MSG_USERIP)) { - return + return m } if len(arg) == 0 || arg[0] == "" { - return + return m } m.Cmd(SYSTEM, "osascript", "-e", kit.Format(` tell application "Terminal" @@ -182,4 +182,5 @@ tell application "Terminal" activate end tell `, strings.Join(arg, "; "))) + return m } diff --git a/base/ctx/config.go b/base/ctx/config.go index e5b1aa39..d2f1b38e 100644 --- a/base/ctx/config.go +++ b/base/ctx/config.go @@ -127,13 +127,12 @@ func init() { CONFIG: {Name: "config key auto", Help: "配置", Actions: ice.Actions{ SAVE: {Hand: func(m *ice.Message, arg ...string) { _config_save(m, arg[0], arg[1:]...) }}, LOAD: {Hand: func(m *ice.Message, arg ...string) { _config_load(m, arg[0], arg[1:]...) }}, - mdb.EXPORT: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.EXPORT, arg[0], "", mdb.HASH) }}, - mdb.IMPORT: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.IMPORT, arg[0], "", mdb.HASH) }}, + mdb.EXPORT: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(arg[0], mdb.EXPORT) }}, + mdb.IMPORT: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(arg[0], mdb.IMPORT) }}, nfs.TRASH: {Hand: func(m *ice.Message, arg ...string) { - m.Cmd(mdb.EXPORT, arg[0], "", mdb.HASH, path.Join(ice.VAR_TRASH, kit.Keys(arg[0]))) nfs.Trash(m, path.Join(ice.VAR_DATA, arg[0])) + nfs.Trash(m, m.Cmdx(arg[0], mdb.EXPORT)) mdb.Config(m, arg[0], nil, nil) - m.Go(func() { m.Cmd(ice.EXIT, 1) }) }}, mdb.LIST: {Hand: func(m *ice.Message, arg ...string) { list := []ice.Any{} diff --git a/base/mdb/hash.go b/base/mdb/hash.go index 160668ef..12e6b464 100644 --- a/base/mdb/hash.go +++ b/base/mdb/hash.go @@ -167,8 +167,8 @@ func ClearOnExitHashAction() ice.Actions { } func ExportHashAction(arg ...Any) ice.Actions { return ice.MergeActions(ice.Actions{ - ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { HashImport(m, arg) }}, - ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) { Config(m, IMPORTANT, ice.TRUE); HashExport(m, arg) }}, + ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { Config(m, IMPORTANT, ice.TRUE); HashImport(m, arg) }}, + ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) { HashExport(m, arg) }}, }, HashAction(arg...)) } diff --git a/base/mdb/zone.go b/base/mdb/zone.go index a35a4799..8fb722b5 100644 --- a/base/mdb/zone.go +++ b/base/mdb/zone.go @@ -66,6 +66,7 @@ func _zone_export(m *ice.Message, prefix, chain, file string) { w := csv.NewWriter(f) defer w.Flush() head := kit.AddUniq(_zone_fields(m), EXTRA) + m.Debug("export %v", head) w.Write(head) count := 0 for _, key := range kit.SortedKey(m.Confv(prefix, kit.Keys(chain, HASH))) { @@ -182,6 +183,12 @@ func ZoneAction(arg ...ice.Any) ice.Actions { IMPORT: {Hand: func(m *ice.Message, arg ...string) { ZoneImport(m, arg) }}, } } +func ExportZoneAction(arg ...ice.Any) ice.Actions { + return ice.MergeActions(ZoneAction(arg...), ice.Actions{ + ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { Config(m, IMPORTANT, ice.TRUE); ZoneImport(m, arg) }}, + ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) { m.OptionFields(""); ZoneExport(m, arg) }}, + }) +} func PageZoneAction(arg ...ice.Any) ice.Actions { return ice.MergeActions(ice.Actions{ SELECT: {Hand: func(m *ice.Message, arg ...string) { PageZoneSelect(m, arg...) }}, diff --git a/base/web/dream.go b/base/web/dream.go index ba7d8a71..52e531e1 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -69,7 +69,7 @@ func _dream_start(m *ice.Message, name string) { } } defer ToastProcess(m)() - defer m.Sleep300ms() + defer m.Sleep3s() m.Options(cli.CMD_DIR, kit.Path(p), cli.CMD_ENV, kit.EnvList(kit.Simple( cli.CTX_OPS, Domain(tcp.LOCALHOST, m.Cmdv(SERVE, tcp.PORT)), cli.CTX_LOG, ice.VAR_LOG_BOOT_LOG, cli.CTX_PID, ice.VAR_LOG_ICE_PID, cli.PATH, cli.BinPath(p, ""), cli.USER, ice.Info.Username, diff --git a/base/web/space.go b/base/web/space.go index 68873f4c..3815d330 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -176,7 +176,7 @@ const SPACE = "space" func init() { ice.Info.Inputs = append(ice.Info.Inputs, func(m *ice.Message, arg ...string) { - switch arg[0] { + switch kit.TrimPrefix(arg[0], "extra.") { case SPACE: m.Cmd(SPACE, func(value ice.Maps) { kit.If(kit.IsIn(value[mdb.TYPE], WORKER, SERVER), func() { m.Push(arg[0], value[mdb.NAME]) }) @@ -190,6 +190,7 @@ func init() { m.Cmdy(ctx.COMMAND) } case ctx.ARGS: + m.OptionDefault(ctx.INDEX, m.Option("extra.index")) if space := m.Option(SPACE); space != "" { m.Options(SPACE, []string{}).Cmdy(SPACE, space, ctx.COMMAND, mdb.INPUTS, m.Option(ctx.INDEX)) } else { diff --git a/core/code/binpack.go b/core/code/binpack.go index 37e6511e..6c86b525 100644 --- a/core/code/binpack.go +++ b/core/code/binpack.go @@ -93,7 +93,7 @@ const BINPACK = "binpack" func init() { Index.MergeCommands(ice.Commands{ BINPACK: {Name: "binpack path auto create insert", Help: "打包", Actions: ice.MergeActions(ice.Actions{ - mdb.CREATE: {Hand: func(m *ice.Message, arg ...string) { _binpack_all(m) }}, + mdb.CREATE: {Name: "create path", Hand: func(m *ice.Message, arg ...string) { _binpack_all(m) }}, mdb.INSERT: {Name: "insert path*", Hand: func(m *ice.Message, arg ...string) { mdb.HashCreate(m) }}, }, mdb.HashAction(mdb.SHORT, nfs.PATH, mdb.FIELD, "time,path", lex.EXTREG, "sh,shy,py,js,css,html,png,jpg"))}, }) diff --git a/core/code/vimer.go b/core/code/vimer.go index 88a72cc1..85c90f07 100644 --- a/core/code/vimer.go +++ b/core/code/vimer.go @@ -150,6 +150,9 @@ func init() { m.Cmd(cli.SYSTEM, "date") m.Cmd(cli.SYSTEM, cli.MAKE, m.Option(nfs.TARGET), kit.Dict(cli.CMD_DIR, m.Option(nfs.PATH))) }}, + ice.APP: {Help: "本机", Hand: func(m *ice.Message, arg ...string) { + cli.OpenCmds(m, "cd "+kit.Path(""), "vim "+path.Join(arg[0], arg[1])+" +"+arg[2]).ProcessHold() + }}, COMPILE: {Help: "编译", Hand: func(m *ice.Message, arg ...string) { if m.Option(nfs.PATH) != "" && nfs.ExistsFile(m, path.Join(m.Option(nfs.PATH), ice.MAKEFILE)) { web.PushStream(m).Cmdy(cli.SYSTEM, cli.MAKE, kit.Dict(cli.CMD_DIR, m.Option(nfs.PATH))) @@ -196,7 +199,7 @@ func init() { web.DREAM_ACTION: {Hand: func(m *ice.Message, arg ...string) { web.DreamProcess(m, []string{}, arg...) }}, }, aaa.RoleAction(), chat.FavorAction(), ctx.ConfAction(ctx.TOOLS, "xterm,compile,runtime")), Hand: func(m *ice.Message, arg ...string) { if m.Cmdy(INNER, arg); arg[0] != ctx.ACTION { - m.Action(nfs.SAVE, COMPILE, "show", "exec") + m.Action(nfs.SAVE, COMPILE, mdb.SHOW, cli.EXEC, ice.APP) ctx.DisplayLocal(m, "") ctx.Toolkit(m) } diff --git a/core/code/xterm.go b/core/code/xterm.go index ab294a62..6c94a0ec 100644 --- a/core/code/xterm.go +++ b/core/code/xterm.go @@ -127,7 +127,7 @@ func init() { }}, ice.APP: {Help: "本机", Hand: func(m *ice.Message, arg ...string) { if h := kit.Select(m.Option(mdb.HASH), arg, 0); h == "" { - cli.Opens(m, "Terminal.app") + cli.OpenCmds(m, "cd "+kit.Path("")) } else { cli.OpenCmds(m, m.Cmdv("", h, mdb.TYPE)) } diff --git a/core/team/epic.go b/core/team/epic.go index 7be54d74..0f1fb989 100644 --- a/core/team/epic.go +++ b/core/team/epic.go @@ -6,6 +6,7 @@ import ( ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/mdb" + "shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/web" kit "shylinux.com/x/toolkits" ) @@ -14,14 +15,14 @@ const EPIC = "epic" func init() { Index.MergeCommands(ice.Commands{ - EPIC: {Name: "epic hash list create", Help: "史记", Actions: ice.MergeActions(ice.Actions{ + EPIC: {Help: "史记", Actions: ice.MergeActions(ice.Actions{ mdb.CREATE: {Name: "create time@date zone name"}, mdb.MODIFY: {Name: "modify time zone name"}, - }, mdb.ImportantHashAction(mdb.FIELD, "time,hash,zone,name")), Hand: func(m *ice.Message, arg ...string) { + }, mdb.ExportHashAction(mdb.FIELD, "time,hash,zone,name")), Hand: func(m *ice.Message, arg ...string) { mdb.HashSelect(m, arg...).Table(func(value ice.Maps) { if span := kit.Time(m.Time()) - kit.Time(value[mdb.TIME]); span > 0 { - m.Push(mdb.TEXT, kit.Format(`已经 %v
距 %s
`, int(time.Duration(span)/time.Hour/24), kit.Split(value[mdb.TIME])[0])) + m.Push(mdb.TEXT, nfs.Template(m, "gone.html", m.Options("days", int(time.Duration(span)/time.Hour/24), "from", kit.Split(value[mdb.TIME])[0]))) } else { - m.Push(mdb.TEXT, kit.Format(`还有 %v
距 %s
`, -int(time.Duration(span)/time.Hour/24)+1, kit.Split(value[mdb.TIME])[0])) + m.Push(mdb.TEXT, nfs.Template(m, "will.html", m.Options("days", -int(time.Duration(span)/time.Hour/24)+1, "from", kit.Split(value[mdb.TIME])[0]))) } }).PushAction(mdb.MODIFY, mdb.REMOVE) web.PushPodCmd(m, "", arg...) diff --git a/core/team/plan.go b/core/team/plan.go index 0bc6f9e4..c27fda7a 100644 --- a/core/team/plan.go +++ b/core/team/plan.go @@ -28,7 +28,7 @@ func _plan_scope(m *ice.Message, arg ...string) (begin_time, end_time time.Time) begin_time = begin_time.AddDate(0, 0, -begin_time.YearDay()+1).AddDate(-5, 0, 0) end_time = begin_time.AddDate(10, 0, 0) } - m.Logs(mdb.SELECT, "begin_time", begin_time, "end_time", end_time) + m.Logs(mdb.SELECT, BEGIN_TIME, begin_time, END_TIME, end_time) return begin_time, end_time } func _plan_list(m *ice.Message, begin_time, end_time string) { @@ -61,22 +61,21 @@ func init() { ctx.RUN: {Hand: func(m *ice.Message, arg ...string) { if m.RenameOption(TASK_POD, ice.POD); ctx.PodCmd(m, m.PrefixKey(), ctx.RUN, arg) { return - } - if cmd := m.CmdAppend(TASK, kit.Slice(arg, 0, 2), ctx.INDEX); cmd != "" { + } else if cmd := m.CmdAppend(TASK, kit.Slice(arg, 0, 2), ctx.INDEX); cmd != "" { m.Cmdy(cmd, arg[2:]) } else if aaa.Right(m, arg) { m.Cmdy(arg) } }}, web.DREAM_TABLES: {Hand: func(m *ice.Message, arg ...string) { - kit.Switch(m.Option(mdb.TYPE), kit.Simple(web.SERVER, web.WORKER), func() { m.PushButton(kit.Dict(m.CommandKey(), "计划")) }) + kit.Switch(m.Option(mdb.TYPE), kit.Simple(web.WORKER, web.SERVER), func() { m.PushButton(kit.Dict(m.CommandKey(), "计划")) }) }}, - }, aaa.RoleAction(), TASK), Hand: func(m *ice.Message, arg ...string) { + }, aaa.RoleAction(), ctx.ConfAction(mdb.TOOLS, "todo,task,epic"), TASK), Hand: func(m *ice.Message, arg ...string) { begin_time, end_time := _plan_scope(m, kit.Slice(arg, 0, 2)...) _plan_list(m, begin_time.Format(ice.MOD_TIME), end_time.Format(ice.MOD_TIME)) web.PushPodCmd(m, "", arg...) ctx.DisplayLocal(m, "") - ctx.Toolkit(m, TODO, TASK, EPIC) + ctx.Toolkit(m, "") }}, }) } diff --git a/core/team/plan.shy b/core/team/plan.shy deleted file mode 100644 index d2420ec3..00000000 --- a/core/team/plan.shy +++ /dev/null @@ -1 +0,0 @@ -chapter "plan" diff --git a/core/team/task.go b/core/team/task.go index 62ef2e10..e8a1fced 100644 --- a/core/team/task.go +++ b/core/team/task.go @@ -4,7 +4,6 @@ import ( "strings" ice "shylinux.com/x/icebergs" - "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/web" @@ -53,6 +52,7 @@ const ( const ( BEGIN_TIME = "begin_time" CLOSE_TIME = "close_time" + END_TIME = "end_time" STATUS = "status" LEVEL = "level" @@ -66,34 +66,17 @@ const TASK = "task" func init() { Index.MergeCommands(ice.Commands{ - TASK: {Name: "task zone id auto insert", Help: "任务", Actions: ice.MergeActions(ice.Actions{ + TASK: {Help: "任务", Actions: ice.MergeActions(ice.Actions{ mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { - if space := m.Option(web.SPACE); space != "" && arg[0] != web.SPACE { - m.Options(web.SPACE, "").Cmdy(web.SPACE, space, TASK, mdb.INPUTS, arg) - return - } - switch arg[0] = strings.TrimPrefix(arg[0], "extra."); arg[0] { - case web.SPACE: - m.Cmd(web.SPACE, func(value ice.Maps) { - if kit.IsIn(value[mdb.TYPE], web.WORKER, web.SERVER) { - m.Push(arg[0], value[mdb.NAME]) - } - }) + switch mdb.ZoneInputs(m, arg); strings.TrimPrefix(arg[0], "extra.") { case mdb.STATUS: m.Push(arg[0], PREPARE, PROCESS, CANCEL, FINISH) case LEVEL, SCORE: m.Push(arg[0], "1", "2", "3", "4", "5") case mdb.TYPE: m.Push(arg[0], ONCE, STEP, WEEK) - case ctx.INDEX, ctx.ARGS: - m.Option(ctx.INDEX, m.Option("extra.index")) - mdb.ZoneInputs(m, arg) - default: - mdb.ZoneInputs(m, arg) - } - if arg[0] == mdb.ZONE { - m.Push(arg[0], kit.Split(nfs.TemplateText(m, mdb.ZONE))) } + kit.If(arg[0] == mdb.ZONE, func() { m.Push(arg[0], kit.Split(nfs.TemplateText(m, mdb.ZONE))) }) }}, mdb.INSERT: {Name: "insert space zone* type=once,step,week name* text begin_time@date close_time@date", Hand: func(m *ice.Message, arg ...string) { if space, arg := arg[1], arg[2:]; space != "" { @@ -106,7 +89,7 @@ func init() { CANCEL: {Hand: func(m *ice.Message, arg ...string) { _task_modify(m, STATUS, CANCEL) }}, BEGIN: {Hand: func(m *ice.Message, arg ...string) { _task_modify(m, STATUS, PROCESS) }}, END: {Hand: func(m *ice.Message, arg ...string) { _task_modify(m, STATUS, FINISH) }}, - }, mdb.ImportantZoneAction(mdb.FIELDS, "begin_time,close_time,id,status,level,score,type,name,text")), Hand: func(m *ice.Message, arg ...string) { + }, mdb.ExportZoneAction(mdb.FIELDS, "begin_time,close_time,id,status,level,score,type,name,text")), Hand: func(m *ice.Message, arg ...string) { if mdb.ZoneSelect(m, arg...); len(arg) > 0 && arg[0] != "" { status := map[string]int{} m.Table(func(value ice.Maps) { m.PushButton(_task_action(m, value[STATUS])) }) diff --git a/core/team/team.shy b/core/team/team.shy deleted file mode 100644 index b97368c8..00000000 --- a/core/team/team.shy +++ /dev/null @@ -1,6 +0,0 @@ -team.shy -team.go -plan.go -task.go -todo.go -epic.go diff --git a/core/team/todo.go b/core/team/todo.go index 65cb8ba1..2d8aebd8 100644 --- a/core/team/todo.go +++ b/core/team/todo.go @@ -12,13 +12,13 @@ const TODO = "todo" func init() { Index.MergeCommands(ice.Commands{ - TODO: {Name: "todo hash list create", Help: "待办", Actions: ice.MergeActions(ice.Actions{ + TODO: {Help: "待办", Actions: ice.MergeActions(ice.Actions{ mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { mdb.HashInputs(m, arg).Cmdy(TASK, mdb.INPUTS, arg) }}, cli.START: {Name: "start type=once,step,week", Hand: func(m *ice.Message, arg ...string) { m.Cmd(TASK, mdb.INSERT, m.OptionSimple("zone,type,name,text")) mdb.HashRemove(m, m.OptionSimple(mdb.HASH)) }}, - }, mdb.HashAction(mdb.FIELD, "time,hash,zone,name,text")), Hand: func(m *ice.Message, arg ...string) { + }, mdb.ExportHashAction(mdb.FIELD, "time,hash,zone,name,text")), Hand: func(m *ice.Message, arg ...string) { mdb.HashSelect(m, arg...).PushAction(cli.START, mdb.REMOVE) web.PushPodCmd(m, "", arg...) ctx.DisplayTableCard(m) diff --git a/exec.go b/exec.go index df9e5688..e4c246d3 100644 --- a/exec.go +++ b/exec.go @@ -218,7 +218,7 @@ func (c *Context) _action(m *Message, cmd *Command, key string, sub string, h *A } } kit.If(order && i < len(arg), func() { m.Option(name, arg[i]) }) - if m.Warn(m.OptionDefault(name, kit.Format(kit.Value(v, VALUE))) == "" && kit.Value(v, "need") == "must", ErrNotValid, name) { + if m.Warn(m.OptionDefault(name, kit.Format(kit.Value(v, VALUE))) == "" && kit.Value(v, "need") == "must", ErrNotValid, name, key, sub) { return m } }