diff --git a/base/cli/daemon.go b/base/cli/daemon.go index da6c5a3a..30313af3 100644 --- a/base/cli/daemon.go +++ b/base/cli/daemon.go @@ -81,7 +81,7 @@ func init() { }}, "stop": {Name: "stop", Help: "停止", Hand: func(m *ice.Message, arg ...string) { m.Richs(DAEMON, "", m.Option(kit.MDB_HASH), func(key string, value map[string]interface{}) { - m.Cmdy(SYSTEM, "kill", value[kit.MDB_PID]) + m.Cmdy(SYSTEM, "kill", "-9", value[kit.MDB_PID]) if strings.Count(m.Cmdx(SYSTEM, "ps", value[kit.MDB_PID]), "\n") == 1 { value[kit.MDB_STATUS] = StatusClose } diff --git a/base/mdb/mdb.go b/base/mdb/mdb.go index 4cb795bc..bd31e1a3 100644 --- a/base/mdb/mdb.go +++ b/base/mdb/mdb.go @@ -103,7 +103,8 @@ func _hash_select(m *ice.Message, prefix, key, field, value string) { if field != "" && value != val[field] { return } - m.Push("detail", val) + m.Push(key, val, fields) + // m.Push("detail", val) }) } func _hash_search(m *ice.Message, prefix, key, field, value string) { diff --git a/base/nfs/nfs.go b/base/nfs/nfs.go index 156aae26..2eae0822 100644 --- a/base/nfs/nfs.go +++ b/base/nfs/nfs.go @@ -170,6 +170,15 @@ func _file_list(m *ice.Message, root string, name string, level int, deep bool, } } func _file_show(m *ice.Message, name string) { + if n := m.Cmd("file_rewrite", name).Append("to"); n != "" { + m.Logs("rewrite", "from", name, "to", n) + name = n + } + if strings.HasPrefix(name, "http") { + m.Cmdy("web.spide", "dev", "raw", "GET", name) + return + } + if f, e := os.OpenFile(path.Join(m.Option(DIR_ROOT), name), os.O_RDONLY, 0640); m.Assert(e) { defer f.Close() @@ -302,8 +311,19 @@ var Index = &ice.Context{Name: "nfs", Help: "存储模块", "json", "true", ), )}, + + "file_rewrite": {Name: "file_rewrite", Help: "重定向", Value: kit.Data(kit.MDB_SHORT, "from")}, }, Commands: map[string]*ice.Command{ + "file_rewrite": {Name: "file_rewrite", Help: "重定向", Action: map[string]*ice.Action{ + mdb.CREATE: {Name: "create from to", Help: "创建", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(mdb.INSERT, m.Prefix("file_rewrite"), "", mdb.HASH, arg) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Option(mdb.FIELDS, "time,hash,from,to") + m.Cmdy(mdb.SELECT, m.Prefix("file_rewrite"), "", mdb.HASH, "from", arg) + }}, + ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Cmd(mdb.SEARCH, mdb.CREATE, FILE) m.Cmd(mdb.SEARCH, mdb.CREATE, DIR) diff --git a/base/web/spide.go b/base/web/spide.go index 25d94aa1..0e42de4e 100644 --- a/base/web/spide.go +++ b/base/web/spide.go @@ -75,7 +75,7 @@ func _spide_create(m *ice.Message, name, address string, arg ...string) { "name", name, "url", address, "method", "POST", "protocol", uri.Scheme, "hostname", uri.Host, "path", dir, "file", file, "query", uri.RawQuery, - "timeout", "100s", "logheaders", false, + "timeout", "600s", "logheaders", false, ), )) } @@ -141,10 +141,21 @@ func init() { Index.Merge(&ice.Context{ Configs: map[string]*ice.Config{ SPIDE: {Name: "spide", Help: "蜘蛛侠", Value: kit.Data(kit.MDB_SHORT, "client.name")}, + + "spide_rewrite": {Name: "spide_rewrite", Help: "重定向", Value: kit.Data(kit.MDB_SHORT, "from")}, }, Commands: map[string]*ice.Command{ + "spide_rewrite": {Name: "spide name=auto [action:select=msg|raw|cache] [method:select=POST|GET] url [format:select=json|form|part|data|file] arg... auto", Help: "蜘蛛侠", Action: map[string]*ice.Action{ + mdb.CREATE: {Name: "create from to", Help: "创建", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(mdb.INSERT, m.Prefix("spide_rewrite"), "", mdb.HASH, arg) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Option(mdb.FIELDS, "time,hash,from,to") + m.Cmdy(mdb.SELECT, m.Prefix("spide_rewrite"), "", mdb.HASH, "from", arg) + }}, + SPIDE: {Name: "spide name=auto [action:select=msg|raw|cache] [method:select=POST|GET] url [format:select=json|form|part|data|file] arg... auto", Help: "蜘蛛侠", Action: map[string]*ice.Action{ - mdb.CREATE: {Name: "create name address", Help: "", Hand: func(m *ice.Message, arg ...string) { + mdb.CREATE: {Name: "create name address", Help: "创建", Hand: func(m *ice.Message, arg ...string) { _spide_create(m, arg[0], arg[1]) }}, mdb.SEARCH: {Name: "search type name text arg...", Help: "搜索", Hand: func(m *ice.Message, arg ...string) { @@ -192,6 +203,10 @@ func init() { // 请求地址 uri, arg := arg[0], arg[1:] + if n := m.Cmd("spide_rewrite", uri).Append("to"); n != "" && n != uri { + m.Logs("rewrite", "from", uri, "to", n) + uri = n + } // 渲染引擎 head := map[string]string{} @@ -294,7 +309,7 @@ func init() { // 发送请求 res, e := web.Client.Do(req) - if m.Warn(e != nil, "%s", e) { + if m.Warn(e != nil, ice.ErrNotFound, e) { return } diff --git a/core/code/inner.go b/core/code/inner.go index 8c589583..1519c251 100644 --- a/core/code/inner.go +++ b/core/code/inner.go @@ -78,6 +78,10 @@ func init() { _inner_list(m, nfs.DIR, "", kit.Select("", arg, 0)) return } + if strings.HasPrefix("http", arg[0]) { + m.Cmdy(web.SPIDE, "dev", "raw", "GET", arg[0]+arg[1]) + return + } _inner_list(m, _inner_ext(arg[1]), arg[1], arg[0]) }}, VIMER: {Name: "vimer path=usr/demo file=hi.sh line=1 刷新:button=auto 保存:button 运行:button 项目:button", Help: "编辑器", Meta: kit.Dict( diff --git a/core/code/install.go b/core/code/install.go index 3b10c134..15450550 100644 --- a/core/code/install.go +++ b/core/code/install.go @@ -52,6 +52,11 @@ func init() { p := path.Join(m.Conf(INSTALL, kit.META_PATH), name) m.Cmd(cli.SYSTEM, "touch", p) + // 代理 + to := m.Cmd("web.spide_rewrite", arg[0]).Append("to") + m.Debug("to: %s", to) + arg[0] = kit.Select(arg[0], to) + // 下载 m.Option(cli.CMD_DIR, m.Conf(INSTALL, kit.META_PATH)) if strings.HasPrefix(arg[0], "ftp") { diff --git a/logs.go b/logs.go index 5388b6c5..29b478a4 100644 --- a/logs.go +++ b/logs.go @@ -50,6 +50,12 @@ func (m *Message) log(level string, str string, arg ...interface{}) *Message { prefix, suffix = "", "" } + switch level { + case LOG_INFO, "send", "recv": + if len(str) > 200 { + str = str[:200] + } + } // 输出日志 log.Info(fmt.Sprintf("%02d %9s %s%s %s%s", m.code, fmt.Sprintf("%4s->%-4s", m.source.Name, m.target.Name), prefix, level, str, suffix)) diff --git a/misc/git/git.go b/misc/git/git.go index 078f065a..f412c744 100644 --- a/misc/git/git.go +++ b/misc/git/git.go @@ -40,7 +40,7 @@ const ( var Index = &ice.Context{Name: GIT, Help: "代码库", Configs: map[string]*ice.Config{ GIT: {Name: GIT, Help: "代码库", Value: kit.Data( - "source", "https://github.com/git/git.git", "config", kit.Dict( + "source", "https://mirrors.edge.kernel.org/pub/software/scm/git/git-1.8.3.1.tar.gz", "config", kit.Dict( "alias", kit.Dict("s", "status", "b", "branch"), "color", kit.Dict("ui", "true"), "push", kit.Dict("default", "simple"), @@ -73,6 +73,30 @@ var Index = &ice.Context{Name: GIT, Help: "代码库", _repos_insert(m, value["name"], value["path"]) }) }}, + + GIT: {Name: "git port=auto path=auto auto 启动:button 构建:button 下载:button", Help: "编辑器", Action: map[string]*ice.Action{ + "download": {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(code.INSTALL, "download", m.Conf(GIT, kit.META_SOURCE)) + }}, + "build": {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(code.INSTALL, "build", m.Conf(GIT, kit.META_SOURCE)) + }}, + "start": {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) { + m.Optionv("prepare", func(p string) []string { + m.Option(cli.CMD_DIR, p) + kit.Fetch(m.Confv(GIT, "meta.config"), func(conf string, value interface{}) { + kit.Fetch(value, func(key string, value string) { + m.Cmd(cli.SYSTEM, "bin/git", "config", "--global", conf+"."+key, value) + }) + }) + return []string{} + }) + m.Cmdy(code.INSTALL, "start", m.Conf(GIT, kit.META_SOURCE), "bin/git") + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Cmdy(code.INSTALL, path.Base(m.Conf(GIT, kit.META_SOURCE)), arg) + }}, + REPOS: {Name: "repos [name=auto [path [remote [branch]]]] auto", Help: "代码仓库", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) > 1 { if _, e := os.Stat(path.Join(arg[1], ".git")); e != nil && os.IsNotExist(e) { @@ -386,27 +410,6 @@ var Index = &ice.Context{Name: GIT, Help: "代码库", }) m.Sort("name") }}, - - "_install": {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Option("cmd_dir", m.Conf("install", "meta.path")) - m.Cmd(cli.SYSTEM, "git", "clone", m.Conf("git", "meta.source")) - - m.Option("cmd_dir", path.Join(m.Conf("install", "meta.path"), "git")) - m.Cmd(cli.SYSTEM, "make", "configure") - m.Cmd(cli.SYSTEM, "./configure", "--prefix="+kit.Path("usr/local")) - - m.Cmd(cli.SYSTEM, "make", "-j4") - m.Cmd(cli.SYSTEM, "make", "install") - }}, - code.PREPARE: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - kit.Fetch(m.Confv("git", "meta.config"), func(conf string, value interface{}) { - kit.Fetch(value, func(key string, value string) { - m.Cmd(cli.SYSTEM, "git", "config", "--global", conf+"."+key, value) - }) - }) - }}, - code.PROJECT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - }}, }, } diff --git a/misc/git/git.shy b/misc/git/git.shy index ae6baf43..61750557 100644 --- a/misc/git/git.shy +++ b/misc/git/git.shy @@ -1,9 +1,26 @@ title "git" - refer "官网" ` 官网 https://git-scm.com/ -文档 https://git-scm.com/docs 源码 https://github.com/git/git +文档 https://git-scm.com/docs +` +premenu +field "安装" web.code.git.git +field "源码" web.code.inner args `[ usr/install/git-1.8.3.1/ shell.c 145 ]` + +chapter "安装" +section "编译安装" +spark shell ` +wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-1.8.3.1.tar.gz +tar xvf git-1.8.3.1.tar.gz && cd git-1.8.3.1 +./configure --prefix=$PWD/install +make -j4 && make install +` + +section "使用体验" +spark shell ` +cd ./install +./bin/git ` chapter "应用" diff --git a/misc/tmux/tmux.go b/misc/tmux/tmux.go index bdb764de..1e70c80d 100644 --- a/misc/tmux/tmux.go +++ b/misc/tmux/tmux.go @@ -58,14 +58,22 @@ var Index = &ice.Context{Name: TMUX, Help: "工作台", )}, }, Commands: map[string]*ice.Command{ - TMUX: {Name: "tmux 启动:button 编译:button 下载:button", Help: "终端", Action: map[string]*ice.Action{ + TMUX: {Name: "git port=auto path=auto auto 启动:button 构建:button 下载:button", Help: "命令行", Action: map[string]*ice.Action{ "download": {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(code.INSTALL, "download", m.Conf(TMUX, kit.META_SOURCE)) }}, "build": {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(code.INSTALL, "build", m.Conf(TMUX, kit.META_SOURCE)) }}, + "start": {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) { + m.Optionv("prepare", func(p string) []string { + m.Option(cli.CMD_DIR, p) + return []string{} + }) + m.Cmdy(code.INSTALL, "start", m.Conf(TMUX, kit.META_SOURCE), "bin/tmux") + }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Cmdy(code.INSTALL, path.Base(m.Conf(TMUX, kit.META_SOURCE)), arg) }}, TEXT: {Name: "text 保存:button 清空:button text:textarea", Help: "文本", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { diff --git a/misc/tmux/tmux.shy b/misc/tmux/tmux.shy index b66c9f63..e704faa3 100644 --- a/misc/tmux/tmux.shy +++ b/misc/tmux/tmux.shy @@ -10,13 +10,34 @@ field tmux web.code.tmux.tmux field tmux web.code.inner args `[ usr/install/tmux-3.1b cmd-bind-key.c ]` chapter "安装" +section "编译安装" +spark shell ` +wget https://github.com/tmux/tmux/releases/download/3.1b/tmux-3.1b.tar.gz +tar xvf tmux-3.1b.tar.gz && cd tmux-3.1b +./configure --prefix=$PWD/install +make -j8 && make install +` + +section "使用体验" +spark shell ` +cd ./install +./bin/tmux +` + +chapter "应用" +field text web.code.tmux.text +field buffer web.code.tmux.buffer args 0 +field session web.code.tmux.session + +chapter "项目" +field icebergs web.code.inner args `[ usr/icebergs misc/tmux/tmux.go ]` +return section "libevent" spark shell ` wget https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz tar xvf libevent-2.1.12-stable.tar.gz && cd libevent-2.1.12-stable -./configure -make -j8 -make install +./configure --prefix=$PWD/install +make -j8 && make install ` section "ncurses" spark shell ` @@ -26,16 +47,4 @@ tar xvf ncurses.tar.gz && cd ncurses-6.2 make -j8 make install ` -section "tmux" -spark shell ` -wget https://github.com/tmux/tmux/releases/download/3.1b/tmux-3.1b.tar.gz -tar xvf tmux-3.1b.tar.gz && cd tmux-3.1b -./configure -make -j8 -make install -` -chapter "应用" -field text web.code.tmux.text -field buffer web.code.tmux.buffer args 0 -field session web.code.tmux.session diff --git a/misc/vim/vim.go b/misc/vim/vim.go index 7e9b762d..7db95075 100644 --- a/misc/vim/vim.go +++ b/misc/vim/vim.go @@ -19,7 +19,7 @@ import ( const VIM = "vim" const VIMRC = "vimrc" -var Index = &ice.Context{Name: "vim", Help: "编辑器", +var Index = &ice.Context{Name: VIM, Help: "编辑器", Commands: map[string]*ice.Command{ ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Conf(web.FAVOR, "meta.render.vimrc", m.AddCmd(&ice.Command{Name: "render favor id", Help: "渲染引擎", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { @@ -46,32 +46,35 @@ var Index = &ice.Context{Name: "vim", Help: "编辑器", m.Cmd(mdb.RENDER, mdb.CREATE, VIMRC, VIM, c.Cap(ice.CTX_FOLLOW)) m.Cmd(mdb.PLUGIN, mdb.CREATE, VIM, VIM, c.Cap(ice.CTX_FOLLOW)) m.Cmd(mdb.RENDER, mdb.CREATE, VIM, VIM, c.Cap(ice.CTX_FOLLOW)) + + m.Cmd("web.spide_rewrite", "create", "from", "ftp://ftp.vim.org/pub/vim/unix/vim-8.1.tar.bz2", "to", "http://localhost:9020/publish/vim-8.1.tar.bz2") + m.Cmd("web.spide_rewrite", "create", "from", "https://raw.githubusercontent.com/shylinux/contexts/master/etc/conf/vimrc", "to", "http://localhost:9020/publish/vimrc") + m.Cmd("web.spide_rewrite", "create", "from", "https://raw.githubusercontent.com/shylinux/contexts/master/etc/conf/plug.vim", "to", "http://localhost:9020/publish/plug.vim") + m.Cmd("nfs.file_rewrite", "create", "from", "etc/conf/plug.vim", "to", "https://raw.githubusercontent.com/shylinux/contexts/master/etc/conf/plug.vim") }}, - VIM: {Name: "vim 配置:button 编译:button 下载:button", Help: "vim", Action: map[string]*ice.Action{ + VIM: {Name: "vim port=auto path=auto auto 启动:button 构建:button 下载:button", Help: "编辑器", Action: map[string]*ice.Action{ "download": {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(code.INSTALL, "download", m.Conf(VIM, "meta.source")) + m.Cmdy(code.INSTALL, "download", m.Conf(VIM, kit.META_SOURCE)) }}, - "compile": {Name: "compile", Help: "编译", Hand: func(m *ice.Message, arg ...string) { - name := path.Base(strings.TrimSuffix(m.Conf(VIM, "meta.source"), ".tar.bz2")) - name = strings.ReplaceAll(strings.ReplaceAll(name, "-", ""), ".", "") - m.Option(cli.CMD_DIR, path.Join(m.Conf(code.INSTALL, kit.META_PATH), name)) - - m.Cmdy(cli.SYSTEM, "./configure", "--prefix="+kit.Path(m.Conf(VIM, "meta.target")), - "--enable-multibyte=yes", m.Confv(VIM, "meta.config")) - m.Cmdy(cli.SYSTEM, "make", "-j4") - m.Cmdy(cli.SYSTEM, "make", "install") + "build": {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(code.INSTALL, "build", + strings.Replace(strings.Replace(kit.TrimExt(m.Conf(VIM, kit.META_SOURCE)), ".", "", -1), "-", "", -1)) }}, - "prepare": {Name: "prepare", Help: "配置", Hand: func(m *ice.Message, 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") + "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, "dev", web.SPIDE_SAVE, path.Join(os.Getenv("HOME"), list[i]), + web.SPIDE_GET, m.Conf(VIM, "meta.remote")+list[i+1]) + } + return []string{"-T", "screen", "-c", "PlugInstall", "-c", "exit", "-c", "exit"} + }) + m.Cmdy(code.INSTALL, "start", + strings.Replace(strings.Replace(kit.TrimExt(m.Conf(VIM, kit.META_SOURCE)), ".", "", -1), "-", "", -1), + "bin/vim") // 安装插件 + m.Echo("\n") m.Echo("vim -c PlugInstall\n") m.Echo("vim -c GoInstallBinaries\n") }}, @@ -80,8 +83,14 @@ var Index = &ice.Context{Name: "vim", Help: "编辑器", m.Echo(m.Conf(VIM, "meta.plug")) }}, mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) { + if strings.HasPrefix(arg[2], "http") { + m.Cmdy(web.SPIDE, "dev", "raw", "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) }}, "/sync": {Name: "/sync", Help: "同步", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { @@ -148,11 +157,20 @@ 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", - "target", "usr/local", "config", []interface{}{ + "remote", "https://raw.githubusercontent.com/shylinux/contexts/master/etc/conf/", + "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/syntax/javascript.vim", "javascript.vim", + ".vim/syntax/shy.vim", "shy.vim", + ".vim/syntax/go.vim", "go.vim", + }, "history", "vim.history", diff --git a/misc/vim/vim.shy b/misc/vim/vim.shy index a9f0d046..ee01d5d6 100644 --- a/misc/vim/vim.shy +++ b/misc/vim/vim.shy @@ -10,22 +10,21 @@ chapter "安装" section "编译安装" spark shell ` wget ftp://ftp.vim.org/pub/vim/unix/vim-8.1.tar.bz2 -tar xvf vim-81.tar.bz2 && cd vim81 -./configure --prefix=/usr/local --enable-multibyte=yes -make -j4 -make install +tar xvf vim-8.1.tar.bz2 && cd vim81 +./configure --prefix=$PWD/install --enable-multibyte=yes +make -j4 && make install ` section "使用体验" spark shell ` -vim +cd ./install +./bin/vim ` section "项目" field "安装" web.code.vim.vim field "源码" web.code.inner args `[ usr/install/vim81/ src/main.c 110 ]` -field "脚本" web.code.inner args `[ usr/local/share/vim/vim81/ filetype.vim ]` -field "文档" web.code.inner args `[ usr/local/share/vim/vim81/doc/ help.txt ]` - +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 ]` chapter "使用" @@ -34,13 +33,13 @@ chapter "配置" refer ` 启动脚本 https://github.com/shylinux/contexts/blob/master/etc/conf/vimrc ` -field "启动脚本" web.code.inner args `[ etc/conf/ vimrc ]` +field "启动脚本" web.code.inner args `[ https://raw.githubusercontent.com/shylinux/contexts/master/etc/conf/ vimrc ]` chapter "插件" refer ` -插件管理器 https://github.com/junegunn/vim-plug +插件管理器 https://github.com/junegunn/vim-plug/plug.vim ` -field "插件管理器" web.code.inner args `[ etc/conf/ plug.vim ]` +field "插件管理器" web.code.inner args `[ https://raw.githubusercontent.com/shylinux/contexts/master/etc/conf/ plug.vim ]` section "状态栏" refer ` @@ -48,9 +47,5 @@ refer ` ` chapter "应用" - section "收藏夹" -field favor web.favor args `[ vim.history ]` - section "输入法" -# field input web.code.input.find `[ shwq ]` diff --git a/misc/zsh/zsh.go b/misc/zsh/zsh.go index bcae3fe4..16682291 100644 --- a/misc/zsh/zsh.go +++ b/misc/zsh/zsh.go @@ -15,10 +15,19 @@ import ( "unicode" ) -var Index = &ice.Context{Name: "zsh", Help: "命令行", - Caches: map[string]*ice.Cache{}, +const ( + BASH = "bash" + ZSH = "zsh" +) + +var Index = &ice.Context{Name: ZSH, Help: "命令行", Configs: map[string]*ice.Config{ - "zsh": {Name: "zsh", Help: "命令行", Value: kit.Data( + BASH: {Name: BASH, Help: "命令行", Value: kit.Data( + "source", "http://mirrors.aliyun.com/gnu/bash/bash-4.2.53.tar.gz", + )}, + ZSH: {Name: ZSH, Help: "命令行", Value: kit.Data( + "source", "https://sourceforge.net/projects/zsh/files/zsh/5.8/zsh-5.8.tar.xz", + "proxy", "tmux", "history", "zsh.history", "script", []interface{}{ ".vim/syntax/sh.vim", "etc/conf/sh.vim", ".bashrc", "etc/conf/bashrc", @@ -27,7 +36,44 @@ var Index = &ice.Context{Name: "zsh", Help: "命令行", )}, }, Commands: map[string]*ice.Command{ + BASH: {Name: "bash port=auto path=auto auto 启动:button 构建:button 下载:button", 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)) + }}, + "build": {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(code.INSTALL, "build", m.Conf(BASH, kit.META_SOURCE)) + }}, + "start": {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) { + m.Optionv("prepare", func(p string) []string { + m.Option(cli.CMD_DIR, p) + return []string{} + }) + m.Cmdy(code.INSTALL, "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) + }}, + ZSH: {Name: "zsh port=auto path=auto auto 启动:button 构建:button 下载:button", 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)) + }}, + "build": {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(code.INSTALL, "build", m.Conf(ZSH, kit.META_SOURCE)) + }}, + "start": {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) { + m.Optionv("prepare", func(p string) []string { + m.Option(cli.CMD_DIR, p) + return []string{} + }) + m.Cmdy(code.INSTALL, "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.Cmd("web.spide_rewrite", "create", "from", "https://sourceforge.net/projects/zsh/files/zsh/5.8/zsh-5.8.tar.xz", "to", "http://localhost:9020/publish/zsh-5.8.tar.gz") + m.Conf(web.FAVOR, "meta.render.shell", m.AddCmd(&ice.Command{Name: "render type name text", Help: "渲染引擎", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { value, _ := m.Optionv(kit.MDB_VALUE).(map[string]interface{}) m.Option("cmd_dir", kit.Value(value, "extra.pwd")) diff --git a/misc/zsh/zsh.shy b/misc/zsh/zsh.shy index 2913c25d..998e37ae 100644 --- a/misc/zsh/zsh.shy +++ b/misc/zsh/zsh.shy @@ -1,6 +1,51 @@ +title "bash" +refer ` +官网 https://www.gnu.org/software/bash/ +源码 http://ftp.gnu.org/gnu/bash/ +文档 https://www.gnu.org/software/bash/manual/bash.html +` +field "安装" web.code.zsh.bash +field "源码" web.code.inner args `[ usr/install/bash-4.2.53/ input.c 625 ]` + +chapter "安装" +section "编译安装" +spark shell ` +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 +./configure --prefix=$PWD/install +make -j4 && make install +` + +section "使用体验" +spark shell ` +cd ./install +./bin/bash +` + + title "zsh" refer ` 官网 https://www.zsh.org/ 源码 https://github.com/zsh-users/zsh/ 文档 http://zsh.sourceforge.net/Doc/Release/zsh_toc.html ` + +field "安装" web.code.zsh.zsh +field "源码" web.code.inner args `[ usr/install/zsh-5.8/ Src/main.c 91 ]` + +chapter "安装" +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 +./configure --prefix=$PWD/install +make -j4 && make install +` + +section "使用体验" +spark shell ` +cd ./install +./bin/zsh +` + +