diff --git a/base/nfs/cat.go b/base/nfs/cat.go index 69ae02d0..4a8f1b5d 100644 --- a/base/nfs/cat.go +++ b/base/nfs/cat.go @@ -35,6 +35,14 @@ func _cat_show(m *ice.Message, name string) { defer f.Close() switch cb := m.Optionv(kit.Keycb(CAT)).(type) { + case func(string, int) string: + list := []string{} + bio := bufio.NewScanner(f) + for i := 0; bio.Scan(); i++ { + list = append(list, cb(bio.Text(), i)) + } + m.Echo(strings.Join(list, "\n") + "\n") + case func(string, int): bio := bufio.NewScanner(f) for i := 0; bio.Scan(); i++ { @@ -72,6 +80,10 @@ func _cat_show(m *ice.Message, name string) { } } +const ( + PATH = "path" + SIZE = "size" +) const CAT = "cat" func init() { diff --git a/conf.go b/conf.go index abb9ec5a..b0a5f2a9 100644 --- a/conf.go +++ b/conf.go @@ -143,10 +143,11 @@ const ( // RENDER RENDER_REDIRECT = "_redirect" ) const ( // PROCESS - PROCESS_REFRESH = "_refresh" - PROCESS_REWRITE = "_rewrite" - PROCESS_FIELD = "_field" - PROCESS_INNER = "_inner" + PROCESS_LOCATION = "_location" + PROCESS_REFRESH = "_refresh" + PROCESS_REWRITE = "_rewrite" + PROCESS_FIELD = "_field" + PROCESS_INNER = "_inner" PROCESS_HOLD = "_hold" PROCESS_BACK = "_back" diff --git a/core/chat/cmd.go b/core/chat/cmd.go index 36dd269d..5b8e1880 100644 --- a/core/chat/cmd.go +++ b/core/chat/cmd.go @@ -16,14 +16,11 @@ const CMD = "cmd" func init() { Index.Merge(&ice.Context{ - Configs: map[string]*ice.Config{ - CMD: {Name: CMD, Help: "命令", Value: kit.Data(kit.MDB_PATH, "./")}, - }, Commands: map[string]*ice.Command{ "/cmd/": {Name: "/cmd/", Help: "命令", Action: map[string]*ice.Action{ ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) { if len(arg) == 0 { - m.Push("index", "cmd") + m.Push("index", CMD) m.Push("args", "") return } @@ -34,30 +31,48 @@ func init() { }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if strings.HasSuffix(m.R.URL.Path, "/") { - m.RenderDownload(path.Join(m.Conf(web.SERVE, kit.Keym(ice.VOLCANOS, kit.MDB_PATH)), "page/cmd.html")) + m.RenderDownload(path.Join(m.Conf(web.SERVE, kit.Keym(ice.VOLCANOS, kit.MDB_PATH)), m.Conf(CMD, kit.Keym(kit.MDB_INDEX)))) return } - m.RenderDownload(path.Join(m.Conf(CMD, kit.META_PATH), path.Join(arg...))) + + switch p := path.Join(m.Conf(CMD, kit.META_PATH), path.Join(arg...)); kit.Ext(p) { + case "shy": + list := []interface{}{kit.Dict("index", "web.wiki.word", "args", []interface{}{p})} + m.RenderResult(kit.Format(m.Conf(CMD, kit.Keym(kit.MDB_TEMPLATE)), kit.Format(list))) + default: + m.RenderDownload(p) + } }}, - "cmd": {Name: "cmd path auto up", Help: "命令", Action: map[string]*ice.Action{ + CMD: {Name: "cmd path auto up", Help: "命令", Action: map[string]*ice.Action{ "up": {Name: "up", Help: "上一级", Hand: func(m *ice.Message, arg ...string) { if strings.TrimPrefix(m.R.URL.Path, "/cmd") == "/" { - m.Cmdy("cmd") + m.Cmdy(CMD) return } if strings.HasSuffix(m.R.URL.Path, "/") { - m.Process("_location", "../") + m.ProcessLocation("../") } else { - m.Process("_location", "./") + m.ProcessLocation("./") } }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) > 0 { - m.Process("_location", arg[0]) + m.ProcessLocation(arg[0]) return } m.Option(nfs.DIR_ROOT, path.Join(m.Conf(CMD, kit.META_PATH), strings.TrimPrefix(path.Dir(m.R.URL.Path), "/cmd"))) m.Cmdy(nfs.DIR, arg) }}, - }}) + }, + Configs: map[string]*ice.Config{ + CMD: {Name: CMD, Help: "命令", Value: kit.Data( + kit.MDB_PATH, "./", kit.MDB_INDEX, "page/cmd.html", kit.MDB_TEMPLATE, ` + + + + +`, + )}, + }, + }) } diff --git a/option.go b/option.go index 25fce057..a9702e92 100644 --- a/option.go +++ b/option.go @@ -140,9 +140,11 @@ func (m *Message) Process(action string, arg ...interface{}) { m.Option(MSG_PROCESS, action) m.Option("_arg", arg...) } +func (m *Message) ProcessLocation(arg ...interface{}) { + m.Process(PROCESS_LOCATION, arg...) +} func (m *Message) ProcessRewrite(arg ...interface{}) { - m.Process(PROCESS_REWRITE) - m.Option("_arg", arg...) + m.Process(PROCESS_REWRITE, arg...) } func (m *Message) ProcessRefresh(delay string) { if d, e := time.ParseDuration(delay); e == nil {