1
0
forked from x/icebergs
This commit is contained in:
IT 老营长 @云轩领航-创始人 2022-09-03 16:43:13 +08:00
parent 83136bc19f
commit d93e5b56ad
12 changed files with 138 additions and 16 deletions

View File

@ -116,12 +116,25 @@ func CmdAction(args ...ice.Any) ice.Actions {
} }
}}, }},
ice.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) { ice.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
if len(arg) > 3 && arg[1] == ACTION && arg[2] == CONFIG && arg[3] == "reset" { if len(arg) > 3 && arg[1] == ACTION && arg[2] == CONFIG {
m.Cmd(CONFIG, "reset", arg[0]) switch arg[3] {
return case "select":
}
if len(arg) > 3 && arg[1] == ACTION && arg[2] == CONFIG && arg[3] == "select" {
m.Cmdy(CONFIG, arg[0]) m.Cmdy(CONFIG, arg[0])
case "reset":
m.Cmd(CONFIG, "reset", arg[0])
case "help":
if file := strings.ReplaceAll(GetCmdFile(m, arg[0]), ".go", ".shy"); nfs.ExistsFile(m, file) {
m.ProcessStory("web.wiki.word", file)
}
case "script":
if file := strings.ReplaceAll(GetCmdFile(m, arg[0]), ".go", ".js"); nfs.ExistsFile(m, file) {
m.ProcessStory("web.code.inner", file)
}
case "source":
if file := GetCmdFile(m, arg[0]); nfs.ExistsFile(m, file) {
m.ProcessStory("web.code.inner", file)
}
}
return return
} }
if !PodCmd(m, arg) && aaa.Right(m, arg) { if !PodCmd(m, arg) && aaa.Right(m, arg) {
@ -173,6 +186,14 @@ func AddFileCmd(dir, key string) {
ice.Info.File[FileCmd(dir)] = key ice.Info.File[FileCmd(dir)] = key
} }
func GetFileCmd(dir string) string { func GetFileCmd(dir string) string {
if strings.HasPrefix(dir, "usr/") {
p := ice.Pulse.Cmdx("cli.system", "git", "config", "remote.origin.url", kit.Dict("cmd_dir", path.Dir(dir)))
p = strings.Replace(strings.TrimSpace(p), "https://", "/require/", 1)
dir = path.Join(p, strings.Join(strings.Split(dir, "/")[2:], "/"))
}
if strings.HasPrefix(dir, ".ish/pluged/") {
dir = strings.Replace(dir, ".ish/pluged/", "/require/", 1)
}
if strings.HasPrefix(dir, "require/") { if strings.HasPrefix(dir, "require/") {
dir = "/" + dir dir = "/" + dir
} }
@ -192,3 +213,17 @@ func GetFileCmd(dir string) string {
} }
return "" return ""
} }
func GetCmdFile(m *ice.Message, cmds string) (file string) {
m.Search(cmds, func(key string, cmd *ice.Command) {
if cmd.RawHand == nil {
file = kit.Split(kit.FileLine(cmd.Hand, 100), ":")[0]
} else {
for k, v := range ice.Info.File {
if v == cmds {
file = strings.Replace(k, "/require/", ".ish/pluged/", 1)
}
}
}
})
return
}

View File

@ -56,6 +56,7 @@ func (f *Frame) Close(m *ice.Message, arg ...string) bool {
return true return true
} }
const DEBUG = "debug"
const GDB = "gdb" const GDB = "gdb"
var Index = &ice.Context{Name: GDB, Help: "事件模块", Commands: ice.Commands{ var Index = &ice.Context{Name: GDB, Help: "事件模块", Commands: ice.Commands{

View File

@ -31,8 +31,12 @@ func _list_insert(m *ice.Message, prefix, chain string, arg ...string) {
defer Lock(m, prefix, chain)() defer Lock(m, prefix, chain)()
m.Logs(INSERT, KEY, path.Join(prefix, chain), arg[0], arg[1]) m.Logs(INSERT, KEY, path.Join(prefix, chain), arg[0], arg[1])
if m.Optionv(TARGET) != nil && m.Option(TARGET) != "" {
m.Echo("%d", Grow(m, prefix, chain, kit.Dict(arg, TARGET, m.Optionv(TARGET))))
} else {
m.Echo("%d", Grow(m, prefix, chain, kit.Dict(arg))) m.Echo("%d", Grow(m, prefix, chain, kit.Dict(arg)))
} }
}
func _list_modify(m *ice.Message, prefix, chain string, field, value string, arg ...string) { func _list_modify(m *ice.Message, prefix, chain string, field, value string, arg ...string) {
defer Lock(m, prefix, chain)() defer Lock(m, prefix, chain)()
@ -262,7 +266,6 @@ func Grows(m *ice.Message, prefix string, chain Any, match string, value string,
m.Option(CACHE_OFFEND, -begin-limit) m.Option(CACHE_OFFEND, -begin-limit)
} }
} }
return miss.Grows(path.Join(prefix, kit.Keys(chain)), cache, return miss.Grows(path.Join(prefix, kit.Keys(chain)), cache,
kit.Int(kit.Select("0", strings.TrimPrefix(m.Option(CACHE_OFFEND), "-"))), kit.Int(kit.Select("0", strings.TrimPrefix(m.Option(CACHE_OFFEND), "-"))),
kit.Int(kit.Select("10", m.Option(CACHE_LIMIT))), kit.Int(kit.Select("10", m.Option(CACHE_LIMIT))),

View File

@ -56,16 +56,18 @@ func init() {
m.Cmd(cmd, mdb.CREATE, k, m.PrefixKey()) m.Cmd(cmd, mdb.CREATE, k, m.PrefixKey())
} }
} }
LoadPlug(m, C) LoadPlug(m, H, C)
}}, }},
mdb.ENGINE: {Hand: func(m *ice.Message, arg ...string) { mdb.ENGINE: {Hand: func(m *ice.Message, arg ...string) {
m.Option(cli.CMD_DIR, arg[2])
name := strings.TrimSuffix(arg[1], path.Ext(arg[1])) + ".bin" name := strings.TrimSuffix(arg[1], path.Ext(arg[1])) + ".bin"
if msg := m.Cmd(cli.SYSTEM, "gcc", arg[1], "-o", name); !cli.IsSuccess(msg) { if msg := m.Cmd(cli.SYSTEM, "gcc", arg[1], "-o", name, kit.Dict(cli.CMD_DIR, arg[2])); !cli.IsSuccess(msg) {
m.Copy(msg) m.Copy(msg)
return return
} }
m.Echo(m.Cmd(cli.SYSTEM, nfs.PWD+name).Append(cli.CMD_OUT)) m.Echo(m.Cmd(cli.SYSTEM, path.Join(arg[2], name)).Append(cli.CMD_OUT))
}},
mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) {
TagsList(m, "ctags", "--excmd=number", "--sort=no", "-f", "-", path.Join(m.Option(nfs.PATH), m.Option(nfs.FILE)))
}}, }},
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
if arg[0] == mdb.FOREACH { if arg[0] == mdb.FOREACH {
@ -104,6 +106,7 @@ func init() {
}, PlugAction())}, }, PlugAction())},
}, Configs: ice.Configs{ }, Configs: ice.Configs{
C: {Name: C, Help: "系统", Value: kit.Data(PLUG, kit.Dict( C: {Name: C, Help: "系统", Value: kit.Data(PLUG, kit.Dict(
mdb.RENDER, kit.Dict(),
SPLIT, kit.Dict("space", " ", "operator", "{[(.,:;!|<>)]}"), SPLIT, kit.Dict("space", " ", "operator", "{[(.,:;!|<>)]}"),
PREFIX, kit.Dict("//", COMMENT, "/* ", COMMENT, "* ", COMMENT), PREPARE, kit.Dict( PREFIX, kit.Dict("//", COMMENT, "/* ", COMMENT, "* ", COMMENT), PREPARE, kit.Dict(
KEYWORD, kit.Simple( KEYWORD, kit.Simple(
@ -169,3 +172,21 @@ func init() {
))}, ))},
}}, nil) }}, nil)
} }
func TagsList(m *ice.Message, cmds ...string) {
for _, l := range strings.Split(m.Cmdx(cli.SYSTEM, cmds), ice.NL) {
if strings.HasPrefix(l, "!_") {
continue
}
ls := strings.Split(l, ice.TB)
if len(ls) < 2 {
continue
}
switch ls[3] {
case "w":
continue
}
m.PushRecord(kit.Dict(mdb.TYPE, ls[3], mdb.NAME, ls[0], nfs.LINE, strings.TrimSuffix(ls[2], ";\"")))
}
m.Sort(nfs.LINE).StatusTimeCount()
}

