diff --git a/base/cli/forever.go b/base/cli/forever.go index cbab015f..3f2d7452 100644 --- a/base/cli/forever.go +++ b/base/cli/forever.go @@ -21,7 +21,7 @@ func init() { FOREVER: {Name: "forever", Help: "启动", Action: map[string]*ice.Action{ SERVE: {Name: "serve", Help: "服务", Hand: func(m *ice.Message, arg ...string) { env := []string{PATH, BinPath(), HOME, kit.Select(kit.Path(""), os.Getenv(HOME))} - for _, k := range []string{SHELL, CTX_SHY, CTX_DEV, CTX_OPS, CTX_ARG, CTX_PID, CTX_USER, CTX_SHARE, CTX_RIVER} { + for _, k := range []string{TERM, SHELL, CTX_SHY, CTX_DEV, CTX_OPS, CTX_ARG, CTX_PID, CTX_USER, CTX_SHARE, CTX_RIVER} { if kit.Env(k) != "" { env = append(env, k, kit.Env(k)) } diff --git a/base/cli/runtime.go b/base/cli/runtime.go index 2026d4d9..2f11094f 100644 --- a/base/cli/runtime.go +++ b/base/cli/runtime.go @@ -120,6 +120,7 @@ const ( ) const ( SHELL = "SHELL" + TERM = "TERM" USER = "USER" HOME = "HOME" PATH = "PATH" diff --git a/base/mdb/engine.go b/base/mdb/engine.go index 4216650e..e41b2d41 100644 --- a/base/mdb/engine.go +++ b/base/mdb/engine.go @@ -13,6 +13,8 @@ func init() { }, Commands: map[string]*ice.Command{ ENGINE: {Name: "engine type name text auto", Help: "引擎", Action: ice.MergeAction(map[string]*ice.Action{ CREATE: {Name: "create type name text", Help: "创建", Hand: func(m *ice.Message, arg ...string) { + m.Option(NAME, kit.Select(m.Option(TYPE), m.Option(NAME))) + m.Option(TYPE, kit.Ext(m.Option(TYPE))) m.Cmdy(INSERT, m.PrefixKey(), "", HASH, m.OptionSimple("type,name,text")) }}, }, HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { diff --git a/base/mdb/plugin.go b/base/mdb/plugin.go index 4bf81961..a54d0644 100644 --- a/base/mdb/plugin.go +++ b/base/mdb/plugin.go @@ -13,6 +13,8 @@ func init() { }, Commands: map[string]*ice.Command{ PLUGIN: {Name: "plugin type name text auto", Help: "插件", Action: map[string]*ice.Action{ CREATE: {Name: "create type name text", Help: "创建", Hand: func(m *ice.Message, arg ...string) { + m.Option(NAME, kit.Select(m.Option(TYPE), m.Option(NAME))) + m.Option(TYPE, kit.Ext(m.Option(TYPE))) m.Cmdy(INSERT, m.PrefixKey(), "", HASH, m.OptionSimple("type,name,text")) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { @@ -24,6 +26,9 @@ func init() { } if HashSelect(m, arg...); len(arg) == 0 { m.Sort(TYPE) + } else if len(arg) == 1 { + m.DisplayStory("json.js") + m.Echo(kit.Formats(m.Confv(m.Append(NAME), "meta.plug"))) } }}, }}) diff --git a/base/mdb/render.go b/base/mdb/render.go index bc0b66fa..c01a4856 100644 --- a/base/mdb/render.go +++ b/base/mdb/render.go @@ -13,6 +13,8 @@ func init() { }, Commands: map[string]*ice.Command{ RENDER: {Name: "render type name text auto", Help: "渲染", Action: map[string]*ice.Action{ CREATE: {Name: "create type name text", Help: "创建", Hand: func(m *ice.Message, arg ...string) { + m.Option(NAME, kit.Select(m.Option(TYPE), m.Option(NAME))) + m.Option(TYPE, kit.Ext(m.Option(TYPE))) m.Cmdy(INSERT, m.PrefixKey(), "", HASH, m.OptionSimple("type,name,text")) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { @@ -24,6 +26,9 @@ func init() { } if HashSelect(m, arg...); len(arg) == 0 { m.Sort(TYPE) + } else if len(arg) == 1 { + m.DisplayStory("json.js") + m.Echo(kit.Formats(m.Confv(m.Append(NAME), "meta.plug"))) } }}, }}) diff --git a/base/mdb/search.go b/base/mdb/search.go index 72389a29..c713acda 100644 --- a/base/mdb/search.go +++ b/base/mdb/search.go @@ -13,6 +13,8 @@ func init() { }, Commands: map[string]*ice.Command{ SEARCH: {Name: "search type name text auto", Help: "搜索", Action: map[string]*ice.Action{ CREATE: {Name: "create type name text", Help: "创建", Hand: func(m *ice.Message, arg ...string) { + m.Option(NAME, kit.Select(m.Option(TYPE), m.Option(NAME))) + m.Option(TYPE, kit.Ext(m.Option(TYPE))) m.Cmdy(INSERT, m.PrefixKey(), "", HASH, m.OptionSimple("type,name,text")) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { diff --git a/base/ssh/scripts.go b/base/ssh/scripts.go index d634ffa6..69d186c0 100644 --- a/base/ssh/scripts.go +++ b/base/ssh/scripts.go @@ -110,7 +110,8 @@ func (f *Frame) alias(m *ice.Message, ls []string) []string { return ls } func (f *Frame) parse(m *ice.Message, line string) string { - for _, one := range kit.Split(line, ";", ";", ";") { + // for _, one := range kit.Split(line, ";", ";", ";") { + for _, one := range kit.Simple(line) { msg := m.Spawn(f.target) ls := f.change(msg, f.alias(msg, kit.Split(strings.TrimSpace(one)))) if len(ls) == 0 { diff --git a/base/web/dream.go b/base/web/dream.go index 9e3736cf..fdf357b0 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -76,6 +76,7 @@ func _dream_show(m *ice.Message, name string) { m.Optionv(cli.CMD_ENV, kit.Simple( cli.CTX_OPS, "http://:"+m.Cmd(SERVE, ice.OptionFields("")).Append(tcp.PORT), cli.PATH, cli.BinPath(kit.Path(p, ice.BIN)), cli.HOME, kit.Env(cli.HOME), + cli.SHELL, kit.Env(cli.SHELL), cli.TERM, kit.Env(cli.TERM), cli.USER, ice.Info.UserName, m.Configv(cli.ENV), )) m.Optionv(cli.CMD_OUTPUT, path.Join(p, ice.BIN_BOOT_LOG)) diff --git a/base/web/serve.go b/base/web/serve.go index c4f5fcaa..76486aee 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -348,6 +348,11 @@ func init() { return } } + if strings.HasPrefix(arg[0], "ice.") && m.Option(ice.POD) != "" { + aaa.UserRoot(m) + _share_local(m, "bin/ice.bin") + return + } _share_local(m, m.Conf(SERVE, kit.Keym(ice.PUBLISH)), path.Join(arg...)) }}, "/help/": {Name: "/help/", Help: "帮助", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { diff --git a/base/web/share.go b/base/web/share.go index e44c830a..acdc5189 100644 --- a/base/web/share.go +++ b/base/web/share.go @@ -80,7 +80,7 @@ func _share_local(m *ice.Message, arg ...string) { } // 上传文件 - m.Cmdy(SPACE, m.Option(ice.POD), SPIDE, ice.DEV, SPIDE_RAW, m.MergeURL2(SHARE_PROXY, nfs.PATH, ""), + m.Cmd(SPACE, m.Option(ice.POD), SPIDE, ice.DEV, SPIDE_RAW, m.MergeURL2(SHARE_PROXY, nfs.PATH, ""), SPIDE_PART, m.OptionSimple(ice.POD), nfs.PATH, p, CACHE, cache.Format(ice.MOD_TIME), UPLOAD, "@"+p) if s, e := os.Stat(pp); e == nil && !s.IsDir() { @@ -88,7 +88,7 @@ func _share_local(m *ice.Message, arg ...string) { } } if strings.HasSuffix(p, path.Join(ice.USR_PUBLISH, ice.ORDER_JS)) { - if _, e := os.Stat(p); os.IsNotExist(e) { + if !kit.FileExists(p) { m.RenderResult("") return } diff --git a/core/code/inner.go b/core/code/inner.go index 4b436960..2b01c45b 100644 --- a/core/code/inner.go +++ b/core/code/inner.go @@ -60,7 +60,7 @@ func _inner_make(m *ice.Message, msg *ice.Message) { func LoadPlug(m *ice.Message, language ...string) { for _, language := range language { - m.Conf(nfs.CAT, kit.Keym(nfs.SOURCE, language), ice.TRUE) + m.Conf(nfs.CAT, kit.Keym(nfs.SOURCE, kit.Ext(language)), ice.TRUE) m.Confm(language, kit.Keym(PLUG, PREPARE), func(key string, value interface{}) { for _, v := range kit.Simple(value) { m.Conf(language, kit.Keym(PLUG, KEYWORD, v), key) diff --git a/core/wiki/field.go b/core/wiki/field.go index c26dc3a2..4e850d77 100644 --- a/core/wiki/field.go +++ b/core/wiki/field.go @@ -1,6 +1,7 @@ package wiki import ( + "path" "strings" ice "shylinux.com/x/icebergs" @@ -10,7 +11,7 @@ import ( kit "shylinux.com/x/toolkits" ) -func Parse(m *ice.Message, meta string, key string, arg ...string) *ice.Message { +func Parse(m *ice.Message, meta string, key string, arg ...string) (data interface{}) { list := []string{} for _, line := range kit.Split(strings.Join(arg, ice.SP), ice.NL) { ls := kit.Split(line) @@ -23,13 +24,13 @@ func Parse(m *ice.Message, meta string, key string, arg ...string) *ice.Message list = append(list, ls...) } - switch data := kit.Parse(nil, "", list...); meta { + switch data = kit.Parse(nil, "", list...); meta { case ice.MSG_OPTION: m.Option(key, data) case ice.MSG_APPEND: m.Append(key, data) } - return m + return data } func _field_show(m *ice.Message, name, text string, arg ...string) { // 命令参数 @@ -47,17 +48,13 @@ func _field_show(m *ice.Message, name, text string, arg ...string) { // 扩展参数 for i := 0; i < len(arg)-1; i += 2 { if strings.HasPrefix(arg[i], "opts.") { - m.Option(arg[i], strings.TrimSpace(arg[i+1])) - kit.Value(meta, arg[i], m.Option(arg[i])) + kit.Value(meta, arg[i], m.Optionv(arg[i], strings.TrimSpace(arg[i+1]))) } else if strings.HasPrefix(arg[i], "args.") { - m.Option(arg[i], strings.TrimSpace(arg[i+1])) - kit.Value(meta, arg[i], m.Option(arg[i])) + kit.Value(meta, arg[i], m.Optionv(arg[i], strings.TrimSpace(arg[i+1]))) } else if strings.HasPrefix(arg[i], ARGS) { - m.Option(arg[i], kit.Split(strings.TrimSuffix(strings.TrimPrefix(arg[i+1], "["), "]"))) - kit.Value(meta, arg[i], m.Optionv(arg[i])) + kit.Value(meta, arg[i], m.Optionv(arg[i], kit.Split(strings.TrimSuffix(strings.TrimPrefix(arg[i+1], "["), "]")))) } else { - Parse(m, ice.MSG_OPTION, arg[i], arg[i+1]) - kit.Value(meta, arg[i], m.Optionv(arg[i])) + kit.Value(meta, arg[i], Parse(m, ice.MSG_OPTION, arg[i], arg[i+1])) } switch arg[i] { @@ -65,9 +62,17 @@ func _field_show(m *ice.Message, name, text string, arg ...string) { meta[arg[i]] = arg[i+1] case SPARK: - msg.Echo(strings.TrimSpace(arg[i+1])) - meta["msg"] = msg.FormatMeta() + if arg[i+1][0] == '@' && kit.FileExists(arg[i+1][1:]) { + msg.Cmdy(nfs.CAT, arg[i+1][1:]) + } else { + msg.Echo(strings.TrimSpace(arg[i+1])) + } + kit.Value(meta, kit.Keys(FEATURE, "mode"), "simple") + if meta["msg"] = msg.FormatMeta(); text == "web.code.inner" { + meta["plug"] = kit.UnMarshal(m.Cmdx(mdb.PLUGIN, kit.Ext(name))) + kit.Value(meta, ARGS, kit.List(path.Dir(name)+ice.PS, path.Base(name))) + } case TABLE: ls := kit.Split(arg[i+1], ice.NL, ice.NL, ice.NL) @@ -98,8 +103,7 @@ func _field_show(m *ice.Message, name, text string, arg ...string) { meta[INPUTS] = list } default: - msg.Option(arg[i], arg[i+1]) - kit.Value(meta, kit.Keys(FEATURE, arg[i]), arg[i+1]) + kit.Value(meta, kit.Keys(FEATURE, arg[i]), msg.Optionv(arg[i], arg[i+1])) } } m.Option(mdb.META, meta) diff --git a/init.go b/init.go index 2ed2648f..4e370082 100644 --- a/init.go +++ b/init.go @@ -111,11 +111,11 @@ func Run(arg ...string) string { switch Index.Merge(Index).Begin(Pulse.Spawn(), arg...); kit.Select("", arg, 0) { case SERVE, SPACE: // 启动服务 - switch path.Base(os.Getenv("SHELL")) { - case "", ".": - Info.Colors = false - default: + switch strings.Split(os.Getenv("TERM"), "-")[0] { + case "xterm", "screen": Info.Colors = true + default: + Info.Colors = false } if log.LogDisable = false; Index.Start(Pulse, arg...) { Pulse.TryCatch(Pulse, true, func(Pulse *Message) { Index.wg.Wait() }) diff --git a/option.go b/option.go index ea95960a..5c404624 100644 --- a/option.go +++ b/option.go @@ -136,13 +136,10 @@ func (m *Message) ToastProcess(arg ...interface{}) func() { arg = append(arg, "-1") } m.Toast(PROCESS, arg...) - return func() { - m.Debug("what ----- %v", 123) - m.Toast(SUCCESS, arg...) - } + return func() { m.Toast(SUCCESS) } } func (m *Message) ToastRestart(arg ...interface{}) { m.Toast(RESTART, arg...) } -func (m *Message) ToastFailure(arg ...interface{}) { m.Toast(SUCCESS, arg...) } +func (m *Message) ToastFailure(arg ...interface{}) { m.Toast(FAILURE, arg...) } func (m *Message) ToastSuccess(arg ...interface{}) { m.Toast(SUCCESS, arg...) } func (m *Message) Toast(text string, arg ...interface{}) { // [title [duration [progress]]] if len(arg) > 1 { diff --git a/render.go b/render.go index 56dbc882..a399b9e2 100644 --- a/render.go +++ b/render.go @@ -223,6 +223,9 @@ func (m *Message) EchoDownload(arg ...interface{}) *Message { // [name] file } func (m *Message) DisplayBase(file string, arg ...interface{}) *Message { + if !strings.Contains(file, PT) { + file += ".js" + } m.Option(MSG_DISPLAY, kit.MergeURL(DisplayBase(file)[DISPLAY], arg...)) return m }