diff --git a/base/cli/output.go b/base/cli/output.go index a4d44cef..c3117bdd 100644 --- a/base/cli/output.go +++ b/base/cli/output.go @@ -8,8 +8,6 @@ import ( "io" ) -const OUTPUT = "output" - func _cli_progress(m *ice.Message, cb interface{}) { m.Option(mdb.FIELDS, "time,name,step,count,total") if m.Option(ice.MSG_PROCESS, "_progress"); m.Option("_progress") != "" { @@ -32,23 +30,23 @@ func _cli_progress(m *ice.Message, cb interface{}) { } }) } -func Follow(m *ice.Message) bool { +func Follow(m *ice.Message, action string) bool { m.Option(ice.MSG_PROCESS, "_follow") - if m.Option("cache.action", "build"); m.Option("cache.hash") != "" { - m.Cmdy(OUTPUT, m.Option("cache.hash")) + if m.Option(mdb.CACHE_ACTION, action); m.Option(mdb.CACHE_HASH) != "" { + m.Cmdy(OUTPUT, m.Option(mdb.CACHE_HASH)) m.Sort(kit.MDB_ID).Table(func(index int, value map[string]string, head []string) { - m.Option("cache.begin", value[kit.MDB_ID]) + m.Option(mdb.CACHE_BEGIN, value[kit.MDB_ID]) m.Echo(value[kit.SSH_RES]) }) - if len(m.Resultv()) == 0 && m.Conf(OUTPUT, kit.Keys(kit.MDB_HASH, m.Option("cache.hash"), kit.MDB_META, kit.MDB_STATUS)) == STOP { + if len(m.Resultv()) == 0 && m.Conf(OUTPUT, kit.Keys(kit.MDB_HASH, m.Option(mdb.CACHE_HASH), kit.MDB_META, kit.MDB_STATUS)) == STOP { m.Echo(STOP) } return true } m.Cmdy(OUTPUT, mdb.CREATE, kit.MDB_NAME, m.Option(kit.MDB_LINK)) - m.Option("cache.hash", m.Result()) - m.Option("cache.begin", 1) + m.Option(mdb.CACHE_HASH, m.Result()) + m.Option(mdb.CACHE_BEGIN, 1) m.Set(ice.MSG_RESULT) return false } @@ -59,6 +57,8 @@ const ( const PROGRESS = "progress" +const OUTPUT = "output" + func init() { Index.Merge(&ice.Context{ Configs: map[string]*ice.Config{ @@ -113,7 +113,7 @@ func init() { return } - m.Option("_control", "_page") + m.Option(ice.MSG_CONTROL, "_page") m.Option(mdb.FIELDS, kit.Select("time,id,res", mdb.DETAIL, len(arg) > 1)) m.Cmdy(mdb.SELECT, OUTPUT, kit.Keys(kit.MDB_HASH, arg[0]), mdb.LIST, kit.MDB_ID, arg[1:]) m.Sort(kit.MDB_ID) diff --git a/base/mdb/mdb.go b/base/mdb/mdb.go index 7dd76445..259b199d 100644 --- a/base/mdb/mdb.go +++ b/base/mdb/mdb.go @@ -407,6 +407,15 @@ const ( INVITE = "invite" COMMIT = "commit" ) +const ( + CACHE_LIMIT = "cache.limit" + CACHE_FILED = "cache.field" + CACHE_VALUE = "cache.value" + + CACHE_ACTION = "cache.action" + CACHE_BEGIN = "cache.begin" + CACHE_HASH = "cache.hash" +) const MDB = "mdb" diff --git a/core/code/install.go b/core/code/install.go index 4433efd1..ac3696de 100644 --- a/core/code/install.go +++ b/core/code/install.go @@ -69,7 +69,7 @@ func init() { }) }}, gdb.BUILD: {Name: "build link", Help: "构建", Hand: func(m *ice.Message, arg ...string) { - if cli.Follow(m) { + if cli.Follow(m, gdb.BUILD) { return } diff --git a/misc/zsh/bash.go b/misc/zsh/bash.go index 55701f49..ed7b088b 100644 --- a/misc/zsh/bash.go +++ b/misc/zsh/bash.go @@ -2,6 +2,8 @@ package zsh import ( ice "github.com/shylinux/icebergs" + "github.com/shylinux/icebergs/base/gdb" + "github.com/shylinux/icebergs/base/web" "github.com/shylinux/icebergs/core/code" kit "github.com/shylinux/toolkits" @@ -18,15 +20,15 @@ func init() { )}, }, Commands: map[string]*ice.Command{ - BASH: {Name: "bash port path auto 启动 构建 下载", Help: "命令行", Action: map[string]*ice.Action{ - "download": {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(code.INSTALL, "download", m.Conf(BASH, kit.META_SOURCE)) + BASH: {Name: "bash 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(BASH, kit.META_SOURCE)) }}, - "build": {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(code.INSTALL, "build", m.Conf(BASH, kit.META_SOURCE)) + gdb.BUILD: {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(code.INSTALL, gdb.BUILD, m.Conf(BASH, kit.META_SOURCE)) }}, - "start": {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(code.INSTALL, "start", m.Conf(BASH, kit.META_SOURCE), "bin/bash") + gdb.START: {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(code.INSTALL, gdb.START, m.Conf(BASH, kit.META_SOURCE), "bin/bash") }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Cmdy(code.INSTALL, path.Base(m.Conf(BASH, kit.META_SOURCE)), arg) diff --git a/misc/zsh/bash.shy b/misc/zsh/bash.shy index f55b42c8..29764bc4 100644 --- a/misc/zsh/bash.shy +++ b/misc/zsh/bash.shy @@ -11,6 +11,9 @@ field "bash" web.code.inner args `[ usr/install/bash-4.2.53/ input.c 625 ]` section "构建" spark shell ` +yum install -y wget make gcc +yum install -y byacc.x86_64 + wget http://mirrors.aliyun.com/gnu/bash/bash-4.2.53.tar.gz tar xvf bash-4.2.53.tar.gz && cd bash-4.2.53 @@ -27,7 +30,7 @@ cd ./_install chapter "应用" web.code.zsh.sess contexts -field "命令行" web.code.zsh.sess +field "会话流" web.code.zsh.sess field "回收站" web.code.zsh.trash field "收藏夹" web.code.zsh.favor field "同步流" web.code.zsh.sync diff --git a/misc/zsh/favor.go b/misc/zsh/favor.go index 06cebb80..5b6da3cb 100644 --- a/misc/zsh/favor.go +++ b/misc/zsh/favor.go @@ -20,15 +20,12 @@ func init() { mdb.CREATE: {Name: "create topic", 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=hi.c line=1", Help: "添加", Hand: func(m *ice.Message, arg ...string) { - m.Richs(m.Prefix(FAVOR), "", m.Option(kit.MDB_TOPIC), func(key string, value map[string]interface{}) { - m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), kit.Keys(kit.MDB_HASH, key), mdb.LIST, arg[2:]) - }) + mdb.INSERT: {Name: "insert topic=数据结构 type=shell name=hi text=hello file=hi.c line=1", 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.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { - m.Richs(m.Prefix(FAVOR), "", m.Option(kit.MDB_TOPIC), func(key string, value map[string]interface{}) { - m.Cmdy(mdb.MODIFY, m.Prefix(FAVOR), kit.Keys(kit.MDB_HASH, key), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg) - }) + 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) }}, 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)) @@ -42,22 +39,25 @@ func init() { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { switch arg[0] { case kit.MDB_TOPIC: - m.Option(mdb.FIELDS, "topic,count") - m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.HASH) + 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) } }}, }, 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.PushAction(mdb.REMOVE) + return + } + if len(arg) > 0 { m.Option(mdb.FIELDS, kit.Select(m.Conf(m.Prefix(FAVOR), kit.META_FIELD), mdb.DETAIL, len(arg) > 1)) m.Richs(m.Prefix(FAVOR), "", arg[0], func(key string, value map[string]interface{}) { m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), kit.Keys(kit.MDB_HASH, key), mdb.LIST, kit.MDB_ID, arg[1:]) }) - return } - - m.Option(mdb.FIELDS, "time,count,topic") - m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.HASH) - m.PushAction("删除") }}, "/favor": {Name: "/favor", Help: "收藏", Action: map[string]*ice.Action{ diff --git a/misc/zsh/sess.go b/misc/zsh/sess.go index a8e67758..b572c34c 100644 --- a/misc/zsh/sess.go +++ b/misc/zsh/sess.go @@ -29,7 +29,7 @@ func init() { )}, }, Commands: map[string]*ice.Command{ - SESS: {Name: "sess hash auto 清理", Help: "会话流", Action: map[string]*ice.Action{ + 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.Cmdy(mdb.PRUNES, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, "logout") }}, @@ -37,20 +37,7 @@ func init() { m.Option(mdb.FIELDS, kit.Select(m.Conf(m.Prefix(SESS), kit.META_FIELD), mdb.DETAIL, len(arg) > 0)) m.Cmdy(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, arg) }}, - "/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") - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Option(mdb.FIELDS, m.Conf(m.Prefix(SESS), kit.META_FIELD)) - if strings.TrimSpace(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") - } - m.Echo(m.Option(SID)) - }}, + 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() @@ -60,8 +47,8 @@ func init() { } } - m.Option(mdb.FIELDS, m.Conf(m.Prefix(SESS), kit.META_FIELD)) if strings.TrimSpace(m.Option(SID)) != "" { + m.Option(mdb.FIELDS, m.Conf(m.Prefix(SESS), kit.META_FIELD)) msg := m.Cmd(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, strings.TrimSpace(m.Option(SID))) if m.Option(SID, msg.Append(kit.MDB_HASH)) != "" { m.Option(aaa.USERNAME, msg.Append(aaa.USERNAME)) @@ -70,6 +57,19 @@ func init() { } m.Render(ice.RENDER_RESULT) }}, + "/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") + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if strings.TrimSpace(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") + } + m.Echo(m.Option(SID)) + }}, }, }, nil) } diff --git a/misc/zsh/sync.go b/misc/zsh/sync.go index 7c44ac46..81a6a7a3 100644 --- a/misc/zsh/sync.go +++ b/misc/zsh/sync.go @@ -10,8 +10,8 @@ import ( "strings" ) -const SYNC = "sync" const SHELL = "shell" +const SYNC = "sync" func init() { Index.Merge(&ice.Context{ @@ -21,16 +21,16 @@ func init() { )}, }, Commands: map[string]*ice.Command{ - SYNC: {Name: "sync id auto 导出 导入", Help: "同步流", Action: map[string]*ice.Action{ + SYNC: {Name: "sync 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(SYNC), "", mdb.LIST) }}, mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.IMPORT, m.Prefix(SYNC), "", mdb.LIST) }}, - FAVOR: {Name: "favor topic name", Help: "收藏", Hand: func(m *ice.Message, arg ...string) { + FAVOR: {Name: "favor topic type name text", Help: "收藏", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(m.Prefix(FAVOR), mdb.INSERT, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC), - kit.MDB_TYPE, SHELL, kit.MDB_NAME, m.Option(kit.MDB_NAME), kit.MDB_TEXT, m.Option(kit.MDB_TEXT)) + kit.MDB_TYPE, m.Option(kit.MDB_TYPE), kit.MDB_NAME, m.Option(kit.MDB_NAME), kit.MDB_TEXT, m.Option(kit.MDB_TEXT)) }}, mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { switch arg[0] { @@ -41,16 +41,16 @@ func init() { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Option(mdb.FIELDS, kit.Select(m.Conf(SYNC, kit.META_FIELD), mdb.DETAIL, len(arg) > 0)) if len(arg) > 0 { - m.Option("cache.field", kit.MDB_ID) - m.Option("cache.value", arg[0]) + m.Option(mdb.CACHE_FILED, kit.MDB_ID) + m.Option(mdb.CACHE_VALUE, arg[0]) } else { - defer m.PushAction("收藏") - if m.Option("_control", "page"); m.Option("cache.limit") == "" { - m.Option("cache.limit", "10") + defer m.PushAction(FAVOR) + if m.Option(ice.MSG_CONTROL, "_page"); m.Option(mdb.CACHE_LIMIT) == "" { + m.Option(mdb.CACHE_LIMIT, "10") } } - m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, m.Option("cache.field"), m.Option("cache.value")) + m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, m.Option(mdb.CACHE_FILED), m.Option(mdb.CACHE_VALUE)) }}, "/sync": {Name: "/sync", Help: "同步", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { switch arg[0] { diff --git a/misc/zsh/zsh.go b/misc/zsh/zsh.go index 684baf79..551af752 100644 --- a/misc/zsh/zsh.go +++ b/misc/zsh/zsh.go @@ -2,6 +2,7 @@ package zsh import ( ice "github.com/shylinux/icebergs" + "github.com/shylinux/icebergs/base/gdb" "github.com/shylinux/icebergs/base/web" "github.com/shylinux/icebergs/core/code" kit "github.com/shylinux/toolkits" @@ -14,26 +15,26 @@ const ZSH = "zsh" var Index = &ice.Context{Name: ZSH, Help: "命令行", Configs: map[string]*ice.Config{ ZSH: {Name: ZSH, Help: "命令行", Value: kit.Data( - "source", "https://sourceforge.net/projects/zsh/files/zsh/5.8/zsh-5.8.tar.xz", + "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 启动 构建 下载", Help: "命令行", Action: map[string]*ice.Action{ - "download": {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(code.INSTALL, "download", m.Conf(ZSH, kit.META_SOURCE)) + ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Load() }}, + ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save() }}, + + 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)) }}, - "build": {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(code.INSTALL, "build", m.Conf(ZSH, kit.META_SOURCE)) + gdb.BUILD: {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(code.INSTALL, gdb.BUILD, m.Conf(ZSH, kit.META_SOURCE)) }}, - "start": {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(code.INSTALL, "start", m.Conf(ZSH, kit.META_SOURCE), "bin/zsh") + gdb.START: {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(code.INSTALL, gdb.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) }}, - - ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Load() }}, - ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save() }}, }, } diff --git a/misc/zsh/zsh.shy b/misc/zsh/zsh.shy index ed64acbf..d707847d 100644 --- a/misc/zsh/zsh.shy +++ b/misc/zsh/zsh.shy @@ -1,8 +1,8 @@ title "zsh" refer ` 官网 https://www.zsh.org/ -源码 https://github.com/zsh-users/zsh/ 文档 http://zsh.sourceforge.net/Doc/Release/zsh_toc.html +源码 https://github.com/zsh-users/zsh/ ` chapter "源码" @@ -11,11 +11,14 @@ field zsh web.code.inner args `[ usr/install/zsh-5.8/ Src/main.c 91 ]` section "构建" spark shell ` -wget https://sourceforge.net/projects/zsh/files/zsh/5.8/zsh-5.8.tar.xz -tar xvf zsh-5.8.tar.gz && cd zsh-5.8 +yum install -y wget make gcc +yum install -y ncurses-devel.x86_64 + +wget https://nchc.dl.sourceforge.net/project/zsh/zsh/5.8/zsh-5.8.tar.xz +tar xvf zsh-5.8.tar.xz && cd zsh-5.8 ./configure --prefix=$PWD/_install -make -j4 && make install +make -j8 && make install ` section "启动"