diff --git a/base/web/serve.go b/base/web/serve.go index 1660e35b..1ec878b5 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -258,10 +258,10 @@ func init() { }}, "/volcanos/": {Name: "/volcanos/", Help: "浏览器", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Render(ice.RENDER_DOWNLOAD, path.Join(m.Conf(SERVE, kit.Keym(ice.VOLCANOS, kit.MDB_PATH)), path.Join(arg...))) + m.RenderDownload(path.Join(m.Conf(SERVE, kit.Keym(ice.VOLCANOS, kit.MDB_PATH)), path.Join(arg...))) }}, "/intshell/": {Name: "/intshell/", Help: "命令行", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Render(ice.RENDER_DOWNLOAD, path.Join(m.Conf(SERVE, kit.Keym(ice.INTSHELL, kit.MDB_PATH)), path.Join(arg...))) + m.RenderDownload(path.Join(m.Conf(SERVE, kit.Keym(ice.INTSHELL, kit.MDB_PATH)), path.Join(arg...))) }}, "/publish/": {Name: "/publish/", Help: "私有云", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { _share_local(m, m.Conf(SERVE, kit.Keym(ice.PUBLISH)), path.Join(arg...)) diff --git a/core/chat/action.go b/core/chat/action.go index 557b743a..dbbc31ef 100644 --- a/core/chat/action.go +++ b/core/chat/action.go @@ -6,6 +6,7 @@ import ( ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/aaa" + "github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/ctx" "github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/web" @@ -186,5 +187,18 @@ func init() { _action_show(m, arg[0], arg[1], arg[2], arg[3:]...) }}, + "/cmd/": {Name: "/cmd/", Help: "命令", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.RenderDownload(path.Join(m.Conf(web.SERVE, kit.Keym(ice.VOLCANOS, kit.MDB_PATH)), "page/cmd.html")) + }}, + "/cmd": {Name: "/cmd", Help: "命令", Action: map[string]*ice.Action{ + ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(ctx.COMMAND, arg) + }}, + cli.RUN: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(arg) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Debug("waht %v %v", cmd, arg) + }}, }}) } diff --git a/core/chat/header.go b/core/chat/header.go index 672f9251..ac465c98 100644 --- a/core/chat/header.go +++ b/core/chat/header.go @@ -31,9 +31,12 @@ func _header_check(m *ice.Message) { } } func _header_share(m *ice.Message, arg ...string) { - share := m.Cmdx(web.SHARE, mdb.CREATE, kit.MDB_TYPE, web.LOGIN, arg) + if m.Option(kit.MDB_LINK) == "" { + share := m.Cmdx(web.SHARE, mdb.CREATE, kit.MDB_TYPE, web.LOGIN, arg) + m.Option(kit.MDB_LINK, kit.MergeURL(m.Option(ice.MSG_USERWEB), web.SHARE, share)) + } - link := kit.MergeURL(m.Option(ice.MSG_USERWEB), web.SHARE, share) + link := m.Option(kit.MDB_LINK) if strings.Contains(link, tcp.LOCALHOST) { link = strings.Replace(link, tcp.LOCALHOST, m.Cmd(tcp.HOST, ice.OptionFields(tcp.IP)).Append(tcp.IP), 1) } diff --git a/misc.go b/misc.go index d4ebfe84..3e3aa10a 100644 --- a/misc.go +++ b/misc.go @@ -248,6 +248,28 @@ func (m *Message) FormatMeta() string { return m.Format("meta") } func (m *Message) FormatSize() string { return m.Format("size") } func (m *Message) FormatCost() string { return m.Format("cost") } +func (m *Message) Render(cmd string, args ...interface{}) *Message { + m.Optionv(MSG_OUTPUT, cmd) + m.Optionv(MSG_ARGS, args) + + switch cmd { + case RENDER_TEMPLATE: // text [data [type]] + if len(args) == 1 { + args = append(args, m) + } + if res, err := kit.Render(args[0].(string), args[1]); m.Assert(err) { + m.Echo(string(res)) + } + } + return m +} +func (m *Message) RenderResult(args ...interface{}) *Message { + return m.Render(RENDER_RESULT, args...) +} +func (m *Message) RenderDownload(args ...interface{}) *Message { + return m.Render(RENDER_DOWNLOAD, args...) +} + type Sort struct { Fields string Method string @@ -394,21 +416,6 @@ func (m *Message) Cut(fields ...string) *Message { m.meta[MSG_APPEND] = strings.Split(strings.Join(fields, ","), ",") return m } -func (m *Message) Render(cmd string, args ...interface{}) *Message { - m.Optionv(MSG_OUTPUT, cmd) - m.Optionv(MSG_ARGS, args) - - switch cmd { - case RENDER_TEMPLATE: // text [data [type]] - if len(args) == 1 { - args = append(args, m) - } - if res, err := kit.Render(args[0].(string), args[1]); m.Assert(err) { - m.Echo(string(res)) - } - } - return m -} func (m *Message) Parse(meta string, key string, arg ...string) *Message { list := []string{} for _, line := range kit.Split(strings.Join(arg, " "), "\n") { diff --git a/misc/bash/sess.go b/misc/bash/sess.go index 3ca4586c..e09d6eda 100644 --- a/misc/bash/sess.go +++ b/misc/bash/sess.go @@ -68,14 +68,14 @@ func init() { m.Echo(m.Option(SID)) }}, SESS: {Name: "sess hash auto prunes", Help: "会话流", Action: map[string]*ice.Action{ - 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) - }}, 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) == 0, m.Conf(SESS, kit.META_FIELD)) m.Cmdy(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, arg) diff --git a/misc/vim/favor.go b/misc/vim/favor.go index 2f7616f5..fbbf2739 100644 --- a/misc/vim/favor.go +++ b/misc/vim/favor.go @@ -7,92 +7,78 @@ import ( "github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/core/code" kit "github.com/shylinux/toolkits" - - "strings" ) -const ( - TAB = "tab" - NOTE = "note" -) 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_TOPIC, kit.MDB_FIELD, "time,id,type,name,text,file,line", + kit.MDB_SHORT, kit.MDB_ZONE, kit.MDB_FIELD, "time,id,type,name,text,file,line,pwd", )}, }, Commands: map[string]*ice.Command{ - FAVOR: {Name: "favor topic id auto create export import", Help: "收藏夹", Action: map[string]*ice.Action{ - mdb.CREATE: {Name: "create topic", Help: "创建", Hand: func(m *ice.Message, arg ...string) { + "/favor": {Name: "/favor", Help: "收藏", Action: map[string]*ice.Action{ + mdb.SELECT: {Name: "select", Help: "主题", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(FAVOR).Table(func(index int, value map[string]string, head []string) { + m.Echo(value[kit.MDB_ZONE]).Echo("\n") + }) + }}, + mdb.INSERT: {Name: "insert", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(FAVOR, mdb.INSERT, m.OptionSimple("zone,type,name,text,file,line,pwd")) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Cmd(FAVOR, m.Option(kit.MDB_ZONE)).Table(func(index int, value map[string]string, head []string) { + m.Echo("%v\n", m.Option(kit.MDB_ZONE)).Echo("%v:%v:%v:(%v): %v\n", + value[kit.MDB_FILE], value[kit.MDB_LINE], "1", value[kit.MDB_NAME], value[kit.MDB_TEXT]) + }) + }}, + FAVOR: {Name: "favor zone id auto create export import", 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 topic=数据结构 name=hi text=hello file line", Help: "添加", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC)) - m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), kit.SubKey(m.Option(kit.MDB_TOPIC)), mdb.LIST, arg[2:]) + mdb.INSERT: {Name: "insert zone=数据结构 name=hi text=hello file line", 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), kit.SubKey(m.Option(kit.MDB_TOPIC)), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg) + 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.HASH, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC)) + 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.Cmdy(mdb.EXPORT, m.Prefix(FAVOR), "", mdb.HASH) + 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.HASH) + 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_TOPIC: + case kit.MDB_ZONE: m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), "", mdb.HASH, arg) default: - m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), kit.SubKey(m.Option(kit.MDB_TOPIC)), mdb.LIST, arg) + m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), kit.KeyHash(m.Option(kit.MDB_ZONE)), mdb.LIST, arg) } }}, code.INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) { - if len(arg) > 0 && arg[0] == mdb.RENDER { - m.Cmdy(code.INNER, arg[1:]) - return - } - - m.ShowPlugin("", code.INNER, mdb.RENDER) - m.Push(kit.SSH_ARG, kit.Format([]string{kit.Select("./", path.Dir(m.Option(kit.MDB_FILE))), path.Base(m.Option(kit.MDB_FILE)), m.Option(kit.MDB_LINE)})) + m.ProcessCommand(code.INNER, kit.Format([]string{ + kit.Select("./", path.Dir(m.Option(kit.MDB_FILE))), + path.Base(m.Option(kit.MDB_FILE)), + m.Option(kit.MDB_LINE), + }), arg...) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if len(arg) == 0 { - m.Option(mdb.FIELDS, "time,count,topic") - m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.HASH) + m.Fields(len(arg) < 2, kit.Select(m.Conf(FAVOR, kit.META_FIELD), "time,zone,count", len(arg) == 0)) + if m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.ZONE, arg); len(arg) == 0 { + m.Action(mdb.CREATE) m.PushAction(mdb.REMOVE) - return + } else { + m.PushAction(code.INNER) } - - m.Option(mdb.FIELDS, kit.Select(m.Conf(m.Prefix(FAVOR), kit.META_FIELD), mdb.DETAIL, len(arg) > 1)) - m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), kit.SubKey(arg[0]), mdb.LIST, kit.MDB_ID, arg[1:]) - m.PushAction(code.INNER) - }}, - - "/favor": {Name: "/favor", Help: "收藏", Action: map[string]*ice.Action{ - mdb.INSERT: {Name: "insert", Help: "添加", Hand: func(m *ice.Message, arg ...string) { - m.Cmd(FAVOR, mdb.INSERT, kit.MDB_TOPIC, m.Option(TAB), kit.MDB_NAME, m.Option(NOTE), - kit.MDB_TEXT, m.Option(ARG), kit.MDB_FILE, m.Option(BUF), kit.MDB_LINE, m.Option(ROW), - ) - }}, - mdb.SELECT: {Name: "select", Help: "主题", Hand: func(m *ice.Message, arg ...string) { - list := []string{} - m.Cmd(FAVOR).Table(func(index int, value map[string]string, head []string) { - list = append(list, value[kit.MDB_TOPIC]) - }) - m.Echo(strings.Join(list, "\n")) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Cmd(FAVOR, m.Option(TAB)).Table(func(index int, value map[string]string, head []string) { - m.Echo("%v\n", m.Option(TAB)).Echo("%v:%v:%v:(%v): %v\n", - value[kit.MDB_FILE], value[kit.MDB_LINE], "1", value[kit.MDB_NAME], value[kit.MDB_TEXT]) - }) }}, }, }) diff --git a/misc/vim/input.go b/misc/vim/input.go index 76ad0679..51f5f11a 100644 --- a/misc/vim/input.go +++ b/misc/vim/input.go @@ -1,14 +1,17 @@ package vim import ( + "strings" + ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/mdb" kit "github.com/shylinux/toolkits" - - "strings" ) +const ( + PERSON = "person" +) const INPUT = "input" func init() { @@ -19,28 +22,15 @@ func init() { )}, }, Commands: map[string]*ice.Command{ - INPUT: {Name: "input id auto export import", Help: "输入法", Action: map[string]*ice.Action{ - mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.EXPORT, m.Prefix(INPUT), "", mdb.LIST) - }}, - mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.IMPORT, m.Prefix(INPUT), "", mdb.LIST) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Option(mdb.FIELDS, kit.Select(m.Conf(INPUT, kit.META_FIELD), mdb.DETAIL, len(arg) > 0)) - m.Cmdy(mdb.SELECT, m.Prefix(INPUT), "", mdb.LIST, kit.MDB_ID, arg) - }}, - "/input": {Name: "/input", Help: "输入法", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if arg[0] = strings.TrimSpace(arg[0]); strings.HasPrefix(arg[0], "ice ") { switch list := kit.Split(arg[0]); list[1] { - case "add": - // ice add 想你 shwq [9999 [person]] - m.Cmd("web.code.input.wubi", "insert", "text", list[2], "code", list[3], - "weight", kit.Select("999999", list, 4), "zone", kit.Select("person", list, 5)) + case "add": // ice add 想你 shwq [person [9999]] + m.Cmd("web.code.input.wubi", mdb.INSERT, kit.MDB_TEXT, list[2], kit.MDB_CODE, list[3], + kit.MDB_ZONE, kit.Select(PERSON, list, 4), kit.MDB_VALUE, kit.Select("999999", list, 5), + ) arg[0] = list[3] default: - // ice command if m.Cmdy(list[1:]); strings.TrimSpace(m.Result()) == "" { m.Table() } @@ -56,11 +46,21 @@ func init() { // 词汇列表 m.Cmd("web.code.input.wubi", "word", arg[0]).Table(func(index int, value map[string]string, head []string) { - m.Echo("%s\n", value["text"]) + m.Echo("%s\n", value[kit.MDB_TEXT]) }) - m.Cmd(mdb.INSERT, m.Prefix(INPUT), "", mdb.LIST, kit.MDB_TYPE, "wubi", kit.MDB_NAME, arg[0], kit.MDB_TEXT, m.Result()) }}, + INPUT: {Name: "input id auto export import", Help: "输入法", Action: map[string]*ice.Action{ + mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(mdb.EXPORT, m.Prefix(INPUT), "", mdb.LIST) + }}, + mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(mdb.IMPORT, m.Prefix(INPUT), "", mdb.LIST) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Fields(len(arg) == 0, m.Conf(INPUT, kit.META_FIELD)) + m.Cmdy(mdb.SELECT, m.Prefix(INPUT), "", mdb.LIST, kit.MDB_ID, arg) + }}, }, }) } diff --git a/misc/vim/sess.go b/misc/vim/sess.go index 46a4d6b9..b8cbc9ff 100644 --- a/misc/vim/sess.go +++ b/misc/vim/sess.go @@ -1,31 +1,26 @@ package vim import ( + "io/ioutil" + "strings" + 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/tcp" "github.com/shylinux/icebergs/base/web" kit "github.com/shylinux/toolkits" - - "io/ioutil" - "strings" ) const ( SID = "sid" ARG = "arg" SUB = "sub" - PWD = "pwd" - PID = "pid" BUF = "buf" ROW = "row" COL = "col" ) -const ( - LOGOUT = "logout" - LOGIN = "login" -) const SESS = "sess" func init() { @@ -36,48 +31,56 @@ func init() { )}, }, Commands: map[string]*ice.Command{ - SESS: {Name: "sess hash auto prunes", Help: "会话流", Action: map[string]*ice.Action{ - mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) { - m.Option(mdb.FIELDS, m.Conf(SESS, kit.META_FIELD)) - m.Cmdy(mdb.PRUNES, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, LOGOUT) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Option(mdb.FIELDS, kit.Select(m.Conf(SESS, kit.META_FIELD), mdb.DETAIL, len(arg) > 0)) - m.Cmdy(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, arg) - }}, - 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)) + m.Option(SUB, string(b)) // 文件参数 } } - if sid := strings.TrimSpace(m.Option(SID)); m.Option(SID, sid) != "" { - if msg := m.Cmd(SESS, sid); msg.Append(kit.MDB_STATUS) != "" { - m.Option(aaa.USERNAME, msg.Append(aaa.USERNAME)) - m.Option(tcp.HOSTNAME, msg.Append(tcp.HOSTNAME)) - } else { - // 登录失败 - } + switch m.Render(ice.RENDER_RESULT); m.R.URL.String() { + case "/qrcode", "/sess": // 登录入口 + return } - m.Render(ice.RENDER_RESULT) + + if m.Warn(m.Option(SID, strings.TrimSpace(m.Option(SID))) == "", ice.ErrNotLogin) { + 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) }}, "/sess": {Name: "/sess", Help: "会话", Action: map[string]*ice.Action{ - 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, LOGOUT) + 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, LOGIN, - aaa.USERNAME, m.Option(aaa.USERNAME), tcp.HOSTNAME, m.Option(tcp.HOSTNAME), PID, m.Option(PID), PWD, m.Option(PWD))) - } else { // 复用会话 - m.Cmdy(mdb.MODIFY, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(SID), kit.MDB_STATUS, LOGIN) + 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) == 0, m.Conf(SESS, kit.META_FIELD)) + m.Cmdy(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, arg) + m.PushAction(mdb.REMOVE) + }}, }, }) } diff --git a/misc/vim/sync.go b/misc/vim/sync.go index b9dd9cc5..9d0ed9e8 100644 --- a/misc/vim/sync.go +++ b/misc/vim/sync.go @@ -2,41 +2,50 @@ package vim import ( ice "github.com/shylinux/icebergs" + "github.com/shylinux/icebergs/base/aaa" + "github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/mdb" kit "github.com/shylinux/toolkits" ) +const _sync_index = 1 + +func _sync_count(m *ice.Message) string { + return m.Conf(SYNC, kit.Keym(kit.MDB_COUNT)) +} + 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", + kit.MDB_FIELD, "time,id,type,name,text,pwd,username,hostname", )}, }, Commands: map[string]*ice.Command{ - SYNC: {Name: "sync id auto", Help: "同步流", Action: map[string]*ice.Action{ - mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if len(arg) > 0 { - m.Option(mdb.FIELDS, mdb.DETAIL) - } else { - m.Option(mdb.FIELDS, m.Conf(SYNC, kit.META_FIELD)) - } - - m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_ID, arg) - }}, "/sync": {Name: "/sync", Help: "同步", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { switch m.Option(ARG) { case "wq", "q", "qa": - m.Cmd("/sess", LOGOUT) + m.Cmd("/sess", aaa.LOGOUT) } m.Cmd(mdb.INSERT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_TYPE, VIMRC, kit.MDB_NAME, arg[0], kit.MDB_TEXT, kit.Select(m.Option(ARG), m.Option(SUB)), - PWD, m.Option(PWD), BUF, m.Option(BUF), ROW, m.Option(ROW), COL, m.Option(COL)) + cli.PWD, m.Option(cli.PWD), BUF, m.Option(BUF), ROW, m.Option(ROW), COL, m.Option(COL)) + }}, + SYNC: {Name: "sync id auto page", 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)...) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.OptionPage(kit.Slice(arg, _sync_index)...) + m.Fields(len(arg) == 0 || arg[0] == "", m.Conf(SYNC, kit.META_FIELD)) + m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_ID, arg) + m.StatusTimeCountTotal(_sync_count(m)) }}, }, }) diff --git a/misc/vim/vim.go b/misc/vim/vim.go index 4483edda..e33ce096 100644 --- a/misc/vim/vim.go +++ b/misc/vim/vim.go @@ -1,6 +1,8 @@ package vim import ( + "path" + ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/mdb" @@ -8,13 +10,10 @@ import ( "github.com/shylinux/icebergs/base/web" "github.com/shylinux/icebergs/core/code" kit "github.com/shylinux/toolkits" - - "path" - "strings" ) func _vim_pkg(m *ice.Message) string { - return strings.Replace(strings.Replace(kit.TrimExt(m.Conf(VIM, kit.META_SOURCE)), ".", "", -1), "-", "", -1) + return kit.Replace(kit.TrimExt(m.Conf(VIM, kit.Keym(cli.BUILD))), "_.", "") } const VIMRC = "vimrc" @@ -24,41 +23,23 @@ var Index = &ice.Context{Name: VIM, Help: "编辑器", Commands: map[string]*ice.Command{ VIM: {Name: "vim 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(VIM, kit.META_SOURCE)) + m.Cmdy(code.INSTALL, web.DOWNLOAD, m.Conf(VIM, kit.Keym(cli.SOURCE))) }}, cli.BUILD: {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(code.INSTALL, cli.BUILD, _vim_pkg(m), m.Confv(VIM, "meta.build")) + m.Cmdy(code.INSTALL, cli.BUILD, _vim_pkg(m), m.Confv(VIM, kit.Keym(cli.BUILD))) }}, cli.START: {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) { - m.Optionv("prepare", func(p string) []string { - list := kit.Simple(m.Confv(VIM, "meta.start")) - for i := 0; i < len(list); i += 2 { - m.Cmd(web.SPIDE, web.SPIDE_DEV, web.SPIDE_SAVE, path.Join(p, list[i]), - web.SPIDE_GET, "/share/local/usr/intshell/misc/vim/"+list[i+1]) - } - return []string{} - return []string{"-T", "screen", "-c", "PlugInstall", "-c", "exit", "-c", "exit"} - }) m.Cmdy(code.INSTALL, cli.START, _vim_pkg(m), "bin/vim") - - // 安装插件 - m.Echo("\n") - m.Echo("vim -c PlugInstall\n") - m.Echo("vim -c GoInstallBinaries\n") }}, mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) { - m.Echo(m.Conf(VIM, "meta.plug")) + m.Echo(m.Conf(VIM, kit.Keym(code.PLUG))) }}, mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) { - if strings.HasPrefix(arg[2], "http") { - m.Cmdy(web.SPIDE, web.SPIDE_DEV, web.SPIDE_RAW, web.SPIDE_GET, arg[2]+arg[1]) - return - } m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1])) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Cmdy(code.INSTALL, path.Base(m.Conf(VIM, kit.META_SOURCE)), arg) + m.Cmdy(code.INSTALL, path.Base(m.Conf(VIM, kit.Keym(cli.SOURCE))), arg) }}, ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { @@ -73,74 +54,40 @@ var Index = &ice.Context{Name: VIM, Help: "编辑器", }}, }, Configs: map[string]*ice.Config{ - VIM: {Name: "vim", Help: "编辑器", Value: kit.Data( - "source", "http://ftp.vim.org/pub/vim/unix/vim-8.1.tar.bz2", - "build", []interface{}{ + VIM: {Name: VIM, Help: "编辑器", Value: kit.Data( + cli.SOURCE, "http://ftp.vim.org/pub/vim/unix/vim-8.1.tar.bz2", + cli.BUILD, []interface{}{ "--enable-multibyte=yes", "--enable-pythoninterp=yes", "--enable-luainterp=yes", "--enable-cscope=yes", }, - "start", []interface{}{ - ".vimrc", "vimrc", - ".vim/autoload/plug.vim", "plug.vim", - ".vim/autoload/auto.vim", "auto.vim", - ".vim/syntax/javascript.vim", "javascript.vim", - ".vim/syntax/shy.vim", "shy.vim", - ".vim/syntax/shy.vim", "sh.vim", - ".vim/syntax/go.vim", "go.vim", - }, - "plug", kit.Dict( - "split", kit.Dict( + code.PLUG, kit.Dict( + code.SPLIT, kit.Dict( "space", " \t", "operator", "{[(&.,;!|<>)]}", ), - "prefix", kit.Dict( + code.PREFIX, kit.Dict( "\"", "comment", ), - "keyword", kit.Dict( - "colorscheme", "keyword", - "highlight", "keyword", - "syntax", "keyword", + "_keyword", kit.Dict( + code.KEYWORD, kit.Simple( + "source", "finish", + "set", "let", "end", + "if", "else", "elseif", "endif", + "for", "in", "continue", "break", "endfor", + "try", "catch", "finally", "endtry", + "call", "function", "return", "endfunction", - "nnoremap", "keyword", - "cnoremap", "keyword", - "inoremap", "keyword", - - "autocmd", "keyword", - "command", "keyword", - "execute", "keyword", - - "set", "keyword", - "let", "keyword", - "if", "keyword", - "else", "keyword", - "elseif", "keyword", - "endif", "keyword", - "end", "keyword", - "for", "keyword", - "in", "keyword", - "continue", "keyword", - "break", "keyword", - "endfor", "keyword", - "try", "keyword", - "catch", "keyword", - "finally", "keyword", - "endtry", "keyword", - - "call", "keyword", - "return", "keyword", - "source", "keyword", - "finish", "keyword", - "function", "keyword", - "endfunction", "keyword", - - "has", "function", - "type", "function", - "empty", "function", - "exists", "function", - "executable", "function", + "autocmd", "command", "execute", + "nnoremap", "cnoremap", "inoremap", + "colorscheme", "highlight", "syntax", + ), + code.FUNCTION, kit.Simple( + "has", "type", "empty", + "exists", "executable", + ), ), ), )}, diff --git a/misc/vim/vim.shy b/misc/vim/vim.shy index 96496818..15137110 100644 --- a/misc/vim/vim.shy +++ b/misc/vim/vim.shy @@ -8,8 +8,6 @@ refer ` chapter "源码" field "安装" web.code.vim.vim field "源码" web.code.inner args `usr/install/vim81/ src/main.c 110` -field "脚本" web.code.inner args `usr/install/vim81/_install/share/vim/vim81/ filetype.vim` -field "文档" web.code.inner args `usr/install/vim81/_install/share/vim/vim81/doc/ help.txt` section "构建" spark shell ` @@ -34,6 +32,7 @@ field "编辑器" web.code.vim.sess field "同步流" web.code.vim.sync field "收藏夹" web.code.vim.favor field "输入法" web.code.vim.input +return chapter "插件" field "插件管理器" web.code.inner args `usr/intshell/misc/vim/ plug.vim` @@ -46,3 +45,5 @@ refer ` chapter "配置" field "启动脚本" web.code.inner args `usr/intshell/misc/vim/ vimrc` +field "脚本" web.code.inner args `usr/install/vim81/_install/share/vim/vim81/ filetype.vim` +field "文档" web.code.inner args `usr/install/vim81/_install/share/vim/vim81/doc/ help.txt`