1
0
forked from x/icebergs
This commit is contained in:
harveyshao 2022-10-15 01:50:02 +08:00
parent 218b48f3c5
commit 5669803c4f
6 changed files with 40 additions and 48 deletions

View File

@ -22,7 +22,7 @@ var Index = &ice.Context{Name: CODE, Help: "编程中心", Commands: ice.Command
func init() { func init() {
web.Index.Register(Index, &web.Frame{}, web.Index.Register(Index, &web.Frame{},
INSTALL, UPGRADE, WEBPACK, BINPACK, AUTOGEN, COMPILE, PUBLISH, INSTALL, UPGRADE, WEBPACK, BINPACK, AUTOGEN, COMPILE, PUBLISH,
FAVOR, XTERM, INNER, VIMER, PPROF, BENCH, VIMER, INNER, FAVOR, XTERM, PPROF, BENCH,
C, SH, SHY, GO, JS, C, SH, SHY, GO, JS,
) )
} }

View File

@ -21,7 +21,7 @@ func init() {
INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) { INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) {
ctx.Process(m, m.ActionKey(), m.OptionSplit(nfs.PATH, nfs.FILE, nfs.LINE), arg...) ctx.Process(m, m.ActionKey(), m.OptionSplit(nfs.PATH, nfs.FILE, nfs.LINE), arg...)
}}, }},
"click": {Name: "click", Help: "源码", Hand: func(m *ice.Message, arg ...string) { "click": {Name: "click", Help: "应用", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(cli.DAEMON, m.Option(mdb.TYPE)) m.Cmd(cli.DAEMON, m.Option(mdb.TYPE))
}}, }},
}, mdb.ZoneAction(mdb.SHORT, mdb.ZONE, mdb.FIELD, "time,id,type,name,text,path,file,line")), Hand: func(m *ice.Message, arg ...string) { }, mdb.ZoneAction(mdb.SHORT, mdb.ZONE, mdb.FIELD, "time,id,type,name,text,path,file,line")), Hand: func(m *ice.Message, arg ...string) {
@ -29,8 +29,7 @@ func init() {
if mdb.ZoneSelectPage(m, arg...); len(arg) > 0 && arg[0] != "" { if mdb.ZoneSelectPage(m, arg...); len(arg) > 0 && arg[0] != "" {
m.Tables(func(value ice.Maps) { m.Tables(func(value ice.Maps) {
m.PushButton(kit.Select(INNER, XTERM, value[mdb.TEXT] == "" || value[nfs.FILE] == "")) m.PushButton(kit.Select(INNER, XTERM, value[mdb.TEXT] == "" || value[nfs.FILE] == ""))
}) }).Option(ctx.STYLE, arg[0])
m.Option(ctx.STYLE, arg[0])
} }
}}, }},
}) })

View File