View File

@ -162,8 +162,10 @@ func _go_show(m *ice.Message, arg ...string) {
} else { } else {
if key := ctx.GetFileCmd(path.Join(arg[2], arg[1])); key != "" { if key := ctx.GetFileCmd(path.Join(arg[2], arg[1])); key != "" {
ctx.ProcessCommand(m, key, kit.Simple()) ctx.ProcessCommand(m, key, kit.Simple())
} else if p := strings.ReplaceAll(path.Join(arg[2], arg[1]), ".go", ".shy"); nfs.ExistsFile(m, p) {
ctx.ProcessCommand(m, "web.wiki.word", kit.Simple(p))
} else { } else {
ctx.ProcessCommand(m, "web.wiki.word", kit.Simple(strings.ReplaceAll(path.Join(arg[2], arg[1]), ".go", ".shy"))) TagsList(m, "gotags", path.Join(m.Option(nfs.PATH), m.Option(nfs.FILE)))
} }
} }
} }
@ -279,6 +281,7 @@ func init() {
), KEYWORD, kit.Dict(), ), KEYWORD, kit.Dict(),
))}, ))},
GO: {Name: GO, Help: "后端", Value: kit.Data(PLUG, kit.Dict( GO: {Name: GO, Help: "后端", Value: kit.Data(PLUG, kit.Dict(
mdb.RENDER, kit.Dict(),
SPLIT, kit.Dict("space", "\t ", "operator", "{[(&.,:;!|<>)]}"), SPLIT, kit.Dict("space", "\t ", "operator", "{[(&.,:;!|<>)]}"),
PREFIX, kit.Dict("// ", COMMENT, "/*", COMMENT, "* ", COMMENT), PREPARE, kit.Dict( PREFIX, kit.Dict("// ", COMMENT, "/*", COMMENT, "* ", COMMENT), PREPARE, kit.Dict(
KEYWORD, kit.Simple( KEYWORD, kit.Simple(

View File

@ -1,6 +1,7 @@
package code package code
import ( import (
"bufio"
"path" "path"
"strings" "strings"
@ -58,6 +59,32 @@ func _inner_make(m *ice.Message, msg *ice.Message) {
} }
m.StatusTime() m.StatusTime()
} }
func _inner_tags(m *ice.Message, path string, value string) {
for _, l := range strings.Split(m.Cmdx(cli.SYSTEM, "grep", "^"+value+"\\>", "tags", kit.Dict(cli.CMD_DIR, m.Option(nfs.PATH))), ice.NL) {
ls := strings.SplitN(l, ice.TB, 2)
if len(ls) < 2 {
continue
}
ls = strings.SplitN(ls[1], ice.TB, 2)
file := ls[0]
ls = strings.SplitN(ls[1], ";\"", 2)
text := strings.TrimSuffix(strings.TrimPrefix(ls[0], "/^"), "$/")
line := kit.Int(text)
f, e := nfs.OpenFile(m, kit.Path(path, file))
m.Assert(e)
defer f.Close()
bio := bufio.NewScanner(f)
for i := 1; bio.Scan(); i++ {
if i == line || bio.Text() == text {
m.PushRecord(kit.Dict(nfs.PATH, path, nfs.FILE, strings.TrimPrefix(file, nfs.PWD), nfs.LINE, kit.Format(i)))
return
}
}
}
}
func LoadPlug(m *ice.Message, language ...string) { func LoadPlug(m *ice.Message, language ...string) {
for _, language := range language { for _, language := range language {
@ -164,7 +191,9 @@ func init() {
} }
}}, }},
nfs.TAGS: {Name: "tags", Help: "索引", Hand: func(m *ice.Message, arg ...string) {}}, nfs.TAGS: {Name: "tags", Help: "索引", Hand: func(m *ice.Message, arg ...string) {
_inner_tags(m, m.Option(nfs.PATH), arg[0])
}},
nfs.GREP: {Name: "grep", Help: "搜索", Hand: func(m *ice.Message, arg ...string) { nfs.GREP: {Name: "grep", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(nfs.GREP, m.Option(nfs.PATH), arg[0]) m.Cmdy(nfs.GREP, m.Option(nfs.PATH), arg[0])
m.StatusTimeCount(mdb.INDEX, 0) m.StatusTimeCount(mdb.INDEX, 0)

View File

@ -8,6 +8,7 @@ import (
ice "shylinux.com/x/icebergs" ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/aaa" "shylinux.com/x/icebergs/base/aaa"
"shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/gdb" "shylinux.com/x/icebergs/base/gdb"
"shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/nfs"
@ -203,6 +204,17 @@ func init() {
cli.STOP: {Name: "stop", Help: "停止", Hand: func(m *ice.Message, arg ...string) { cli.STOP: {Name: "stop", Help: "停止", Hand: func(m *ice.Message, arg ...string) {
_install_stop(m, arg...) _install_stop(m, arg...)
}}, }},
gdb.DEBUG: {Name: "debug", Help: "调试", Hand: func(m *ice.Message, arg ...string) {
if cmd := "web.code.xterm"; len(arg) > 0 && arg[0] == ice.RUN {
if len(arg) > 2 && arg[1] == ctx.ACTION && arg[2] == mdb.CREATE {
arg = append(arg, mdb.TYPE, "gdb")
}
m.Cmdy(cmd, arg[1:])
} else {
m.Cmdy(ctx.COMMAND, cmd)
m.ProcessField(m.ActionKey(), ice.RUN)
}
}},
nfs.TRASH: {Name: "trash", Help: "删除", Hand: func(m *ice.Message, arg ...string) { nfs.TRASH: {Name: "trash", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
_install_trash(m, arg...) _install_trash(m, arg...)
}}, }},

View File

@ -118,3 +118,14 @@ func init() {
}}, }},
}) })
} }
func ProcessXterm(m *ice.Message, bin string, arg ...string) {
if cmd := "web.code.xterm"; len(arg) > 0 && arg[0] == ice.RUN {
if len(arg) > 2 && arg[1] == ctx.ACTION && arg[2] == mdb.CREATE {
arg = append(arg, mdb.TYPE, bin)
}
m.Cmdy(cmd, arg[1:])
} else {
m.Cmdy(ctx.COMMAND, cmd).ProcessField(m.ActionKey(), ice.RUN)
}
}

View File

@ -34,6 +34,9 @@ func init() {
if strings.Contains(file, "var/") { if strings.Contains(file, "var/") {
return return
} }
if strings.Contains(file, "tags") {
return
}
switch kit.Ext(file) { switch kit.Ext(file) {
case "sum", "log": case "sum", "log":
return return

View File

@ -23,7 +23,10 @@ import (
func _server_rewrite(m *ice.Message, p string, r *http.Request) { func _server_rewrite(m *ice.Message, p string, r *http.Request) {
if ua := r.Header.Get(web.UserAgent); strings.HasPrefix(ua, "Mozilla") { if ua := r.Header.Get(web.UserAgent); strings.HasPrefix(ua, "Mozilla") {
r.URL.Path = strings.Replace(r.URL.Path, "/x/", "/chat/pod/", 1) ls := kit.Split(r.URL.Path, "/")
r.URL = kit.ParseURL(kit.MergeURL("/chat/cmd/web.code.inner", "path", "usr/"+ls[1]+"/", "file", path.Join(ls[2:]...)))
// r.URL.Path = strings.Replace(r.URL.Path, "/x/", "/chat/pod/", 1)
m.Info("rewrite %v -> %v", p, r.URL.Path) // 访问服务 m.Info("rewrite %v -> %v", p, r.URL.Path) // 访问服务
} else { } else {

View File

@ -9,4 +9,4 @@ field web.code.node.compile
shell ` shell `
wget https://mirrors.tencent.com/nodejs-release/v16.15.1/node-v16.15.1-linux-x64.tar.xz wget https://mirrors.tencent.com/nodejs-release/v16.15.1/node-v16.15.1-linux-x64.tar.xz
tar xvf node-v16.15.1-linux-x64.tar.xz && cd node-v16.15.1-linux-x64 tar xvf node-v16.15.1-linux-x64.tar.xz && cd node-v16.15.1-linux-x64
` `Á

View File

@ -46,6 +46,7 @@ type Command struct {
Help string Help string
Actions Actions Actions Actions
Hand Handler Hand Handler
RawHand Any
List List List List
Meta Map Meta Map
} }