forked from x/icebergs
opt vim
This commit is contained in:
parent
3de5a53832
commit
d98d392a61
@ -205,3 +205,6 @@ func TravelCmd(m *ice.Message, cb func(key, file, line string)) *ice.Message {
|
||||
})
|
||||
return m
|
||||
}
|
||||
func CmdList(m *ice.Message) *ice.Message {
|
||||
return m.Cmdy(COMMAND, mdb.SEARCH, COMMAND, ice.OptionFields(INDEX))
|
||||
}
|
||||
|
@ -46,7 +46,7 @@ func ProcessFloat(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(COMMAND, arg[0])
|
||||
}
|
||||
func ProcessField(m *ice.Message, cmd string, args []string, arg ...string) {
|
||||
if cmd = kit.Select(m.PrefixKey(), cmd); len(arg) == 0 || arg[0] != ice.RUN {
|
||||
if cmd = kit.Select(m.ActionKey(), cmd); len(arg) == 0 || arg[0] != ice.RUN {
|
||||
m.Option("_index", m.PrefixKey())
|
||||
if m.Cmdy(COMMAND, cmd).ProcessField(ACTION, m.ActionKey(), ice.RUN); len(args) > 0 {
|
||||
m.Push(ARGS, kit.Format(args))
|
||||
|
@ -176,7 +176,9 @@ func ZoneRemove(m *ice.Message, arg ...Any) {
|
||||
m.Cmdy(DELETE, m.PrefixKey(), "", HASH, arg)
|
||||
}
|
||||
func ZoneInsert(m *ice.Message, arg ...Any) {
|
||||
if args := kit.Simple(arg...); args[0] == ZoneKey(m) {
|
||||
if args := kit.Simple(arg...); len(args) == 0 {
|
||||
m.Cmdy(INSERT, m.PrefixKey(), "", ZONE, m.Option(ZoneShort(m)), m.OptionSimple(ZoneField(m)))
|
||||
} else if args[0] == ZoneKey(m) {
|
||||
m.Cmdy(INSERT, m.PrefixKey(), "", ZONE, args[1:])
|
||||
} else {
|
||||
m.Cmdy(INSERT, m.PrefixKey(), "", ZONE, arg)
|
||||
|
@ -42,6 +42,10 @@ func _tar_list(m *ice.Message, p string, cb func(*tar.Header, *tar.Reader, int))
|
||||
if m.Warn(e) {
|
||||
break
|
||||
}
|
||||
if h.Size == 0 {
|
||||
i--
|
||||
continue
|
||||
}
|
||||
cb(h, r, i)
|
||||
}
|
||||
m.StatusTimeCount(mdb.TOTAL, i)
|
||||
|
@ -75,6 +75,7 @@ func _serve_handle(key string, cmd *ice.Command, m *ice.Message, w http.Response
|
||||
gdb.Event(m, SERVE_PARSE, strings.Split(strings.TrimPrefix(u.Path, ice.PS), ice.PS))
|
||||
kit.Fetch(u.Query(), func(k string, v []string) { m.Logs("Refer", k, v).Optionv(k, v) })
|
||||
}
|
||||
m.Option(ice.MSG_USERUA, r.Header.Get(UserAgent))
|
||||
for k, v := range kit.ParseQuery(r.URL.RawQuery) {
|
||||
kit.If(m.IsCliUA(), func() { v = kit.Simple(v, func(v string) (string, error) { return url.QueryUnescape(v) }) })
|
||||
m.Optionv(k, v)
|
||||
|
@ -43,7 +43,7 @@ func init() {
|
||||
case web.OPEN:
|
||||
ctx.ProcessOpen(m, m.Option(mdb.TEXT))
|
||||
default:
|
||||
ctx.ProcessField(m, "", []string{m.Option(mdb.TEXT)}, arg...)
|
||||
ctx.ProcessField(m, m.PrefixKey(), []string{m.Option(mdb.TEXT)}, arg...)
|
||||
}
|
||||
}},
|
||||
mdb.CREATE: {Hand: func(m *ice.Message, arg ...string) {
|
||||
|
@ -48,7 +48,7 @@ func init() {
|
||||
if m.Option(mdb.TYPE) != LOCATION {
|
||||
return
|
||||
}
|
||||
ctx.ProcessField(m, "", []string{m.Option(mdb.TEXT)}, arg...)
|
||||
ctx.ProcessField(m, m.PrefixKey(), []string{m.Option(mdb.TEXT)}, arg...)
|
||||
}},
|
||||
FAVOR_TABLES: {Hand: func(m *ice.Message, arg ...string) {
|
||||
switch arg[1] {
|
||||
|
@ -70,7 +70,7 @@ func init() {
|
||||
if len(arg) == 0 || arg[0] != ice.RUN {
|
||||
arg = []string{m.Cmdx("", mdb.CREATE, arg)}
|
||||
}
|
||||
ctx.ProcessField(m, "", arg, arg...)
|
||||
ctx.ProcessField(m, m.PrefixKey(), arg, arg...)
|
||||
}},
|
||||
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
|
||||
switch mdb.HashInputs(m, arg).Cmdy(FAVOR, "_system_term", ice.OptionFields(arg[0])).Cut(arg[0]); arg[0] {
|
||||
|
@ -21,9 +21,9 @@ func init() {
|
||||
if msg := mdb.ZoneSelect(m.Spawn(), m.Option(mdb.ZONE), m.Option(mdb.ID)); nfs.ExistsFile(m, msg.Append(cli.PWD)) {
|
||||
m.Option(cli.CMD_DIR, msg.Append(cli.PWD))
|
||||
}
|
||||
ctx.ProcessField(m, cli.SYSTEM, nil, arg...)
|
||||
ctx.ProcessField(m, "", nil, arg...)
|
||||
} else {
|
||||
ctx.ProcessField(m, cli.SYSTEM, kit.Split(m.Option(mdb.TEXT)))
|
||||
ctx.ProcessField(m, "", kit.Split(m.Option(mdb.TEXT)))
|
||||
}
|
||||
}},
|
||||
web.DOWNLOAD: {Hand: func(m *ice.Message, arg ...string) { web.RenderCache(m, m.Option(mdb.TEXT)) }},
|
||||
|
@ -31,7 +31,7 @@ func init() {
|
||||
}
|
||||
}
|
||||
switch m.RenderResult(); arg[0] {
|
||||
case web.P(cli.QRCODE), web.PP(SESS):
|
||||
case web.P(cli.QRCODE), web.P("input"), web.PP(SESS):
|
||||
return
|
||||
}
|
||||
if m.Warn(m.Option(SID, strings.TrimSpace(m.Option(SID))) == "", ice.ErrNotLogin, arg) {
|
||||
@ -43,7 +43,7 @@ func init() {
|
||||
}
|
||||
}},
|
||||
web.P(cli.QRCODE): {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(cli.QRCODE, m.Option(mdb.TEXT), m.Option(cli.FG), m.Option(cli.BG))
|
||||
m.Cmdy(cli.QRCODE, tcp.PublishLocalhost(m, m.Option(mdb.TEXT)), m.Option(cli.FG), m.Option(cli.BG))
|
||||
}},
|
||||
web.PP(SESS): {Actions: ice.Actions{
|
||||
aaa.LOGOUT: {Hand: func(m *ice.Message, arg ...string) {
|
||||
|
@ -29,9 +29,9 @@ func init() {
|
||||
if msg := mdb.ListSelect(m.Spawn(), m.Option(mdb.ID)); nfs.ExistsFile(m, msg.Append(cli.PWD)) {
|
||||
m.Option(cli.CMD_DIR, msg.Append(cli.PWD))
|
||||
}
|
||||
ctx.ProcessField(m, cli.SYSTEM, nil, arg...)
|
||||
ctx.ProcessField(m, "", nil, arg...)
|
||||
} else {
|
||||
ctx.ProcessField(m, cli.SYSTEM, kit.Split(m.Option(mdb.TEXT)))
|
||||
ctx.ProcessField(m, "", kit.Split(m.Option(mdb.TEXT)))
|
||||
}
|
||||
}},
|
||||
FAVOR: {Name: "favor zone=demo type name text pwd", Help: "收藏", Hand: func(m *ice.Message, arg ...string) {
|
||||
|
@ -223,7 +223,7 @@ func init() {
|
||||
}
|
||||
return
|
||||
}
|
||||
ctx.ProcessField(m, web.CODE_INNER, arg, arg...)
|
||||
ctx.ProcessField(m, "", arg, arg...)
|
||||
}},
|
||||
}, mdb.HashAction(mdb.SHORT, REPOS, mdb.FIELD, "time,repos,branch,commit,origin"), mdb.ClearHashOnExitAction()), Hand: func(m *ice.Message, arg ...string) {
|
||||
if len(arg) == 0 || arg[0] == "" {
|
||||
|
@ -1,18 +1,18 @@
|
||||
git
|
||||
ssh
|
||||
git
|
||||
input
|
||||
alpha
|
||||
tmux
|
||||
|
||||
vim
|
||||
bash
|
||||
vim
|
||||
|
||||
coder
|
||||
java
|
||||
node
|
||||
|
||||
mp
|
||||
wx
|
||||
lark
|
||||
wework
|
||||
chrome
|
||||
webview
|
||||
chrome
|
||||
wework
|
||||
lark
|
||||
wx
|
||||
mp
|
||||
|
@ -8,6 +8,7 @@ import (
|
||||
"shylinux.com/x/icebergs/base/ctx"
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
"shylinux.com/x/icebergs/base/nfs"
|
||||
"shylinux.com/x/icebergs/base/web"
|
||||
"shylinux.com/x/icebergs/core/code"
|
||||
)
|
||||
|
||||
@ -15,32 +16,30 @@ const FAVOR = "favor"
|
||||
|
||||
func init() {
|
||||
Index.MergeCommands(ice.Commands{
|
||||
"/favor": {Name: "/favor", Help: "收藏", Actions: ice.Actions{
|
||||
mdb.SELECT: {Name: "select", Help: "主题", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmd(FAVOR, func(value ice.Maps) { m.Echo(value[mdb.ZONE]).Echo(ice.NL) })
|
||||
FAVOR: {Name: "favor zone id auto insert", Help: "收藏夹", Actions: ice.MergeActions(ice.Actions{
|
||||
mdb.INSERT: {Name: "insert zone=数据结构 type name=hi text=hello file line"},
|
||||
code.INNER: {Help: "源码", Hand: func(m *ice.Message, arg ...string) {
|
||||
if len(arg) > 0 && arg[0] == ice.RUN {
|
||||
ctx.ProcessField(m, "", nil, arg...)
|
||||
} else {
|
||||
p := path.Join(m.Option(cli.PWD), m.Option(nfs.FILE))
|
||||
ctx.ProcessField(m, "", []string{path.Dir(p) + ice.PS, path.Base(p), m.Option(nfs.LINE)})
|
||||
}
|
||||
}},
|
||||
mdb.INSERT: {Name: "insert", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmd(FAVOR, mdb.INSERT)
|
||||
}, mdb.ZoneAction(mdb.FIELD, "time,id,type,name,text,file,line,pwd")), Hand: func(m *ice.Message, arg ...string) {
|
||||
if mdb.ZoneSelect(m, arg...).PushAction(code.INNER); len(arg) == 0 {
|
||||
m.Action(mdb.EXPORT, mdb.IMPORT)
|
||||
}
|
||||
}},
|
||||
web.PP(FAVOR): {Actions: ice.Actions{
|
||||
mdb.INSERT: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(FAVOR, mdb.INSERT) }},
|
||||
mdb.SELECT: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmd(FAVOR, func(value ice.Maps) { m.Echo(value[mdb.ZONE]).Echo(ice.NL) })
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmd(FAVOR, m.Option(mdb.ZONE), func(value ice.Maps) {
|
||||
m.Echo("%v\n", m.Option(mdb.ZONE)).Echo("%v:%v:%v:(%v): %v\n",
|
||||
value[nfs.FILE], value[nfs.LINE], "1", value[mdb.NAME], value[mdb.TEXT])
|
||||
m.Echo("%v\n", m.Option(mdb.ZONE)).Echo("%v:%v:%v:(%v): %v\n", value[nfs.FILE], value[nfs.LINE], "1", value[mdb.NAME], value[mdb.TEXT])
|
||||
})
|
||||
}},
|
||||
FAVOR: {Name: "favor zone id auto", Help: "收藏夹", Actions: ice.MergeActions(ice.Actions{
|
||||
mdb.INSERT: {Name: "insert zone=数据结构 type name=hi text=hello file line", Help: "添加"},
|
||||
code.INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) {
|
||||
p := path.Join(m.Option(cli.PWD), m.Option(nfs.FILE))
|
||||
ctx.ProcessCommand(m, code.INNER, []string{path.Dir(p) + ice.PS, path.Base(p), m.Option(nfs.LINE)}, arg...)
|
||||
}},
|
||||
}, mdb.ZoneAction(mdb.SHORT, mdb.ZONE, mdb.FIELD, "time,id,type,name,text,file,line,pwd")), Hand: func(m *ice.Message, arg ...string) {
|
||||
if mdb.ZoneSelect(m, arg...); len(arg) == 0 {
|
||||
m.Action(mdb.CREATE, mdb.EXPORT, mdb.IMPORT)
|
||||
} else {
|
||||
m.PushAction(code.INNER)
|
||||
m.StatusTimeCount()
|
||||
}
|
||||
}},
|
||||
})
|
||||
}
|
||||
|
@ -5,38 +5,51 @@ import (
|
||||
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/cli"
|
||||
"shylinux.com/x/icebergs/base/ctx"
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
"shylinux.com/x/icebergs/base/web"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
|
||||
const INPUT = "input"
|
||||
|
||||
func init() {
|
||||
const (
|
||||
CMDS = "cmds"
|
||||
WUBI = "wubi"
|
||||
ICE_ = "ice "
|
||||
)
|
||||
Index.MergeCommands(ice.Commands{
|
||||
"/input": {Name: "/input", Help: "输入法", Hand: func(m *ice.Message, arg ...string) {
|
||||
if m.Cmdy(TAGS, INPUT, arg[0], m.Option("pre")); m.Length() > 0 {
|
||||
mdb.HashCreate(m, kit.SimpleKV("", TAGS, arg[0], m.Result()))
|
||||
return // 代码补全
|
||||
}
|
||||
INPUT: {Name: "input hash auto export import", Help: "输入法", Actions: mdb.HashAction(mdb.SHORT, mdb.NAME, mdb.FIELD, "time,hash,type,name,text")},
|
||||
web.P(INPUT): {Hand: func(m *ice.Message, arg ...string) {
|
||||
if arg[0] == ice.PT {
|
||||
return
|
||||
}
|
||||
if m.Cmdy("web.code.input.wubi", INPUT, arg[0]); m.Length() > 0 {
|
||||
mdb.HashCreate(m, kit.SimpleKV("", "wubi", arg[0], m.Result()))
|
||||
return // 五笔输入
|
||||
}
|
||||
if arg[0] = strings.TrimSpace(arg[0]); strings.HasPrefix(arg[0], "ice") {
|
||||
list := kit.Split(arg[0])
|
||||
if m.Cmdy(list[1:]); m.IsErrNotFound() {
|
||||
m.SetResult().Cmdy(cli.SYSTEM, list[1:])
|
||||
|
||||
} else if strings.HasPrefix(arg[0], "ice") {
|
||||
args := kit.Split(arg[0])
|
||||
if list := ctx.CmdList(m.Spawn()).Appendv(ctx.INDEX); len(args) == 1 || kit.IndexOf(list, args[1]) == -1 {
|
||||
if len(args) > 1 {
|
||||
list = kit.Simple(list, func(item string) bool { return strings.HasPrefix(item, args[1]) })
|
||||
}
|
||||
m.Echo(ICE_ + kit.Join(list, ice.NL+ICE_)).Echo(ice.NL)
|
||||
return
|
||||
}
|
||||
if m.Result() == "" {
|
||||
m.Table()
|
||||
msg := m.Cmd(args[1:])
|
||||
if msg.IsErrNotFound() {
|
||||
msg.SetResult().Cmdy(cli.SYSTEM, args[1:])
|
||||
}
|
||||
mdb.HashCreate(m, kit.SimpleKV("", "cmds", strings.TrimSpace(strings.Join(list[1:], ice.SP)), m.Result()))
|
||||
return // 本地命令
|
||||
if msg.Result() == "" {
|
||||
msg.Table()
|
||||
}
|
||||
m.Echo(arg[0]).Echo(ice.NL).Search(args[1], func(p *ice.Context, s *ice.Context, key string, cmd *ice.Command) {
|
||||
m.Echo(arg[0] + ice.SP + kit.Join(msg.Appendv(kit.Format(kit.Value(cmd.List, kit.Keys(len(args)-2, mdb.NAME)))), ice.NL+arg[0]+ice.SP)).Echo(ice.NL)
|
||||
}).Copy(msg)
|
||||
kit.Fetch(kit.UnMarshal(msg.Option(ice.MSG_STATUS)), func(index int, value ice.Map) { m.Echo("%s: %v ", value[mdb.NAME], value[mdb.VALUE]) })
|
||||
mdb.HashCreate(m.Spawn(), kit.SimpleKV("", CMDS, strings.TrimSpace(strings.Join(args[1:], ice.SP)), m.Result()))
|
||||
} else if m.Cmdy(TAGS, INPUT, arg[0], m.Option("pre")); m.Length() > 0 {
|
||||
mdb.HashCreate(m, kit.SimpleKV("", TAGS, arg[0], m.Result()))
|
||||
} else if m.Cmdy("web.code.input.wubi", INPUT, arg[0]); len(m.Result()) > 0 {
|
||||
mdb.HashCreate(m.Spawn(), kit.SimpleKV("", WUBI, arg[0], m.Result()))
|
||||
}
|
||||
}},
|
||||
INPUT: {Name: "input id auto export import", Help: "输入法", Actions: mdb.ListAction(mdb.FIELD, "time,id,type,name,text")},
|
||||
})
|
||||
}
|
||||
|
@ -1,14 +1,7 @@
|
||||
package vim
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"strings"
|
||||
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/aaa"
|
||||
"shylinux.com/x/icebergs/base/cli"
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
"shylinux.com/x/icebergs/base/tcp"
|
||||
"shylinux.com/x/icebergs/base/web"
|
||||
)
|
||||
|
||||
@ -25,48 +18,5 @@ const (
|
||||
const SESS = "sess"
|
||||
|
||||
func init() {
|
||||
Index.MergeCommands(ice.Commands{
|
||||
web.WEB_LOGIN: {Hand: func(m *ice.Message, arg ...string) {
|
||||
if f, _, e := m.R.FormFile(SUB); e == nil {
|
||||
defer f.Close()
|
||||
if b, e := ioutil.ReadAll(f); e == nil {
|
||||
m.Option(SUB, string(b)) // 文件参数
|
||||
}
|
||||
}
|
||||
|
||||
switch m.RenderResult(); arg[0] {
|
||||
case "/input", "/sess":
|
||||
return // 登录入口
|
||||
}
|
||||
|
||||
if m.Warn(m.Option(SID, strings.TrimSpace(m.Option(SID))) == "", ice.ErrNotLogin, arg[0]) {
|
||||
return
|
||||
}
|
||||
|
||||
msg := m.Cmd(SESS, m.Option(SID))
|
||||
m.Option(aaa.USERNAME, msg.Append(aaa.USERNAME))
|
||||
m.Option(tcp.HOSTNAME, msg.Append(tcp.HOSTNAME))
|
||||
m.Warn(m.Option(aaa.USERNAME) == "", ice.ErrNotLogin, arg[0])
|
||||
}},
|
||||
"/sess": {Name: "/sess", Help: "会话", Actions: ice.Actions{
|
||||
aaa.LOGOUT: {Name: "logout", Help: "退出", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(SESS, mdb.MODIFY, mdb.STATUS, aaa.LOGOUT, ice.Option{mdb.HASH, m.Option(SID)})
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, arg ...string) {
|
||||
if m.Option(SID) == "" { // 终端登录
|
||||
m.Option(SID, m.Cmdx(SESS, mdb.CREATE, mdb.STATUS, aaa.LOGIN, m.OptionSimple(aaa.USERNAME, tcp.HOSTNAME, cli.PID, cli.PWD)))
|
||||
} else {
|
||||
m.Cmdy(SESS, mdb.MODIFY, mdb.STATUS, aaa.LOGIN, ice.Option{mdb.HASH, m.Option(SID)})
|
||||
}
|
||||
m.Echo(m.Option(SID))
|
||||
}},
|
||||
SESS: {Name: "sess hash auto prunes", Help: "会话流", Actions: ice.MergeActions(ice.Actions{
|
||||
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.OptionFields(mdb.HashField(m))
|
||||
m.Cmdy(mdb.PRUNES, m.PrefixKey(), "", mdb.HASH, mdb.STATUS, aaa.LOGOUT)
|
||||
}},
|
||||
}, mdb.HashAction(mdb.FIELD, "time,hash,status,username,hostname,pid,pwd")), Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.HashSelect(m, arg...)
|
||||
}},
|
||||
})
|
||||
Index.MergeCommands(ice.Commands{web.WEB_LOGIN: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy("web.code.bash._login", arg) }}})
|
||||
}
|
||||
|
@ -4,11 +4,11 @@ import (
|
||||
"path"
|
||||
|
||||
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/mdb"
|
||||
"shylinux.com/x/icebergs/base/nfs"
|
||||
"shylinux.com/x/icebergs/base/web"
|
||||
"shylinux.com/x/icebergs/core/code"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
@ -17,32 +17,24 @@ const SYNC = "sync"
|
||||
|
||||
func init() {
|
||||
Index.MergeCommands(ice.Commands{
|
||||
"/sync": {Name: "/sync", Help: "同步", Hand: func(m *ice.Message, arg ...string) {
|
||||
switch m.Option(ARG) {
|
||||
case "wq", "q", "qa":
|
||||
m.Cmd("/sess", aaa.LOGOUT)
|
||||
}
|
||||
|
||||
m.Cmd(SYNC, mdb.INSERT, mdb.TYPE, VIMRC, mdb.NAME, arg[0], mdb.TEXT, kit.Select(m.Option(ARG), m.Option(SUB)),
|
||||
m.OptionSimple(cli.PWD, BUF, ROW, COL))
|
||||
}},
|
||||
SYNC: {Name: "sync id auto page export import", Help: "同步流", Actions: ice.MergeActions(ice.Actions{
|
||||
code.INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) {
|
||||
p := path.Join(m.Option(cli.PWD), m.Option(BUF))
|
||||
ctx.ProcessCommand(m, code.INNER, []string{path.Dir(p) + ice.PS, path.Base(p), m.Option(ROW)}, arg...)
|
||||
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(FAVOR, mdb.INPUTS, arg) }},
|
||||
code.INNER: {Help: "源码", Hand: func(m *ice.Message, arg ...string) {
|
||||
if len(arg) > 0 && arg[0] == ice.RUN {
|
||||
ctx.ProcessField(m, "", nil, arg...)
|
||||
} else {
|
||||
p := path.Join(m.Option(cli.PWD), m.Option(BUF))
|
||||
ctx.ProcessField(m, "", []string{path.Dir(p) + ice.PS, path.Base(p), m.Option(ROW)})
|
||||
}
|
||||
}},
|
||||
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(FAVOR, mdb.INPUTS, arg)
|
||||
FAVOR: {Name: "favor zone*=some type name text pwd buf row", Help: "收藏", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmd(FAVOR, mdb.INSERT, m.OptionSimple(mdb.ZONE, "type,name,text,pwd"), nfs.FILE, m.Option(BUF), nfs.LINE, m.Option(ROW))
|
||||
}},
|
||||
FAVOR: {Name: "favor zone=some@key type name text buf row pwd", Help: "收藏", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(FAVOR, mdb.INSERT, m.OptionSimple(mdb.ZONE, "type,name,text,pwd"),
|
||||
nfs.FILE, m.Option(BUF), nfs.LINE, m.Option(ROW))
|
||||
}},
|
||||
}, mdb.ListAction(mdb.FIELD, "time,id,type,name,text,pwd,buf,row,col")), Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.OptionPage(m, kit.Slice(arg, 1)...)
|
||||
mdb.ListSelect(m, kit.Slice(arg, 0, 1)...)
|
||||
m.PushAction(code.INNER, FAVOR)
|
||||
m.StatusTimeCountTotal(m.Config(mdb.COUNT))
|
||||
}, mdb.PageListAction(mdb.FIELD, "time,id,type,name,text,pwd,buf,row,col")), Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.PageListSelect(m, arg...).PushAction(code.INNER, FAVOR)
|
||||
}},
|
||||
web.P(SYNC): {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmd(SYNC, mdb.INSERT, mdb.TYPE, VIMRC, mdb.NAME, arg[0], mdb.TEXT, kit.Select(m.Option(ARG), m.Option(SUB)), m.OptionSimple(cli.PWD, BUF, ROW, COL))
|
||||
}},
|
||||
})
|
||||
}
|
||||
|
250
misc/vim/tags.go
250
misc/vim/tags.go
@ -5,74 +5,99 @@ import (
|
||||
"strings"
|
||||
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/cli"
|
||||
"shylinux.com/x/icebergs/base/ctx"
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
"shylinux.com/x/icebergs/base/nfs"
|
||||
"shylinux.com/x/icebergs/base/tcp"
|
||||
"shylinux.com/x/icebergs/base/web"
|
||||
"shylinux.com/x/icebergs/core/code"
|
||||
"shylinux.com/x/icebergs/core/wiki"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
|
||||
func _tags_split(pre, col string) []string {
|
||||
ls := kit.Split(pre[:kit.Int(col)-1])
|
||||
ls[len(ls)-1] += kit.Split(pre[kit.Int(col)-1:])[0]
|
||||
return ls
|
||||
}
|
||||
func _tags_field(m *ice.Message, arg ...string) {
|
||||
if arg[0] == "" {
|
||||
return
|
||||
}
|
||||
pre, sp := "", ""
|
||||
if word := kit.Slice(kit.Split(arg[1]+arg[0]), -1)[0]; arg[0] == ice.SP {
|
||||
sp = ice.SP
|
||||
} else if strings.HasSuffix(word, ice.PT) {
|
||||
pre = strings.TrimSuffix(word, ice.PT)
|
||||
} else if p := kit.Split(word, ice.PT); true {
|
||||
sp, pre = p[len(p)-1], word
|
||||
}
|
||||
list0, list := map[string]bool{}, map[string]bool{}
|
||||
push := func(index string) {
|
||||
if strings.HasPrefix(index, pre) {
|
||||
p := kit.Split(sp+strings.TrimPrefix(index, pre), ice.PT)[0]
|
||||
list0[p+kit.Select("", ice.PT, !strings.HasSuffix(index, p))] = true
|
||||
}
|
||||
list[strings.TrimPrefix(index, kit.Join(kit.Slice(kit.Split(pre, ice.PT), 0, -1), ice.PT)+ice.PT)] = true
|
||||
}
|
||||
ctx.CmdList(m).Tables(func(value ice.Maps) {
|
||||
if ls := kit.Split(pre, ice.PT); len(ls) == 1 && strings.Contains(value[ctx.INDEX], pre) && !strings.HasSuffix(arg[0], ice.PT) {
|
||||
push(value[ctx.INDEX])
|
||||
} else if len(ls) > 1 && strings.HasPrefix(value[ctx.INDEX], kit.Join(ls[:len(ls)-1], ice.PT)) && strings.Contains(value[ctx.INDEX], ls[len(ls)-1]) && !strings.HasSuffix(arg[0], ice.PT) {
|
||||
push(value[ctx.INDEX])
|
||||
} else if strings.HasPrefix(value[ctx.INDEX], pre) {
|
||||
res := sp + strings.TrimPrefix(value[ctx.INDEX], pre)
|
||||
ls := kit.Split(res, ice.PT)
|
||||
if len(ls) == 0 {
|
||||
return
|
||||
} else if len(ls) > 1 {
|
||||
ls[0] += ice.PT
|
||||
}
|
||||
if strings.HasPrefix(res, ice.PT) {
|
||||
list[ice.PT+ls[0]] = true
|
||||
} else {
|
||||
list[ls[0]] = true
|
||||
}
|
||||
}
|
||||
})
|
||||
kit.Fetch(list0, func(k string) { m.Echo("%s\n", k) })
|
||||
kit.Fetch(list, func(k string) { m.Echo("%s\n", k) })
|
||||
}
|
||||
func _tags_input(m *ice.Message, arg ...string) {
|
||||
if kit.Ext(m.Option(BUF)) == nfs.SHY && arg[1] == "" {
|
||||
kit.Fetch([]string{"field", "shell", "refer", "section", "chapter", "title"}, func(k string) {
|
||||
kit.If(strings.HasPrefix(k, arg[0]), func() { m.Echo("%s \n", k) })
|
||||
})
|
||||
_tags_field(m, arg...)
|
||||
return
|
||||
} else if arg[1] == "" {
|
||||
_tags_field(m, arg...)
|
||||
return
|
||||
} else if kit.Ext(m.Option(BUF)) == nfs.SHY && strings.HasPrefix(arg[1], "field") {
|
||||
_tags_field(m, arg...)
|
||||
return
|
||||
}
|
||||
name := kit.Select("", kit.Slice(kit.Split(arg[1], "\t \n."), -1), 0)
|
||||
switch name {
|
||||
case "can":
|
||||
mdb.ZoneSelectCB(m, "", func(value ice.Maps) { m.Echo(value[mdb.NAME] + ice.NL) })
|
||||
return
|
||||
}
|
||||
mdb.ZoneSelectCB(m, name, func(value ice.Maps) {
|
||||
if !strings.Contains(value[mdb.NAME], arg[0]) && arg[0] != ice.PT {
|
||||
return
|
||||
} else if m.Length() == 0 {
|
||||
m.Echo("func" + ice.NL)
|
||||
}
|
||||
m.Echo(value[mdb.NAME] + ice.NL)
|
||||
m.Echo("%s: %s"+ice.NL, value[mdb.NAME], strings.Split(value[mdb.TEXT], ice.NL)[0])
|
||||
})
|
||||
}
|
||||
|
||||
const TAGS = "tags"
|
||||
|
||||
func init() {
|
||||
_tags_split := func(pre, col string) []string {
|
||||
ls := kit.Split(pre[:kit.Int(col)-1])
|
||||
ls[len(ls)-1] += kit.Split(pre[kit.Int(col)-1:])[0]
|
||||
return ls
|
||||
}
|
||||
_tags_field := func(m *ice.Message, arg ...string) {
|
||||
if arg[0] == "" {
|
||||
return
|
||||
}
|
||||
pre, sp := "", ""
|
||||
if word := kit.Slice(kit.Split(arg[1]+arg[0]), -1)[0]; arg[0] == ice.SP {
|
||||
sp = ice.SP
|
||||
} else if strings.HasSuffix(word, ice.PT) {
|
||||
pre = strings.TrimSuffix(word, ice.PT)
|
||||
} else if p := kit.Split(word, ice.PT); true {
|
||||
sp, pre = p[len(p)-1], word
|
||||
}
|
||||
|
||||
m.OptionFields(ctx.INDEX)
|
||||
list0 := map[string]bool{}
|
||||
list := map[string]bool{}
|
||||
push := func(index string) {
|
||||
if strings.HasPrefix(index, pre) {
|
||||
p := kit.Split(sp+strings.TrimPrefix(index, pre), ice.PT)[0]
|
||||
list0[p+kit.Select("", ice.PT, !strings.HasSuffix(index, p))] = true
|
||||
}
|
||||
list[strings.TrimPrefix(index, kit.Join(kit.Slice(kit.Split(pre, ice.PT), 0, -1), ice.PT)+ice.PT)] = true
|
||||
}
|
||||
m.Cmd(ctx.COMMAND, mdb.SEARCH, ctx.COMMAND).Tables(func(value ice.Maps) {
|
||||
if ls := kit.Split(pre, ice.PT); len(ls) == 1 && strings.Contains(value[ctx.INDEX], pre) && !strings.HasSuffix(arg[0], ice.PT) {
|
||||
push(value[ctx.INDEX])
|
||||
|
||||
} else if len(ls) > 1 && strings.HasPrefix(value[ctx.INDEX], kit.Join(ls[:len(ls)-1], ice.PT)) && strings.Contains(value[ctx.INDEX], ls[len(ls)-1]) && !strings.HasSuffix(arg[0], ice.PT) {
|
||||
push(value[ctx.INDEX])
|
||||
|
||||
} else if strings.HasPrefix(value[ctx.INDEX], pre) {
|
||||
res := sp + strings.TrimPrefix(value[ctx.INDEX], pre)
|
||||
ls := kit.Split(res, ice.PT)
|
||||
if len(ls) == 0 {
|
||||
return
|
||||
}
|
||||
if len(ls) > 1 {
|
||||
ls[0] += ice.PT
|
||||
}
|
||||
if strings.HasPrefix(res, ice.PT) {
|
||||
list[ice.PT+ls[0]] = true
|
||||
} else {
|
||||
list[ls[0]] = true
|
||||
}
|
||||
}
|
||||
})
|
||||
for _, k := range kit.SortedKey(list0) {
|
||||
m.Echo("%s\n", k)
|
||||
}
|
||||
for _, k := range kit.SortedKey(list) {
|
||||
m.Echo("%s\n", k)
|
||||
}
|
||||
}
|
||||
const (
|
||||
MODULE = "module"
|
||||
PATTERN = "pattern"
|
||||
@ -86,33 +111,37 @@ func init() {
|
||||
libs_pattern = "4\nusr/volcanos/lib/%s.js\n/\\<%s: \\(shy\\|func\\)/\n"
|
||||
)
|
||||
Index.MergeCommands(ice.Commands{
|
||||
"/tags": {Name: "/tags", Help: "跳转", Actions: ice.Actions{
|
||||
"server": {Name: "server", Help: "服务", Hand: func(m *ice.Message, arg ...string) {
|
||||
TAGS: {Name: "tags zone id auto insert", Help: "索引", Actions: ice.MergeActions(ice.Actions{
|
||||
"listTags": {Help: "索引", Hand: func(m *ice.Message, arg ...string) {
|
||||
kit.Fetch(kit.UnMarshal(m.Option(mdb.TEXT)), func(value ice.Map) {
|
||||
kit.If(value != nil, func() { mdb.ZoneInsert(m, value[mdb.ZONE], kit.Simple(value)) })
|
||||
})
|
||||
}},
|
||||
code.INNER: {Hand: func(m *ice.Message, arg ...string) { ctx.ProcessField(m, "", m.OptionSplit("path,file,line"), arg...) }},
|
||||
INPUT: {Hand: func(m *ice.Message, arg ...string) { _tags_input(m, arg...) }},
|
||||
}, mdb.ZoneAction(mdb.FIELD, "time,id,type,name,text,path,file,line"), ctx.ACTION, code.INNER), Hand: func(m *ice.Message, arg ...string) {
|
||||
if mdb.ZoneSelectAll(m, arg...); len(arg) == 0 {
|
||||
m.Action("listTags", mdb.EXPORT, mdb.IMPORT)
|
||||
}
|
||||
}},
|
||||
web.P(TAGS): {Actions: ice.Actions{
|
||||
tcp.SERVER: {Hand: func(m *ice.Message, arg ...string) {
|
||||
switch args := _tags_split(m.Option(PRE), m.Option(COL)); args[0] {
|
||||
case "field":
|
||||
m.Echo(`!curl "localhost:9020/code/bash/qrcode?text=%s"`, kit.Format("http://2022.shylinux.com:9020/chat/cmd/%s?topic=black", args[1]))
|
||||
case "qrcode":
|
||||
m.Echo(`!curl "localhost:9020/code/bash/qrcode?text=%s"`, args[1])
|
||||
case cli.QRCODE:
|
||||
m.Echo(`!curl "http://localhost:9020/code/bash/qrcode?text=%s"`, args[1])
|
||||
case wiki.FIELD:
|
||||
m.Echo(`!curl "http://localhost:9020/code/bash/qrcode?text=%s"`, kit.Format("http://2022.shylinux.com:9020/chat/cmd/%s?topic=black", args[1]))
|
||||
}
|
||||
}},
|
||||
"source": {Name: "source", Help: "源码", Hand: func(m *ice.Message, arg ...string) {
|
||||
nfs.SOURCE: {Hand: func(m *ice.Message, arg ...string) {
|
||||
switch args := _tags_split(m.Option(PRE), m.Option(COL)); args[0] {
|
||||
case "field":
|
||||
case cli.QRCODE:
|
||||
m.Echo(`!curl "http://localhost:9020/code/bash/qrcode?text=%s"`, args[1])
|
||||
case wiki.FIELD:
|
||||
m.Search(kit.Select(args[1], args, 2), func(key string, cmd *ice.Command) {
|
||||
ls := kit.Split(cmd.GetFileLines(), ":")
|
||||
ls := kit.Split(cmd.GetFileLines(), ice.DF)
|
||||
m.Echo("vi +%s %s", ls[1], ls[0])
|
||||
})
|
||||
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) {
|
||||
@ -132,70 +161,5 @@ func init() {
|
||||
}
|
||||
}
|
||||
}},
|
||||
TAGS: {Name: "tags zone id auto", Help: "索引", Actions: ice.MergeActions(ice.Actions{
|
||||
"listTags": {Name: "listTags", Help: "索引", Hand: func(m *ice.Message, arg ...string) {
|
||||
kit.Fetch(kit.UnMarshal(m.Option(mdb.TEXT)), func(index int, value ice.Map) {
|
||||
if value == nil {
|
||||
return
|
||||
}
|
||||
m.Cmd(TAGS, mdb.INSERT, mdb.ZONE, value[mdb.ZONE], kit.Simple(value))
|
||||
})
|
||||
m.ProcessRefresh()
|
||||
}},
|
||||
mdb.INSERT: {Name: "insert zone=core type name=hi text=hello path file line", Help: "添加"},
|
||||
code.INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) {
|
||||
ctx.ProcessCommand(m, code.INNER, m.OptionSplit("path,file,line"), arg...)
|
||||
}},
|
||||
INPUT: {Name: "input name text", Hand: func(m *ice.Message, arg ...string) {
|
||||
if kit.Ext(m.Option(BUF)) == nfs.SHY && arg[1] == "" {
|
||||
for _, k := range []string{
|
||||
"field",
|
||||
"shell",
|
||||
"refer",
|
||||
"section",
|
||||
"chapter",
|
||||
"title",
|
||||
} {
|
||||
if strings.HasPrefix(k, arg[0]) {
|
||||
m.Echo("%s \n", k)
|
||||
}
|
||||
}
|
||||
_tags_field(m, arg...)
|
||||
return
|
||||
}
|
||||
if arg[1] == "" {
|
||||
_tags_field(m, arg...)
|
||||
return
|
||||
}
|
||||
if kit.Ext(m.Option(BUF)) == nfs.SHY && strings.HasPrefix(arg[1], "field") {
|
||||
_tags_field(m, arg...)
|
||||
return
|
||||
}
|
||||
name := kit.Select("", kit.Slice(kit.Split(arg[1], "\t \n."), -1), 0)
|
||||
switch name {
|
||||
case "can":
|
||||
mdb.ZoneSelectCB(m, "", func(value ice.Maps) {
|
||||
m.Echo(value[mdb.NAME] + ice.NL)
|
||||
})
|
||||
return
|
||||
}
|
||||
mdb.ZoneSelectCB(m, name, func(value ice.Maps) {
|
||||
if !strings.Contains(value[mdb.NAME], arg[0]) && arg[0] != ice.PT {
|
||||
return
|
||||
}
|
||||
if m.Length() == 0 {
|
||||
m.Echo("func" + ice.NL)
|
||||
}
|
||||
m.Echo(value[mdb.NAME] + ice.NL)
|
||||
m.Echo("%s: %s"+ice.NL, value[mdb.NAME], strings.Split(value[mdb.TEXT], ice.NL)[0])
|
||||
})
|
||||
}},
|
||||
}, 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.ZoneSelectAll(m, arg...); len(arg) == 0 {
|
||||
m.Action("listTags", mdb.CREATE, mdb.EXPORT, mdb.IMPORT)
|
||||
} else {
|
||||
m.Action(mdb.INSERT).PushAction(code.INNER).StatusTimeCount()
|
||||
}
|
||||
}},
|
||||
})
|
||||
}
|
||||
|
@ -12,15 +12,11 @@ const VIM = "vim"
|
||||
|
||||
var Index = &ice.Context{Name: VIM, Help: "编辑器", Commands: ice.Commands{
|
||||
VIM: {Name: "vim path auto order build download", Help: "编辑器", Actions: ice.MergeActions(ice.Actions{
|
||||
cli.BUILD: {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(code.INSTALL, cli.BUILD, m.Config(nfs.SOURCE), "--enable-multibyte=yes",
|
||||
"--enable-pythoninterp=yes", "--enable-luainterp=yes", "--enable-cscope=yes")
|
||||
}},
|
||||
cli.ORDER: {Name: "order", Help: "加载", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(code.INSTALL, cli.ORDER, m.Config(nfs.SOURCE), "_install/bin")
|
||||
cli.BUILD: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(code.INSTALL, cli.BUILD, m.Config(nfs.SOURCE), "--enable-multibyte=yes", "--enable-cscope=yes", "--enable-luainterp=yes", "--enable-pythoninterp=yes")
|
||||
}},
|
||||
}, code.InstallAction(nfs.SOURCE, "http://mirrors.tencent.com/macports/distfiles/vim/vim-8.2.2681.tar.gz")), Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(code.INSTALL, nfs.SOURCE, m.Config(nfs.SOURCE), arg)
|
||||
m.Cmdy(code.INSTALL, m.ConfigSimple(nfs.SOURCE), arg)
|
||||
}},
|
||||
}}
|
||||
|
||||
|
@ -2,47 +2,14 @@ package vim
|
||||
|
||||
import (
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
"shylinux.com/x/icebergs/core/code"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
|
||||
const VIMRC = "vimrc"
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{Commands: ice.Commands{
|
||||
VIMRC: {Name: "vimrc", Help: "收藏夹", Actions: ice.MergeActions(ice.Actions{
|
||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmd(mdb.PLUGIN, mdb.CREATE, VIMRC, m.PrefixKey())
|
||||
m.Cmd(mdb.RENDER, mdb.CREATE, VIMRC, m.PrefixKey())
|
||||
m.Cmd(mdb.PLUGIN, mdb.CREATE, VIM, m.PrefixKey())
|
||||
m.Cmd(mdb.RENDER, mdb.CREATE, VIM, m.PrefixKey())
|
||||
code.LoadPlug(m, VIMRC)
|
||||
}},
|
||||
}, code.PlugAction())},
|
||||
}, Configs: ice.Configs{
|
||||
VIMRC: {Name: VIMRC, Help: "收藏夹", Value: kit.Data(
|
||||
code.PLUG, kit.Dict(
|
||||
code.SPLIT, kit.Dict("space", " \t", "operator", "{[(&.,;!|<>)]}"),
|
||||
code.PREFIX, kit.Dict("\"", "comment"), code.PREPARE, kit.Dict(
|
||||
code.KEYWORD, kit.Simple(
|
||||
"source", "finish",
|
||||
"set", "let", "end",
|
||||
"if", "else", "elseif", "endif",
|
||||
"for", "in", "continue", "break", "endfor",
|
||||
"try", "catch", "finally", "endtry",
|
||||
"call", "function", "return", "endfunction",
|
||||
|
||||
"autocmd", "command", "execute",
|
||||
"nnoremap", "cnoremap", "inoremap",
|
||||
"colorscheme", "highlight", "syntax",
|
||||
),
|
||||
code.FUNCTION, kit.Simple(
|
||||
"has", "type", "empty",
|
||||
"exists", "executable",
|
||||
),
|
||||
),
|
||||
),
|
||||
)},
|
||||
}})
|
||||
Index.MergeCommands(ice.Commands{
|
||||
VIM: {Name: "vim", Actions: code.PlugAction()},
|
||||
VIMRC: {Name: "vimrc", Actions: code.PlugAction()},
|
||||
})
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user