@ -1,5 +1,5 @@
package code package code
import ( import (
"bufio" "bufio"
"path" "path"
@ -37,6 +37,9 @@ func _inner_exec(m *ice.Message, ext, file, dir string) {
} }
func _inner_tags(m *ice.Message, dir string, value string) { func _inner_tags(m *ice.Message, dir string, value string) {
for _, l := range strings.Split(m.Cmdx(cli.SYSTEM, nfs.GREP, "^"+value+"\\>", nfs.TAGS, kit.Dict(cli.CMD_DIR, dir)), ice.NL) { for _, l := range strings.Split(m.Cmdx(cli.SYSTEM, nfs.GREP, "^"+value+"\\>", nfs.TAGS, kit.Dict(cli.CMD_DIR, dir)), ice.NL) {
if strings.HasPrefix(l, "!_") {
continue
}
ls := strings.SplitN(l, ice.TB, 3) ls := strings.SplitN(l, ice.TB, 3)
if len(ls) < 3 { if len(ls) < 3 {
continue continue
@ -44,25 +47,28 @@ func _inner_tags(m *ice.Message, dir string, value string) {
file, ls := ls[1], strings.SplitN(ls[2], ";\"", 2) file, ls := ls[1], strings.SplitN(ls[2], ";\"", 2)
text := strings.TrimSuffix(strings.TrimPrefix(ls[0], "/^"), "$/") text := strings.TrimSuffix(strings.TrimPrefix(ls[0], "/^"), "$/")
line := kit.Int(text) if text, line := _inner_line(m, kit.Path(dir, file), text); dir == "" {
m.PushRecord(kit.Dict(nfs.PATH, path.Dir(file)+ice.PS, nfs.FILE, path.Base(file), nfs.LINE, kit.Format(line), mdb.TEXT, text))
f, e := nfs.OpenFile(m, kit.Path(dir, file)) } else {
m.Assert(e) m.PushRecord(kit.Dict(nfs.PATH, dir, nfs.FILE, strings.TrimPrefix(file, nfs.PWD), nfs.LINE, kit.Format(line), mdb.TEXT, text))
defer f.Close()
bio := bufio.NewScanner(f)
for i := 1; bio.Scan(); i++ {
if i == line || bio.Text() == text {
if dir == "" {
m.PushRecord(kit.Dict(nfs.PATH, path.Dir(file)+ice.PS, nfs.FILE, path.Base(file), nfs.LINE, kit.Format(i), mdb.TEXT, bio.Text()))
} else {
m.PushRecord(kit.Dict(nfs.PATH, dir, nfs.FILE, strings.TrimPrefix(file, nfs.PWD), nfs.LINE, kit.Format(i), mdb.TEXT, bio.Text()))
}
break
}
} }
} }
} }
func _inner_line(m *ice.Message, file, text string) (string, int) {
line := kit.Int(text)
f, e := nfs.OpenFile(m, file)
m.Assert(e)
defer f.Close()
bio := bufio.NewScanner(f)
for i := 1; bio.Scan(); i++ {
if i == line || bio.Text() == text {
return bio.Text(), i
}
}
return "", 0
}
const ( const (
COMMENT = "comment" COMMENT = "comment"
@ -127,7 +133,7 @@ func init() {
if len(arg) == 2 && arg[0] == mdb.SEARCH && arg[1] == ctx.COMMAND { if len(arg) == 2 && arg[0] == mdb.SEARCH && arg[1] == ctx.COMMAND {
return return
} }
m.Cmd(FAVOR, mdb.INSERT, mdb.ZONE, "_vimer", nfs.FILE, arg[0]) m.Cmd(FAVOR, mdb.INSERT, mdb.ZONE, "_recent_cmd", nfs.FILE, arg[0])
}}, }},
}, ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) { }, ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) {
if arg[0] = strings.Split(arg[0], ice.FS)[0]; !strings.HasSuffix(arg[0], ice.PS) && len(arg) == 1 { if arg[0] = strings.Split(arg[0], ice.FS)[0]; !strings.HasSuffix(arg[0], ice.PS) && len(arg) == 1 {
@ -143,11 +149,11 @@ func init() {
arg[1] = strings.Split(arg[1], ice.FS)[0] arg[1] = strings.Split(arg[1], ice.FS)[0]
_inner_list(m, kit.Ext(arg[1]), arg[1], arg[0]) _inner_list(m, kit.Ext(arg[1]), arg[1], arg[0])
defer m.Cmd(FAVOR, mdb.INSERT, mdb.ZONE, "_recent_file", nfs.PATH, arg[0], nfs.FILE, arg[1])
m.Option("tabs", m.Config("show.tabs")) m.Option("tabs", m.Config("show.tabs"))
m.Option("plug", m.Config("show.plug")) m.Option("plug", m.Config("show.plug"))
m.Option("exts", m.Config("show.exts")) m.Option("exts", m.Config("show.exts"))
ctx.DisplayLocal(m, "") ctx.DisplayLocal(m, "")
m.Cmd(FAVOR, mdb.INSERT, mdb.ZONE, "_recent", nfs.PATH, arg[0], nfs.FILE, arg[1])
}}, }},
}}) }})
} }

View File

