1
0
forked from x/icebergs

opt vimer

This commit is contained in:
shylinux@163.com 2022-09-19 23:07:20 +08:00
parent 1b21938136
commit 987e84f428
21 changed files with 313 additions and 236 deletions

View File

@ -135,8 +135,8 @@ func init() {
}},
}, Hand: func(m *ice.Message, arg ...string) {
m.Option(SIZE, kit.Select("240", arg, 3))
m.Option(BG, kit.Select(WHITE, arg, 2))
m.Option(FG, kit.Select(BLUE, arg, 1))
m.Option(BG, kit.Select(kit.Select(WHITE, BLACK, m.Option("topic") == BLACK), arg, 2))
m.Option(FG, kit.Select(kit.Select(BLUE, CYAN, m.Option("topic") == BLACK), arg, 1))
if m.IsCliUA() {
_qrcode_cli(m, kit.Select(kit.Select(ice.Info.Make.Domain, ice.Info.Domain), arg, 0))
} else {

View File

@ -173,9 +173,6 @@ func init() {
}
m.Option(CMD_ENV, "COLUMNS", kit.Int(kit.Select("1920", m.Option("width")))/12)
m.Cmdy(SYSTEM, "sh", "-c", kit.Format("man %s %s|col -b", kit.Select("", arg[1], arg[1] != "1"), arg[0]))
if IsSuccess(m) && m.Append(CMD_ERR) == "" {
m.SetAppend()
}
}},
}, Hand: func(m *ice.Message, arg ...string) {
if len(arg) == 0 {

View File

@ -51,6 +51,9 @@ func ProcessHold(m *ice.Message, text ...ice.Any) {
func ProcessRefresh(m *ice.Message) {
m.ProcessRefresh("300ms")
}
func ProcessRewrite(m *ice.Message, arg ...ice.Any) {
m.ProcessRewrite(arg...)
}
func ProcessAction() ice.Actions {
return ice.Actions{

View File

@ -37,7 +37,7 @@ func _mdb_args(m *ice.Message, field string, arg ...Any) []string {
}
for i := 0; i < len(args); i += 2 {
if !strings.Contains(field, args[i]) && !strings.HasPrefix(args[i], EXTRA) {
args[i] = kit.Keys(EXTRA, args[i])
// args[i] = kit.Keys(EXTRA, args[i])
}
}
return args

View File

@ -170,13 +170,15 @@ func ZoneAction(args ...ice.Any) ice.Actions {
func ZoneShort(m *ice.Message) string {
return kit.Select(ZONE, m.Config(SHORT), m.Config(SHORT) != UNIQ)
}
func ZoneField(m *ice.Message) string { return kit.Select(ZONE_FIELD, m.Config(FIELD)) }
func ZoneField(m *ice.Message) string {
return kit.Select(ZONE_FIELD, m.Config(FIELD))
}
func ZoneArgs(m *ice.Message, arg ...Any) []string {
return _mdb_args(m, ZoneField(m), arg...)
}
func ZoneInputs(m *ice.Message, arg ...Any) {
m.Cmdy(INPUTS, m.PrefixKey(), "", ZONE, ZoneArgs(m, arg...))
m.Cmdy(INPUTS, m.PrefixKey(), "", ZONE, m.Option(ZoneShort(m)), ZoneArgs(m, arg...))
}
func ZoneCreate(m *ice.Message, arg ...Any) {
m.Cmdy(INSERT, m.PrefixKey(), "", HASH, arg)

View File

@ -158,6 +158,9 @@ func init() {
}},
}})
}
func IsSourceFile(m *ice.Message, ext string) bool {
return m.Conf(CAT, kit.Keym(SOURCE, ext)) == ice.TRUE
}
func OptionLoad(m *ice.Message, file string) *ice.Message {
if f, e := OpenFile(m, file); e == nil {
defer f.Close()

View File

@ -138,14 +138,13 @@ func init() {
_dream_show(m, m.Option(mdb.NAME))
}},
cli.OPEN: {Name: "open", Help: "打开", Hand: func(m *ice.Message, arg ...string) {
m.ProcessOpen(MergePod(m, m.Option(mdb.NAME), "", ""))
ProcessWebsite(m, m.Option(mdb.NAME), "", "", "")
}},
"vimer": {Name: "vimer", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
m.ProcessOpen(MergePod(m, m.Option(mdb.NAME)+"/cmd/web.code.vimer", "", ""))
ProcessWebsite(m, m.Option(mdb.NAME), "web.code.vimer", "", "")
}},
"xterm": {Name: "xterm", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
m.ProcessOpen(MergePod(m, m.Option(mdb.NAME)+"/cmd/web.code.xterm", mdb.HASH,
m.Cmdx(SPACE, m.Option(mdb.NAME), "web.code.xterm", mdb.CREATE, mdb.TYPE, nfs.SH, mdb.NAME, "xterm")))
ProcessWebsite(m, m.Option(mdb.NAME), "web.code.xterm", mdb.HASH, m.Cmdx(SPACE, m.Option(mdb.NAME), "web.code.xterm", mdb.CREATE, mdb.TYPE, nfs.SH, mdb.NAME, "xterm"))
}},
cli.STOP: {Name: "stop", Help: "停止", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(SPACE, mdb.MODIFY, m.OptionSimple(mdb.NAME), mdb.STATUS, cli.STOP)

View File

@ -51,7 +51,7 @@ func init() {
Index.Register(&ice.Context{Name: C, Help: "系统", Commands: ice.Commands{
C: {Name: C, Help: "系统", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
for _, cmd := range []string{mdb.SEARCH, mdb.ENGINE, mdb.RENDER, mdb.PLUGIN} {
for _, cmd := range []string{mdb.SEARCH, mdb.ENGINE, mdb.RENDER, mdb.PLUGIN, NAVIGATE} {
for _, k := range []string{H, C, CC} {
m.Cmd(cmd, mdb.CREATE, k, m.PrefixKey())
}
@ -80,6 +80,12 @@ func init() {
// _go_find(m, kit.Select(cli.MAIN, arg, 1), arg[2])
// _go_grep(m, kit.Select(cli.MAIN, arg, 1), arg[2])
}},
NAVIGATE: {Name: "navigate", Help: "跳转", Hand: func(m *ice.Message, arg ...string) {
if !nfs.ExistsFile(m, path.Join(m.Option(nfs.PATH), nfs.TAGS)) {
m.Cmd(cli.SYSTEM, "ctags", "-a", "-R", nfs.PWD, kit.Dict(cli.CMD_DIR, m.Option(nfs.PATH)))
}
_inner_tags(m, m.Option(nfs.PATH), m.Option(mdb.NAME))
}},
}, PlugAction())},
MAN: {Name: MAN, Help: "手册", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {

View File

@ -11,14 +11,15 @@ compile.go
publish.go
upgrade.go
xterm.shy
xterm.go
vimer.go
inner.go
oauth.go
favor.go
xterm.go
xterm.shy
inner.go
vimer.go
bench.go
pprof.go
oauth.go
case.go
c.go
sh.go
@ -27,7 +28,3 @@ go.go
js.go
py.go
zml.go
template.go
case.go

View File

@ -20,7 +20,7 @@ func init() {
XTERM: {Name: "xterm", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
ctx.Process(m, m.ActionKey(), append(m.OptionSimple(mdb.TYPE, mdb.NAME), ice.INIT, m.Option(mdb.TEXT)), arg...)
}},
}, mdb.ZoneAction(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) {
if mdb.ZoneSelectPage(m, arg...); len(arg) > 0 && arg[0] != "" {
m.Tables(func(value ice.Maps) {
m.PushButton(kit.Select(INNER, XTERM, value[mdb.TEXT] == "" || value[nfs.FILE] == ""))

View File

@ -75,16 +75,19 @@ func _go_doc(m *ice.Message, mod string, pkg string) *ice.Message {
if mod != "" {
m.Cmd(cli.SYSTEM, "go", "get", mod)
}
if msg := _vimer_go_complete(m.Spawn(), key); msg.Length() > 0 {
_cache_mods[key] = msg
return msg
}
// if msg := _vimer_go_complete(m.Spawn(), key); msg.Length() > 0 {
// _cache_mods[key] = msg
// return msg
// }
return nil
}
func _go_exec(m *ice.Message, arg ...string) {
if m.Option("some") == "run" {
args := []string{"./bin/ice.bin", ctx.GetFileCmd(path.Join(arg[2], arg[1]))}
args := []string{"./bin/ice.bin"}
if cmd := ctx.GetFileCmd(path.Join(arg[2], arg[1])); cmd != "" {
args = append(args, cmd)
}
m.Cmdy(cli.SYSTEM, args)
m.StatusTime("args", kit.Join(args, " "))
return

View File

@ -11,44 +11,34 @@ import (
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/ssh"
"shylinux.com/x/icebergs/base/web"
kit "shylinux.com/x/toolkits"
)
func _inner_list(m *ice.Message, ext, file, dir string, arg ...string) {
if !aaa.Right(m, dir, file) {
return // 没有权限
}
if m.Conf(nfs.CAT, kit.Keym(ssh.SOURCE, ext)) == ice.TRUE {
m.Cmdy(nfs.CAT, path.Join(dir, file))
} else {
_inner_show(m, ext, file, dir, arg...)
if aaa.Right(m, dir, file) {
if nfs.IsSourceFile(m, ext) {
m.Cmdy(nfs.CAT, path.Join(dir, file))
} else {
_inner_show(m, ext, file, dir, arg...)
}
}
}
func _inner_show(m *ice.Message, ext, file, dir string, arg ...string) {
if !aaa.Right(m, dir, file) {
return // 没有权限
if aaa.Right(m, dir, file) {
m.Cmdy(mdb.RENDER, ext, file, dir, arg)
}
m.Cmdy(mdb.RENDER, ext, file, dir, arg)
}
func _inner_exec(m *ice.Message, ext, file, dir string, arg ...string) {
if !aaa.Right(m, dir, file) {
return // 没有权限
}
// defer m.StatusTime()
if m.Cmdy(mdb.ENGINE, ext, file, dir, arg); m.Result() != "" {
return // 执行成功
}
if ls := kit.Simple(m.Configv(kit.Keys(EXEC, ext))); len(ls) > 0 {
m.Cmdy(cli.SYSTEM, ls, file, kit.Dict(cli.CMD_DIR, dir)).SetAppend()
if aaa.Right(m, dir, file) {
m.Cmdy(mdb.ENGINE, ext, file, dir, arg)
}
}
func _inner_make(m *ice.Message, msg *ice.Message) {
func _inner_make(m *ice.Message, dir string, msg *ice.Message) {
for _, line := range strings.Split(msg.Append(cli.CMD_ERR), ice.NL) {
if strings.Contains(line, ice.DF) {
if ls := strings.SplitN(line, ice.DF, 4); len(ls) > 3 {
m.Push(nfs.FILE, strings.TrimPrefix(ls[0], m.Option(nfs.PATH)))
m.Push(nfs.PATH, dir)
m.Push(nfs.FILE, strings.TrimPrefix(ls[0], dir))
m.Push(nfs.LINE, ls[1])
m.Push(mdb.TEXT, ls[3])
}
@ -62,14 +52,12 @@ func _inner_make(m *ice.Message, msg *ice.Message) {
}
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) {
ls := strings.SplitN(l, ice.TB, 2)
if len(ls) < 2 {
ls := strings.SplitN(l, ice.TB, 3)
if len(ls) < 3 {
continue
}
ls = strings.SplitN(ls[1], ice.TB, 2)
file := ls[0]
ls = strings.SplitN(ls[1], ";\"", 2)
file, ls := ls[1], strings.SplitN(ls[2], ";\"", 2)
text := strings.TrimSuffix(strings.TrimPrefix(ls[0], "/^"), "$/")
line := kit.Int(text)
@ -114,16 +102,27 @@ const INNER = "inner"
func init() {
Index.Merge(&ice.Context{Commands: ice.Commands{
INNER: {Name: "inner path=src/@key file=main.go@key line=1 auto", Help: "源代码", Meta: kit.Dict(ice.DisplayLocal("")), Actions: ice.MergeActions(ice.Actions{
INNER: {Name: "inner path=src/@key file=main.go@key line=1 auto", Help: "源代码", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.PrefixKey())
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, ice.SRC_MAIN_GO)
}},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case nfs.PATH:
m.Cmdy(nfs.DIR, arg[1:], nfs.DIR_CLI_FIELDS).ProcessAgain()
case nfs.FILE:
p := kit.Select(nfs.PWD, arg, 1)
m.Option(nfs.DIR_ROOT, m.Option(nfs.PATH))
m.Cmdy(nfs.DIR, kit.Select(path.Dir(p), p, strings.HasSuffix(p, ice.FS))+ice.PS, nfs.DIR_CLI_FIELDS).ProcessAgain()
default:
m.Cmdy(FAVOR, mdb.INPUTS, arg)
}
}},
mdb.PLUGIN: {Name: "plugin", Help: "插件", Hand: func(m *ice.Message, arg ...string) {
if m.Cmdy(mdb.PLUGIN, arg); m.Result() == "" {
m.Echo(kit.Select("{}", m.Config(kit.Keys(PLUG, arg[0]))))
}
m.Set(ice.MSG_STATUS)
}},
mdb.RENDER: {Name: "render", Help: "渲染", Hand: func(m *ice.Message, arg ...string) {
_inner_show(m, arg[0], arg[1], arg[2])
@ -136,33 +135,6 @@ func init() {
_inner_tags(m, "", arg[1])
}
}},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
if m.Option(ctx.ACTION) == web.WEBSITE {
switch arg[0] {
case nfs.FILE:
m.Cmdy(nfs.DIR, nfs.PWD, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_ROOT, "src/website/")).ProcessAgain()
}
return
}
switch arg[0] {
case cli.MAIN:
m.Cmdy(nfs.DIR, ice.SRC, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_REG, `.*\.go`)).ProcessAgain()
case mdb.ZONE:
m.Cmdy(nfs.DIR, nfs.PWD, mdb.NAME, kit.Dict(nfs.DIR_ROOT, ice.SRC, nfs.DIR_TYPE, nfs.DIR)).RenameAppend(mdb.NAME, mdb.ZONE)
case nfs.PATH:
m.Cmdy(nfs.DIR, arg[1:], nfs.DIR_CLI_FIELDS).ProcessAgain()
case nfs.FILE:
p := kit.Select(nfs.PWD, arg, 1)
m.Option(nfs.DIR_ROOT, m.Option(nfs.PATH))
m.Cmdy(nfs.DIR, kit.Select(path.Dir(p), p, strings.HasSuffix(p, ice.FS))+ice.PS, nfs.DIR_CLI_FIELDS).ProcessAgain()
case "url":
m.Option(nfs.DIR_ROOT, "usr/volcanos/plugin/local/code/")
m.Cmdy(nfs.DIR, nfs.PWD, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_DEEP, ice.TRUE)).ProcessAgain()
default:
m.Cmdy(FAVOR, mdb.INPUTS, arg)
}
}},
nfs.GREP: {Name: "grep", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(nfs.GREP, m.Option(nfs.PATH), arg[0]).StatusTimeCount(mdb.INDEX, 0)
@ -173,17 +145,21 @@ func init() {
}
}},
cli.MAKE: {Name: "make", Help: "构建", Hand: func(m *ice.Message, arg ...string) {
_inner_make(m, m.Cmd(cli.SYSTEM, cli.MAKE, arg))
_inner_make(m, m.Option(nfs.PATH), m.Cmd(cli.SYSTEM, cli.MAKE, arg))
}},
"listTags": {Name: "listTags", Help: "索引", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy("web.code.vim.tags", "listTags", arg)
}},
FAVOR: {Name: "favor", Help: "收藏"},
NAVIGATE: {Name: "navigate", Help: "跳转", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(NAVIGATE, kit.Ext(m.Option(mdb.FILE)), m.Option(nfs.FILE), m.Option(nfs.PATH))
}},
FAVOR: {Name: "favor", Help: "收藏"},
}, 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) {
if arg[0] = strings.Split(arg[0], ice.FS)[0]; !strings.HasSuffix(arg[0], ice.PS) && len(arg) == 1 {
arg[1] = kit.Slice(strings.Split(arg[0], ice.PS), -1)[0]
arg[0] = strings.TrimSuffix(arg[0], arg[1])
m.ProcessRewrite(nfs.PATH, arg[0], nfs.FILE, arg[1])
ctx.ProcessRewrite(m, nfs.PATH, arg[0], nfs.FILE, arg[1])
return
}
if len(arg) < 2 {
@ -205,29 +181,9 @@ func init() {
m.Option("exts", m.Config("show.exts"))
arg[1] = strings.Split(arg[1], ice.FS)[0]
if _inner_list(m, kit.Ext(arg[1]), arg[1], arg[0]); m.IsErrNotFound() {
m.SetResult("")
}
_inner_list(m, kit.Ext(arg[1]), arg[1], arg[0])
ctx.DisplayLocal(m, "")
m.Set(ice.MSG_STATUS)
}},
}, Configs: ice.Configs{
INNER: {Name: "inner", Help: "源代码", Value: kit.Data(
EXEC, kit.Dict("py", []string{"python"}),
PLUG, kit.Dict(
"S", kit.Dict(PREFIX, kit.Dict("//", COMMENT)),
"s", kit.Dict(PREFIX, kit.Dict("//", COMMENT), KEYWORD, kit.Dict("TEXT", KEYWORD, "RET", KEYWORD)),
"py", kit.Dict(PREFIX, kit.Dict("#", COMMENT), KEYWORD, kit.Dict("print", KEYWORD)),
nfs.HTML, kit.Dict(SPLIT, kit.Dict(SPACE, " ", OPERATE, "<>"), KEYWORD, kit.Dict("head", KEYWORD, "body", KEYWORD)),
nfs.CSS, kit.Dict(SUFFIX, kit.Dict("{", COMMENT)),
"yaml", kit.Dict(PREFIX, kit.Dict("#", COMMENT)),
"yml", kit.Dict(PREFIX, kit.Dict("#", COMMENT)),
"makefile", kit.Dict(PREFIX, kit.Dict("#", COMMENT), SUFFIX, kit.Dict(":", COMMENT),
KEYWORD, kit.Dict("ifeq", KEYWORD, "ifneq", KEYWORD, "else", KEYWORD, "endif", KEYWORD),
),
),
)},
}})
}
func PlugAction() ice.Actions {

View File

@ -5,7 +5,6 @@ import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/gdb"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
kit "shylinux.com/x/toolkits"
@ -40,9 +39,9 @@ func init() {
})
m.Cmd(mdb.ENGINE, mdb.CREATE, PY, m.PrefixKey())
m.Cmd(mdb.RENDER, mdb.CREATE, PY, m.PrefixKey())
gdb.Watch(m, VIMER_TEMPLATE)
m.Cmd(TEMPLATE, mdb.CREATE, m.CommandKey(), m.PrefixKey())
}},
VIMER_TEMPLATE: {Hand: func(m *ice.Message, arg ...string) {
TEMPLATE: {Hand: func(m *ice.Message, arg ...string) {
if kit.Ext(m.Option(mdb.FILE)) != m.CommandKey() {
return
}

View File

@ -6,7 +6,6 @@ import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/gdb"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
kit "shylinux.com/x/toolkits"
@ -67,9 +66,9 @@ func init() {
m.Cmd(cmd, mdb.CREATE, m.CommandKey(), m.PrefixKey())
}
LoadPlug(m, m.CommandKey())
gdb.Watch(m, VIMER_TEMPLATE)
m.Cmd(TEMPLATE, mdb.CREATE, m.CommandKey(), m.PrefixKey())
}},
VIMER_TEMPLATE: {Hand: func(m *ice.Message, arg ...string) {
TEMPLATE: {Hand: func(m *ice.Message, arg ...string) {
if kit.Ext(m.Option(mdb.FILE)) != m.CommandKey() {
return
}

View File

@ -7,7 +7,6 @@ import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/gdb"
"shylinux.com/x/icebergs/base/mdb"
kit "shylinux.com/x/toolkits"
)
@ -42,9 +41,9 @@ func init() {
m.Cmd(cmd, mdb.CREATE, SHY, m.PrefixKey())
}
LoadPlug(m, SHY)
gdb.Watch(m, VIMER_TEMPLATE)
m.Cmd(TEMPLATE, mdb.CREATE, m.CommandKey(), m.PrefixKey())
}},
VIMER_TEMPLATE: {Hand: func(m *ice.Message, arg ...string) {
TEMPLATE: {Hand: func(m *ice.Message, arg ...string) {
if kit.Ext(m.Option(mdb.FILE)) != m.CommandKey() {
return
}

View File

@ -7,7 +7,6 @@ import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/gdb"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/web"
@ -55,94 +54,60 @@ func _vimer_inputs(m *ice.Message, arg ...string) {
}
}
}
func _vimer_go_complete(m *ice.Message, name string, arg ...string) *ice.Message {
kit.Fetch(kit.Split(m.Cmdx(cli.SYSTEM, GO, "doc", name), ice.NL, ice.NL, ice.NL), func(index int, value string) {
if ls := kit.Split(value); len(ls) > 1 {
switch ls[0] {
case "const", "type", "func", "var":
if ls[1] == "(" {
m.Push(mdb.NAME, strings.TrimSpace(ls[5]))
} else {
m.Push(mdb.NAME, strings.TrimSpace(ls[1]))
}
m.Push(mdb.TEXT, strings.TrimSpace(value))
}
}
})
return m
}
const (
VIMER_TEMPLATE = "vimer.template"
VIMER_COMPLETE = "vimer.complete"
)
const VIMER = "vimer"
func init() {
Index.MergeCommands(ice.Commands{
VIMER: {Name: "vimer path=src/ file=main.go line=1 list", Help: "编辑器", Meta: kit.Dict(ice.DisplayLocal("", INNER)), Actions: ice.Actions{
mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
if arg[0] == mdb.FOREACH && arg[1] == "" {
m.PushSearch(mdb.TYPE, "go", mdb.NAME, "src/main.go", mdb.TEXT, chat.MergeCmd(m, ""))
VIMER: {Name: "vimer path=src/ file=main.go line=1 list", Help: "编辑器", Actions: ice.Actions{
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case nfs.FILE:
m.Cmdy(COMPLETE, mdb.FOREACH, arg[1], m.Option(ctx.ACTION))
}
if m.Option(ctx.ACTION) == web.WEBSITE {
switch arg[0] {
case nfs.FILE:
m.Cmdy(nfs.DIR, nfs.PWD, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_ROOT, "src/website/")).ProcessAgain()
}
return
}
switch arg[0] {
case cli.MAIN:
m.Cmdy(nfs.DIR, ice.SRC, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_REG, `.*\.go`)).ProcessAgain()
case mdb.ZONE:
m.Cmdy(nfs.DIR, nfs.PWD, mdb.NAME, kit.Dict(nfs.DIR_ROOT, ice.SRC, nfs.DIR_TYPE, nfs.DIR)).RenameAppend(mdb.NAME, mdb.ZONE)
case "url":
m.Option(nfs.DIR_ROOT, "usr/volcanos/plugin/local/code/")
m.Cmdy(nfs.DIR, nfs.PWD, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_DEEP, ice.TRUE)).ProcessAgain()
default:
_vimer_inputs(m, arg...)
}
}},
nfs.SAVE: {Name: "save type file path", Help: "保存", Hand: func(m *ice.Message, arg ...string) {
if m.Option(nfs.CONTENT) == "" {
m.Option(nfs.CONTENT, gdb.Event(m.Spawn(), VIMER_TEMPLATE).Result())
m.Option(nfs.CONTENT, m.Cmdx(TEMPLATE, m.Option(mdb.TYPE), m.Option(nfs.FILE), m.Option(nfs.PATH)))
}
m.Cmdy(nfs.SAVE, path.Join(m.Option(nfs.PATH), m.Option(nfs.FILE)))
}},
nfs.TRASH: {Name: "trash path", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(nfs.TRASH, arg[0])
}},
COMPILE: {Name: "compile", Help: "编译", Hand: func(m *ice.Message, arg ...string) {
if msg := m.Cmd(COMPILE, ice.SRC_MAIN_GO, ice.BIN_ICE_BIN); cli.IsSuccess(msg) {
m.Cmd(UPGRADE, cli.RESTART)
} else {
_inner_make(m, msg)
}
}},
AUTOGEN: {Name: "create name=hi help=示例 type=Zone,Hash,Data,Code main=main.go zone key", Help: "模块", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(AUTOGEN, mdb.CREATE, arg)
}},
nfs.SCRIPT: {Name: "script file=hi/hi.js", Help: "脚本", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(nfs.DEFS, path.Join(m.Option(nfs.PATH), m.Option(nfs.FILE)), m.Cmdx(TEMPLATE, kit.Ext(m.Option(nfs.FILE)), m.Option(nfs.FILE), m.Option(nfs.PATH)))
}},
web.WEBSITE: {Name: "website file=hi.zml", Help: "网页", Hand: func(m *ice.Message, arg ...string) {
if m.Option(mdb.TEXT) == "" {
m.Option(mdb.TEXT, gdb.Event(m.Spawn(), VIMER_TEMPLATE).Result())
}
m.Option(nfs.FILE, path.Join(web.WEBSITE, m.Option(nfs.FILE)))
m.Cmdy(TEMPLATE, nfs.DEFS)
m.Cmdy(nfs.DEFS, path.Join(m.Option(nfs.PATH), m.Option(nfs.FILE)), m.Cmdx(TEMPLATE, kit.Ext(m.Option(nfs.FILE)), m.Option(nfs.FILE), m.Option(nfs.PATH)))
}},
web.DREAM: {Name: "dream name=hi repos", Help: "空间", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(web.DREAM, cli.START, arg)
}},
XTERM: {Name: "xterm type=sh name", Help: "终端", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(XTERM, mdb.CREATE, arg)
}},
PUBLISH: {Name: "publish", Help: "发布", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(PUBLISH, ice.CONTEXTS)
}},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case nfs.FILE:
m.Cmdy(COMPLETE, mdb.FOREACH, arg[1], m.Option(ctx.ACTION))
}
_vimer_inputs(m, arg...)
AUTOGEN: {Name: "create name=hi help=示例 type=Zone,Hash,Data,Code main=main.go zone key", Help: "模块", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(AUTOGEN, mdb.CREATE, arg)
}},
TEMPLATE: {Name: "template", Help: "模板", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(TEMPLATE, kit.Ext(m.Option(mdb.FILE)), m.Option(nfs.FILE), m.Option(nfs.PATH))
}},
COMPLETE: {Name: "complete", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(COMPLETE, kit.Ext(m.Option(mdb.FILE)), m.Option(nfs.FILE), m.Option(nfs.PATH))
}},
"listTags": {Name: "listTags", Help: "索引", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy("web.code.vim.tags", "listTags", arg)
}},
DEVPACK: {Name: "devpack", Help: "开发模式", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(nfs.LINK, ice.GO_SUM, path.Join(ice.SRC_DEBUG, ice.GO_SUM))
m.Cmd(nfs.LINK, ice.GO_MOD, path.Join(ice.SRC_DEBUG, ice.GO_MOD))
@ -157,6 +122,26 @@ func init() {
m.ProcessInner()
web.ToastSuccess(m)
}},
COMPILE: {Name: "compile", Help: "编译", Hand: func(m *ice.Message, arg ...string) {
if msg := m.Cmd(COMPILE, ice.SRC_MAIN_GO, ice.BIN_ICE_BIN); cli.IsSuccess(msg) {
m.Cmd(UPGRADE, cli.RESTART)
} else {
_inner_make(m, nfs.PWD, msg)
}
}},
PUBLISH: {Name: "publish", Help: "发布", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(PUBLISH, ice.CONTEXTS)
}},
TEMPLATE: {Name: "template", Help: "模板", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(TEMPLATE, kit.Ext(m.Option(mdb.FILE)), m.Option(nfs.FILE), m.Option(nfs.PATH))
}},
COMPLETE: {Name: "complete", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(COMPLETE, kit.Ext(m.Option(mdb.FILE)), m.Option(nfs.FILE), m.Option(nfs.PATH))
}},
XTERM: {Name: "xterm type=sh name", Help: "终端", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(XTERM, mdb.CREATE, arg)
}},
}, Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(INNER, arg)
m.Option("tabs", m.Config("show.tabs"))
@ -164,20 +149,22 @@ func init() {
m.Option("exts", m.Config("show.exts"))
if arg[0] != ctx.ACTION {
ctx.DisplayLocal(m, "")
m.Action(nfs.SAVE, COMPILE, AUTOGEN, nfs.SCRIPT, chat.WEBSITE, web.DREAM, XTERM)
ctx.DisplayLocal(m, "")
}
}},
})
}
func ProcessVimer(m *ice.Message, path, file, line string, arg ...string) {
ctx.ProcessField(m, Prefix(VIMER), kit.Simple(path, file, line), arg...)
}
const TEMPLATE = "template"
const COMPLETE = "complete"
const NAVIGATE = "navigate"
func init() {
Index.MergeCommands(ice.Commands{TEMPLATE: {Name: "template type name text auto", Help: "模板", Actions: mdb.RenderAction()}})
Index.MergeCommands(ice.Commands{COMPLETE: {Name: "complete type name text auto", Help: "补全", Actions: mdb.RenderAction()}})
Index.MergeCommands(ice.Commands{NAVIGATE: {Name: "navigate type name text auto", Help: "跳转", Actions: mdb.RenderAction()}})
}
func Complete(m *ice.Message, text string, data ice.Map) {
if strings.HasSuffix(text, ".") {
key := kit.Slice(kit.Split(text, " ."), -1)[0]
@ -188,42 +175,4 @@ func Complete(m *ice.Message, text string, data ice.Map) {
m.Push(mdb.TEXT, k)
}
}
return
if strings.TrimSpace(text) == "" {
m.Push(mdb.TEXT, kit.Simple(data[""]))
return
}
name := kit.Slice(kit.Split(text), -1)[0]
if name == "" {
m.Push(mdb.TEXT, kit.Simple(data[""]))
return
}
key := kit.Slice(kit.Split(name, "."), -1)[0]
if strings.HasSuffix(name, ".") {
m.Push(mdb.TEXT, kit.Simple(data[key]))
} else {
for k := range data {
if strings.HasPrefix(k, key) {
m.Push(mdb.TEXT, key)
}
}
list := kit.Simple(data[key])
for i, v := range list {
list[i] = "." + v
}
m.Push(mdb.TEXT, list)
}
}
func init() {
Index.MergeCommands(ice.Commands{COMPLETE: {Name: "complete type name text auto", Help: "补全", Actions: mdb.RenderAction()}})
}
func init() {
Index.MergeCommands(ice.Commands{TEMPLATE: {Name: "template type name text auto", Help: "模板", Actions: mdb.RenderAction()}})
}
func init() {
Index.MergeCommands(ice.Commands{NAVIGATE: {Name: "navigate type name text auto", Help: "跳转", Actions: mdb.RenderAction()}})
}

