forked from x/icebergs
opt xterm
This commit is contained in:
parent
276c97a050
commit
1b21938136
@ -250,16 +250,6 @@ func init() {
|
||||
}
|
||||
m.StatusTimeCount()
|
||||
}},
|
||||
"stats": {Name: "stats", Help: "环境变量", Hand: func(m *ice.Message, arg ...string) {
|
||||
var ms runtime.MemStats
|
||||
runtime.ReadMemStats(&ms)
|
||||
m.Echo("what %#v", ms)
|
||||
m.Echo("what %#v", kit.FmtSize(int64(ms.Alloc)))
|
||||
m.Echo("what %#v", kit.FmtSize(int64(ms.TotalAlloc)))
|
||||
m.Echo("what %#v", kit.FmtSize(int64(ms.Sys)))
|
||||
m.Echo("what %#v", kit.FmtSize(int64(ms.HeapAlloc)))
|
||||
m.Echo("what %#v", kit.FmtSize(int64(ms.HeapSys)))
|
||||
}},
|
||||
MAKE_DOMAIN: {Name: "make.domain", Help: "编译主机", Hand: func(m *ice.Message, arg ...string) {
|
||||
if os.Getenv(CTX_DEV) == "" || os.Getenv(CTX_POD) == "" {
|
||||
m.Echo(m.Conf(RUNTIME, MAKE_DOMAIN))
|
||||
|
@ -104,7 +104,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(kit.Select(out.String(), err.String())); IsSuccess(m) && out.String() == "" {
|
||||
if m.Echo(strings.TrimRight(kit.Select(out.String(), err.String()), ice.NL)); IsSuccess(m) && out.String() == "" {
|
||||
m.SetAppend()
|
||||
}
|
||||
}()
|
||||
|
@ -155,20 +155,6 @@ func CmdAction(args ...ice.Any) ice.Actions {
|
||||
}},
|
||||
}
|
||||
}
|
||||
func ProcessFloat(m *ice.Message, arg ...string) {
|
||||
m.Option(ice.MSG_PROCESS, "_float")
|
||||
m.Option(ice.PROCESS_ARG, arg)
|
||||
m.Cmdy(COMMAND, arg[0])
|
||||
}
|
||||
func ProcessField(m *ice.Message, cmd string, args []string, arg ...string) {
|
||||
if len(arg) > 0 && arg[0] == ice.RUN {
|
||||
m.Cmdy(cmd, arg[1:])
|
||||
} else {
|
||||
if m.Cmdy(COMMAND, cmd).ProcessField(m.ActionKey(), ice.RUN); len(args) > 0 {
|
||||
m.Push(ARGS, kit.Format(args))
|
||||
}
|
||||
}
|
||||
}
|
||||
func PodCmd(m *ice.Message, arg ...ice.Any) bool {
|
||||
if pod := m.Option(ice.POD); pod != "" {
|
||||
if m.Option(ice.POD, ""); m.Option(ice.MSG_UPLOAD) != "" {
|
||||
|
@ -5,6 +5,7 @@ import (
|
||||
"strings"
|
||||
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
|
||||
@ -58,3 +59,6 @@ func DisplayBase(m *ice.Message, file string, arg ...ice.Any) *ice.Message {
|
||||
m.Option(ice.MSG_DISPLAY, kit.MergeURL(ice.DisplayBase(file)[ice.DISPLAY], arg...))
|
||||
return m
|
||||
}
|
||||
func Toolkit(m *ice.Message, arg ...string) {
|
||||
m.Option(ice.MSG_TOOLKIT, kit.Select(m.Config(mdb.TOOLS), kit.Fields(arg)))
|
||||
}
|
||||
|
64
base/ctx/process.go
Normal file
64
base/ctx/process.go
Normal file
@ -0,0 +1,64 @@
|
||||
package ctx
|
||||
|
||||
import (
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/aaa"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
|
||||
const PROCESS = "process"
|
||||
|
||||
var _process = map[string]ice.Any{}
|
||||
|
||||
func AddProcess(key string, val ice.Any) { _process[key] = val }
|
||||
|
||||
func Process(m *ice.Message, key string, args []string, arg ...string) {
|
||||
switch cb := _process[key].(type) {
|
||||
case func(*ice.Message, []string, ...string):
|
||||
cb(m, args, arg...)
|
||||
case string:
|
||||
if len(arg) == 0 || arg[0] != PROCESS {
|
||||
m.Cmdy(cb, PROCESS, args)
|
||||
m.Optionv(ice.FIELD_PREFIX, kit.Simple(m.ActionKey(), m.Optionv(ice.FIELD_PREFIX)))
|
||||
} else {
|
||||
m.Cmdy(cb, arg)
|
||||
}
|
||||
default:
|
||||
ProcessField(m, key, args, arg...)
|
||||
}
|
||||
}
|
||||
func ProcessField(m *ice.Message, cmd string, args []string, arg ...string) {
|
||||
cmd = kit.Select(m.PrefixKey(), cmd)
|
||||
if len(arg) == 0 || arg[0] != ice.RUN {
|
||||
if m.Cmdy(COMMAND, cmd).ProcessField(m.ActionKey(), ice.RUN); len(args) > 0 {
|
||||
m.Push(ARGS, kit.Format(args))
|
||||
}
|
||||
return
|
||||
}
|
||||
if aaa.Right(m, cmd, arg[1:]) {
|
||||
m.Cmdy(cmd, arg[1:])
|
||||
}
|
||||
}
|
||||
func ProcessFloat(m *ice.Message, arg ...string) {
|
||||
m.Option(ice.MSG_PROCESS, ice.PROCESS_FLOAT)
|
||||
m.Option(ice.PROCESS_ARG, arg)
|
||||
m.Cmdy(COMMAND, arg[0])
|
||||
}
|
||||
|
||||
func ProcessHold(m *ice.Message, text ...ice.Any) {
|
||||
m.Process(ice.PROCESS_HOLD, text...)
|
||||
}
|
||||
func ProcessRefresh(m *ice.Message) {
|
||||
m.ProcessRefresh("300ms")
|
||||
}
|
||||
|
||||
func ProcessAction() ice.Actions {
|
||||
return ice.Actions{
|
||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||
AddProcess(m.CommandKey(), m.PrefixKey())
|
||||
}},
|
||||
PROCESS: {Name: "process", Help: "响应", Hand: func(m *ice.Message, arg ...string) {
|
||||
ProcessField(m, m.PrefixKey(), arg, arg...)
|
||||
}},
|
||||
}
|
||||
}
|
@ -256,7 +256,7 @@ func HashSelect(m *ice.Message, arg ...string) *ice.Message {
|
||||
return m.StatusTime()
|
||||
}
|
||||
func HashPrunes(m *ice.Message, cb func(Maps) bool) *ice.Message {
|
||||
expire := kit.Time(kit.Select(m.Time("-72h"), m.Option(EXPIRE)))
|
||||
expire := kit.Time(kit.Select(m.Time("-72h"), m.Option("before")))
|
||||
m.Cmd("", func(value Maps) {
|
||||
if kit.Time(value[TIME]) > expire {
|
||||
return
|
||||
|
@ -151,6 +151,8 @@ const (
|
||||
PAGE = "page"
|
||||
OFFEND = "offend"
|
||||
|
||||
TOOLS = "tools"
|
||||
|
||||
JSON = "json"
|
||||
CSV = "csv"
|
||||
)
|
||||
|
@ -119,6 +119,7 @@ func PushPodCmd(m *ice.Message, cmd string, arg ...string) {
|
||||
|
||||
type Message interface {
|
||||
Option(key string, arg ...ice.Any) string
|
||||
PrefixKey(arg ...ice.Any) string
|
||||
}
|
||||
|
||||
func OptionAgentIs(m Message, arg ...string) bool {
|
||||
@ -143,11 +144,11 @@ func MergePod(m Message, pod string, arg ...ice.Any) string {
|
||||
}
|
||||
func MergePodCmd(m Message, pod, cmd string, arg ...ice.Any) string {
|
||||
p := "/chat"
|
||||
if pod != "" {
|
||||
p += "/pod/" + kit.Keys(m.Option(ice.MSG_USERPOD), pod)
|
||||
}
|
||||
if cmd != "" {
|
||||
p += "/cmd/" + cmd
|
||||
}
|
||||
p = kit.Select(p, "/chat/", p == "/chat/pod/")
|
||||
p += "/cmd/" + kit.Select(m.PrefixKey(), cmd)
|
||||
return kit.MergeURL2(kit.Select(ice.Info.Domain, m.Option(ice.MSG_USERWEB)), p, arg...)
|
||||
}
|
||||
func ProcessWebsite(m *ice.Message, pod, cmd string, arg ...ice.Any) {
|
||||
m.ProcessOpen(MergePodCmd(m, pod, cmd, arg...))
|
||||
}
|
||||
|
1
conf.go
1
conf.go
@ -190,6 +190,7 @@ const ( // MSG
|
||||
|
||||
MSG_PROCESS = "_process"
|
||||
MSG_DISPLAY = "_display"
|
||||
MSG_TOOLKIT = "_toolkit"
|
||||
|
||||
MSG_USERIP = "user.ip"
|
||||
MSG_USERUA = "user.ua"
|
||||
|
@ -4,6 +4,7 @@ import (
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/ctx"
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
"shylinux.com/x/icebergs/base/nfs"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
|
||||
@ -11,13 +12,20 @@ const FAVOR = "favor"
|
||||
|
||||
func init() {
|
||||
Index.MergeCommands(ice.Commands{
|
||||
FAVOR: {Name: "favor zone id auto insert test page", Help: "收藏夹", Actions: ice.MergeActions(ice.Actions{
|
||||
FAVOR: {Name: "favor zone id auto insert page", Help: "收藏夹", Actions: ice.MergeActions(ice.Actions{
|
||||
mdb.INSERT: {Name: "insert zone=数据结构 type=go name=hi text=hello path file line", Help: "添加"},
|
||||
INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) {
|
||||
ctx.ProcessCommand(m, INNER, m.OptionSplit("path,file,line"), arg...)
|
||||
ctx.Process(m, m.ActionKey(), m.OptionSplit(nfs.PATH, nfs.FILE, nfs.LINE), arg...)
|
||||
}},
|
||||
}, mdb.ZoneAction(mdb.SHORT, mdb.ZONE, mdb.FIELD, "time,id,type,name,text,path,file,line")), Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.ZoneSelectPage(m, arg...).PushAction(kit.Select(mdb.REMOVE, INNER, len(arg) > 0))
|
||||
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) {
|
||||
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] == ""))
|
||||
})
|
||||
}
|
||||
}},
|
||||
})
|
||||
}
|
||||
|
@ -237,6 +237,10 @@ func init() {
|
||||
m.Cmd(mdb.SEARCH, mdb.CREATE, GODOC, m.Prefix(GO))
|
||||
m.Cmd(mdb.ENGINE, mdb.CREATE, GO, m.Prefix(GO))
|
||||
|
||||
m.Cmd(TEMPLATE, mdb.CREATE, GO, m.Prefix(GO))
|
||||
m.Cmd(COMPLETE, mdb.CREATE, GO, m.Prefix(GO))
|
||||
m.Cmd(NAVIGATE, mdb.CREATE, GO, m.Prefix(GO))
|
||||
|
||||
LoadPlug(m, GO, MOD, SUM)
|
||||
for _, k := range []string{GO, MOD, SUM, GODOC} {
|
||||
m.Cmd(mdb.RENDER, mdb.CREATE, k, m.Prefix(k))
|
||||
@ -273,6 +277,57 @@ func init() {
|
||||
}},
|
||||
mdb.ENGINE: {Hand: func(m *ice.Message, arg ...string) { _go_exec(m, arg...) }},
|
||||
mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) { _go_show(m, arg...) }},
|
||||
TEMPLATE: {Hand: func(m *ice.Message, arg ...string) {
|
||||
if kit.Ext(m.Option(mdb.FILE)) != m.CommandKey() {
|
||||
return
|
||||
}
|
||||
}},
|
||||
COMPLETE: {Hand: func(m *ice.Message, arg ...string) {
|
||||
if arg[0] == mdb.FOREACH && arg[2] == nfs.SCRIPT {
|
||||
return
|
||||
}
|
||||
|
||||
if m.Option("text") == "" {
|
||||
m.Push(mdb.TEXT, kit.List("package", "import", "const", "type", "func", "var"))
|
||||
return
|
||||
}
|
||||
if strings.HasSuffix(m.Option("text"), ".") {
|
||||
key := kit.Slice(kit.Split(m.Option("text"), "\t ."), -1)[0]
|
||||
switch key {
|
||||
case "m", "msg":
|
||||
key = "icebergs.Message"
|
||||
case "kit":
|
||||
key = "toolkits"
|
||||
case "ice":
|
||||
key = "icebergs"
|
||||
}
|
||||
|
||||
for _, l := range strings.Split(m.Cmdx("cli.system", "go", "doc", key), ice.NL) {
|
||||
ls := kit.Split(l)
|
||||
if len(ls) < 2 {
|
||||
continue
|
||||
}
|
||||
switch ls[0] {
|
||||
case "const", "var", "func":
|
||||
m.Push(mdb.NAME, ls[1])
|
||||
m.Push(mdb.TEXT, l)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
m.Push(mdb.TEXT, "m")
|
||||
m.Push(mdb.TEXT, "msg")
|
||||
m.Push(mdb.TEXT, "ice")
|
||||
m.Push(mdb.TEXT, "kit")
|
||||
for _, l := range strings.Split(m.Cmdx("cli.system", "go", "list", "std"), ice.NL) {
|
||||
m.Push(mdb.TEXT, kit.Slice(kit.Split(l, ice.PS), -1)[0])
|
||||
}
|
||||
}},
|
||||
NAVIGATE: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Option("text", kit.Slice(kit.Split(m.Option("text"), "."), -1)[0])
|
||||
_inner_tags(m, "", m.Option("text"))
|
||||
}},
|
||||
}, PlugAction())},
|
||||
}, Configs: ice.Configs{
|
||||
MOD: {Name: MOD, Help: "模块", Value: kit.Data(PLUG, kit.Dict(
|
||||
|
@ -81,7 +81,7 @@ func _inner_tags(m *ice.Message, dir string, value string) {
|
||||
for i := 1; bio.Scan(); i++ {
|
||||
if i == line || bio.Text() == text {
|
||||
if dir == "" {
|
||||
m.PushRecord(kit.Dict(nfs.PATH, path.Dir(file), nfs.FILE, path.Base(file), nfs.LINE, kit.Format(i), mdb.TEXT, bio.Text()))
|
||||
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()))
|
||||
}
|
||||
@ -176,6 +176,9 @@ func init() {
|
||||
_inner_make(m, m.Cmd(cli.SYSTEM, cli.MAKE, 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))
|
||||
}},
|
||||
}, 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) {
|
||||
arg[1] = kit.Slice(strings.Split(arg[0], ice.PS), -1)[0]
|
||||
|
@ -8,6 +8,7 @@ import (
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/aaa"
|
||||
"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"
|
||||
@ -202,7 +203,7 @@ func init() {
|
||||
_install_stop(m, arg...)
|
||||
}},
|
||||
gdb.DEBUG: {Name: "debug", Help: "调试", Hand: func(m *ice.Message, arg ...string) {
|
||||
ProcessXterm(m, []string{mdb.TYPE, "gdb"})
|
||||
ctx.Process(m, XTERM, []string{mdb.TYPE, "gdb"}, arg...)
|
||||
}},
|
||||
nfs.TRASH: {Name: "trash", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
_install_trash(m, arg...)
|
||||
|
@ -69,12 +69,38 @@ func init() {
|
||||
Index.Register(&ice.Context{Name: JS, Help: "前端", Commands: ice.Commands{
|
||||
JS: {Name: "js", 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{
|
||||
TEMPLATE, COMPLETE, NAVIGATE,
|
||||
mdb.PLUGIN, mdb.RENDER, mdb.ENGINE, mdb.SEARCH,
|
||||
} {
|
||||
m.Cmd(cmd, mdb.CREATE, JSON, m.PrefixKey())
|
||||
m.Cmd(cmd, mdb.CREATE, JS, m.PrefixKey())
|
||||
}
|
||||
LoadPlug(m, JS)
|
||||
}},
|
||||
TEMPLATE: {Hand: func(m *ice.Message, arg ...string) {
|
||||
if kit.Ext(m.Option(mdb.FILE)) != m.CommandKey() {
|
||||
return
|
||||
}
|
||||
m.Echo(`
|
||||
Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg) {
|
||||
msg.Echo("hello world")
|
||||
msg.Dump(can)
|
||||
}})
|
||||
`)
|
||||
}},
|
||||
COMPLETE: {Hand: func(m *ice.Message, arg ...string) {
|
||||
if arg[0] == mdb.FOREACH && arg[2] == nfs.SCRIPT {
|
||||
m.Push(nfs.FILE, strings.ReplaceAll(arg[1], ice.PT+kit.Ext(arg[1]), ice.PT+JS))
|
||||
return
|
||||
}
|
||||
Complete(m, m.Option("text"), kit.Dict(
|
||||
"", kit.List("function", "if"),
|
||||
"msg", kit.List("Push", "Echo"),
|
||||
))
|
||||
}},
|
||||
NAVIGATE: {Hand: func(m *ice.Message, arg ...string) {
|
||||
}},
|
||||
mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) {
|
||||
key := ctx.GetFileCmd(kit.Replace(path.Join(arg[2], arg[1]), ".js", ".go"))
|
||||
if key == "" {
|
||||
|
@ -5,6 +5,7 @@ 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"
|
||||
@ -39,6 +40,15 @@ 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)
|
||||
}},
|
||||
VIMER_TEMPLATE: {Hand: func(m *ice.Message, arg ...string) {
|
||||
if kit.Ext(m.Option(mdb.FILE)) != m.CommandKey() {
|
||||
return
|
||||
}
|
||||
m.Echo(`
|
||||
print "hello world"
|
||||
`)
|
||||
}},
|
||||
mdb.ENGINE: {Hand: func(m *ice.Message, arg ...string) {
|
||||
_py_main_script(m, arg...)
|
||||
|
@ -6,6 +6,7 @@ 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"
|
||||
@ -66,6 +67,15 @@ func init() {
|
||||
m.Cmd(cmd, mdb.CREATE, m.CommandKey(), m.PrefixKey())
|
||||
}
|
||||
LoadPlug(m, m.CommandKey())
|
||||
gdb.Watch(m, VIMER_TEMPLATE)
|
||||
}},
|
||||
VIMER_TEMPLATE: {Hand: func(m *ice.Message, arg ...string) {
|
||||
if kit.Ext(m.Option(mdb.FILE)) != m.CommandKey() {
|
||||
return
|
||||
}
|
||||
m.Echo(`
|
||||
_list
|
||||
`)
|
||||
}},
|
||||
mdb.SEARCH: {Name: "search", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
|
||||
if arg[0] == mdb.FOREACH {
|
||||
|
@ -7,6 +7,7 @@ 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"
|
||||
)
|
||||
@ -41,6 +42,15 @@ func init() {
|
||||
m.Cmd(cmd, mdb.CREATE, SHY, m.PrefixKey())
|
||||
}
|
||||
LoadPlug(m, SHY)
|
||||
gdb.Watch(m, VIMER_TEMPLATE)
|
||||
}},
|
||||
VIMER_TEMPLATE: {Hand: func(m *ice.Message, arg ...string) {
|
||||
if kit.Ext(m.Option(mdb.FILE)) != m.CommandKey() {
|
||||
return
|
||||
}
|
||||
m.Echo(`
|
||||
chapter "hi"
|
||||
`)
|
||||
}},
|
||||
mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) {
|
||||
ctx.ProcessCommand(m, "web.wiki.word", kit.Simple(path.Join(arg[2], arg[1])))
|
||||
|
@ -10,9 +10,10 @@ import (
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
|
||||
const TEMPLATE = "template"
|
||||
// const TEMPLATE = "template"
|
||||
|
||||
func init() {
|
||||
return
|
||||
Index.MergeCommands(ice.Commands{
|
||||
TEMPLATE: {Name: "template name auto", Help: "模板", Actions: ice.MergeActions(ice.Actions{
|
||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||
|
@ -7,6 +7,7 @@ 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"
|
||||
@ -14,59 +15,6 @@ import (
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
|
||||
func _vimer_defs(m *ice.Message, ext string) string {
|
||||
defs := kit.Dict(
|
||||
nfs.SH, `
|
||||
_list
|
||||
`,
|
||||
nfs.SHY, `
|
||||
chapter "hi"
|
||||
`,
|
||||
nfs.PY, `
|
||||
print "hello world"
|
||||
`,
|
||||
nfs.JS, `
|
||||
Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg) {
|
||||
msg.Echo("hello world")
|
||||
msg.Dump(can)
|
||||
}})
|
||||
`,
|
||||
nfs.ZML, `
|
||||
{
|
||||
username
|
||||
系统
|
||||
命令 index cli.system
|
||||
共享 index cli.qrcode
|
||||
代码
|
||||
趋势 index web.code.git.trend args icebergs action auto
|
||||
状态 index web.code.git.status args icebergs
|
||||
脚本
|
||||
终端 index hi/hi.sh
|
||||
文档 index hi/hi.shy
|
||||
数据 index hi/hi.py
|
||||
后端 index hi/hi.go
|
||||
前端 index hi/hi.js
|
||||
}
|
||||
`,
|
||||
nfs.IML, `
|
||||
系统
|
||||
命令
|
||||
cli.system
|
||||
环境
|
||||
cli.runtime
|
||||
开发
|
||||
模块
|
||||
hi/hi.go
|
||||
脚本
|
||||
hi/hi.sh
|
||||
hi/hi.shy
|
||||
hi/hi.py
|
||||
hi/hi.go
|
||||
hi/hi.js
|
||||
`,
|
||||
)
|
||||
return kit.Format(defs[ext])
|
||||
}
|
||||
func _vimer_list(m *ice.Message, dir string, arg ...string) { // field
|
||||
m.Copy(m.Cmd(nfs.DIR, nfs.PWD, kit.Dict(nfs.DIR_ROOT, dir, nfs.DIR_DEEP, ice.TRUE)).Cut(nfs.PATH).RenameAppend(nfs.PATH, kit.Select(mdb.NAME, arg, 0)))
|
||||
}
|
||||
@ -107,39 +55,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:
|
||||
switch left {
|
||||
case mdb.TYPE:
|
||||
m.Push(mdb.NAME, "menu")
|
||||
|
||||
case ctx.INDEX:
|
||||
m.Cmdy(ctx.COMMAND, mdb.SEARCH, ctx.COMMAND, "", "", ice.OptionFields("index,name,text"))
|
||||
_vimer_list(m, ice.SRC, ctx.INDEX)
|
||||
|
||||
case ctx.ACTION:
|
||||
m.Push(mdb.NAME, "auto")
|
||||
m.Push(mdb.NAME, "push")
|
||||
m.Push(mdb.NAME, "open")
|
||||
|
||||
default:
|
||||
if strings.HasSuffix(m.Option(mdb.TEXT), " ") {
|
||||
m.Push(mdb.NAME, "index")
|
||||
m.Push(mdb.NAME, "action")
|
||||
m.Push(mdb.NAME, "args")
|
||||
m.Push(mdb.NAME, "type")
|
||||
} else if m.Option(mdb.TEXT) == "" {
|
||||
m.Push(mdb.NAME, "head")
|
||||
m.Push(mdb.NAME, "left")
|
||||
m.Push(mdb.NAME, "main")
|
||||
m.Push(mdb.NAME, "foot")
|
||||
}
|
||||
}
|
||||
default:
|
||||
m.Cmdy(mdb.ENGINE, kit.Ext(m.Option(nfs.FILE)), m.Option(nfs.FILE), m.Option(nfs.PATH))
|
||||
}
|
||||
}
|
||||
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 {
|
||||
@ -160,9 +75,6 @@ func _vimer_go_complete(m *ice.Message, name string, arg ...string) *ice.Message
|
||||
const (
|
||||
VIMER_TEMPLATE = "vimer.template"
|
||||
VIMER_COMPLETE = "vimer.complete"
|
||||
|
||||
COMPLETE = "complete"
|
||||
// TEMPLATE = "template"
|
||||
)
|
||||
const VIMER = "vimer"
|
||||
|
||||
@ -174,18 +86,15 @@ func init() {
|
||||
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)))
|
||||
if m.Option(nfs.CONTENT) == "" {
|
||||
m.Option(nfs.CONTENT, gdb.Event(m.Spawn(), VIMER_TEMPLATE).Result())
|
||||
}
|
||||
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)
|
||||
@ -197,11 +106,12 @@ func init() {
|
||||
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)
|
||||
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) {
|
||||
m.Option(mdb.TEXT, strings.TrimSpace(kit.Select(_vimer_defs(m, kit.Ext(m.Option(nfs.FILE))), m.Option(mdb.TEXT))))
|
||||
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)
|
||||
}},
|
||||
@ -215,12 +125,20 @@ func init() {
|
||||
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...)
|
||||
}},
|
||||
TEMPLATE: {Name: "template", Help: "模板", Hand: func(m *ice.Message, arg ...string) {
|
||||
// _vimer_template(m, arg...)
|
||||
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) {
|
||||
_vimer_complete(m, arg...)
|
||||
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)
|
||||
}},
|
||||
@ -255,3 +173,57 @@ func init() {
|
||||
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 Complete(m *ice.Message, text string, data ice.Map) {
|
||||
if strings.HasSuffix(text, ".") {
|
||||
key := kit.Slice(kit.Split(text, " ."), -1)[0]
|
||||
m.Push(mdb.TEXT, kit.Simple(data[key]))
|
||||
} else {
|
||||
m.Push(mdb.TEXT, data[""])
|
||||
for k := range data {
|
||||
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()}})
|
||||
}
|
||||
|
@ -22,9 +22,20 @@ type _xterm struct {
|
||||
*os.File
|
||||
}
|
||||
|
||||
func (s _xterm) Close() error { s.Cmd.Process.Kill(); return nil }
|
||||
func (s _xterm) Setsize(rows, cols string) error {
|
||||
return pty.Setsize(s.File, &pty.Winsize{Rows: uint16(kit.Int(rows)), Cols: uint16(kit.Int(cols))})
|
||||
}
|
||||
func (s _xterm) Write(data string) (int, error) {
|
||||
return s.File.Write([]byte(data))
|
||||
}
|
||||
func (s _xterm) Close() error {
|
||||
return s.Cmd.Process.Kill()
|
||||
}
|
||||
|
||||
func _xterm_get(m *ice.Message, h string) _xterm {
|
||||
h = kit.Select(m.Option(mdb.HASH), h)
|
||||
m.Assert(h != "")
|
||||
|
||||
t := mdb.HashSelectField(m, m.Option(mdb.HASH, h), mdb.TYPE)
|
||||
mdb.HashModify(m, mdb.TEXT, m.Option(ice.MSG_DAEMON))
|
||||
return mdb.HashTarget(m, h, func() ice.Any {
|
||||
@ -35,6 +46,9 @@ func _xterm_get(m *ice.Message, h string) _xterm {
|
||||
m.Assert(err)
|
||||
|
||||
m.Go(func() {
|
||||
defer mdb.HashSelectUpdate(m, h, func(value ice.Map) { delete(value, mdb.TARGET) })
|
||||
defer tty.Close()
|
||||
|
||||
m.Option("log.disable", ice.TRUE)
|
||||
buf := make([]byte, ice.MOD_BUFS)
|
||||
for {
|
||||
@ -55,7 +69,13 @@ const XTERM = "xterm"
|
||||
|
||||
func init() {
|
||||
Index.MergeCommands(ice.Commands{
|
||||
XTERM: {Name: "xterm hash auto", Help: "终端", Actions: ice.MergeActions(ice.Actions{
|
||||
XTERM: {Name: "xterm hash auto", Help: "命令行", Actions: ice.MergeActions(ice.Actions{
|
||||
ctx.PROCESS: {Name: "process", Help: "响应", Hand: func(m *ice.Message, arg ...string) {
|
||||
if len(arg) == 0 || arg[0] != ice.RUN {
|
||||
arg = []string{m.Cmdx("", mdb.CREATE, arg)}
|
||||
}
|
||||
ctx.ProcessField(m, "", arg, arg...)
|
||||
}},
|
||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||
switch mdb.HashInputs(m, arg); arg[0] {
|
||||
case mdb.TYPE:
|
||||
@ -64,40 +84,34 @@ func init() {
|
||||
m.Push(arg[0], ice.Info.HostName, path.Base(m.Option(mdb.TYPE)))
|
||||
}
|
||||
}},
|
||||
mdb.CREATE: {Name: "create type=sh name", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.HashCreate(m, mdb.NAME, kit.Split(m.Option(mdb.TYPE))[0], m.OptionSimple(mdb.TYPE, mdb.NAME))
|
||||
m.ProcessRefresh3ms()
|
||||
mdb.CREATE: {Name: "create type=sh name init", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.HashCreate(m, mdb.NAME, kit.Split(m.Option(mdb.TYPE))[0], m.OptionSimple(mdb.TYPE, mdb.NAME, ice.INIT))
|
||||
ctx.ProcessRefresh(m)
|
||||
}},
|
||||
"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")))})
|
||||
_xterm_get(m, "").Setsize(m.Option("rows"), m.Option("cols"))
|
||||
}},
|
||||
"input": {Name: "input", Help: "输入", Hand: func(m *ice.Message, arg ...string) {
|
||||
if b, e := base64.StdEncoding.DecodeString(strings.Join(arg, "")); !m.Warn(e) {
|
||||
_xterm_get(m, m.Option(mdb.HASH)).Write(b)
|
||||
_xterm_get(m, "").Write(string(b))
|
||||
}
|
||||
}},
|
||||
INSTALL: {Name: "install", Help: "安装", Hand: func(m *ice.Message, arg ...string) {
|
||||
_xterm_get(m, kit.Select(m.Option(mdb.HASH), arg, 0)).Write([]byte(m.Cmdx(PUBLISH, ice.CONTEXTS, INSTALL) + ice.NL))
|
||||
m.ProcessHold()
|
||||
_xterm_get(m, kit.Select("", arg, 0)).Write(m.Cmdx(PUBLISH, ice.CONTEXTS, INSTALL) + ice.NL)
|
||||
ctx.ProcessHold(m)
|
||||
}},
|
||||
web.WEBSITE: {Name: "website", Help: "打开", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.ProcessOpen(web.MergePodCmd(m, "", m.PrefixKey(), mdb.HASH, m.Option(mdb.HASH)))
|
||||
web.ProcessWebsite(m, "", "", m.OptionSimple(mdb.HASH))
|
||||
}},
|
||||
}, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text")), Hand: func(m *ice.Message, arg ...string) {
|
||||
}, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text,init", mdb.TOOLS, FAVOR), ctx.CmdAction(), 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)
|
||||
} else {
|
||||
m.Action("full", INSTALL)
|
||||
ctx.DisplayLocal(m, "")
|
||||
ctx.Toolkit(m)
|
||||
}
|
||||
}},
|
||||
})
|
||||
}
|
||||
|
||||
func ProcessXterm(m *ice.Message, args []string, arg ...string) {
|
||||
if len(arg) == 0 || arg[0] != ice.RUN {
|
||||
args = []string{m.Cmdx(Prefix(XTERM), mdb.CREATE, args)}
|
||||
}
|
||||
ctx.ProcessField(m, Prefix(XTERM), args, arg...)
|
||||
}
|
||||
|
@ -5,9 +5,12 @@ import (
|
||||
"strings"
|
||||
|
||||
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"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
|
||||
func _website_url(m *ice.Message, file string) string {
|
||||
@ -25,6 +28,75 @@ 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)
|
||||
}},
|
||||
VIMER_TEMPLATE: {Hand: func(m *ice.Message, arg ...string) {
|
||||
switch kit.Ext(m.Option(mdb.FILE)) {
|
||||
case ZML:
|
||||
m.Echo(`
|
||||
{
|
||||
username
|
||||
系统
|
||||
命令 index cli.system
|
||||
共享 index cli.qrcode
|
||||
代码
|
||||
趋势 index web.code.git.trend args icebergs action auto
|
||||
状态 index web.code.git.status args icebergs
|
||||
脚本
|
||||
终端 index hi/hi.sh
|
||||
文档 index hi/hi.shy
|
||||
数据 index hi/hi.py
|
||||
后端 index hi/hi.go
|
||||
前端 index hi/hi.js
|
||||
}
|
||||
`)
|
||||
case nfs.IML:
|
||||
m.Echo(`
|
||||
系统
|
||||
命令
|
||||
cli.system
|
||||
环境
|
||||
cli.runtime
|
||||
开发
|
||||
模块
|
||||
hi/hi.go
|
||||
脚本
|
||||
hi/hi.sh
|
||||
hi/hi.shy
|
||||
hi/hi.py
|
||||
hi/hi.go
|
||||
hi/hi.js
|
||||
`)
|
||||
}
|
||||
}},
|
||||
VIMER_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")
|
||||
|
||||
case ctx.INDEX:
|
||||
m.Cmdy(ctx.COMMAND, mdb.SEARCH, ctx.COMMAND, "", "", ice.OptionFields("index,name,text"))
|
||||
_vimer_list(m, ice.SRC, ctx.INDEX)
|
||||
|
||||
case ctx.ACTION:
|
||||
m.Push(mdb.NAME, "auto")
|
||||
m.Push(mdb.NAME, "push")
|
||||
m.Push(mdb.NAME, "open")
|
||||
|
||||
default:
|
||||
if strings.HasSuffix(m.Option(mdb.TEXT), " ") {
|
||||
m.Push(mdb.NAME, "index")
|
||||
m.Push(mdb.NAME, "action")
|
||||
m.Push(mdb.NAME, "args")
|
||||
m.Push(mdb.NAME, "type")
|
||||
} else if m.Option(mdb.TEXT) == "" {
|
||||
m.Push(mdb.NAME, "head")
|
||||
m.Push(mdb.NAME, "left")
|
||||
m.Push(mdb.NAME, "main")
|
||||
m.Push(mdb.NAME, "foot")
|
||||
}
|
||||
}
|
||||
}},
|
||||
mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.EchoIFrame(_website_url(m, strings.TrimPrefix(path.Join(arg[2], arg[1]), SRC_WEBSITE)))
|
||||
|
4
data.go
4
data.go
@ -12,8 +12,8 @@ func (m *Message) ActionKey() string {
|
||||
func (m *Message) CommandKey() string {
|
||||
return strings.TrimSuffix(strings.TrimPrefix(m._key, PS), PS)
|
||||
}
|
||||
func (m *Message) PrefixKey(arg ...string) string {
|
||||
return kit.Keys(m.Prefix(m.CommandKey()), arg)
|
||||
func (m *Message) PrefixKey(arg ...Any) string {
|
||||
return kit.Keys(m.Prefix(m.CommandKey()), kit.Keys(arg))
|
||||
}
|
||||
func (m *Message) Prefix(arg ...string) string {
|
||||
return m.Target().PrefixKey(arg...)
|
||||
|
@ -169,7 +169,7 @@ func _status_list(m *ice.Message) (files, adds, dels int, last time.Time) {
|
||||
default:
|
||||
m.Push(TAGS, "")
|
||||
if strings.Contains(vs[0], "??") {
|
||||
list = append(list, ADD)
|
||||
list = append(list, ADD, nfs.TRASH)
|
||||
} else {
|
||||
list = append(list, COMMIT)
|
||||
}
|
||||
@ -305,6 +305,9 @@ func init() {
|
||||
code.PUBLISH: {Name: "publish", Help: "发布", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(code.PUBLISH, ice.CONTEXTS, ice.MISC, ice.CORE)
|
||||
}},
|
||||
nfs.TRASH: {Name: "trash", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmd(nfs.TRASH, path.Join(_repos_path(m.Option(REPOS)), m.Option(nfs.FILE)))
|
||||
}},
|
||||
code.BINPACK: {Name: "binpack", Help: "发布模式", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmd(nfs.LINK, ice.GO_SUM, path.Join(ice.SRC_RELEASE, ice.GO_SUM))
|
||||
m.Cmd(nfs.LINK, ice.GO_MOD, path.Join(ice.SRC_RELEASE, ice.GO_MOD))
|
||||
|
@ -158,7 +158,7 @@ func init() {
|
||||
}},
|
||||
|
||||
code.XTERM: {Name: "xterm", Help: "终端", Hand: func(m *ice.Message, arg ...string) {
|
||||
code.ProcessXterm(m, []string{mdb.TYPE, "tmux attach -t " + m.Option(SESSION)}, arg...)
|
||||
ctx.Process(m, code.XTERM, []string{mdb.TYPE, "tmux attach -t " + m.Option(SESSION)}, arg...)
|
||||
}},
|
||||
SCRIPT: {Name: "script name", Help: "脚本", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmd(SCRIPT, m.Option(mdb.NAME), func(value ice.Maps) {
|
||||
|
202
misc/vim/vim.shy
202
misc/vim/vim.shy
@ -2,13 +2,209 @@ title "vim"
|
||||
refer `
|
||||
官网 https://www.vim.org
|
||||
源码 https://github.com/vim/vim
|
||||
文档 http://vimdoc.sourceforge.net/htmldoc/usr_toc.html
|
||||
文档 http://vimdoc.sourceforge.net/htmldoc/help.html
|
||||
`
|
||||
|
||||
chapter "源码"
|
||||
field "安装" web.code.vim.vim
|
||||
field "源码" web.code.inner args `usr/install/vim-vim-12be734/ src/main.c 110`
|
||||
field "编辑器" web.code.vim.vim
|
||||
field "源代码" web.code.ctags.inner args `usr/install/vim-vim-12be734/ src/main.c 110`
|
||||
field "计数" web.code.git.count args `usr/install/vim-vim-12be734/src/`
|
||||
web.code.ctags.chain `
|
||||
syntax.c
|
||||
buffer.c
|
||||
window.c
|
||||
screen.c
|
||||
session.c
|
||||
quickfix.c
|
||||
popupmenu.c
|
||||
popupwin.c
|
||||
autocmd.c
|
||||
mouse.c
|
||||
pty.c
|
||||
undo.c
|
||||
menu.c
|
||||
message.c
|
||||
message_test.c
|
||||
move.c
|
||||
fold.c
|
||||
term.c
|
||||
term.h
|
||||
terminal.c
|
||||
termlib.c
|
||||
|
||||
alloc.h
|
||||
arabic.c
|
||||
arglist.c
|
||||
ascii.h
|
||||
auto
|
||||
beval.c
|
||||
beval.h
|
||||
bigvim64.bat
|
||||
bigvim.bat
|
||||
blob.c
|
||||
blowfish.c
|
||||
bufwrite.c
|
||||
change.c
|
||||
channel.c
|
||||
charset.c
|
||||
cindent.c
|
||||
clientserver.c
|
||||
clipboard.c
|
||||
cmdexpand.c
|
||||
cmdhist.c
|
||||
config.h.in
|
||||
config.mk.dist
|
||||
config.mk.in
|
||||
configure
|
||||
configure.ac
|
||||
create_cmdidxs.vim
|
||||
crypt.c
|
||||
crypt_zip.c
|
||||
debugger.c
|
||||
dehqx.py
|
||||
dict.c
|
||||
diff.c
|
||||
digraph.c
|
||||
dimm.idl
|
||||
dlldata.c
|
||||
dosinst.c
|
||||
dosinst.h
|
||||
drawline.c
|
||||
drawscreen.c
|
||||
edit.c
|
||||
errors.h
|
||||
evalbuffer.c
|
||||
eval.c
|
||||
evalfunc.c
|
||||
evalvars.c
|
||||
evalwindow.c
|
||||
ex_cmdidxs.h
|
||||
ex_cmds2.c
|
||||
ex_cmds.c
|
||||
ex_cmds.h
|
||||
ex_docmd.c
|
||||
ex_eval.c
|
||||
ex_getln.c
|
||||
feature.h
|
||||
fileio.c
|
||||
filepath.c
|
||||
findfile.c
|
||||
getchar.c
|
||||
glbl_ime.cpp
|
||||
glbl_ime.h
|
||||
globals.h
|
||||
GvimExt
|
||||
gvimtutor
|
||||
hardcopy.c
|
||||
hashtab.c
|
||||
help.c
|
||||
highlight.c
|
||||
iid_ole.c
|
||||
indent.c
|
||||
infplist.xml
|
||||
insexpand.c
|
||||
iscygpty.c
|
||||
iscygpty.h
|
||||
job.c
|
||||
json.c
|
||||
json_test.c
|
||||
keymap.h
|
||||
kword_test.c
|
||||
libvterm
|
||||
link.390
|
||||
link.sh
|
||||
list.c
|
||||
locale.c
|
||||
macros.h
|
||||
main.c
|
||||
map.c
|
||||
mark.c
|
||||
match.c
|
||||
mbyte.c
|
||||
memfile.c
|
||||
memfile_test.c
|
||||
memline.c
|
||||
misc1.c
|
||||
misc2.c
|
||||
mysign
|
||||
nbdebug.c
|
||||
nbdebug.h
|
||||
netbeans.c
|
||||
normal.c
|
||||
ops.c
|
||||
option.c
|
||||
optiondefs.h
|
||||
option.h
|
||||
optionstr.c
|
||||
osdef1.h.in
|
||||
osdef2.h.in
|
||||
osdef.sh
|
||||
pathdef.sh
|
||||
profiler.c
|
||||
proto
|
||||
protodef.h
|
||||
proto.h
|
||||
README.md
|
||||
regexp_bt.c
|
||||
regexp.c
|
||||
regexp.h
|
||||
regexp_nfa.c
|
||||
register.c
|
||||
scriptfile.c
|
||||
search.c
|
||||
sha256.c
|
||||
sign.c
|
||||
sound.c
|
||||
spell.c
|
||||
spellfile.c
|
||||
spell.h
|
||||
spellsuggest.c
|
||||
structs.h
|
||||
tag.c
|
||||
tearoff.bmp
|
||||
testing.c
|
||||
textformat.c
|
||||
textobject.c
|
||||
textprop.c
|
||||
time.c
|
||||
toolbar.phi
|
||||
toolcheck
|
||||
tools.bmp
|
||||
typemap
|
||||
typval.c
|
||||
ui.c
|
||||
uninstall.c
|
||||
usercmd.c
|
||||
userfunc.c
|
||||
version.c
|
||||
version.h
|
||||
vim9compile.c
|
||||
vim9execute.c
|
||||
vim9.h
|
||||
vim9script.c
|
||||
vim9type.c
|
||||
vim_alert.ico
|
||||
vim.def
|
||||
vim_error.ico
|
||||
vim.h
|
||||
vim.ico
|
||||
vim_icon.xbm
|
||||
viminfo.c
|
||||
vim_info.ico
|
||||
vim_mask.xbm
|
||||
vim_quest.ico
|
||||
vim.rc
|
||||
vimrun.c
|
||||
vim.tlb
|
||||
vimtutor
|
||||
VisVim
|
||||
which.sh
|
||||
winclip.c
|
||||
xdiff
|
||||
xpm_w32.c
|
||||
xpm_w32.h
|
||||
|
||||
`
|
||||
section "构建"
|
||||
shell `
|
||||
yum install -y wget make gcc
|
||||
|
Loading…
x
Reference in New Issue
Block a user