@ -12,7 +12,6 @@ import (
"shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/tcp" "shylinux.com/x/icebergs/base/tcp"
"shylinux.com/x/icebergs/base/web" "shylinux.com/x/icebergs/base/web"
"shylinux.com/x/icebergs/core/chat"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
) )
@ -49,6 +48,8 @@ func init() {
switch m.Option(ctx.ACTION) { switch m.Option(ctx.ACTION) {
case AUTOGEN, web.DREAM, XTERM: case AUTOGEN, web.DREAM, XTERM:
m.Cmdy(m.Option(ctx.ACTION), mdb.INPUTS, arg) m.Cmdy(m.Option(ctx.ACTION), mdb.INPUTS, arg)
case nfs.SCRIPT, web.WEBSITE:
m.Cmdy(COMPLETE, mdb.FOREACH, kit.Select("", arg, 1), m.Option(ctx.ACTION))
case "extension": case "extension":
nfs.DirDeepAll(m, "usr/volcanos/plugin/local/code/", "inner/", nil, nfs.PATH) nfs.DirDeepAll(m, "usr/volcanos/plugin/local/code/", "inner/", nil, nfs.PATH)
default: default:
@ -56,24 +57,19 @@ func init() {
case ctx.INDEX: case ctx.INDEX:
m.Cmdy(ctx.COMMAND, mdb.SEARCH, ctx.COMMAND, ice.OptionFields(ctx.INDEX)) m.Cmdy(ctx.COMMAND, mdb.SEARCH, ctx.COMMAND, ice.OptionFields(ctx.INDEX))
default: default:
m.Cmdy(COMPLETE, mdb.FOREACH, kit.Select("", arg, 1), m.Option(ctx.ACTION)) m.Cmd(mdb.RENDER, kit.Ext(m.Option(nfs.FILE)), m.Option(nfs.FILE), m.Option(nfs.PATH)).Tables(func(value ice.Maps) {
m.Cmd(mdb.RENDER, kit.Ext(m.Option(nfs.FILE)), m.Option(nfs.FILE), m.Option(nfs.PATH), ice.Option{nfs.DIR_ROOT, ""}).Tables(func(value ice.Maps) {
m.Push(nfs.PATH, kit.Format("line:%s:%s:%s", value[nfs.LINE], value["kind"], value[mdb.NAME])) m.Push(nfs.PATH, kit.Format("line:%s:%s:%s", value[nfs.LINE], value["kind"], value[mdb.NAME]))
}) })
m.Option(nfs.DIR_REG, "")
for _, p := range kit.Split(kit.Select(m.Option(nfs.PATH), m.Option("paths"))) { for _, p := range kit.Split(kit.Select(m.Option(nfs.PATH), m.Option("paths"))) {
nfs.DirDeepAll(m, nfs.PWD, p, nil, nfs.PATH) nfs.DirDeepAll(m, nfs.PWD, p, nil, nfs.PATH)
} }
m.Cmd(ctx.COMMAND, mdb.SEARCH, ctx.COMMAND, ice.OptionFields(ctx.INDEX)).Tables(func(value ice.Maps) { m.Cmd(ctx.COMMAND, mdb.SEARCH, ctx.COMMAND, ice.OptionFields(ctx.INDEX)).Tables(func(value ice.Maps) {
m.Push(nfs.PATH, "index:"+value[ctx.INDEX]) m.Push(nfs.PATH, "index:"+value[ctx.INDEX])
}) })
m.Option(nfs.DIR_TYPE, "") m.Cmd(web.DREAM, ice.Map{nfs.DIR_TYPE: "", nfs.DIR_DEEP: "", nfs.DIR_ROOT: ""}).Tables(func(value ice.Maps) {
m.Option(nfs.DIR_DEEP, "")
m.Option(nfs.DIR_ROOT, "")
m.Cmd(web.DREAM).Tables(func(value ice.Maps) {
m.Push(nfs.PATH, "dream:"+value[mdb.NAME]) m.Push(nfs.PATH, "dream:"+value[mdb.NAME])
}) })
m.Cmd(FAVOR, "_open").Tables(func(value ice.Maps) { m.Cmd(FAVOR, "_system_app").Tables(func(value ice.Maps) {
m.Push(nfs.PATH, "_open:"+strings.ToLower(value[mdb.NAME])) m.Push(nfs.PATH, "_open:"+strings.ToLower(value[mdb.NAME]))
}) })
} }
@ -84,17 +80,14 @@ func init() {
m.Option(nfs.CONTENT, m.Cmdx("", TEMPLATE)) m.Option(nfs.CONTENT, m.Cmdx("", TEMPLATE))
} }
m.Cmdy(nfs.SAVE, path.Join(m.Option(nfs.PATH), m.Option(nfs.FILE))) m.Cmdy(nfs.SAVE, path.Join(m.Option(nfs.PATH), m.Option(nfs.FILE)))
web.ToastSuccess(m)
}}, }},
nfs.TRASH: {Name: "trash path", Help: "删除", Hand: func(m *ice.Message, arg ...string) { nfs.TRASH: {Name: "trash path", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(nfs.TRASH, arg[0]) m.Cmd(nfs.TRASH, arg[0])
}}, }},
nfs.SCRIPT: {Name: "script file=hi/hi.js", Help: "脚本", Hand: func(m *ice.Message, arg ...string) { nfs.SCRIPT: {Name: "script file=hi/hi.js", Help: "脚本", Hand: func(m *ice.Message, arg ...string) {
m.Option(nfs.PATH, "src/")
m.Cmdy(nfs.DEFS, path.Join(m.Option(nfs.PATH), m.Option(nfs.FILE)), m.Cmdx("", TEMPLATE)) m.Cmdy(nfs.DEFS, path.Join(m.Option(nfs.PATH), m.Option(nfs.FILE)), m.Cmdx("", TEMPLATE))
}}, }},
web.WEBSITE: {Name: "website file=hi.zml", Help: "网页", Hand: func(m *ice.Message, arg ...string) { web.WEBSITE: {Name: "website file=hi.zml", Help: "网页", Hand: func(m *ice.Message, arg ...string) {
m.Option(nfs.PATH, "src/website/")
m.Cmdy(nfs.DEFS, path.Join(m.Option(nfs.PATH), m.Option(nfs.FILE)), m.Cmdx("", TEMPLATE)) m.Cmdy(nfs.DEFS, path.Join(m.Option(nfs.PATH), m.Option(nfs.FILE)), m.Cmdx("", TEMPLATE))
}}, }},
web.DREAM: {Name: "dream name=hi repos", Help: "空间", Hand: func(m *ice.Message, arg ...string) { web.DREAM: {Name: "dream name=hi repos", Help: "空间", Hand: func(m *ice.Message, arg ...string) {
@ -103,9 +96,7 @@ func init() {
XTERM: {Name: "xterm type=sh name text", Help: "终端", Hand: func(m *ice.Message, arg ...string) { XTERM: {Name: "xterm type=sh name text", Help: "终端", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(XTERM, mdb.CREATE, arg) m.Cmdy(XTERM, mdb.CREATE, arg)
}}, }},
FAVOR: {Name: "favor", Help: "收藏", Hand: func(m *ice.Message, arg ...string) { FAVOR: {Name: "favor", Help: "收藏"},
m.Cmdy(FAVOR, arg)
}},
"keyboard": {Name: "keyboard", Help: "远程控制", Hand: func(m *ice.Message, arg ...string) { "keyboard": {Name: "keyboard", Help: "远程控制", Hand: func(m *ice.Message, arg ...string) {
hash := m.Cmdx("web.chat.keyboard", mdb.CREATE, web.SPACE, m.Option(ice.MSG_DAEMON), ctx.INDEX, m.Option(ctx.INDEX), "input", "") hash := m.Cmdx("web.chat.keyboard", mdb.CREATE, web.SPACE, m.Option(ice.MSG_DAEMON), ctx.INDEX, m.Option(ctx.INDEX), "input", "")
@ -113,11 +104,8 @@ func init() {
m.PushQRCode(mdb.TEXT, link) m.PushQRCode(mdb.TEXT, link)
m.Push(mdb.NAME, link) m.Push(mdb.NAME, link)
}}, }},
"_open": {Name: "_open", Help: "索引", Hand: func(m *ice.Message, arg ...string) { "_open": {Name: "_open", Help: "打开", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(cli.DAEMON, "open", "-a", kit.Split(arg[0], ".", ".")[0]) m.Cmd(cli.DAEMON, cli.OPEN, "-a", kit.Split(arg[0], ice.PT, ice.PT)[0])
}},
"listTags": {Name: "listTags", Help: "索引", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy("web.code.vim.tags", "listTags", arg)
}}, }},
cli.MAKE: {Name: "make", Help: "构建", Hand: func(m *ice.Message, arg ...string) { cli.MAKE: {Name: "make", Help: "构建", Hand: func(m *ice.Message, arg ...string) {
_vimer_make(m, m.Option(nfs.PATH), m.Cmd(cli.SYSTEM, cli.MAKE, arg)) _vimer_make(m, m.Option(nfs.PATH), m.Cmd(cli.SYSTEM, cli.MAKE, arg))
@ -145,13 +133,12 @@ func init() {
m.ProcessInner() m.ProcessInner()
}}, }},
AUTOGEN: {Name: "create name=h2 help=示例 type=Zone,Hash,Data,Code main=main.go zone key", Help: "模块", Hand: func(m *ice.Message, arg ...string) { AUTOGEN: {Name: "create name=h2 help=示例 type=Zone,Hash,Data,Code main=main.go zone key", Help: "模块", Hand: func(m *ice.Message, arg ...string) {
m.Option(nfs.PATH, "src/")
m.Cmdy(AUTOGEN, mdb.CREATE, arg) m.Cmdy(AUTOGEN, mdb.CREATE, arg)
}}, }},
COMPILE: {Name: "compile", Help: "编译", Hand: func(m *ice.Message, arg ...string) { COMPILE: {Name: "compile", Help: "编译", Hand: func(m *ice.Message, arg ...string) {
cmds := []string{COMPILE, ice.SRC_MAIN_GO, ice.BIN_ICE_BIN} cmds := []string{COMPILE, ice.SRC_MAIN_GO, ice.BIN_ICE_BIN}
if strings.HasSuffix(os.Args[0], "contexts.app/Contents/MacOS/contexts") { if strings.HasSuffix(os.Args[0], "contexts.app/Contents/MacOS/contexts") {
m.Option(cli.CMD_ENV, kit.Path("usr/local/go/bin")) m.Option(cli.CMD_ENV, nfs.PATH, kit.Path("usr/local/go/bin"))
cmds = []string{cli.SYSTEM, "make", "app"} cmds = []string{cli.SYSTEM, "make", "app"}
} }
if msg := m.Cmd(cmds); cli.IsSuccess(msg) { if msg := m.Cmd(cmds); cli.IsSuccess(msg) {
@ -165,7 +152,7 @@ func init() {
}}, }},
}, Hand: func(m *ice.Message, arg ...string) { }, Hand: func(m *ice.Message, arg ...string) {
if m.Cmdy(INNER, arg); arg[0] != ctx.ACTION { if m.Cmdy(INNER, arg); arg[0] != ctx.ACTION {
m.Action(nfs.SAVE, COMPILE, AUTOGEN, nfs.SCRIPT, chat.WEBSITE, web.DREAM, XTERM) m.Action(nfs.SAVE, COMPILE, AUTOGEN, nfs.SCRIPT, web.WEBSITE, web.DREAM, XTERM)
m.Option("tabs", m.Config("show.tabs")) m.Option("tabs", m.Config("show.tabs"))
m.Option("plug", m.Config("show.plug")) m.Option("plug", m.Config("show.plug"))
m.Option("exts", m.Config("show.exts")) m.Option("exts", m.Config("show.exts"))

View File

@ -77,9 +77,8 @@ func init() {
ctx.ProcessField(m, "", arg, arg...) ctx.ProcessField(m, "", arg, arg...)
}}, }},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch mdb.HashInputs(m, arg).Cmdy(FAVOR, "_xterm", ice.OptionFields(arg[0])).Cut(arg[0]); arg[0] { switch mdb.HashInputs(m, arg).Cmdy(FAVOR, "_system_term", ice.OptionFields(arg[0])).Cut(arg[0]); arg[0] {
case mdb.TYPE: case mdb.TYPE:
m.Debug("what %v ", m.FormatsMeta())
if m.Option(nfs.LINE) != "" && m.Option(nfs.FILE) != "" { if m.Option(nfs.LINE) != "" && m.Option(nfs.FILE) != "" {
m.Push(arg[0], "vim +"+m.Option(nfs.LINE)+" "+m.Option(nfs.PATH)+m.Option(nfs.FILE)) m.Push(arg[0], "vim +"+m.Option(nfs.LINE)+" "+m.Option(nfs.PATH)+m.Option(nfs.FILE))
} }

View File

@ -322,6 +322,7 @@ func init() {
return return
} }
if len(arg) == 0 { if len(arg) == 0 {
web.ToastProcess(m)
m.Action(PULL, MAKE, PUSH, TAGS, PIE, code.PUBLISH) m.Action(PULL, MAKE, PUSH, TAGS, PIE, code.PUBLISH)
files, adds, dels, last := _status_list(m) files, adds, dels, last := _status_list(m)
m.Status("cost", m.FormatCost(), "repos", m.Length(), "files", files, "adds", adds, "dels", dels, "last", last.Format(ice.MOD_TIME)) m.Status("cost", m.FormatCost(), "repos", m.Length(), "files", files, "adds", adds, "dels", dels, "last", last.Format(ice.MOD_TIME))