From 4bd3e6064c0e36dd2cfe43119462a09f5b75f9fe Mon Sep 17 00:00:00 2001 From: shylinux Date: Sat, 11 Apr 2020 20:49:23 +0800 Subject: [PATCH] opt vim --- base/cli/cli.go | 8 +- base/nfs/nfs.go | 5 + base/web/web.go | 16 ++- conf.go | 1 + core/code/code.go | 281 ++++++++++++++++++++++++---------------------- misc/vim/vim.go | 60 +++++----- misc/zsh/zsh.go | 39 +++---- type.go | 4 +- 8 files changed, 222 insertions(+), 192 deletions(-) diff --git a/base/cli/cli.go b/base/cli/cli.go index 95d69bd4..9ad51160 100644 --- a/base/cli/cli.go +++ b/base/cli/cli.go @@ -1,8 +1,8 @@ package cli import ( - "github.com/shylinux/icebergs" - "github.com/shylinux/toolkits" + ice "github.com/shylinux/icebergs" + kit "github.com/shylinux/toolkits" "bytes" "fmt" @@ -19,7 +19,7 @@ var Index = &ice.Context{Name: "cli", Help: "命令模块", Configs: map[string]*ice.Config{ ice.CLI_RUNTIME: {Name: "runtime", Help: "运行环境", Value: kit.Dict()}, ice.CLI_SYSTEM: {Name: "system", Help: "系统命令", Value: kit.Data()}, - "daemon": {Name: "daemon", Help: "守护进程", Value: kit.Data(kit.MDB_SHORT, "name")}, + ice.CLI_DAEMON: {Name: "daemon", Help: "守护进程", Value: kit.Data(kit.MDB_SHORT, "name")}, "python": {Name: "python", Help: "系统命令", Value: kit.Data("python", "python", "pip", "pip")}, }, Commands: map[string]*ice.Command{ @@ -142,7 +142,7 @@ var Index = &ice.Context{Name: "cli", Help: "命令模块", m.Echo(out.String()) } }}, - "daemon": {Name: "daemon", Help: "守护进程", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + ice.CLI_DAEMON: {Name: "daemon", Help: "守护进程", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Option("cmd_type", "daemon") m.Cmdy(ice.CLI_SYSTEM, arg) }}, diff --git a/base/nfs/nfs.go b/base/nfs/nfs.go index 1ce88467..6d819147 100644 --- a/base/nfs/nfs.go +++ b/base/nfs/nfs.go @@ -186,6 +186,11 @@ var Index = &ice.Context{Name: "nfs", Help: "存储模块", } } }}, + "link": {Name: "link path file", Help: "链接", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Cmd("nfs.trash", arg[0]) + os.MkdirAll(path.Dir(arg[0]), 0777) + os.Link(arg[1], arg[0]) + }}, "trash": {Name: "trash file", Help: "保存", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if s, e := os.Stat(arg[0]); e == nil { diff --git a/base/web/web.go b/base/web/web.go index 809ac465..98ae0688 100644 --- a/base/web/web.go +++ b/base/web/web.go @@ -2,8 +2,8 @@ package web import ( "github.com/gorilla/websocket" - "github.com/shylinux/icebergs" - "github.com/shylinux/toolkits" + ice "github.com/shylinux/icebergs" + kit "github.com/shylinux/toolkits" "github.com/skip2/go-qrcode" "bytes" @@ -1618,6 +1618,12 @@ var Index = &ice.Context{Name: "web", Help: "网络模块", } m.Echo(list) + // 分发数据 + if p := kit.Select(m.Conf(ice.WEB_FAVOR, "meta.proxy"), m.Option("you")); p != "" { + m.Option("you", "") + m.Cmd(ice.WEB_PROXY, p, ice.WEB_STORY, ice.STORY_PULL, arg[2], "dev", arg[2]) + } + case ice.STORY_INDEX: m.Richs(ice.WEB_STORY, "head", arg[1], func(key string, value map[string]interface{}) { // 查询索引 @@ -1815,6 +1821,12 @@ var Index = &ice.Context{Name: "web", Help: "网络模块", }) }}, ice.WEB_PROXY: {Name: "proxy", Help: "代理", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if arg[0] == "" { + // 本机命令 + m.Cmdy(arg[1:]) + return + } + m.Richs(ice.WEB_SPACE, nil, kit.Select(m.Conf(ice.WEB_FAVOR, "meta.proxy"), arg[0]), func(key string, value map[string]interface{}) { if value[kit.MDB_TYPE] == ice.WEB_BETTER { switch value[kit.MDB_NAME] { diff --git a/conf.go b/conf.go index 77936024..32ea2fec 100644 --- a/conf.go +++ b/conf.go @@ -190,6 +190,7 @@ const ( // TYPE const ( // CODE CODE_INSTALL = "_install" CODE_PREPARE = "_prepare" + CODE_PROJECT = "_project" ) const ( // CHAT CHAT_RIVER = "river" diff --git a/core/code/code.go b/core/code/code.go index 1c4d79ab..bdb22e88 100644 --- a/core/code/code.go +++ b/core/code/code.go @@ -17,10 +17,10 @@ var Index = &ice.Context{Name: "code", Help: "编程中心", Caches: map[string]*ice.Cache{}, Configs: map[string]*ice.Config{ "install": {Name: "install", Help: "安装", Value: kit.Data("path", "usr/install", - "source", "https://dl.google.com/go/go1.14.2.src.tar.gz", + "source", "https://dl.google.com/go/go1.14.2.src.tar.gz", "target", "usr/local", )}, - "prepare": {Name: "prepare", Help: "准备", Value: kit.Data("path", "usr/prepare")}, - "project": {Name: "project", Help: "项目", Value: kit.Data("path", "usr/prepare")}, + "prepare": {Name: "prepare", Help: "配置", Value: kit.Data("path", "usr/prepare")}, + "project": {Name: "project", Help: "项目", Value: kit.Data("path", "usr/project")}, "compile": {Name: "compile", Help: "编译", Value: kit.Data("path", "usr/publish")}, "publish": {Name: "publish", Help: "发布", Value: kit.Data("path", "usr/publish")}, @@ -31,23 +31,12 @@ var Index = &ice.Context{Name: "code", Help: "编程中心", )), ))}, + "login": {Name: "login", Help: "终端接入", Value: kit.Data()}, "pprof": {Name: "pprof", Help: "性能分析", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME, "stop", "ps aux|grep pprof|grep -v grep|cut -d' ' -f2|xargs -n1 kill", )}, - "login": {Name: "login", Help: "终端接入", Value: kit.Data()}, }, Commands: map[string]*ice.Command{ - ice.CODE_INSTALL: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - p := path.Join(m.Conf("install", "meta.path"), "go") - if _, e := os.Stat(p); e != nil { - m.Option("cmd_dir", m.Conf("install", "meta.path")) - m.Cmd(ice.CLI_SYSTEM, "wget", "-O", "go.tar.gz", m.Conf("install", "meta.source")) - m.Cmd(ice.CLI_SYSTEM, "tar", "xvf", "go.tar.gz") - } - }}, - ice.CODE_PREPARE: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - }}, - ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Load() }}, @@ -55,42 +44,139 @@ var Index = &ice.Context{Name: "code", Help: "编程中心", m.Save("login") }}, + ice.CODE_INSTALL: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + p := path.Join(m.Conf("install", "meta.path"), "go") + if _, e := os.Stat(p); e != nil { + // 下载源码 + m.Option("cmd_dir", m.Conf("install", "meta.path")) + m.Cmd(ice.CLI_SYSTEM, "wget", "-O", "go.tar.gz", m.Conf("install", "meta.source")) + m.Cmd(ice.CLI_SYSTEM, "tar", "xvf", "go.tar.gz") + } + }}, + ice.CODE_PREPARE: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + }}, + ice.CODE_PROJECT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + }}, + + "install": {Name: "install", Help: "安装", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + }}, + "prepare": {Name: "prepare", Help: "配置", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + }}, + "project": {Name: "project", Help: "项目", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + }}, + + "compile": {Name: "compile [os [arch [main]]]", Help: "编译", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if len(arg) == 0 { + // 目录列表 + m.Cmdy("nfs.dir", m.Conf(cmd, "meta.path"), "time size path") + return + } + + // 编译目标 + main := kit.Select("src/main.go", arg, 2) + arch := kit.Select(m.Conf(ice.CLI_RUNTIME, "host.GOARCH"), arg, 1) + goos := kit.Select(m.Conf(ice.CLI_RUNTIME, "host.GOOS"), arg, 0) + file := path.Join(m.Conf(cmd, "meta.path"), kit.Keys("ice", goos, arch)) + + // 编译参数 + m.Optionv("cmd_env", "GOCACHE", os.Getenv("GOCACHE"), "HOME", os.Getenv("HOME"), + "GOARCH", arch, "GOOS", goos, "CGO_ENABLED", "0") + m.Cmd(ice.CLI_SYSTEM, "go", "build", "-o", file, main) + + // 编译记录 + m.Cmdy(ice.WEB_STORY, ice.STORY_CATCH, "bin", file) + m.Logs(ice.LOG_EXPORT, "source", main, "target", file) + }}, + "publish": {Name: "publish [source]", Help: "发布", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if len(arg) == 0 { + // 目录列表 + m.Cmdy("nfs.dir", m.Conf(cmd, "meta.path"), "time size path") + return + } + + if s, e := os.Stat(arg[0]); m.Assert(e) && s.IsDir() { + // 发布目录 + p := path.Base(arg[0]) + ".tar.gz" + m.Cmd(ice.CLI_SYSTEM, "tar", "-zcf", p, arg[0]) + defer func() { os.Remove(p) }() + arg[0] = p + } + + // 发布文件 + target := path.Join(m.Conf(cmd, "meta.path"), path.Base(arg[0])) + os.Remove(target) + os.MkdirAll(path.Dir(target), 0777) + os.Link(arg[0], target) + + // 发布记录 + m.Cmdy(ice.WEB_STORY, ice.STORY_CATCH, "bin", target) + m.Logs(ice.LOG_EXPORT, "source", arg[0], "target", target) + }}, + "upgrade": {Name: "upgrade which", Help: "升级", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + exit := false + m.Grows(cmd, kit.Keys(kit.MDB_HASH, kit.Select("system", arg, 0)), "", "", func(index int, value map[string]interface{}) { + if value["file"] == "ice.bin" { + // 程序文件 + value["file"] = kit.Keys("ice", m.Conf(ice.CLI_RUNTIME, "host.GOOS"), m.Conf(ice.CLI_RUNTIME, "host.GOARCH")) + exit = true + } + + // 下载文件 + h := m.Cmdx(ice.WEB_SPIDE, "dev", "cache", "GET", "/publish/"+kit.Format(value["file"])) + if h == "" { + exit = false + return + } + + // 升级记录 + m.Cmd(ice.WEB_STORY, "add", "bin", value["path"], h) + m.Cmd(ice.WEB_STORY, ice.STORY_WATCH, h, value["path"]) + os.Chmod(kit.Format(value["path"]), 0777) + }) + if exit { + m.Sleep("1s").Gos(m, func(m *ice.Message) { m.Cmd("exit") }) + } + }}, + "login": {Name: "login", Help: "登录", Meta: kit.Dict( - "detail", []string{"编辑", "清理", "清空", "删除"}, + "detail", []string{"编辑", "删除", "清理", "清空"}, ), List: ice.ListLook("key"), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) > 0 && arg[0] == "action" { switch arg[1] { - case "prune", "清理": - m.Cmdy("login", "prune") - case "clear", "清空": - case "modify", "编辑": - m.Richs("login", nil, m.Option("key"), func(key string, value map[string]interface{}) { - m.Log(ice.LOG_MODIFY, "%s %s %v->%s", key, arg[2], value[arg[2]], arg[3]) - value[arg[2]] = arg[3] + m.Richs(cmd, nil, m.Option("key"), func(key string, value map[string]interface{}) { + m.Logs(ice.LOG_MODIFY, cmd, key, "field", arg[2], "value", kit.Value(value, arg[2]), "->", arg[3]) + kit.Value(value, arg[2], arg[3]) }) + case "delete", "删除": - m.Log(ice.LOG_DELETE, "%s %s", m.Option("key"), m.Conf("login", kit.Keys("hash", m.Option("key")))) - m.Conf("login", kit.Keys("hash", m.Option("key")), "") + m.Logs(ice.LOG_DELETE, cmd, m.Option("key"), "value", m.Conf(cmd, kit.Keys(kit.MDB_HASH, m.Option("key")))) + m.Conf(cmd, kit.Keys(kit.MDB_HASH, m.Option("key")), "") + + case "prune", "清理": + m.Cmdy(cmd, "prune") + + case "clear", "清空": + m.Cmdy(cmd, "prune", "all") } return } switch kit.Select("list", arg, 0) { case "init": - if m.Option("sid") != "" && m.Confs("login", []string{"hash", m.Option("sid"), "status"}) { + if m.Option("sid") != "" && m.Conf(cmd, []string{kit.MDB_HASH, m.Option("sid"), "status"}) != "" { // 复用会话 - m.Conf("login", []string{"hash", m.Option("sid"), "status"}, "login") - m.Log(ice.LOG_LOGIN, "sid: %s", m.Option("sid")) + m.Conf(cmd, []string{kit.MDB_HASH, m.Option("sid"), "status"}, "login") + m.Logs(ice.LOG_LOGIN, "sid", m.Option("sid")) m.Echo(m.Option("sid")) return } - you := m.Conf(ice.WEB_SHARE, kit.Keys("hash", m.Option("share"), "name")) + you := m.Conf(ice.WEB_SHARE, kit.Keys(kit.MDB_HASH, m.Option("share"), "name")) // 添加会话 - h := m.Rich("login", nil, kit.Dict( - "status", "login", + h := m.Rich(cmd, nil, kit.Dict( "type", kit.Select("zsh", arg, 1), + "status", "login", "you", you, "pwd", m.Option("pwd"), "pid", m.Option("pid"), @@ -98,9 +184,32 @@ var Index = &ice.Context{Name: "code", Help: "编程中心", "hostname", m.Option("hostname"), "username", m.Option("username"), )) - m.Log(ice.LOG_LOGIN, "sid: %s you: %s", h, you) + m.Logs(ice.LOG_LOGIN, "sid", h, "you", you) m.Echo(h) + case "exit": + // 退出会话 + m.Richs(cmd, nil, m.Option("sid"), func(key string, value map[string]interface{}) { + m.Logs(ice.LOG_LOGOUT, "sid", m.Option("sid")) + value["status"] = "logout" + m.Echo(key) + }) + + case "prune": + list := []string{} + m.Richs(cmd, nil, "*", func(key string, value map[string]interface{}) { + if len(arg) > 1 && arg[1] == "all" || value["status"] == "logout" { + list = append(list, key) + } + }) + + // 清理会话 + kit.Fetch(list, func(index int, value string) { + m.Logs(ice.LOG_DELETE, "login", value, "value", m.Conf(cmd, kit.Keys(kit.MDB_HASH, value))) + m.Conf(cmd, kit.Keys(kit.MDB_HASH, value), "") + }) + m.Echo("%d", len(list)) + case "list": // 会话列表 m.Richs("login", nil, "*", func(key string, value map[string]interface{}) { @@ -114,113 +223,13 @@ var Index = &ice.Context{Name: "code", Help: "编程中心", m.Push(key, value, []string{"pid", "pane", "hostname", "username"}) }) - case "prune": - list := []string{} - m.Richs("login", nil, "*", func(key string, value map[string]interface{}) { - if len(arg) > 1 && arg[1] == "all" || value["status"] == "logout" { - list = append(list, key) - } - }) - - // 清理会话 - kit.Fetch(list, func(index int, value string) { - m.Log(ice.LOG_DELETE, "%s: %s", value, m.Conf("login", kit.Keys("hash", value))) - m.Conf("login", kit.Keys("hash", value), "") - }) - m.Echo("%d", len(list)) - - case "exit": - // 退出会话 - m.Richs("login", nil, m.Option("sid"), func(key string, value map[string]interface{}) { - m.Log(ice.LOG_LOGOUT, "sid: %s", m.Option("sid")) - value["status"] = "logout" - }) default: // 会话详情 - m.Richs("login", nil, arg[0], func(key string, value map[string]interface{}) { + m.Richs(cmd, nil, arg[0], func(key string, value map[string]interface{}) { m.Push("detail", value) }) } }}, - - "prepare": {Name: "prepare", Help: "准备", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - - }}, - - "compile": {Name: "compile [os [arch]]", Help: "编译", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if len(arg) == 0 { - // 目录列表 - m.Cmdy("nfs.dir", m.Conf("publish", "meta.path"), "time size path") - return - } - - // 编译目标 - main := kit.Select("src/main.go", arg, 2) - arch := kit.Select(m.Conf(ice.CLI_RUNTIME, "host.GOARCH"), arg, 1) - goos := kit.Select(m.Conf(ice.CLI_RUNTIME, "host.GOOS"), arg, 0) - file := path.Join(m.Conf("compile", "meta.path"), kit.Keys("ice", goos, arch)) - - // 编译参数 - m.Optionv("cmd_env", "GOCACHE", os.Getenv("GOCACHE"), "HOME", os.Getenv("HOME"), - "GOARCH", arch, "GOOS", goos, "CGO_ENABLED", "0") - m.Cmd(ice.CLI_SYSTEM, "go", "build", "-o", file, main) - - // 编译记录 - m.Cmdy(ice.WEB_STORY, ice.STORY_CATCH, "bin", file) - m.Log(ice.LOG_EXPORT, "%s: %s", main, file) - }}, - "publish": {Name: "publish", Help: "发布", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if len(arg) == 0 { - // 目录列表 - m.Cmdy("nfs.dir", m.Conf("publish", "meta.path"), "time size path") - return - } - - p := arg[0] - if s, e := os.Stat(arg[0]); m.Assert(e) && s.IsDir() { - // 发布目录 - p = path.Base(arg[0]) + ".tar.gz" - m.Cmd(ice.CLI_SYSTEM, "tar", "-zcf", p, arg[0]) - defer func() { os.Remove(p) }() - arg[0] = p - } - - // 发布文件 - target := path.Join(m.Conf("publish", "meta.path"), path.Base(arg[0])) - os.Remove(target) - os.MkdirAll(path.Dir(target), 0777) - os.Link(arg[0], target) - - // 发布记录 - m.Cmdy(ice.WEB_STORY, ice.STORY_CATCH, "bin", p) - m.Log(ice.LOG_EXPORT, "%s: %s", arg[0], target) - }}, - "upgrade": {Name: "upgrade", Help: "升级", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - exit := true - m.Grows("upgrade", "hash.system", "", "", func(index int, value map[string]interface{}) { - if value["file"] == "ice.bin" { - value["file"] = kit.Keys("ice", m.Conf(ice.CLI_RUNTIME, "host.GOOS"), m.Conf(ice.CLI_RUNTIME, "host.GOARCH")) - } - - h := m.Cmdx(ice.WEB_SPIDE, "dev", "cache", "GET", "/publish/"+kit.Format(value["file"])) - if h == "" { - exit = false - return - } - - m.Cmd(ice.WEB_STORY, "add", "bin", value["path"], h) - m.Cmd(ice.WEB_STORY, ice.STORY_WATCH, h, value["path"]) - os.Chmod(kit.Format(value["path"]), 777) - }) - - if exit { - m.Cmd("exit") - } - }}, - - "test": {Name: "test src", Help: "功能测试", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Cmdy(ice.CLI_SYSTEM, "go", "test", kit.Select("./", arg, 0)) - }}, "pprof": {Name: "pprof run name time", Help: "性能分析", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if m.Show(cmd, arg...) { return @@ -231,10 +240,12 @@ var Index = &ice.Context{Name: "code", Help: "编程中心", m.Richs(cmd, nil, arg[1], func(key string, value map[string]interface{}) { m.Gos(m.Spawn(), func(msg *ice.Message) { m.Sleep("1s").Grows(cmd, kit.Keys(kit.MDB_HASH, key), "", "", func(index int, value map[string]interface{}) { - m.Cmd(ice.WEB_FAVOR, "pprof", "shell", value["text"], m.Cmdx(kit.Split(kit.Format(value["text"])))) + // 压测命令 + m.Cmd(ice.WEB_FAVOR, "pprof", "shell", value[kit.MDB_TEXT], m.Cmdx(kit.Split(kit.Format(value[kit.MDB_TEXT])))) }) }) + // 启动监控 name := arg[1] + ".pd.gz" value = value["meta"].(map[string]interface{}) msg := m.Cmd(ice.WEB_SPIDE, "self", "cache", "GET", kit.Select("/code/pprof/profile", value["remote"]), "seconds", kit.Select("5", arg, 2)) @@ -246,6 +257,7 @@ var Index = &ice.Context{Name: "code", Help: "编程中心", fallthrough case "web": + // 展示结果 p := kit.Format("%s:%s", m.Conf(ice.WEB_SHARE, "meta.host"), m.Cmdx("tcp.getport")) m.Cmd(ice.CLI_DAEMON, "go", "tool", "pprof", "-http="+p, arg[1:]) m.Cmd(ice.WEB_FAVOR, "pprof", "bin", arg[1], m.Cmd(ice.WEB_CACHE, "catch", "bin", arg[1]).Append("data")) @@ -259,6 +271,7 @@ var Index = &ice.Context{Name: "code", Help: "编程中心", key := m.Rich(cmd, nil, kit.Data( kit.MDB_NAME, arg[1], kit.MDB_TEXT, arg[2], "remote", arg[3], )) + for i := 4; i < len(arg)-1; i += 2 { m.Grow(cmd, kit.Keys(kit.MDB_HASH, key), kit.Dict( kit.MDB_NAME, arg[i], kit.MDB_TEXT, arg[i+1], diff --git a/misc/vim/vim.go b/misc/vim/vim.go index 3be93a4f..c8ebd96f 100644 --- a/misc/vim/vim.go +++ b/misc/vim/vim.go @@ -1,15 +1,14 @@ package vim import ( - "os" - "path" - ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/web" "github.com/shylinux/icebergs/core/code" kit "github.com/shylinux/toolkits" "io/ioutil" + "os" + "path" "strings" ) @@ -18,50 +17,64 @@ var Index = &ice.Context{Name: "vim", Help: "编辑器", Configs: map[string]*ice.Config{ "vim": {Name: "vim", Help: "编辑器", Value: kit.Data( "source", "ftp://ftp.vim.org/pub/vim/unix/vim-8.1.tar.bz2", - "version", "vim81", - - kit.MDB_SHORT, "name", "history", "vim.history", - "script", "", + "target", "usr/local", "version", "vim81", "config", []interface{}{ + "--enable-pythoninterp=yes", + "--enable-luainterp=yes", + "--enable-cscope=yes", + }, "history", "vim.history", )}, }, Commands: map[string]*ice.Command{ ice.CODE_INSTALL: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { p := path.Join(m.Conf("install", "meta.path"), m.Conf("vim", "meta.version")) if _, e := os.Stat(p); e != nil { + // 下载源码 m.Option("cmd_dir", m.Conf("install", "meta.path")) m.Cmd(ice.CLI_SYSTEM, "wget", "-O", "vim.tar.gz", m.Conf("vim", "meta.source")) m.Cmd(ice.CLI_SYSTEM, "tar", "xvf", "vim.tar.gz") } + // 配置选项 m.Option("cmd_dir", p) - m.Cmd(ice.CLI_SYSTEM, "./configure", "--enable-multibyte=yes", - "--prefix="+kit.Path("usr/local"), "--enable-cscope=yes", - "--enable-luainterp=yes", "--enable-pythoninterp=yes", - ) + m.Cmdy(ice.CLI_SYSTEM, "./configure", "--prefix="+kit.Path(m.Conf("vim", "meta.target")), + "--enable-multibyte=yes", m.Confv("vim", "meta.config")) - m.Cmd(ice.CLI_SYSTEM, "make", "-j4") - m.Cmd(ice.CLI_SYSTEM, "make", "install") + // 编译安装 + m.Cmdy(ice.CLI_SYSTEM, "make", "-j4") + m.Cmdy(ice.CLI_SYSTEM, "make", "install") }}, ice.CODE_PREPARE: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + // 语法脚本 + for _, s := range []string{"go.vim", "shy.vim", "javascript.vim"} { + m.Cmd("nfs.link", path.Join(os.Getenv("HOME"), ".vim/syntax/"+s), "etc/conf/"+s) + } + // 启动脚本 + m.Cmd("nfs.link", path.Join(os.Getenv("HOME"), ".vim/autoload/plug.vim"), "etc/conf/plug.vim") + m.Cmd("nfs.link", path.Join(os.Getenv("HOME"), ".vimrc"), "etc/conf/vimrc") + + // 安装插件 + m.Echo("vim -c PlugInstall\n") + m.Echo("vim -c GoInstallBinaries\n") + }}, + ice.CODE_PROJECT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }}, ice.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("you", "tmux") m.Richs("login", nil, m.Option("sid"), func(key string, value map[string]interface{}) { // 查找空间 m.Option("you", value["you"]) }) - m.Info("%s %s cmd: %v sub: %v", m.Option("you"), m.Option(ice.MSG_USERURL), m.Optionv("cmds"), m.Optionv("sub")) + m.Logs(ice.LOG_LOGIN, "you", m.Option("you"), "url", m.Option(ice.MSG_USERURL), "cmd", m.Optionv("cmds"), "sub", m.Optionv("sub")) m.Option(ice.MSG_OUTPUT, ice.RENDER_RESULT) }}, "/help": {Name: "/help", Help: "帮助", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { @@ -77,11 +90,9 @@ var Index = &ice.Context{Name: "vim", Help: "编辑器", "/sync": {Name: "/sync", Help: "同步", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { switch arg[0] { case "read", "write", "exec", "insert": - cmds := []string{ice.WEB_FAVOR, m.Conf("vim", "meta.history"), "vimrc", arg[0], kit.Select(m.Option("arg"), m.Option("sub")), - "sid", m.Option("sid"), "pwd", m.Option("pwd"), "buf", m.Option("buf"), "row", m.Option("row"), "col", m.Option("col")} - if m.Cmd(cmds); m.Option("you") != "" { - m.Cmd(ice.WEB_PROXY, m.Option("you"), cmds) - } + m.Cmd(ice.WEB_FAVOR, m.Conf("vim", "meta.history"), ice.TYPE_VIMRC, arg[0], kit.Select(m.Option("arg"), m.Option("sub")), + "sid", m.Option("sid"), "pwd", m.Option("pwd"), "buf", m.Option("buf"), "row", m.Option("row"), "col", m.Option("col")) + default: m.Richs("login", nil, m.Option("sid"), func(key string, value map[string]interface{}) { kit.Value(value, kit.Keys("sync", arg[0]), kit.Dict( @@ -101,8 +112,7 @@ var Index = &ice.Context{Name: "vim", Help: "编辑器", arg[0] = list[4] default: // 执行命令 - m.Set("append") - if m.Cmdy(arg); m.Result() == "" { + if m.Cmdy(list[1:]); m.Result() == "" { m.Table() } return @@ -113,12 +123,12 @@ var Index = &ice.Context{Name: "vim", Help: "编辑器", m.Cmd("web.code.input.find", arg[0]).Table(func(index int, value map[string]string, head []string) { m.Echo("%s\n", value["text"]) }) - m.Info("input %v", m.Result()) }}, "/favor": {Name: "/favor", Help: "收藏", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if m.Options("arg") { // 添加收藏 - m.Cmdy(ice.WEB_FAVOR, m.Option("tab"), "vimrc", m.Option("note"), m.Option("arg"), + m.Cmdy(ice.WEB_FAVOR, kit.Select(m.Conf("vim", "meta.history"), m.Option("tab")), + ice.TYPE_VIMRC, m.Option("note"), m.Option("arg"), "pwd", m.Option("pwd"), "buf", m.Option("buf"), "row", m.Option("row"), "col", m.Option("col")) return } diff --git a/misc/zsh/zsh.go b/misc/zsh/zsh.go index 68160b3e..b0deb0d3 100644 --- a/misc/zsh/zsh.go +++ b/misc/zsh/zsh.go @@ -1,10 +1,10 @@ package zsh import ( - "github.com/shylinux/icebergs" + ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/web" "github.com/shylinux/icebergs/core/code" - "github.com/shylinux/toolkits" + kit "github.com/shylinux/toolkits" "io/ioutil" "strings" @@ -14,24 +14,24 @@ import ( var Index = &ice.Context{Name: "zsh", Help: "命令行", Caches: map[string]*ice.Cache{}, Configs: map[string]*ice.Config{ - "zsh": {Name: "zsh", Help: "命令行", Value: kit.Data(kit.MDB_SHORT, "name", "history", "zsh.history")}, + "zsh": {Name: "zsh", Help: "命令行", Value: kit.Data("history", "zsh.history")}, }, Commands: map[string]*ice.Command{ ice.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.Richs("login", nil, m.Option("sid"), func(key string, value map[string]interface{}) { - m.Option("you", kit.Select("tmux", value["you"])) + // 查找空间 + m.Option("you", value["you"]) }) - m.Info("%s %s cmd: %v sub: %v", m.Option("you"), m.Option(ice.MSG_USERURL), m.Optionv("cmds"), m.Optionv("sub")) + m.Logs(ice.LOG_LOGIN, "you", m.Option("you"), "url", m.Option(ice.MSG_USERURL), "cmd", m.Optionv("cmds"), "sub", m.Optionv("sub")) m.Option(ice.MSG_OUTPUT, ice.RENDER_RESULT) }}, @@ -50,16 +50,11 @@ var Index = &ice.Context{Name: "zsh", Help: "命令行", case "history": vs := strings.SplitN(strings.TrimSpace(m.Option("arg")), " ", 4) if strings.Contains(m.Option("SHELL"), "zsh") { - vs = []string{vs[0], "", "", strings.Join(vs[1:], " ")} - + vs = []string{vs[0], m.Time("2006-01-02"), m.Time("15:04:05"), strings.Join(vs[1:], " ")} } + m.Cmd(ice.WEB_FAVOR, m.Conf("zsh", "meta.history"), ice.TYPE_SHELL, vs[0], kit.Select("", vs, 3), + "sid", m.Option("sid"), "pwd", m.Option("pwd"), "time", vs[1]+" "+vs[2]) - cmds := []string{ice.WEB_FAVOR, m.Conf("zsh", "meta.history"), ice.TYPE_SHELL, vs[0], kit.Select("", vs, 3), - "sid", m.Option("sid"), "pwd", m.Option("pwd"), "time", vs[1] + " " + vs[2]} - - if m.Cmd(cmds); m.Option("you") != "" { - m.Cmd(ice.WEB_PROXY, m.Option("you"), cmds) - } default: m.Richs("login", nil, m.Option("sid"), func(key string, value map[string]interface{}) { kit.Value(value, kit.Keys("sync", arg[0]), kit.Dict( @@ -159,14 +154,14 @@ var Index = &ice.Context{Name: "zsh", Help: "命令行", "/favor": {Name: "/favor", Help: "收藏", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) > 0 && arg[0] != "sh" { // 添加收藏 - m.Cmdy(ice.WEB_FAVOR, kit.Select("zsh.history", m.Option("tab")), kit.Select(ice.TYPE_SHELL, m.Option("type")), m.Option("note"), arg[0]) + m.Cmdy(ice.WEB_FAVOR, kit.Select(m.Conf("zsh", "meta.history"), m.Option("tab")), + kit.Select(ice.TYPE_SHELL, m.Option("type")), m.Option("note"), arg[0]) return } if m.Option("tab") == "" { // 收藏列表 - m.Cmdy(ice.WEB_PROXY, m.Option("you"), ice.WEB_FAVOR) - m.Table() + m.Cmdy(ice.WEB_FAVOR).Table() return } @@ -185,8 +180,7 @@ var Index = &ice.Context{Name: "zsh", Help: "命令行", "/download": {Name: "/download", Help: "下载", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) == 0 || arg[0] == "" { // 文件列表 - m.Cmdy(ice.WEB_PROXY, m.Option("you"), ice.WEB_STORY) - m.Table() + m.Cmdy(ice.WEB_PROXY, m.Option("you"), ice.WEB_STORY).Table() return } @@ -208,11 +202,6 @@ var Index = &ice.Context{Name: "zsh", Help: "命令行", m.Echo("type: %s\n", msg.Append("type")) m.Echo("name: %s\n", msg.Append("name")) m.Echo("size: %s\n", msg.Append("size")) - - if m.Option("you") != "" { - // 下发文件 - m.Cmd(ice.WEB_PROXY, m.Option("you"), ice.WEB_STORY, ice.STORY_PULL, msg.Append("name"), "dev", msg.Append("name")) - } }}, }, } diff --git a/type.go b/type.go index d9393630..d18310fc 100644 --- a/type.go +++ b/type.go @@ -1,7 +1,7 @@ package ice import ( - "github.com/shylinux/toolkits" + kit "github.com/shylinux/toolkits" "bytes" "encoding/csv" @@ -795,7 +795,7 @@ func (m *Message) Result(arg ...interface{}) string { func (m *Message) Logs(level string, arg ...interface{}) *Message { list := []string{} - for i := 0; i < len(arg)-1; i++ { + for i := 0; i < len(arg)-1; i += 2 { list = append(list, fmt.Sprintf("%v: %v", arg[i], arg[i+1])) } m.Log(level, strings.Join(list, " "))