1
0
forked from x/icebergs
This commit is contained in:
harveyshao 2022-12-12 19:42:06 +08:00
parent 3de5a53832
commit d98d392a61
20 changed files with 214 additions and 323 deletions

View File

@ -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))
}

View File

@ -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))

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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) {

View File

@ -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] {

View File

@ -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] {

View File

@ -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)) }},

View File

@ -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) {

View File

@ -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) {

View File

@ -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] == "" {

View File

@ -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

View File

@ -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()
}
}},
})
}

View File

@ -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")},
})
}

View File

@ -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) }}})
}

View File

@ -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))
}},
})
}

View File

@ -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()
}
}},
})
}

View File

@ -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)
}},
}}

View File

@ -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()},
})
}