1
0
forked from x/icebergs
This commit is contained in:
shylinux@163.com 2022-09-16 18:27:43 +08:00
parent be9e03a440
commit 276c97a050
5 changed files with 55 additions and 48 deletions

View File

@ -3,6 +3,7 @@ package code
import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/web"
kit "shylinux.com/x/toolkits"
)
const CODE = "code"
@ -16,3 +17,5 @@ func init() {
C, SH, SHY, GO, JS,
)
}
func Prefix(arg ...string) string { return kit.Keys(web.WEB, CODE, arg) }

View File

@ -12,6 +12,7 @@ import (
"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"
)
@ -131,27 +132,12 @@ 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])
if m.Length() == 0 {
if _inner_tags(m, m.Option(nfs.PATH), arg[1]); m.Length() == 0 {
_inner_tags(m, "", arg[1])
}
return
m.Option(nfs.DIR_ROOT, arg[2])
m.Option(cli.CMD_DIR, kit.Path(arg[2]))
m.Cmdy(mdb.SEARCH, arg[0], arg[1], arg[2])
m.Cmd(FAVOR, arg[1], ice.OptionFields(""), func(value ice.Maps) {
if p := path.Join(value[nfs.PATH], value[nfs.FILE]); strings.HasPrefix(p, m.Option(nfs.PATH)) {
m.Push(nfs.FILE, strings.TrimPrefix(p, m.Option(nfs.PATH)))
m.Push(nfs.LINE, value[nfs.LINE])
m.Push(mdb.TEXT, value[mdb.TEXT])
}
})
if m.StatusTimeCount(mdb.INDEX, 0); m.Length() == 0 {
m.Cmdy(INNER, nfs.GREP, arg[1])
}
}},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
if m.Option(ctx.ACTION) == "website" {
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()
@ -163,16 +149,13 @@ func init() {
case cli.MAIN:
m.Cmdy(nfs.DIR, ice.SRC, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_REG, `.*\.go`)).ProcessAgain()
case mdb.ZONE:
m.Option(nfs.DIR_ROOT, ice.SRC)
m.Option(nfs.DIR_TYPE, nfs.DIR)
m.Cmdy(nfs.DIR, nfs.PWD, mdb.NAME).RenameAppend(mdb.NAME, 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)
m.ProcessAgain()
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()
@ -182,8 +165,7 @@ func init() {
}},
nfs.GREP: {Name: "grep", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(nfs.GREP, m.Option(nfs.PATH), arg[0])
m.StatusTimeCount(mdb.INDEX, 0)
m.Cmdy(nfs.GREP, m.Option(nfs.PATH), arg[0]).StatusTimeCount(mdb.INDEX, 0)
}},
nfs.TAGS: {Name: "tags", Help: "索引", Hand: func(m *ice.Message, arg ...string) {
if _inner_tags(m, m.Option(nfs.PATH), arg[0]); m.Length() == 0 {
@ -215,9 +197,9 @@ func init() {
m.Option("keys", list)
m.Option("module", ice.Info.Make.Module)
m.Option("tabs", m.Config("show.tabs"))
m.Option("plug", m.Config("show.plug"))
m.Option("exts", m.Config("show.exts"))
m.Option("tabs", m.Config("show.tabs"))
arg[1] = strings.Split(arg[1], ice.FS)[0]
if _inner_list(m, kit.Ext(arg[1]), arg[1], arg[0]); m.IsErrNotFound() {
@ -245,7 +227,6 @@ func init() {
)},
}})
}
func PlugAction() ice.Actions {
return ice.Actions{
mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) { m.Echo(m.Config(PLUG)) }},

View File