View File

@ -103,7 +103,7 @@ func init() {
web.WEBSITE: {Name: "website", Help: "打开", Hand: func(m *ice.Message, arg ...string) {
web.ProcessWebsite(m, "", "", m.OptionSimple(mdb.HASH))
}},
}, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text,init", mdb.TOOLS, FAVOR), ctx.CmdAction(), ctx.ProcessAction()), Hand: func(m *ice.Message, arg ...string) {
}, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text,init", mdb.TOOLS, FAVOR), ctx.ProcessAction()), Hand: func(m *ice.Message, arg ...string) {
if mdb.HashSelect(m, arg...); len(arg) == 0 {
m.PushAction(web.WEBSITE, mdb.REMOVE)
m.Action(mdb.CREATE, mdb.PRUNES)

View File

@ -6,7 +6,6 @@ import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/gdb"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/core/chat"
@ -28,10 +27,10 @@ func init() {
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
m.Cmd(mdb.RENDER, mdb.CREATE, nfs.ZML, m.PrefixKey())
m.Cmd(mdb.ENGINE, mdb.CREATE, nfs.ZML, m.PrefixKey())
gdb.Watch(m, VIMER_TEMPLATE)
gdb.Watch(m, VIMER_COMPLETE)
m.Cmd(TEMPLATE, mdb.CREATE, m.CommandKey(), m.PrefixKey())
m.Cmd(COMPLETE, mdb.CREATE, m.CommandKey(), m.PrefixKey())
}},
VIMER_TEMPLATE: {Hand: func(m *ice.Message, arg ...string) {
TEMPLATE: {Hand: func(m *ice.Message, arg ...string) {
switch kit.Ext(m.Option(mdb.FILE)) {
case ZML:
m.Echo(`
@ -70,7 +69,7 @@ func init() {
`)
}
}},
VIMER_COMPLETE: {Hand: func(m *ice.Message, arg ...string) {
COMPLETE: {Hand: func(m *ice.Message, arg ...string) {
switch kit.Select("", kit.Slice(kit.Split(m.Option(mdb.TEXT), "\t \n`"), -1), 0) {
case mdb.TYPE:
m.Push(mdb.NAME, "menu")

View File

@ -78,6 +78,7 @@ func _field_show(m *ice.Message, name, text string, arg ...string) {
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, kit.Keys(FEATURE, "display"), "/plugin/local/code/inner.js")
kit.Value(meta, ARGS, kit.List(path.Dir(name)+ice.PS, path.Base(name)))
}

View File

@ -2,6 +2,7 @@ package wiki
import (
"path"
"strings"
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/aaa"
@ -25,7 +26,7 @@ const WORD = "word"
func init() {
Index.Merge(&ice.Context{Configs: ice.Configs{
WORD: {Name: WORD, Help: "语言文字", Value: kit.Data(
WORD: {Name: WORD, Help: "笔记文档", Value: kit.Data(
nfs.PATH, "", lex.REGEXP, ".*\\.shy", mdb.ALIAS, kit.Dict(
NAVMENU, kit.List(TITLE, NAVMENU),
PREMENU, kit.List(TITLE, PREMENU),
@ -40,7 +41,7 @@ func init() {
mdb.FIELD, "time,hash,type,name,text",
)},
}, Commands: ice.Commands{
WORD: {Name: "word path=src/main.shy@key list play", Help: "语言文字", Actions: ice.MergeActions(ice.Actions{
WORD: {Name: "word path=src/main.shy@key list play", Help: "笔记文档", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.PrefixKey())
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, ice.SRC_MAIN_SHY)
@ -57,6 +58,11 @@ func init() {
m.PushSearch(value)
}
})
m.Cmd("", mdb.INPUTS).Tables(func(value ice.Maps) {
if strings.Contains(value[nfs.PATH], arg[1]) {
m.PushSearch(mdb.TYPE, "shy", mdb.NAME, value[nfs.PATH], value)
}
})
}},
mdb.CREATE: {Name: "create", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(mdb.INSERT, m.PrefixKey(), "", mdb.HASH, arg)

View File

@ -6,10 +6,170 @@ refer `
`
chapter "源码"
field "下载" web.code.tmux.tmux
field "源码" web.code.inner args `usr/install/tmux-3.2/ cmd-bind-key.c`
field "终端" web.code.tmux.tmux
field "源码" web.code.ctags.inner args `usr/install/tmux-3.2/ cmd-bind-key.c`
field "文档" web.code.ctags.nroff args `usr/install/tmux-3.2/ tmux.1`
field "计数" web.code.git.count args `usr/install/tmux-3.2/`
option ctags.path `usr/install/tmux-3.2/`
web.code.ctags.chain `
tmux
tmux.c
tmux.h
client.c
server.c
server-client.c
server-fn.c
session.c
window.c
window-buffer.c
window-client.c
window-clock.c
window-copy.c
window-customize.c
window-tree.c
layout.c
layout-custom.c
layout-set.c
status.c
popup.c
menu.c
mode-tree.c
names.c
screen.c
screen-redraw.c
screen-write.c
grid-reader.c
grid-view.c
attributes.c
grid.c
resize.c
arguments.c
environ.c
options.c
options-table.c
control.c
control-notify.c
notify.c
paste.c
alerts.c
input.c
input-keys.c
key-string.c
key-bindings.c
tty.c
tty-acs.c
tty-keys.c
tty-term.c
tty-features.c
compat
compat.h
cfg.c
log.c
job.c
file.c
proc.c
spawn.c
utf8.c
regsub.c
style.c
colour.c
format.c
format-draw.c
xmalloc.c
xmalloc.h
osdep-aix.c
osdep-cygwin.c
osdep-darwin.c
osdep-dragonfly.c
osdep-freebsd.c
osdep-haiku.c
osdep-hpux.c
osdep-linux.c
osdep-netbsd.c
osdep-openbsd.c
osdep-sunos.c
osdep-unknown.c
cmd.c
cmd-attach-session.c
cmd-bind-key.c
cmd-break-pane.c
cmd-capture-pane.c
cmd-choose-tree.c
cmd-command-prompt.c
cmd-confirm-before.c
cmd-copy-mode.c
cmd-detach-client.c
cmd-display-menu.c
cmd-display-message.c
cmd-display-panes.c
cmd-find.c
cmd-find-window.c
cmd-if-shell.c
cmd-join-pane.c
cmd-kill-pane.c
cmd-kill-server.c
cmd-kill-session.c
cmd-kill-window.c
cmd-list-buffers.c
cmd-list-clients.c
cmd-list-keys.c
cmd-list-panes.c
cmd-list-sessions.c
cmd-list-windows.c
cmd-load-buffer.c
cmd-lock-server.c
cmd-move-window.c
cmd-new-session.c
cmd-new-window.c
cmd-parse.y
cmd-paste-buffer.c
cmd-pipe-pane.c
cmd-queue.c
cmd-refresh-client.c
cmd-rename-session.c
cmd-rename-window.c
cmd-resize-pane.c
cmd-resize-window.c
cmd-respawn-pane.c
cmd-respawn-window.c
cmd-rotate-window.c
cmd-run-shell.c
cmd-save-buffer.c
cmd-select-layout.c
cmd-select-pane.c
cmd-select-window.c
cmd-send-keys.c
cmd-set-buffer.c
cmd-set-environment.c
cmd-set-option.c
cmd-show-environment.c
cmd-show-messages.c
cmd-show-options.c
cmd-source-file.c
cmd-split-window.c
cmd-swap-pane.c
cmd-swap-window.c
cmd-switch-client.c
cmd-unbind-key.c
cmd-wait-for.c
`
section "构建"
refer `
https://github.com/libevent/libevent
https://invisible-mirror.net/archives/ncurses/
`
shell `
yum install -y wget make gcc
yum install -y libevent-devel.x86_64 ncurses-devel.x86_64
@ -33,4 +193,3 @@ field "文本" web.code.tmux.text
field "缓存" web.code.tmux.buffer
field "脚本" web.code.tmux.script
field "会话" web.code.tmux.session