diff --git a/base/cli/system.go b/base/cli/system.go index 2e50f8f4..7e887ebe 100644 --- a/base/cli/system.go +++ b/base/cli/system.go @@ -16,29 +16,37 @@ import ( ) func _system_cmd(m *ice.Message, arg ...string) *exec.Cmd { + bin := "" if text := kit.ReadFile(ice.ETC_PATH); len(text) > 0 { if file := _system_find(m, arg[0], strings.Split(text, ice.NL)...); file != "" { m.Logs(mdb.SELECT, "etc path cmd", file) - arg[0] = file // 配置目录 + bin = file // 配置目录 } } + env := kit.Simple(m.Optionv(CMD_ENV)) for i := 0; i < len(env)-1; i += 2 { if env[i] == PATH { if file := _system_find(m, arg[0], strings.Split(env[i+1], ice.DF)...); file != "" { m.Logs(mdb.SELECT, "env path cmd", file) - arg[0] = file // 环境变量 + bin = file // 环境变量 } } } - if _system_find(m, arg[0]) == "" && !strings.Contains(arg[0], ice.PS) { + // if m.Option(CMD_DIR) != "" { + // if file := _system_find(m, arg[0], m.Option(CMD_DIR)); file != "" { + // m.Logs(mdb.SELECT, "dir path cmd", file) + // bin = file // 当前目录 + // } + // } + if bin == "" && !strings.Contains(arg[0], ice.PS) { m.Cmd(MIRRORS, CMD, arg[0]) if file := _system_find(m, arg[0]); file != "" { m.Logs(mdb.SELECT, "mirrors cmd", file) - arg[0] = file // 软件镜像 + bin = file // 软件镜像 } } - cmd := exec.Command(arg[0], arg[1:]...) + cmd := exec.Command(bin, arg[1:]...) // 运行目录 if cmd.Dir = m.Option(CMD_DIR); len(cmd.Dir) > 0 { @@ -83,7 +91,7 @@ func _system_exec(m *ice.Message, cmd *exec.Cmd) { defer func() { m.Push(CMD_OUT, out.String()) m.Push(CMD_ERR, err.String()) - if m.Echo(strings.TrimSpace(kit.Select(out.String(), err.String()))); IsSuccess(m) { + if m.Echo(strings.TrimSpace(kit.Select(out.String(), err.String()))); IsSuccess(m) && out.String() == "" { m.SetAppend() } }() diff --git a/base/nfs/dir.go b/base/nfs/dir.go index 1a4f1748..e01837cb 100644 --- a/base/nfs/dir.go +++ b/base/nfs/dir.go @@ -178,6 +178,9 @@ func init() { }}, }, Hand: func(m *ice.Message, arg ...string) { root, name := kit.Select(PWD, m.Option(DIR_ROOT)), kit.Select(PWD, arg, 0) + if strings.HasPrefix(name, ice.PS) { + root = ice.PS + } if !aaa.Right(m, path.Join(root, name)) { return // 没有权限 } diff --git a/core/code/c.go b/core/code/c.go index 586530ac..a26a9e2f 100644 --- a/core/code/c.go +++ b/core/code/c.go @@ -130,26 +130,36 @@ func init() { "case", "default", "return", + "goto", + ), + DATATYPE, kit.Simple( + "struct", + "union", + "enum", - "typedef", - "sizeof", + "void", + "char", + "float", + "double", + "unsigned", + "signed", + "short", + "long", + "int", + + "register", + "volatile", "extern", "static", "const", ), - DATATYPE, kit.Simple( - "union", - "struct", - "unsigned", - "double", - "void", - "long", - "char", - "int", - ), FUNCTION, kit.Simple( + "typedef", + "sizeof", + "assert", "zmalloc", + "free", ), CONSTANT, kit.Simple( "NULL", "-1", "0", "1", "2", diff --git a/core/code/inner.go b/core/code/inner.go index f3771d01..b05174c6 100644 --- a/core/code/inner.go +++ b/core/code/inner.go @@ -108,8 +108,8 @@ const ( COMMENT = "comment" KEYWORD = "keyword" CONSTANT = "constant" - DATATYPE = "datatype" FUNCTION = "function" + DATATYPE = "datatype" ) const ( SPLIT = "split" @@ -145,6 +145,7 @@ func init() { _inner_exec(m, arg[0], arg[1], arg[2]) }}, mdb.SEARCH: {Name: "search", Help: "搜索", Hand: func(m *ice.Message, arg ...string) { + _inner_tags(m, m.Option(nfs.PATH), arg[1]) return m.Option(nfs.DIR_ROOT, arg[2]) m.Option(cli.CMD_DIR, kit.Path(arg[2])) @@ -203,7 +204,8 @@ func init() { }}, FAVOR: {Name: "favor", Help: "收藏"}, "man": {Name: "man", Help: "手册", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(cli.SYSTEM, "sh", "-c", kit.Format("man %s|col -b", arg[0])) + m.Option(cli.CMD_ENV, "COLUMNS", kit.Int(kit.Select("1920", m.Option("width")))/12) + m.Cmdy(cli.SYSTEM, "sh", "-c", kit.Format("man %s %s|col -b", kit.Select("", arg, 1, arg[1] != "1"), arg[0])) }}, "doc": {Name: "man", Help: "手册", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(cli.SYSTEM, "go", "doc", arg[0]) diff --git a/core/code/install.go b/core/code/install.go index 47327342..72846a3a 100644 --- a/core/code/install.go +++ b/core/code/install.go @@ -218,6 +218,9 @@ func init() { nfs.TRASH: {Name: "trash", Help: "删除", Hand: func(m *ice.Message, arg ...string) { _install_trash(m, arg...) }}, + nfs.PATH: {Name: "path", Help: "路径", Hand: func(m *ice.Message, arg ...string) { + m.Echo(_install_path(m, kit.Select("", arg, 0))) + }}, nfs.SOURCE: {Name: "source link path", Help: "源码", Hand: func(m *ice.Message, arg ...string) { if m.Option(nfs.DIR_ROOT, path.Join(_install_path(m, ""), _INSTALL)); !nfs.ExistsFile(m, m.Option(nfs.DIR_ROOT)) { m.Option(nfs.DIR_ROOT, path.Join(_install_path(m, ""))) diff --git a/core/wiki/chart.go b/core/wiki/chart.go index a6709054..59b8734f 100644 --- a/core/wiki/chart.go +++ b/core/wiki/chart.go @@ -132,8 +132,14 @@ func AddChart(name string, hand func(m *ice.Message) Chart) { chart_list[name] = func _chart_show(m *ice.Message, kind, text string, arg ...string) { // 默认参数 m.Option(STROKE_WIDTH, "2") - m.Option(STROKE, cli.BLUE) - m.Option(FILL, cli.YELLOW) + switch m.Option("topic") { + case "black": + m.Option(STROKE, cli.YELLOW) + m.Option(FILL, cli.YELLOW) + default: + m.Option(STROKE, cli.BLUE) + m.Option(FILL, cli.YELLOW) + } m.Option(FONT_SIZE, "24") m.Option(FONT_FAMILY, "monospace") chart := chart_list[kind](m) diff --git a/core/wiki/chart/chain.go b/core/wiki/chart/chain.go index 78ba3b0a..ca1d9d22 100644 --- a/core/wiki/chart/chain.go +++ b/core/wiki/chart/chain.go @@ -103,11 +103,19 @@ const CHAIN = "chain" func init() { wiki.AddChart(CHAIN, func(m *ice.Message) wiki.Chart { + switch m.Option("topic") { + case "black": + m.Option(wiki.STROKE, cli.YELLOW) + default: + m.Option(wiki.STROKE, cli.BLUE) + } + m.Option(wiki.STROKE, "") + m.Option(wiki.FILL, "") m.Option(wiki.STROKE_WIDTH, "2") - m.Option(wiki.STROKE, cli.BLUE) m.Option(wiki.MARGINX, "40") m.Option(wiki.MARGINY, "10") - wiki.AddGroupOption(m, SHIP, wiki.STROKE, cli.RED, wiki.FILL, cli.GLASS) + // wiki.AddGroupOption(m, SHIP, wiki.STROKE, cli.RED, wiki.FILL, cli.GLASS) + wiki.AddGroupOption(m, SHIP, wiki.FILL, cli.GLASS) return &Chain{} }) } diff --git a/core/wiki/refer.go b/core/wiki/refer.go index ae4c3b1d..693dc447 100644 --- a/core/wiki/refer.go +++ b/core/wiki/refer.go @@ -15,10 +15,11 @@ func _refer_show(m *ice.Message, text string, arg ...string) { list := [][]string{} for _, v := range kit.Split(strings.TrimSpace(text), ice.NL, ice.NL) { if ls := kit.Split(v, " ", " "); len(ls) == 1 { - name, _ := url.QueryUnescape(path.Base(ls[0])) - list = append(list, []string{kit.Select(ls[0], name), ls[0]}) + p, _ := url.QueryUnescape(ls[0]) + list = append(list, []string{kit.Select(ls[0], path.Base(p)), ls[0], p}) } else { - list = append(list, ls) + p, _ := url.QueryUnescape(ls[1]) + list = append(list, append(ls, p)) } } m.Optionv(mdb.LIST, list) @@ -34,7 +35,7 @@ func init() { }}, }, Configs: ice.Configs{ REFER: {Name: REFER, Help: "参考", Value: kit.Data( - nfs.TEMPLATE, ``, + nfs.TEMPLATE, ``, )}, }}) } diff --git a/misc.go b/misc.go index d8764e75..05e1742d 100644 --- a/misc.go +++ b/misc.go @@ -249,6 +249,9 @@ func (c *Context) _command(m *Message, cmd *Command, key string, arg ...string) } m._target = kit.FileLine(cmd.Hand, 3) + if cmd.RawHand != nil { + m._target = kit.FileLine(cmd.RawHand, 3) + } if key == "select" { m.Log(LOG_CMDS, "%s.%s %d %v %v", c.Name, key, len(arg), arg, m.Optionv(MSG_FIELDS), logs.FileLineMeta(kit.Select(m._target, m._source, m.target.Name == MDB))) @@ -292,6 +295,9 @@ func (c *Context) _action(m *Message, cmd *Command, key string, sub string, h *A } m._target = kit.FileLine(cmd.Hand, 3) + if cmd.RawHand != nil { + m._target = kit.FileLine(cmd.RawHand, 3) + } m.Log(LOG_CMDS, "%s.%s %s %d %v", c.Name, key, sub, len(arg), arg, logs.FileLineMeta(kit.Select(m._target, m._source, m.target.Name == MDB)))