@ -91,6 +91,8 @@ func _vimer_inputs(m *ice.Message, arg ...string) {
m.Cmdy(web.DREAM, mdb.INPUTS, arg)
case AUTOGEN:
m.Cmdy(AUTOGEN, mdb.INPUTS, arg)
case XTERM:
m.Cmdy(XTERM, mdb.INPUTS, arg)
default:
switch arg[0] {
case ctx.INDEX:
@ -105,7 +107,6 @@ func _vimer_inputs(m *ice.Message, arg ...string) {
}
}
}
func _vimer_complete(m *ice.Message, arg ...string) {
switch left := kit.Select("", kit.Slice(kit.Split(m.Option(mdb.TEXT), "\t \n`"), -1), 0); kit.Ext(m.Option(nfs.FILE)) {
case nfs.ZML:
@ -156,11 +157,27 @@ func _vimer_go_complete(m *ice.Message, name string, arg ...string) *ice.Message
return m
}
const (
VIMER_TEMPLATE = "vimer.template"
VIMER_COMPLETE = "vimer.complete"
COMPLETE = "complete"
// TEMPLATE = "template"
)
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, ""))
}
}},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
_vimer_inputs(m, arg...)
}},
nfs.SAVE: {Name: "save type file path", Help: "保存", Hand: func(m *ice.Message, arg ...string) {
m.Option(nfs.CONTENT, kit.Select(_vimer_defs(m, kit.Ext(m.Option(nfs.FILE))), m.Option(nfs.CONTENT)))
m.Cmdy(nfs.SAVE, path.Join(m.Option(nfs.PATH), m.Option(nfs.FILE)))
@ -168,9 +185,7 @@ func init() {
nfs.TRASH: {Name: "trash path", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(nfs.TRASH, arg[0])
}},
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)
}},
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)
@ -178,6 +193,9 @@ func init() {
_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.Option(mdb.TEXT, strings.TrimSpace(kit.Select(_vimer_defs(m, kit.Ext(m.Option(nfs.FILE))), m.Option(mdb.TEXT))))
m.Cmdy(TEMPLATE, nfs.DEFS)
@ -190,28 +208,23 @@ func init() {
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.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, ""))
}
TEMPLATE: {Name: "template", Help: "模板", Hand: func(m *ice.Message, arg ...string) {
// _vimer_template(m, arg...)
}},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
_vimer_inputs(m, arg...)
}},
"complete": {Name: "complete", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
COMPLETE: {Name: "complete", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
_vimer_complete(m, arg...)
}},
"listTags": {Name: "listTags", Help: "索引", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy("web.code.vim.tags", "listTags", arg)
}},
"unpack": {Name: "unpack", Help: "导出文件", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(BINPACK, mdb.EXPORT)
}},
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))
@ -228,16 +241,17 @@ func init() {
}},
}, Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(INNER, arg)
m.Option("tabs", m.Config("show.tabs"))
m.Option("plug", m.Config("show.plug"))
m.Option("exts", m.Config("show.exts"))
m.Option("tabs", m.Config("show.tabs"))
if arg[0] != ctx.ACTION {
ctx.DisplayLocal(m, "")
m.Action(nfs.SAVE, COMPILE, AUTOGEN, nfs.SCRIPT, chat.WEBSITE, web.DREAM)
m.Action(nfs.SAVE, COMPILE, AUTOGEN, nfs.SCRIPT, chat.WEBSITE, web.DREAM, XTERM)
}
}},
})
}
func ProcessVimer(m *ice.Message, path, file, line string, arg ...string) {
ctx.ProcessField(m, "web.code.vimer", kit.Simple(path, file, line), arg...)
ctx.ProcessField(m, Prefix(VIMER), kit.Simple(path, file, line), arg...)
}

View File

@ -30,7 +30,6 @@ func _xterm_get(m *ice.Message, h string) _xterm {
return mdb.HashTarget(m, h, func() ice.Any {
ls := kit.Split(kit.Select(nfs.SH, t))
cmd := exec.Command(cli.SystemFind(m, ls[0]), ls[1:]...)
cmd.Env = append(os.Environ(), "TERM=xterm")
tty, err := pty.Start(cmd)
m.Assert(err)
@ -66,7 +65,8 @@ func init() {
}
}},
mdb.CREATE: {Name: "create type=sh name", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
mdb.HashCreate(m.Spawn(), mdb.NAME, m.Option(mdb.TYPE), m.OptionSimple(mdb.TYPE, mdb.NAME))
mdb.HashCreate(m, mdb.NAME, kit.Split(m.Option(mdb.TYPE))[0], m.OptionSimple(mdb.TYPE, mdb.NAME))
m.ProcessRefresh3ms()
}},
"resize": {Name: "resize", Help: "大小", Hand: func(m *ice.Message, arg ...string) {
pty.Setsize(_xterm_get(m, m.Option(mdb.HASH)).File, &pty.Winsize{Rows: uint16(kit.Int(m.Option("rows"))), Cols: uint16(kit.Int(m.Option("cols")))})
@ -97,7 +97,7 @@ func init() {
func ProcessXterm(m *ice.Message, args []string, arg ...string) {
if len(arg) == 0 || arg[0] != ice.RUN {
args = []string{m.Cmdx("web.code.xterm", mdb.CREATE, args)}
args = []string{m.Cmdx(Prefix(XTERM), mdb.CREATE, args)}
}
ctx.ProcessField(m, "web.code.xterm", args, arg...)
ctx.ProcessField(m, Prefix(XTERM), args, arg...)
}

View File

@ -104,6 +104,15 @@ func init() {
})
case "qrcode":
m.Echo(`!curl "localhost:9020/code/bash/qrcode?text=%s"`, args[1])
default:
switch kit.Ext(m.Option(BUF)) {
case "js":
ls := kit.Split(args[len(args)-1], ".", ".")
switch ls[0] {
case "chat":
}
}
}
}},
}, Hand: func(m *ice.Message, arg ...string) {