diff --git a/base/mdb/hash.go b/base/mdb/hash.go index a621892d..7c249158 100644 --- a/base/mdb/hash.go +++ b/base/mdb/hash.go @@ -36,6 +36,9 @@ func _hash_insert(m *ice.Message, prefix, chain string, arg ...string) { m.Echo(m.Rich(prefix, chain, kit.Data(arg))) } func _hash_delete(m *ice.Message, prefix, chain, field, value string) { + if field != kit.MDB_HASH { + field, value = kit.MDB_HASH, kit.Select(kit.Hashs(value), m.Option(kit.MDB_HASH)) + } m.Richs(prefix, chain, value, func(key string, val map[string]interface{}) { m.Log_DELETE(kit.MDB_KEY, path.Join(prefix, chain), field, value, kit.MDB_VALUE, kit.Format(val)) m.Conf(prefix, kit.Keys(chain, kit.MDB_HASH, key), "") diff --git a/misc/bash/bash.go b/misc/bash/bash.go index 8d58deac..546aca4d 100644 --- a/misc/bash/bash.go +++ b/misc/bash/bash.go @@ -17,7 +17,7 @@ var Index = &ice.Context{Name: BASH, Help: "命令行", Configs: map[string]*ice }, Commands: map[string]*ice.Command{ BASH: {Name: "bash path auto order build download", Help: "命令行", Action: ice.MergeAction(map[string]*ice.Action{ cli.ORDER: {Name: "order", Help: "加载", Hand: func(m *ice.Message, arg ...string) { - m.Cmd(code.INSTALL, cli.ORDER, m.Config(cli.SOURCE), "_install/bin") + m.Cmdy(code.INSTALL, cli.ORDER, m.Config(cli.SOURCE), "_install/bin") }}, }, code.InstallAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Cmdy(code.INSTALL, cli.SOURCE, m.Config(cli.SOURCE), arg) diff --git a/misc/bash/config.go b/misc/bash/configs.go similarity index 62% rename from misc/bash/config.go rename to misc/bash/configs.go index 771b7948..d871fcda 100644 --- a/misc/bash/config.go +++ b/misc/bash/configs.go @@ -9,8 +9,8 @@ import ( func init() { Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ - "/config": {Name: "/config", Help: "配置", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Cmd("web.code.git.config").Table(func(index int, value map[string]string, head []string) { + "/configs": {Name: "/configs", Help: "配置", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Cmd("web.code.git.configs").Table(func(index int, value map[string]string, head []string) { if strings.HasPrefix(value[kit.MDB_NAME], "url") { m.Echo(`git config --global "%s" "%s"`, value[kit.MDB_NAME], value[kit.MDB_VALUE]) m.Echo(ice.NL) diff --git a/misc/bash/download.go b/misc/bash/download.go index acb078a5..f19bec1f 100644 --- a/misc/bash/download.go +++ b/misc/bash/download.go @@ -20,11 +20,7 @@ func init() { m.Render(kit.Select(ice.RENDER_DOWNLOAD, ice.RENDER_RESULT, m.Append(kit.MDB_FILE) == ""), m.Append(kit.MDB_TEXT)) }}, "/upload": {Name: "/upload", Help: "上传", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - // 上传文件 - msg := m.Cmd(web.CACHE, web.UPLOAD) - m.Option(ice.MSG_UPLOAD, msg.Append(kit.MDB_HASH), msg.Append(kit.MDB_NAME), msg.Append(kit.MDB_SIZE)) - m.Cmd(chat.FILES, web.UPLOAD) - + msg := m.Cmd(chat.FILES, web.UPLOAD) // 上传文件 for _, k := range []string{kit.MDB_DATA, kit.MDB_TIME, kit.MDB_TYPE, kit.MDB_NAME, kit.MDB_SIZE} { m.Echo("%s: %s\n", k, msg.Append(k)) } diff --git a/misc/bash/favor.go b/misc/bash/favor.go index 3511baa9..08439cc0 100644 --- a/misc/bash/favor.go +++ b/misc/bash/favor.go @@ -10,69 +10,38 @@ import ( const FAVOR = "favor" func init() { - Index.Merge(&ice.Context{ - Configs: map[string]*ice.Config{ - FAVOR: {Name: FAVOR, Help: "收藏夹", Value: kit.Data( - kit.MDB_SHORT, kit.MDB_ZONE, kit.MDB_FIELD, "time,id,type,name,text,pwd,username,hostname", - )}, - }, - Commands: map[string]*ice.Command{ - "/favor": {Name: "/favor", Help: "收藏", Action: map[string]*ice.Action{ - mdb.EXPORT: {Name: "export zone name", Help: "导出", Hand: func(m *ice.Message, arg ...string) { - m.Echo("#!/bin/sh\n\n") - m.Cmdy(FAVOR, m.Option(kit.MDB_ZONE)).Table(func(index int, value map[string]string, head []string) { - if m.Option(kit.MDB_NAME) == "" || m.Option(kit.MDB_NAME) == value[kit.MDB_NAME] { - m.Echo("# %v\n%v\n\n", value[kit.MDB_NAME], value[kit.MDB_TEXT]) - } - }) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Cmdy(FAVOR).Table() - }}, - FAVOR: {Name: "favor zone id auto", Help: "收藏夹", Action: map[string]*ice.Action{ - mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, arg) - }}, - mdb.INSERT: {Name: "insert zone=系统命令 type=shell name=1 text=pwd pwd=/home", Help: "添加", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, m.OptionSimple(kit.MDB_ZONE)) - m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), kit.KeyHash(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, m.Prefix(FAVOR), "", mdb.ZONE, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_ID), arg) - }}, - mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.DELETE, m.Prefix(FAVOR), "", mdb.ZONE, m.OptionSimple(kit.MDB_ZONE)) - }}, - mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { - m.OptionFields(kit.MDB_ZONE, m.Conf(FAVOR, kit.META_FIELD)) - m.Cmdy(mdb.EXPORT, m.Prefix(FAVOR), "", mdb.ZONE) - m.Conf(FAVOR, kit.MDB_HASH, "") - }}, - mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.IMPORT, m.Prefix(FAVOR), "", mdb.ZONE) - }}, - mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - switch arg[0] { - case kit.MDB_ZONE: - m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), "", mdb.HASH, arg) - default: - m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), kit.KeyHash(m.Option(kit.MDB_ZONE)), mdb.LIST, arg) + Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ + FAVOR: {Name: FAVOR, Help: "收藏夹", Value: kit.Data( + kit.MDB_SHORT, kit.MDB_ZONE, kit.MDB_FIELD, "time,id,type,name,text,pwd,username,hostname", + )}, + }, Commands: map[string]*ice.Command{ + "/favor": {Name: "/favor", Help: "收藏", Action: map[string]*ice.Action{ + mdb.EXPORT: {Name: "export zone name", Help: "导出", Hand: func(m *ice.Message, arg ...string) { + m.Echo("#!/bin/sh\n\n") + m.Cmdy(FAVOR, m.Option(kit.MDB_ZONE)).Table(func(index int, value map[string]string, head []string) { + if m.Option(kit.MDB_NAME) == "" || m.Option(kit.MDB_NAME) == value[kit.MDB_NAME] { + m.Echo("# %v\n%v\n\n", value[kit.MDB_NAME], value[kit.MDB_TEXT]) } - }}, - cli.SYSTEM: {Name: "system", Help: "命令", Hand: func(m *ice.Message, arg ...string) { - m.Option(cli.CMD_DIR, m.Option(cli.PWD)) - m.ProcessCommand(cli.SYSTEM, kit.Split(m.Option(kit.MDB_TEXT)), arg...) - m.ProcessCommandOpt(cli.PWD) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg), "time,zone,count", m.Conf(FAVOR, kit.META_FIELD)) - if m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.ZONE, arg); len(arg) == 0 { - m.Action(mdb.CREATE, mdb.EXPORT, mdb.IMPORT) - m.PushAction(mdb.REMOVE) - } else { - m.PushAction(cli.SYSTEM) - } + }) }}, - }, - }) + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Cmdy(FAVOR).Table() + }}, + FAVOR: {Name: "favor zone id auto", Help: "收藏夹", Action: ice.MergeAction(map[string]*ice.Action{ + mdb.INSERT: {Name: "insert zone=系统命令 type=shell name=1 text=pwd pwd=/home", Help: "添加"}, + cli.SYSTEM: {Name: "system", Help: "命令", Hand: func(m *ice.Message, arg ...string) { + m.Option(cli.CMD_DIR, m.Option(cli.PWD)) + m.ProcessCommand(cli.SYSTEM, kit.Split(m.Option(kit.MDB_TEXT)), arg...) + m.ProcessCommandOpt(cli.PWD) + }}, + }, mdb.ZoneAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if mdb.ZoneSelect(m, arg...); len(arg) == 0 { + m.Action(mdb.CREATE, mdb.EXPORT, mdb.IMPORT) + m.PushAction(mdb.REMOVE) + } else { + m.PushAction(cli.SYSTEM) + m.StatusTimeCount() + } + }}, + }}) } diff --git a/misc/bash/sess.go b/misc/bash/sess.go index 0388d625..87e76eae 100644 --- a/misc/bash/sess.go +++ b/misc/bash/sess.go @@ -21,66 +21,57 @@ const ( const SESS = "sess" func init() { - Index.Merge(&ice.Context{ - Configs: map[string]*ice.Config{ - SESS: {Name: SESS, Help: "会话流", Value: kit.Data( - kit.MDB_FIELD, "time,hash,status,username,hostname,pid,pwd", - )}, - }, - Commands: map[string]*ice.Command{ - web.WEB_LOGIN: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if f, _, e := m.R.FormFile(SUB); e == nil { - defer f.Close() - if b, e := ioutil.ReadAll(f); e == nil { - m.Option(SUB, string(b)) // 文件参数 - } + Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ + SESS: {Name: SESS, Help: "会话流", Value: kit.Data( + kit.MDB_FIELD, "time,hash,status,username,hostname,pid,pwd", + )}, + }, Commands: map[string]*ice.Command{ + web.WEB_LOGIN: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if f, _, e := m.R.FormFile(SUB); e == nil { + defer f.Close() + if b, e := ioutil.ReadAll(f); e == nil { + m.Option(SUB, string(b)) // 文件参数 } + } - switch m.RenderResult(); m.R.URL.String() { - case "/qrcode", "/sess": // 登录入口 - return - } + switch m.RenderResult(); arg[0] { + case "/qrcode", "/sess": // 登录入口 + return + } - if m.Warn(m.Option(SID, strings.TrimSpace(m.Option(SID))) == "", ice.ErrNotLogin, arg) { - return - } + if m.Warn(m.Option(SID, strings.TrimSpace(m.Option(SID))) == "", ice.ErrNotLogin, arg) { + return + } - msg := m.Cmd(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(SID), - ice.OptionFields(m.Conf(SESS, kit.META_FIELD))) - m.Option(aaa.USERNAME, msg.Append(aaa.USERNAME)) - m.Option(tcp.HOSTNAME, msg.Append(tcp.HOSTNAME)) - m.Warn(m.Option(aaa.USERNAME) == "", ice.ErrNotLogin, arg) + msg := m.Cmd(SESS, m.Option(SID)) + m.Option(aaa.USERNAME, msg.Append(aaa.USERNAME)) + m.Option(tcp.HOSTNAME, msg.Append(tcp.HOSTNAME)) + m.Warn(m.Option(aaa.USERNAME) == "", ice.ErrNotLogin, arg) + }}, + "/qrcode": {Name: "/qrcode", Help: "二维码", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Cmdy(cli.QRCODE, m.Option(kit.MDB_TEXT), m.Option(cli.FG), m.Option(cli.BG)) + }}, + "/sess": {Name: "/sess", Help: "会话", Action: map[string]*ice.Action{ + aaa.LOGOUT: {Name: "logout", Help: "退出", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(SESS, mdb.MODIFY, kit.MDB_STATUS, aaa.LOGOUT, ice.Option{kit.MDB_HASH, m.Option(SID)}) }}, - "/qrcode": {Name: "/qrcode", Help: "二维码", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Cmdy(cli.QRCODE, m.Option(kit.MDB_TEXT), m.Option(cli.FG), m.Option(cli.BG)) + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if m.Option(SID) == "" { // 终端登录 + m.Option(SID, m.Cmdx(SESS, mdb.CREATE, kit.MDB_STATUS, aaa.LOGIN, m.OptionSimple(aaa.USERNAME, tcp.HOSTNAME, cli.PID, cli.PWD))) + } else { // 更新状态 + m.Cmdy(SESS, mdb.MODIFY, kit.MDB_STATUS, aaa.LOGIN, ice.Option{kit.MDB_HASH, m.Option(SID)}) + } + m.Echo(m.Option(SID)) + }}, + SESS: {Name: "sess hash auto prunes", Help: "会话流", Action: ice.MergeAction(map[string]*ice.Action{ + mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) { + m.OptionFields(m.Config(kit.MDB_FIELD)) + m.Cmdy(mdb.PRUNES, m.PrefixKey(), "", mdb.HASH, kit.MDB_STATUS, aaa.LOGOUT) }}, - "/sess": {Name: "/sess", Help: "会话", Action: map[string]*ice.Action{ - aaa.LOGOUT: {Name: "logout", Help: "退出", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.MODIFY, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(SID), kit.MDB_STATUS, aaa.LOGOUT) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if m.Option(SID) == "" { - m.Option(SID, m.Cmdx(mdb.INSERT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, aaa.LOGIN, - m.OptionSimple(aaa.USERNAME, tcp.HOSTNAME, cli.PID, cli.PWD))) - } else { - m.Cmdy(mdb.MODIFY, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(SID), kit.MDB_STATUS, aaa.LOGIN) - } - m.Echo(m.Option(SID)) - }}, - SESS: {Name: "sess hash auto prunes", Help: "会话流", Action: map[string]*ice.Action{ - mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.OptionFields(m.Conf(SESS, kit.META_FIELD)) - m.Cmdy(mdb.DELETE, m.Prefix(SESS), "", mdb.HASH, m.OptionSimple(kit.MDB_HASH)) - }}, - mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) { - m.OptionFields(m.Conf(SESS, kit.META_FIELD)) - m.Cmdy(mdb.PRUNES, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, aaa.LOGOUT) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg), m.Conf(SESS, kit.META_FIELD)) - m.Cmdy(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, arg) - m.PushAction(mdb.REMOVE) - }}, - }, - }) + }, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + mdb.HashSelect(m, arg...) + m.PushAction(mdb.REMOVE) + m.StatusTimeCount() + }}, + }}) } diff --git a/misc/bash/sync.go b/misc/bash/sync.go index a29cd07c..4829bf3f 100644 --- a/misc/bash/sync.go +++ b/misc/bash/sync.go @@ -13,10 +13,6 @@ import ( const _sync_index = 1 -func _sync_count(m *ice.Message) string { - return m.Conf(SYNC, kit.Keym(kit.MDB_COUNT)) -} - const ( SHELL = "shell" HISTORY = "history" @@ -24,62 +20,36 @@ const ( const SYNC = "sync" func init() { - Index.Merge(&ice.Context{ - Configs: map[string]*ice.Config{ - SYNC: {Name: SYNC, Help: "同步流", Value: kit.Data( - kit.MDB_FIELD, "time,id,type,name,text,pwd,username,hostname", - )}, - }, - Commands: map[string]*ice.Command{ - "/sync": {Name: "/sync", Help: "同步", Action: map[string]*ice.Action{ - HISTORY: {Name: "history", Help: "历史", Hand: func(m *ice.Message, arg ...string) { - ls := strings.SplitN(strings.TrimSpace(m.Option(ARG)), " ", 4) - if text := strings.TrimSpace(strings.Join(ls[3:], " ")); text != "" { - m.Cmd(mdb.INSERT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_TIME, ls[1]+" "+ls[2], - kit.MDB_TYPE, SHELL, kit.MDB_NAME, ls[0], kit.MDB_TEXT, text, - m.OptionSimple(cli.PWD, aaa.USERNAME, tcp.HOSTNAME, tcp.HOSTNAME)) - - } - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Cmd(mdb.INSERT, m.Prefix(SYNC), "", mdb.HASH, kit.MDB_TYPE, SHELL, kit.MDB_NAME, arg[0], - kit.MDB_TEXT, m.Option(SUB), m.OptionSimple(cli.PWD)) + Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ + SYNC: {Name: SYNC, Help: "同步流", Value: kit.Data( + kit.MDB_FIELD, "time,id,type,name,text,pwd,username,hostname", + )}, + }, Commands: map[string]*ice.Command{ + "/sync": {Name: "/sync", Help: "同步", Action: map[string]*ice.Action{ + HISTORY: {Name: "history", Help: "历史", Hand: func(m *ice.Message, arg ...string) { + ls := strings.SplitN(strings.TrimSpace(m.Option(ARG)), ice.SP, 4) + if text := strings.TrimSpace(strings.Join(ls[3:], ice.SP)); text != "" { + m.Cmd(SYNC, mdb.INSERT, kit.MDB_TIME, ls[1]+ice.SP+ls[2], + kit.MDB_TYPE, SHELL, kit.MDB_NAME, ls[0], kit.MDB_TEXT, text, + m.OptionSimple(cli.PWD, aaa.USERNAME, tcp.HOSTNAME, tcp.HOSTNAME)) + } }}, - SYNC: {Name: "sync id auto page export import", Help: "同步流", Action: map[string]*ice.Action{ - mdb.PREV: {Name: "prev", Help: "上一页", Hand: func(m *ice.Message, arg ...string) { - mdb.PrevPage(m, _sync_count(m), kit.Slice(arg, _sync_index)...) - }}, - mdb.NEXT: {Name: "next", Help: "下一页", Hand: func(m *ice.Message, arg ...string) { - mdb.NextPage(m, _sync_count(m), kit.Slice(arg, _sync_index)...) - }}, - mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { - m.OptionFields(m.Conf(SYNC, kit.META_FIELD)) - m.Cmdy(mdb.EXPORT, m.Prefix(SYNC), "", mdb.LIST) - }}, - mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.IMPORT, m.Prefix(SYNC), "", mdb.LIST) - }}, - mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - switch arg[0] { - case kit.MDB_ZONE: - m.Cmdy(FAVOR, mdb.INPUTS, arg) - } - }}, - cli.SYSTEM: {Name: "system", Help: "命令", Hand: func(m *ice.Message, arg ...string) { - m.Option(cli.CMD_DIR, m.Option(cli.PWD)) - m.ProcessCommand(cli.SYSTEM, kit.Split(m.Option(kit.MDB_TEXT)), arg...) - m.ProcessCommandOpt(cli.PWD) - }}, - FAVOR: {Name: "favor zone=some@key type name text pwd", Help: "收藏", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(FAVOR, mdb.INSERT, m.OptionSimple(kit.MDB_ZONE, m.Conf(FAVOR, kit.META_FIELD))) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.OptionPage(kit.Slice(arg, _sync_index)...) - m.Fields(len(kit.Slice(arg, 0, 1)), m.Conf(SYNC, kit.META_FIELD)) - m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_ID, arg) - m.PushAction(cli.SYSTEM, FAVOR) - m.StatusTimeCountTotal(_sync_count(m)) + }}, + SYNC: {Name: "sync id auto page export import", Help: "同步流", Action: ice.MergeAction(map[string]*ice.Action{ + cli.SYSTEM: {Name: "system", Help: "命令", Hand: func(m *ice.Message, arg ...string) { + m.Option(cli.CMD_DIR, m.Option(cli.PWD)) + m.ProcessCommand(cli.SYSTEM, kit.Split(m.Option(kit.MDB_TEXT)), arg...) + m.ProcessCommandOpt(cli.PWD) }}, - }, - }) + mdb.INPUTS: {Name: "favor inputs", Help: "补全"}, + FAVOR: {Name: "favor zone=some@key type name text pwd", Help: "收藏", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(FAVOR, mdb.INSERT, m.OptionSimple(kit.MDB_ZONE, m.Conf(FAVOR, kit.META_FIELD))) + }}, + }, mdb.ListAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.OptionPage(kit.Slice(arg, _sync_index)...) + mdb.ListSelect(m, kit.Slice(arg, 0, 1)...) + m.PushAction(cli.SYSTEM, FAVOR) + m.StatusTimeCountTotal(m.Config(kit.MDB_COUNT)) + }}, + }}) } diff --git a/misc/bash/trash.go b/misc/bash/trash.go index a986b19c..8d1ae0e8 100644 --- a/misc/bash/trash.go +++ b/misc/bash/trash.go @@ -17,42 +17,38 @@ const ( const TRASH = "trash" func init() { - Index.Merge(&ice.Context{ - Configs: map[string]*ice.Config{ - TRASH: {Name: TRASH, Help: "回收站", Value: kit.Data( - kit.MDB_FIELD, "time,hash,username,hostname,size,from,to", - )}, - }, - Commands: map[string]*ice.Command{ - "/trash": {Name: "/trash", Help: "回收", Action: map[string]*ice.Action{ - mdb.INSERT: {Name: "insert from to", Help: "添加", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(TRASH, mdb.INSERT, arg) - }}, + Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ + TRASH: {Name: TRASH, Help: "回收站", Value: kit.Data( + kit.MDB_FIELD, "time,hash,username,hostname,size,from,to", + )}, + }, Commands: map[string]*ice.Command{ + "/trash": {Name: "/trash", Help: "回收", Action: map[string]*ice.Action{ + mdb.INSERT: {Name: "insert from to", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(TRASH, mdb.INSERT, arg) }}, - TRASH: {Name: "TRASH hash path auto prunes", Help: "回收站", Action: map[string]*ice.Action{ - mdb.INSERT: {Name: "insert from to", Help: "添加", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.INSERT, m.Prefix(TRASH), "", mdb.HASH, m.OptionSimple(aaa.USERNAME, tcp.HOSTNAME, kit.MDB_SIZE, FROM, TO)) - }}, - mdb.REVERT: {Name: "revert", Help: "恢复", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(cli.SYSTEM, "mv", m.Option(TO), m.Option(FROM)) - m.Cmdy(mdb.DELETE, m.Prefix(TRASH), "", mdb.HASH, m.OptionSimple(kit.MDB_HASH)) - }}, - mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(cli.SYSTEM, "rm", "-rf", m.Option(TO)) - m.Cmdy(mdb.DELETE, m.Prefix(TRASH), "", mdb.HASH, m.OptionSimple(kit.MDB_HASH)) - }}, - mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) { - }}, - nfs.DIR: {Name: "dir", Help: "目录", Hand: func(m *ice.Message, arg ...string) { - m.Option(nfs.DIR_ROOT, m.Option(TO)) - m.ProcessCommand(nfs.DIR, []string{}, arg...) - m.ProcessCommandOpt(TO) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg), m.Conf(TRASH, kit.META_FIELD)) - m.Cmdy(mdb.SELECT, m.Prefix(TRASH), "", mdb.HASH, kit.MDB_HASH, arg) - m.PushAction(nfs.DIR, mdb.REVERT, mdb.REMOVE) + }}, + TRASH: {Name: "TRASH hash path auto prunes", Help: "回收站", Action: ice.MergeAction(map[string]*ice.Action{ + mdb.INSERT: {Name: "insert from to", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(mdb.INSERT, m.PrefixKey(), "", mdb.HASH, m.OptionSimple(aaa.USERNAME, tcp.HOSTNAME, kit.MDB_SIZE, FROM, TO)) }}, - }, - }) + mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(cli.SYSTEM, "rm", "-rf", m.Option(TO)) + m.Cmdy(mdb.DELETE, m.PrefixKey(), "", mdb.HASH, m.OptionSimple(kit.MDB_HASH)) + }}, + mdb.REVERT: {Name: "revert", Help: "恢复", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(cli.SYSTEM, "mv", m.Option(TO), m.Option(FROM)) + m.Cmdy(mdb.DELETE, m.PrefixKey(), "", mdb.HASH, m.OptionSimple(kit.MDB_HASH)) + }}, + mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) { + }}, + nfs.DIR: {Name: "dir", Help: "目录", Hand: func(m *ice.Message, arg ...string) { + m.Option(nfs.DIR_ROOT, m.Option(TO)) + m.ProcessCommand(nfs.DIR, []string{}, arg...) + m.ProcessCommandOpt(TO) + }}, + }, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + mdb.HashSelect(m, arg...) + m.PushAction(nfs.DIR, mdb.REVERT, mdb.REMOVE) + }}, + }}) } diff --git a/misc/bash/zsh.go b/misc/bash/zsh.go index efafada0..66adf764 100644 --- a/misc/bash/zsh.go +++ b/misc/bash/zsh.go @@ -3,36 +3,24 @@ package bash import ( ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/cli" - "shylinux.com/x/icebergs/base/web" "shylinux.com/x/icebergs/core/code" kit "shylinux.com/x/toolkits" - - "path" ) const ZSH = "zsh" func init() { - Index.Merge(&ice.Context{ - Configs: map[string]*ice.Config{ - ZSH: {Name: ZSH, Help: "命令行", Value: kit.Data( - "source", "https://nchc.dl.sourceforge.net/project/zsh/zsh/5.8/zsh-5.8.tar.xz", - )}, - }, - Commands: map[string]*ice.Command{ - ZSH: {Name: "zsh port path auto start build download", Help: "命令行", Action: map[string]*ice.Action{ - web.DOWNLOAD: {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(code.INSTALL, web.DOWNLOAD, m.Conf(ZSH, kit.META_SOURCE)) - }}, - cli.BUILD: {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(code.INSTALL, cli.BUILD, m.Conf(ZSH, kit.META_SOURCE)) - }}, - cli.START: {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(code.INSTALL, cli.START, m.Conf(ZSH, kit.META_SOURCE), "bin/zsh") - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Cmdy(code.INSTALL, path.Base(m.Conf(ZSH, kit.META_SOURCE)), arg) + Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ + ZSH: {Name: ZSH, Help: "命令行", Value: kit.Data( + cli.SOURCE, "https://nchc.dl.sourceforge.net/project/zsh/zsh/5.8/zsh-5.8.tar.xz", + )}, + }, Commands: map[string]*ice.Command{ + ZSH: {Name: "zsh path auto order build download", Help: "命令行", Action: ice.MergeAction(map[string]*ice.Action{ + cli.ORDER: {Name: "order", Help: "加载", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(code.INSTALL, cli.ORDER, m.Config(cli.SOURCE), "_install/bin") }}, - }, - }) + }, code.InstallAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Cmdy(code.INSTALL, cli.SOURCE, m.Config(cli.SOURCE), arg) + }}, + }}) } diff --git a/misc/git/count.go b/misc/git/count.go index da3ff0d7..c018c4b0 100644 --- a/misc/git/count.go +++ b/misc/git/count.go @@ -24,12 +24,15 @@ func init() { m.Option(nfs.DIR_DEEP, ice.TRUE) m.Option(nfs.DIR_TYPE, nfs.TYPE_CAT) m.Cmdy(nfs.DIR, arg, func(file string) { - if !strings.Contains(file, ice.PT) { + if strings.Contains(file, "var/") { return } if strings.Contains(file, "bin/") { return } + if !strings.Contains(file, ice.PT) { + return + } switch kit.Ext(file) { case "sum", "log": return @@ -52,7 +55,7 @@ func init() { }) }) for k := range lines { - m.Push("type", k) + m.Push(kit.MDB_TYPE, k) m.Push("files", files[k]) m.Push("lines", lines[k]) } diff --git a/misc/git/status.go b/misc/git/status.go index a22235ba..c5ecec4a 100644 --- a/misc/git/status.go +++ b/misc/git/status.go @@ -57,7 +57,7 @@ func _status_tags(m *ice.Message) { return text } if v, ok := vs[kit.Slice(strings.Split(ls[0], ice.PT), -1)[0]]; ok && ls[1] != v { - m.Debug("upgrade to %v %v from %v", ls[0], ls[1], v) + m.Info("upgrade to %v %v from %v", ls[0], ls[1], v) text = ice.TB + ls[0] + ice.SP + v change = true } @@ -70,11 +70,10 @@ func _status_tags(m *ice.Message) { m.Cmd(nfs.SAVE, ice.GO_SUM, "") m.Cmd(nfs.SAVE, ice.GO_MOD, mod) - m.Option(cli.CMD_DIR, _repos_path(k)) - switch k { + switch m.Option(cli.CMD_DIR, _repos_path(k)); k { case ice.CONTEXTS: - defer m.Cmd(cli.SYSTEM, cli.MAKE) + defer m.Cmd(cli.SYSTEM, cli.MAKE, ice.Option{cli.CMD_DIR, _repos_path(k)}) case ice.ICEBERGS: m.Cmd(cli.SYSTEM, code.GO, cli.BUILD) default: diff --git a/misc/tmux/session.go b/misc/tmux/session.go index 72981079..8e606394 100644 --- a/misc/tmux/session.go +++ b/misc/tmux/session.go @@ -50,7 +50,7 @@ func init() { FIELDS, "id,tag,pane,tty,height,width,cmd", )}, }, Commands: map[string]*ice.Command{ - SESSION: {Name: "session session window pane cmd auto create script", Help: "会话管理", Action: map[string]*ice.Action{ + SESSION: {Name: "session session window pane cmd auto", Help: "会话管理", Action: map[string]*ice.Action{ web.DREAM_CREATE: {Name: "dream.create type name", Help: "梦想", Hand: func(m *ice.Message, arg ...string) { if kit.IndexOf(m.Cmd(m.PrefixKey()).Appendv(SESSION), m.Option(kit.MDB_NAME)) == -1 { m.Cmd(m.PrefixKey(), mdb.CREATE) @@ -143,9 +143,10 @@ func init() { } } }) - m.Sleep("100ms") + m.Sleep30ms() }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Action(SCRIPT) if len(arg) > 3 { // 执行命令 m.Cmd(CMD, _tmux_key(arg[0], arg[1], arg[2]), arg[3:]) } @@ -153,6 +154,7 @@ func init() { m.Echo(strings.TrimSpace(m.Cmdx(VIEW, _tmux_key(arg[0], arg[1], arg[2])))) return } + m.Action(mdb.CREATE) if len(arg) > 1 { // 终端列表 m.Cmdy(PANE, _tmux_key(arg[0], arg[1])) m.PushAction(mdb.SELECT, mdb.REMOVE) diff --git a/type.go b/type.go index 868b85f5..4cab45b8 100644 --- a/type.go +++ b/type.go @@ -424,7 +424,7 @@ func (m *Message) Search(key string, cb interface{}) *Message { break } - for _, p := range []*Context{p, m.target, m.source} { + for _, p := range []*Context{m.target, p, m.source} { for s := p; s != nil; s = s.context { if cmd, ok := s.Commands[key]; ok { cb(s.context, s, key, cmd) // 查找命令 @@ -433,7 +433,7 @@ func (m *Message) Search(key string, cb interface{}) *Message { } } case func(p *Context, s *Context, key string, conf *Config): - for _, p := range []*Context{p, m.target, m.source} { + for _, p := range []*Context{m.target, p, m.source} { for s := p; s != nil; s = s.context { if cmd, ok := s.Configs[key]; ok { cb(s.context, s, key, cmd) // 查找配置