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
}
}