mirror of
https://shylinux.com/x/icebergs
synced 2025-04-25 17:18:05 +08:00
opt vim
This commit is contained in:
parent
f9faaa4d9a
commit
1f228402e6
@ -13,6 +13,7 @@ func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
PYTHON: {Name: "python", Help: "脚本命令", Value: kit.Data(
|
||||
"python", "python",
|
||||
"source", "http://mirrors.sohu.com/python/3.5.2/Python-3.5.2.tar.xz",
|
||||
"qrcode", `import pyqrcode; print(pyqrcode.create('%s').terminal(module_color='%s', quiet_zone=1))`,
|
||||
)},
|
||||
@ -30,9 +31,9 @@ func init() {
|
||||
}},
|
||||
|
||||
"qrcode": {Name: "qrcode text color", Help: "安装", Hand: func(m *ice.Message, arg ...string) {
|
||||
prefix := []string{SYSTEM, m.Conf(PYTHON, kit.Keys(kit.MDB_META, PYTHON))}
|
||||
prefix := []string{SYSTEM, m.Conf(PYTHON, "meta.python")}
|
||||
m.Cmdy(prefix, "-c", kit.Format(m.Conf(PYTHON, "meta.qrcode"),
|
||||
kit.Select("hello world", arg, 0), kit.Select("blue", arg, 1)))
|
||||
kit.Select("hello world", m.Option("text")), kit.Select("blue", m.Option("color"))))
|
||||
}},
|
||||
"pip": {Name: "pip", Help: "安装", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(SYSTEM, m.Conf(PYTHON, "meta.pip"), "install", arg)
|
||||
|
@ -1,6 +1,7 @@
|
||||
package cli
|
||||
|
||||
import (
|
||||
qrcodeTerminal "github.com/Baozisoftware/qrcode-terminal-go"
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
@ -60,6 +61,9 @@ const (
|
||||
CMD_CODE = "cmd_code"
|
||||
)
|
||||
|
||||
const (
|
||||
QRCODE = "qrcode"
|
||||
)
|
||||
const SYSTEM = "system"
|
||||
|
||||
func init() {
|
||||
@ -68,7 +72,32 @@ func init() {
|
||||
SYSTEM: {Name: SYSTEM, Help: "系统命令", Value: kit.Data()},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
SYSTEM: {Name: "system id auto", Help: "系统命令", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
|
||||
SYSTEM: {Name: "system id auto", Help: "系统命令", Action: map[string]*ice.Action{
|
||||
QRCODE: {Name: "qrcode text fg bg lv", Help: "二维码", Hand: func(m *ice.Message, arg ...string) {
|
||||
fg := qrcodeTerminal.ConsoleColors.BrightBlue
|
||||
bg := qrcodeTerminal.ConsoleColors.BrightWhite
|
||||
switch m.Option("fg") {
|
||||
case "black":
|
||||
fg = qrcodeTerminal.ConsoleColors.BrightBlack
|
||||
case "red":
|
||||
fg = qrcodeTerminal.ConsoleColors.BrightRed
|
||||
case "green":
|
||||
fg = qrcodeTerminal.ConsoleColors.BrightGreen
|
||||
case "yellow":
|
||||
fg = qrcodeTerminal.ConsoleColors.BrightYellow
|
||||
case "blue":
|
||||
fg = qrcodeTerminal.ConsoleColors.BrightBlue
|
||||
case "cyan":
|
||||
fg = qrcodeTerminal.ConsoleColors.BrightCyan
|
||||
case "magenta":
|
||||
fg = qrcodeTerminal.ConsoleColors.BrightMagenta
|
||||
case "white":
|
||||
fg = qrcodeTerminal.ConsoleColors.BrightWhite
|
||||
}
|
||||
obj := qrcodeTerminal.New2(fg, bg, qrcodeTerminal.QRCodeRecoveryLevels.Medium)
|
||||
m.Echo("%s", *obj.Get(m.Option(kit.MDB_TEXT)))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
|
||||
if len(arg) == 0 || kit.Int(arg[0]) > 0 {
|
||||
m.Option("_control", "_page")
|
||||
m.Option(mdb.FIELDS, kit.Select("time,id,cmd,dir,env", mdb.DETAIL, len(arg) > 0))
|
||||
|
@ -411,6 +411,7 @@ const (
|
||||
INPUTS = "inputs"
|
||||
INVITE = "invite"
|
||||
COMMIT = "commit"
|
||||
SOURCE = "source"
|
||||
)
|
||||
const (
|
||||
CACHE_LIMIT = "cache.limit"
|
||||
|
@ -99,6 +99,9 @@ ish_miss_prepare_install
|
||||
Commands: map[string]*ice.Command{
|
||||
DREAM: {Name: "dream name path auto 启动", Help: "梦想家", Action: map[string]*ice.Action{
|
||||
gdb.START: {Name: "start type=worker,server repos name", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
|
||||
if m.Option(kit.MDB_NAME) == "self" {
|
||||
m.Option(kit.MDB_NAME, "")
|
||||
}
|
||||
_dream_show(m, m.Option(kit.MDB_NAME, kit.Select(path.Base(m.Option(kit.SSH_REPOS)), m.Option(kit.MDB_NAME))))
|
||||
}},
|
||||
gdb.STOP: {Name: "stop", Help: "停止", Hand: func(m *ice.Message, arg ...string) {
|
||||
|
@ -69,6 +69,6 @@ var Index = &ice.Context{Name: CHAT, Help: "聊天中心",
|
||||
func init() {
|
||||
web.Index.Register(Index, &web.Frame{},
|
||||
HEADER, RIVER, STORM, ACTION, FOOTER,
|
||||
LOCATION, PASTE, SCAN,
|
||||
LOCATION, PASTE, SCAN, FILES,
|
||||
)
|
||||
}
|
||||
|
14
exec.go
14
exec.go
@ -110,9 +110,14 @@ func (m *Message) Back(res *Message) *Message {
|
||||
return m
|
||||
}
|
||||
func (m *Message) Gos(msg *Message, cb interface{}, args ...interface{}) *Message {
|
||||
task.Put(m.Cmdx("gdb.routine", "create", "fileline", kit.FileLine(cb, 3), "status", "start"), func(task *task.Task) error {
|
||||
msg.Optionv("task.hash", task.Arg)
|
||||
msg.Optionv("_task", task)
|
||||
// h := m.Cmdx("gdb.routine", "create", "fileline", kit.FileLine(cb, 3), "status", "start")
|
||||
task.Put(kit.FileLine(3, 3), func(task *task.Task) error {
|
||||
// msg.Optionv("task.hash", task.Arg)
|
||||
// msg.Optionv("_task", task)
|
||||
// defer func() {
|
||||
// msg.Option(kit.MDB_HASH, task.Arg)
|
||||
// msg.Cmdx("gdb.routine", "modify", "status", "stop")
|
||||
// }()
|
||||
|
||||
msg.TryCatch(msg, true, func(msg *Message) {
|
||||
switch cb := cb.(type) {
|
||||
@ -122,9 +127,6 @@ func (m *Message) Gos(msg *Message, cb interface{}, args ...interface{}) *Messag
|
||||
cb()
|
||||
}
|
||||
})
|
||||
|
||||
msg.Option(kit.MDB_HASH, task.Arg)
|
||||
msg.Cmdx("gdb.routine", "modify", "status", "stop")
|
||||
return nil
|
||||
})
|
||||
return msg
|
||||
|
2
go.mod
2
go.mod
@ -3,8 +3,10 @@ module github.com/shylinux/icebergs
|
||||
go 1.13
|
||||
|
||||
require (
|
||||
github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f
|
||||
github.com/gorilla/websocket v1.4.2
|
||||
github.com/kr/pty v1.1.1
|
||||
github.com/mattn/go-colorable v0.1.8 // indirect
|
||||
github.com/nareix/joy4 v0.0.0-20200507095837-05a4ffbb5369
|
||||
github.com/shylinux/toolkits v0.1.9
|
||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
|
||||
|
9
go.sum
9
go.sum
@ -1,9 +1,15 @@
|
||||
github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f h1:2dk3eOnYllh+wUOuDhOoC2vUVoJF/5z478ryJ+wzEII=
|
||||
github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f/go.mod h1:4a58ifQTEe2uwwsaqbh3i2un5/CBPg+At/qHpt18Tmk=
|
||||
github.com/google/uuid v1.1.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
|
||||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/maruel/rs v0.0.0-20150922171536-2c81c4312fe4/go.mod h1:kcRFpEzolcEklV6rD7W95mG49/sbdX/PlFmd7ni3RvA=
|
||||
github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=
|
||||
github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
|
||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||
github.com/nareix/joy4 v0.0.0-20200507095837-05a4ffbb5369/go.mod h1:aFJ1ZwLjvHN4yEzE5Bkz8rD8/d8Vlj3UIuvz2yfET7I=
|
||||
github.com/shylinux/toolkits v0.1.9 h1:gfQnXSBBuCtUueNF5eL0kZAjJS8pzODrjxIL0WynqsQ=
|
||||
github.com/shylinux/toolkits v0.1.9/go.mod h1:Y68Ot6xOmo1bun67YvqC3chDGeU2gDxtsUnvVDGJm4g=
|
||||
@ -17,4 +23,7 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae h1:/WDfKMnPU+m5M4xB+6x4kaepxRw6jWvR5iDRdvjHgy8=
|
||||
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
|
@ -1,24 +0,0 @@
|
||||
package vim
|
||||
|
||||
/*
|
||||
m.Conf(web.FAVOR, "meta.render.vimrc", m.AddCmd(&ice.Command{Name: "render favor id", Help: "渲染引擎", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
value := m.Optionv("value").(map[string]interface{})
|
||||
switch value["name"] {
|
||||
case "read", "write", "exec":
|
||||
p := path.Join(kit.Format(kit.Value(value, "extra.pwd")), kit.Format(kit.Value(value, "extra.buf")))
|
||||
if strings.HasPrefix(kit.Format(kit.Value(value, "extra.buf")), "/") {
|
||||
p = path.Join(kit.Format(kit.Value(value, "extra.buf")))
|
||||
}
|
||||
|
||||
f, e := os.Open(p)
|
||||
m.Assert(e)
|
||||
defer f.Close()
|
||||
b, e := ioutil.ReadAll(f)
|
||||
m.Assert(e)
|
||||
m.Echo(string(b))
|
||||
default:
|
||||
m.Cmdy(cli.SYSTEM, "sed", "-n", fmt.Sprintf("/%s/,/^}$/p", value["text"]), kit.Value(value, "extra.buf"))
|
||||
}
|
||||
}}))
|
||||
|
||||
*/
|
@ -3,6 +3,7 @@ package vim
|
||||
import (
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/core/code"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"strings"
|
||||
@ -14,26 +15,23 @@ func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
FAVOR: {Name: FAVOR, Help: "收藏夹", Value: kit.Data(
|
||||
kit.MDB_SHORT, "topic", kit.MDB_FIELD, "time,id,type,name,text,file,line",
|
||||
kit.MDB_SHORT, kit.MDB_TOPIC, kit.MDB_FIELD, "time,id,type,name,text,file,line",
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
FAVOR: {Name: "favor topic=auto id=auto auto 创建 导出 导入", Help: "收藏夹", Action: map[string]*ice.Action{
|
||||
FAVOR: {Name: "favor topic=auto id=auto auto create export import", Help: "收藏夹", Action: map[string]*ice.Action{
|
||||
mdb.CREATE: {Name: "create topic", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, arg)
|
||||
}},
|
||||
mdb.INSERT: {Name: "insert topic=数据结构 name=hi text=hello", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Richs(m.Prefix(FAVOR), "", m.Option("topic"), func(key string, value map[string]interface{}) {
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), kit.Keys(kit.MDB_HASH, key), mdb.LIST, arg)
|
||||
})
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC))
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), kit.SubKey(m.Option(kit.MDB_TOPIC)), mdb.LIST, arg[2:])
|
||||
}},
|
||||
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Richs(m.Prefix(FAVOR), "", m.Option("topic"), func(key string, value map[string]interface{}) {
|
||||
m.Cmdy(mdb.MODIFY, m.Prefix(FAVOR), kit.Keys(kit.MDB_HASH, key), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg)
|
||||
})
|
||||
m.Cmdy(mdb.MODIFY, m.Prefix(FAVOR), kit.SubKey(m.Option(kit.MDB_TOPIC)), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg)
|
||||
}},
|
||||
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.DELETE, m.Prefix(FAVOR), "", mdb.HASH, "topic", m.Option("topic"))
|
||||
m.Cmdy(mdb.DELETE, m.Prefix(FAVOR), "", mdb.HASH, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC))
|
||||
}},
|
||||
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.EXPORT, m.Prefix(FAVOR), "", mdb.HASH)
|
||||
@ -43,42 +41,51 @@ func init() {
|
||||
}},
|
||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||
switch arg[0] {
|
||||
case "topic":
|
||||
m.Option(mdb.FIELDS, "time,count,topic")
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.HASH)
|
||||
case kit.MDB_TOPIC:
|
||||
m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), "", mdb.HASH, arg)
|
||||
default:
|
||||
m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), kit.SubKey(m.Option(kit.MDB_TOPIC)), mdb.LIST, arg)
|
||||
}
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) > 0 {
|
||||
m.Option(mdb.FIELDS, kit.Select(m.Conf(m.Prefix(FAVOR), kit.META_FIELD), mdb.DETAIL, len(arg) > 1))
|
||||
m.Richs(m.Prefix(FAVOR), "", arg[0], func(key string, value map[string]interface{}) {
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), kit.Keys(kit.MDB_HASH, key), mdb.LIST, kit.MDB_ID, arg[1:])
|
||||
})
|
||||
code.INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) {
|
||||
if len(arg) > 0 && arg[0] == mdb.RENDER {
|
||||
m.Cmdy(code.INNER, arg[1:])
|
||||
return
|
||||
}
|
||||
|
||||
m.PushPlugin(code.INNER, code.INNER, mdb.RENDER)
|
||||
m.Push(kit.SSH_ARG, kit.Format([]string{kit.Select("./", m.Option(kit.MDB_PATH)), m.Option(kit.MDB_FILE), m.Option(kit.MDB_LINE)}))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) == 0 {
|
||||
m.Option(mdb.FIELDS, "time,count,topic")
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.HASH)
|
||||
m.PushAction("删除")
|
||||
m.PushAction(mdb.REMOVE)
|
||||
return
|
||||
}
|
||||
|
||||
m.Option(mdb.FIELDS, kit.Select(m.Conf(m.Prefix(FAVOR), kit.META_FIELD), mdb.DETAIL, len(arg) > 1))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), kit.SubKey(arg[0]), mdb.LIST, kit.MDB_ID, arg[1:])
|
||||
m.PushAction(code.INNER)
|
||||
}},
|
||||
|
||||
"/favor": {Name: "/favor", Help: "收藏", Action: map[string]*ice.Action{
|
||||
"select": {Name: "select", Help: "主题", Hand: func(m *ice.Message, arg ...string) {
|
||||
list := []string{}
|
||||
m.Cmd(m.Prefix(FAVOR)).Table(func(index int, value map[string]string, head []string) {
|
||||
list = append(list, value["topic"])
|
||||
})
|
||||
m.Render(ice.RENDER_RESULT, strings.Join(list, "\n"))
|
||||
}},
|
||||
"insert": {Name: "insert", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmd(m.Prefix(FAVOR), mdb.INSERT, "topic", m.Option("tab"),
|
||||
"name", m.Option("note"), "text", m.Option("arg"), "file", m.Option("buf"), "line", m.Option("row"),
|
||||
mdb.INSERT: {Name: "insert", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmd(m.Prefix(FAVOR), mdb.INSERT, kit.MDB_TOPIC, m.Option(TAB),
|
||||
kit.MDB_NAME, m.Option("note"), kit.MDB_TEXT, m.Option(ARG), kit.MDB_FILE, m.Option(BUF), kit.MDB_LINE, m.Option(ROW),
|
||||
)
|
||||
}},
|
||||
mdb.SELECT: {Name: "select", Help: "主题", Hand: func(m *ice.Message, arg ...string) {
|
||||
list := []string{}
|
||||
m.Cmd(m.Prefix(FAVOR)).Table(func(index int, value map[string]string, head []string) {
|
||||
list = append(list, value[kit.MDB_TOPIC])
|
||||
})
|
||||
m.Echo(strings.Join(list, "\n"))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Render(ice.RENDER_RESULT)
|
||||
m.Cmd(m.Prefix(FAVOR), m.Option("tab")).Table(func(index int, value map[string]string, head []string) {
|
||||
m.Echo("%v\n", m.Option("tab")).Echo("%v:%v:%v:(%v): %v\n",
|
||||
value["file"], value["line"], "1", value["name"], value["text"])
|
||||
m.Cmd(m.Prefix(FAVOR), m.Option(TAB)).Table(func(index int, value map[string]string, head []string) {
|
||||
m.Echo("%v\n", m.Option(TAB)).Echo("%v:%v:%v:(%v): %v\n",
|
||||
value[kit.MDB_FILE], value[kit.MDB_LINE], "1", value[kit.MDB_NAME], value[kit.MDB_TEXT])
|
||||
})
|
||||
}},
|
||||
},
|
||||
|
@ -19,7 +19,7 @@ func init() {
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
INPUT: {Name: "sync id=auto auto 导出 导入", Help: "同步流", Action: map[string]*ice.Action{
|
||||
INPUT: {Name: "sync id=auto auto export import", Help: "同步流", Action: map[string]*ice.Action{
|
||||
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.EXPORT, m.Prefix(INPUT), "", mdb.LIST)
|
||||
}},
|
||||
@ -30,9 +30,8 @@ func init() {
|
||||
m.Option(mdb.FIELDS, kit.Select(m.Conf(INPUT, kit.META_FIELD), mdb.DETAIL, len(arg) > 0))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(INPUT), "", mdb.LIST, kit.MDB_ID, arg)
|
||||
}},
|
||||
"/input": {Name: "/input", Help: "补全", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Render(ice.RENDER_RESULT)
|
||||
|
||||
"/input": {Name: "/input", Help: "补全", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if arg[0] = strings.TrimSpace(arg[0]); strings.HasPrefix(arg[0], "ice ") {
|
||||
list := kit.Split(arg[0])
|
||||
switch list[1] {
|
||||
|
@ -8,7 +8,6 @@ import (
|
||||
"github.com/shylinux/icebergs/base/web"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"strings"
|
||||
)
|
||||
@ -19,6 +18,10 @@ const (
|
||||
SUB = "sub"
|
||||
PWD = "pwd"
|
||||
PID = "pid"
|
||||
BUF = "buf"
|
||||
TAB = "tab"
|
||||
ROW = "row"
|
||||
COL = "col"
|
||||
)
|
||||
const SESS = "sess"
|
||||
|
||||
@ -27,45 +30,19 @@ func init() {
|
||||
Configs: map[string]*ice.Config{
|
||||
SESS: {Name: SESS, Help: "会话流", Value: kit.Data(
|
||||
kit.MDB_FIELD, "time,hash,status,username,hostname,pid,pwd",
|
||||
"contexts", `export ctx_dev={{.Option "httphost"}} ctx_temp=$(mktemp); curl -sL $ctx_dev >$ctx_temp; source $ctx_temp`,
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
SESS: {Name: "sess hash auto 清理", Help: "会话流", Action: map[string]*ice.Action{
|
||||
"contexts": {Name: "contexts", Help: "环境", Hand: func(m *ice.Message, arg ...string) {
|
||||
u := kit.ParseURL(m.Option(ice.MSG_USERWEB))
|
||||
m.Option("httphost", fmt.Sprintf("%s://%s:%s", u.Scheme, strings.Split(u.Host, ":")[0], kit.Select(kit.Select("80", "443", u.Scheme == "https"), strings.Split(u.Host, ":"), 1)))
|
||||
|
||||
if buf, err := kit.Render(m.Conf(m.Prefix(SESS), "meta.contexts"), m); m.Assert(err) {
|
||||
m.Cmdy("web.wiki.spark", "shell", string(buf))
|
||||
}
|
||||
}},
|
||||
mdb.DELETE: {Name: "delete", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.DELETE, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
|
||||
}},
|
||||
SESS: {Name: "sess hash auto prunes", Help: "会话流", Action: map[string]*ice.Action{
|
||||
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Option(mdb.FIELDS, m.Conf(m.Prefix(SESS), kit.META_FIELD))
|
||||
m.Cmdy(mdb.PRUNES, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, "logout")
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Option(mdb.FIELDS, kit.Select(m.Conf(m.Prefix(SESS), kit.META_FIELD), mdb.DETAIL, len(arg) > 0))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, arg)
|
||||
m.PushAction("删除")
|
||||
}},
|
||||
"/sess": {Name: "/sess", Help: "会话", Action: map[string]*ice.Action{
|
||||
"logout": {Name: "logout", Help: "退出", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.MODIFY, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(SID), kit.MDB_STATUS, "logout")
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Render(ice.RENDER_RESULT)
|
||||
m.Option(mdb.FIELDS, m.Conf(m.Prefix(SESS), kit.META_FIELD))
|
||||
if strings.TrimSpace(m.Option(SID)) == "" {
|
||||
m.Option(SID, m.Cmdx(mdb.INSERT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, "login",
|
||||
aaa.USERNAME, m.Option(aaa.USERNAME), tcp.HOSTNAME, m.Option(tcp.HOSTNAME), PID, m.Option(PID), PWD, m.Option(PWD)))
|
||||
} else {
|
||||
m.Cmdy(mdb.MODIFY, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(SID), kit.MDB_STATUS, "login")
|
||||
}
|
||||
m.Echo(m.Option(SID))
|
||||
}},
|
||||
|
||||
web.LOGIN: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if f, _, e := m.R.FormFile(SUB); e == nil {
|
||||
defer f.Close()
|
||||
@ -75,8 +52,8 @@ func init() {
|
||||
}
|
||||
}
|
||||
|
||||
m.Option(mdb.FIELDS, m.Conf(m.Prefix(SESS), kit.META_FIELD))
|
||||
if strings.TrimSpace(m.Option(SID)) != "" {
|
||||
m.Option(mdb.FIELDS, m.Conf(m.Prefix(SESS), kit.META_FIELD))
|
||||
msg := m.Cmd(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, strings.TrimSpace(m.Option(SID)))
|
||||
if m.Option(SID, msg.Append(kit.MDB_HASH)) != "" {
|
||||
m.Option(aaa.USERNAME, msg.Append(aaa.USERNAME))
|
||||
@ -85,6 +62,19 @@ func init() {
|
||||
}
|
||||
m.Render(ice.RENDER_RESULT)
|
||||
}},
|
||||
"/sess": {Name: "/sess", Help: "会话", Action: map[string]*ice.Action{
|
||||
"logout": {Name: "logout", Help: "退出", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.MODIFY, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(SID), kit.MDB_STATUS, "logout")
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if strings.TrimSpace(m.Option(SID)) == "" {
|
||||
m.Option(SID, m.Cmdx(mdb.INSERT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, "login",
|
||||
aaa.USERNAME, m.Option(aaa.USERNAME), tcp.HOSTNAME, m.Option(tcp.HOSTNAME), PID, m.Option(PID), PWD, m.Option(PWD)))
|
||||
} else {
|
||||
m.Cmdy(mdb.MODIFY, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(SID), kit.MDB_STATUS, "login")
|
||||
}
|
||||
m.Echo(m.Option(SID))
|
||||
}},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
@ -3,10 +3,7 @@ package vim
|
||||
import (
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/base/web"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"io/ioutil"
|
||||
)
|
||||
|
||||
const SYNC = "sync"
|
||||
@ -19,15 +16,6 @@ func init() {
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
web.LOGIN: {Hand: func(m *ice.Message, c *ice.Context, cmd string, 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))
|
||||
}
|
||||
}
|
||||
}},
|
||||
|
||||
SYNC: {Name: "sync id=auto auto 导出 导入", Help: "同步流", Action: map[string]*ice.Action{
|
||||
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.EXPORT, m.Prefix(SYNC), "", mdb.LIST)
|
||||
@ -35,23 +23,37 @@ func init() {
|
||||
mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.IMPORT, m.Prefix(SYNC), "", mdb.LIST)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Option(mdb.FIELDS, kit.Select(m.Conf(SYNC, kit.META_FIELD), mdb.DETAIL, len(arg) > 0))
|
||||
if len(arg) > 0 {
|
||||
m.Option("cache.field", kit.MDB_ID)
|
||||
m.Option("cache.value", arg[0])
|
||||
} else {
|
||||
if m.Option("_control", "page"); m.Option("cache.limit") == "" {
|
||||
m.Option("cache.limit", "10")
|
||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||
switch arg[0] {
|
||||
case kit.MDB_TOPIC:
|
||||
m.Cmdy(m.Prefix(FAVOR)).Appendv(ice.MSG_APPEND, kit.MDB_TOPIC, kit.MDB_COUNT, kit.MDB_TIME)
|
||||
}
|
||||
}},
|
||||
FAVOR: {Name: "favor topic type name text", Help: "收藏", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(m.Prefix(FAVOR), mdb.INSERT, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC),
|
||||
kit.MDB_TYPE, m.Option(kit.MDB_TYPE), kit.MDB_NAME, m.Option(kit.MDB_NAME), kit.MDB_TEXT, m.Option(kit.MDB_TEXT))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) > 0 {
|
||||
m.Option(mdb.FIELDS, mdb.DETAIL)
|
||||
m.Option(mdb.CACHE_FILED, kit.MDB_ID)
|
||||
m.Option(mdb.CACHE_VALUE, arg[0])
|
||||
} else {
|
||||
m.Option(mdb.FIELDS, m.Conf(SYNC, kit.META_FIELD))
|
||||
m.Option(ice.MSG_CONTROL, ice.CONTROL_PAGE)
|
||||
defer m.PushAction(FAVOR)
|
||||
}
|
||||
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, m.Option("cache.field"), m.Option("cache.value"))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, m.Option(mdb.CACHE_FILED), m.Option(mdb.CACHE_VALUE))
|
||||
}},
|
||||
"/sync": {Name: "/sync", Help: "同步", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Render(ice.RENDER_RESULT)
|
||||
m.Cmd(mdb.INSERT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_TYPE, VIMRC, kit.MDB_NAME, arg[0], kit.MDB_TEXT, kit.Select(m.Option("arg"), m.Option("sub")),
|
||||
"pwd", m.Option("pwd"), "buf", m.Option("buf"), "row", m.Option("row"), "col", m.Option("col"))
|
||||
if m.Option(ARG) == "qa" {
|
||||
m.Cmdy(mdb.MODIFY, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(SID), kit.MDB_STATUS, "logout")
|
||||
}
|
||||
|
||||
m.Cmd(mdb.INSERT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_TYPE, VIMRC, kit.MDB_NAME, arg[0],
|
||||
kit.MDB_TEXT, kit.Select(m.Option(ARG), m.Option(SUB)),
|
||||
PWD, m.Option(PWD), BUF, m.Option(BUF), ROW, m.Option(ROW), COL, m.Option(COL))
|
||||
}},
|
||||
},
|
||||
})
|
||||
|
@ -1,67 +0,0 @@
|
||||
|
||||
" 自动刷新
|
||||
let ShyComeList = {}
|
||||
fun! ShyCome(buf, row, action, extra)
|
||||
" 低配命令
|
||||
if !exists("appendbufline")
|
||||
execute a:extra["row"]
|
||||
|
||||
if a:extra["count"] > 0
|
||||
execute "+1,+" . a:extra["count"] ."delete"
|
||||
endif
|
||||
|
||||
let a:extra["count"] = 0
|
||||
for line in reverse(split(ShySend("sync", {"cmds": "trans", "arg": getline(".")}), "\n"))
|
||||
let a:extra["count"] += 1
|
||||
call append(".", line)
|
||||
endfor
|
||||
return
|
||||
endif
|
||||
if a:action == "refresh"
|
||||
" 清空历史
|
||||
if a:extra["count"] > 0 | call deletebufline(a:buf, a:row+1, a:row+a:extra["count"]) | endif
|
||||
let a:extra["count"] = 0
|
||||
endif
|
||||
" 刷新命令
|
||||
for line in reverse(split(ShySend({"cmd": "trans", "arg": getbufline(a:buf, a:row)[0]}), "\n"))
|
||||
call appendbufline(a:buf, a:row, line)
|
||||
let a:extra["count"] += 1
|
||||
endfor
|
||||
" 插入表头
|
||||
call appendbufline(a:buf, a:row, strftime(" ~~ %Y-%m-%d %H:%M:%S"))
|
||||
let a:extra["count"] += 1
|
||||
endfun
|
||||
fun! ShyUpdate(timer)
|
||||
let what = g:ShyComeList[a:timer]
|
||||
call ShyLog("timer", a:timer, what)
|
||||
call ShyCome(what["buf"], what["row"], what["action"], what)
|
||||
endfun
|
||||
fun! ShyComes(action)
|
||||
if !exists("b:timer") | let b:timer = -1 | endif
|
||||
" 清除定时
|
||||
if b:timer > 0 | call timer_stop(b:timer) | let b:timer = -2 | return | endif
|
||||
" 添加定时
|
||||
let b:timer = timer_start(1000, funcref('ShyUpdate'), {"repeat": -1})
|
||||
let g:ShyComeList[b:timer] = {"buf": bufname("."), "row": line("."), "pre": getline("."), "action": a:action, "count": 0}
|
||||
call ShyLog("new timer", b:timer)
|
||||
endfun
|
||||
fun! ShyCheck(target)
|
||||
if a:target == "cache"
|
||||
call ShySync("bufs")
|
||||
call ShySync("regs")
|
||||
call ShySync("marks")
|
||||
call ShySync("tags")
|
||||
elseif a:target == "fixs"
|
||||
let l = len(getqflist())
|
||||
if l > 0
|
||||
execute "copen " . (l > 10? 10: l + 1)
|
||||
call ShySync("fixs")
|
||||
else
|
||||
cclose
|
||||
end
|
||||
end
|
||||
endfun
|
||||
|
||||
|
||||
" nnoremap <C-G><C-R> :call ShyCheck("cache")<CR>
|
||||
nnoremap <C-G><C-K> :call ShyComes("refresh")<CR>
|
@ -2,40 +2,44 @@ package vim
|
||||
|
||||
import (
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/gdb"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/base/nfs"
|
||||
"github.com/shylinux/icebergs/base/web"
|
||||
"github.com/shylinux/icebergs/core/code"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"os"
|
||||
"path"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const VIM = "vim"
|
||||
func _vim_pkg(m *ice.Message) string {
|
||||
return strings.Replace(strings.Replace(kit.TrimExt(m.Conf(VIM, kit.META_SOURCE)), ".", "", -1), "-", "", -1)
|
||||
}
|
||||
|
||||
const VIMRC = "vimrc"
|
||||
const VIM = "vim"
|
||||
|
||||
var Index = &ice.Context{Name: VIM, Help: "编辑器",
|
||||
Commands: map[string]*ice.Command{
|
||||
VIM: {Name: "vim port=auto path=auto auto 启动 构建 下载", Help: "编辑器", Action: map[string]*ice.Action{
|
||||
"download": {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(code.INSTALL, "download", m.Conf(VIM, kit.META_SOURCE))
|
||||
VIM: {Name: "vim port=auto path=auto auto start build download", Help: "编辑器", Action: map[string]*ice.Action{
|
||||
web.DOWNLOAD: {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(code.INSTALL, web.DOWNLOAD, m.Conf(VIM, kit.META_SOURCE))
|
||||
}},
|
||||
"build": {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(code.INSTALL, "build", strings.Replace(strings.Replace(kit.TrimExt(m.Conf(VIM, kit.META_SOURCE)), ".", "", -1), "-", "", -1))
|
||||
gdb.BUILD: {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(code.INSTALL, gdb.BUILD, _vim_pkg(m), m.Confv(VIM, "meta.build"))
|
||||
}},
|
||||
"start": {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
|
||||
gdb.START: {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Optionv("prepare", func(p string) []string {
|
||||
return []string{}
|
||||
list := kit.Simple(m.Confv(VIM, "meta.start"))
|
||||
for i := 0; i < len(list); i += 2 {
|
||||
m.Cmd(web.SPIDE, "dev", web.SPIDE_SAVE, path.Join(os.Getenv("HOME"), list[i]),
|
||||
web.SPIDE_GET, m.Conf(VIM, "meta.remote")+list[i+1])
|
||||
m.Cmd(web.SPIDE, web.SPIDE_DEV, web.SPIDE_SAVE, path.Join(p, list[i]),
|
||||
web.SPIDE_GET, "/share/local/usr/intshell/misc/vim/"+list[i+1])
|
||||
}
|
||||
return []string{}
|
||||
return []string{"-T", "screen", "-c", "PlugInstall", "-c", "exit", "-c", "exit"}
|
||||
})
|
||||
m.Cmdy(code.INSTALL, "start", strings.Replace(strings.Replace(kit.TrimExt(m.Conf(VIM, kit.META_SOURCE)), ".", "", -1), "-", "", -1), "bin/vim")
|
||||
m.Cmdy(code.INSTALL, gdb.START, _vim_pkg(m), "bin/vim")
|
||||
|
||||
// 安装插件
|
||||
m.Echo("\n")
|
||||
@ -48,7 +52,7 @@ var Index = &ice.Context{Name: VIM, Help: "编辑器",
|
||||
}},
|
||||
mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) {
|
||||
if strings.HasPrefix(arg[2], "http") {
|
||||
m.Cmdy(web.SPIDE, "dev", "raw", "GET", arg[2]+arg[1])
|
||||
m.Cmdy(web.SPIDE, web.SPIDE_DEV, web.SPIDE_RAW, web.SPIDE_GET, arg[2]+arg[1])
|
||||
return
|
||||
}
|
||||
m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1]))
|
||||
@ -62,17 +66,15 @@ var Index = &ice.Context{Name: VIM, Help: "编辑器",
|
||||
}},
|
||||
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Load()
|
||||
|
||||
m.Cmd(mdb.PLUGIN, mdb.CREATE, VIMRC, VIM, c.Cap(ice.CTX_FOLLOW))
|
||||
m.Cmd(mdb.RENDER, mdb.CREATE, VIMRC, VIM, c.Cap(ice.CTX_FOLLOW))
|
||||
m.Cmd(mdb.PLUGIN, mdb.CREATE, VIM, VIM, c.Cap(ice.CTX_FOLLOW))
|
||||
m.Cmd(mdb.RENDER, mdb.CREATE, VIM, VIM, c.Cap(ice.CTX_FOLLOW))
|
||||
m.Cmd(mdb.PLUGIN, mdb.CREATE, VIM, m.Prefix(VIM))
|
||||
m.Cmd(mdb.RENDER, mdb.CREATE, VIM, m.Prefix(VIM))
|
||||
m.Cmd(mdb.PLUGIN, mdb.CREATE, VIMRC, m.Prefix(VIM))
|
||||
m.Cmd(mdb.RENDER, mdb.CREATE, VIMRC, m.Prefix(VIM))
|
||||
}},
|
||||
},
|
||||
Configs: map[string]*ice.Config{
|
||||
VIM: {Name: "vim", Help: "编辑器", Value: kit.Data(
|
||||
"source", "ftp://ftp.vim.org/pub/vim/unix/vim-8.1.tar.bz2",
|
||||
"remote", "https://raw.githubusercontent.com/shylinux/contexts/master/etc/conf/",
|
||||
"build", []interface{}{
|
||||
"--enable-multibyte=yes",
|
||||
"--enable-pythoninterp=yes",
|
||||
@ -82,13 +84,13 @@ var Index = &ice.Context{Name: VIM, Help: "编辑器",
|
||||
"start", []interface{}{
|
||||
".vimrc", "vimrc",
|
||||
".vim/autoload/plug.vim", "plug.vim",
|
||||
".vim/autoload/auto.vim", "auto.vim",
|
||||
".vim/syntax/javascript.vim", "javascript.vim",
|
||||
".vim/syntax/shy.vim", "shy.vim",
|
||||
".vim/syntax/shy.vim", "sh.vim",
|
||||
".vim/syntax/go.vim", "go.vim",
|
||||
},
|
||||
|
||||
"history", "vim.history",
|
||||
|
||||
"plug", kit.Dict(
|
||||
"split", kit.Dict(
|
||||
"space", " \t",
|
||||
|
@ -8,21 +8,24 @@ premenu
|
||||
|
||||
chapter "源码"
|
||||
field "安装" web.code.vim.vim
|
||||
field "源码" web.code.inner args `[ usr/install/vim81/ src/main.c 110 ]`
|
||||
field "脚本" web.code.inner args `[ usr/install/vim81/install/share/vim/vim81/ filetype.vim ]`
|
||||
field "文档" web.code.inner args `[ usr/install/vim81/install/share/vim/vim81/doc/ help.txt ]`
|
||||
field "源码" web.code.inner args `usr/install/vim81/ src/main.c 110`
|
||||
field "脚本" web.code.inner args `usr/install/vim81/_install/share/vim/vim81/ filetype.vim`
|
||||
field "文档" web.code.inner args `usr/install/vim81/_install/share/vim/vim81/doc/ help.txt`
|
||||
|
||||
section "构建"
|
||||
spark shell `
|
||||
yum install -y wget make gcc
|
||||
|
||||
wget ftp://ftp.vim.org/pub/vim/unix/vim-8.1.tar.bz2
|
||||
tar xvf vim-8.1.tar.bz2 && cd vim81
|
||||
./configure --prefix=$PWD/install --enable-multibyte=yes
|
||||
|
||||
./configure --prefix=$PWD/_install --enable-multibyte=yes
|
||||
make -j4 && make install
|
||||
`
|
||||
|
||||
section "启动"
|
||||
spark shell `
|
||||
cd ./install
|
||||
cd ./_install
|
||||
./bin/vim
|
||||
`
|
||||
|
||||
|
@ -30,6 +30,7 @@ cd ./_install
|
||||
chapter "应用"
|
||||
web.code.zsh.sess contexts
|
||||
|
||||
field "文件夹" web.chat.files
|
||||
field "会话流" web.code.zsh.sess
|
||||
field "回收站" web.code.zsh.trash
|
||||
field "收藏夹" web.code.zsh.favor
|
||||
|
@ -8,28 +8,23 @@ import (
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{},
|
||||
Commands: map[string]*ice.Command{
|
||||
"/download": {Name: "/download", Help: "下载", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) == 0 || arg[0] == "" {
|
||||
// 文件列表
|
||||
m.Cmdy(web.SPACE, m.Option("you"), web.STORY).Table()
|
||||
m.Cmdy("web.chat.files").Table()
|
||||
return
|
||||
}
|
||||
|
||||
// 查找文件
|
||||
if m.Cmdy(web.STORY, "index", arg[0]).Append("text") == "" && m.Option("you") != "" {
|
||||
// 上发文件
|
||||
m.Cmd(web.SPACE, m.Option("you"), web.STORY, "push", arg[0], "dev", arg[0])
|
||||
m.Cmdy(web.STORY, "index", arg[0])
|
||||
}
|
||||
|
||||
// 下载文件
|
||||
m.Cmdy(web.CACHE, m.Cmd("web.chat.files", arg[0]).Append("data"))
|
||||
m.Render(kit.Select(ice.RENDER_DOWNLOAD, ice.RENDER_RESULT, m.Append("file") == ""), m.Append("text"))
|
||||
}},
|
||||
"/upload": {Name: "/upload", Help: "上传", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
// 缓存文件
|
||||
msg := m.Cmd(web.STORY, "upload")
|
||||
msg := m.Cmd(web.CACHE, web.UPLOAD)
|
||||
m.Option(ice.MSG_UPLOAD, msg.Append(kit.MDB_HASH), msg.Append(kit.MDB_NAME))
|
||||
m.Cmd("web.chat.files", "upload")
|
||||
|
||||
m.Echo("data: %s\n", msg.Append("data"))
|
||||
m.Echo("time: %s\n", msg.Append("time"))
|
||||
m.Echo("type: %s\n", msg.Append("type"))
|
||||
|
@ -2,6 +2,7 @@ package zsh
|
||||
|
||||
import (
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/cli"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
)
|
||||
@ -16,7 +17,7 @@ func init() {
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
FAVOR: {Name: "favor topic id auto 创建 导出 导入", Help: "收藏夹", Action: map[string]*ice.Action{
|
||||
FAVOR: {Name: "favor topic id auto create export import", Help: "收藏夹", Action: map[string]*ice.Action{
|
||||
mdb.CREATE: {Name: "create topic", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, arg)
|
||||
}},
|
||||
@ -44,6 +45,15 @@ func init() {
|
||||
m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), kit.SubKey(m.Option(kit.MDB_TOPIC)), mdb.LIST, arg)
|
||||
}
|
||||
}},
|
||||
cli.SYSTEM: {Name: "system", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
|
||||
if len(arg) > 0 && arg[0] == mdb.RENDER {
|
||||
m.Cmdy(cli.SYSTEM, arg[1:])
|
||||
return
|
||||
}
|
||||
|
||||
m.PushPlugin(cli.SYSTEM, cli.SYSTEM, mdb.RENDER)
|
||||
m.Push(kit.SSH_ARG, kit.Format([]string{m.Option(kit.MDB_TEXT)}))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) == 0 {
|
||||
m.Option(mdb.FIELDS, "time,count,topic")
|
||||
@ -52,12 +62,9 @@ func init() {
|
||||
return
|
||||
}
|
||||
|
||||
if len(arg) > 0 {
|
||||
m.Option(mdb.FIELDS, kit.Select(m.Conf(m.Prefix(FAVOR), kit.META_FIELD), mdb.DETAIL, len(arg) > 1))
|
||||
m.Richs(m.Prefix(FAVOR), "", arg[0], func(key string, value map[string]interface{}) {
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), kit.Keys(kit.MDB_HASH, key), mdb.LIST, kit.MDB_ID, arg[1:])
|
||||
})
|
||||
}
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), kit.SubKey(arg[0]), mdb.LIST, kit.MDB_ID, arg[1:])
|
||||
m.PushAction(cli.SYSTEM)
|
||||
}},
|
||||
|
||||
"/favor": {Name: "/favor", Help: "收藏", Action: map[string]*ice.Action{
|
||||
|
@ -13,8 +13,8 @@ func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{},
|
||||
Commands: map[string]*ice.Command{
|
||||
"/qrcode": {Name: "/qrcode", Help: "同步", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmdy(cli.PYTHON, "qrcode", "hi")
|
||||
"/qrcode": {Name: "/qrcode", Help: "二维码", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmdy(cli.SYSTEM, cli.QRCODE, kit.MDB_TEXT, m.Option(kit.MDB_TEXT))
|
||||
}},
|
||||
"/input": {Name: "/input", Help: "补全", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
list := kit.Split(m.Option("line"), m.Option("break"))
|
||||
|
@ -30,33 +30,31 @@ func init() {
|
||||
mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.IMPORT, m.Prefix(SYNC), "", mdb.LIST)
|
||||
}},
|
||||
FAVOR: {Name: "favor topic type name text", Help: "收藏", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(m.Prefix(FAVOR), mdb.INSERT, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC),
|
||||
kit.MDB_TYPE, m.Option(kit.MDB_TYPE), kit.MDB_NAME, m.Option(kit.MDB_NAME), kit.MDB_TEXT, m.Option(kit.MDB_TEXT))
|
||||
}},
|
||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||
switch arg[0] {
|
||||
case kit.MDB_TOPIC:
|
||||
m.Cmdy(m.Prefix(FAVOR)).Appendv(ice.MSG_APPEND, kit.MDB_TOPIC, kit.MDB_COUNT, kit.MDB_TIME)
|
||||
}
|
||||
}},
|
||||
FAVOR: {Name: "favor topic type name text", Help: "收藏", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(m.Prefix(FAVOR), mdb.INSERT, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC),
|
||||
kit.MDB_TYPE, m.Option(kit.MDB_TYPE), kit.MDB_NAME, m.Option(kit.MDB_NAME), kit.MDB_TEXT, m.Option(kit.MDB_TEXT))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Option(mdb.FIELDS, kit.Select(m.Conf(SYNC, kit.META_FIELD), mdb.DETAIL, len(arg) > 0))
|
||||
if len(arg) > 0 {
|
||||
m.Option(mdb.FIELDS, mdb.DETAIL)
|
||||
m.Option(mdb.CACHE_FILED, kit.MDB_ID)
|
||||
m.Option(mdb.CACHE_VALUE, arg[0])
|
||||
} else {
|
||||
m.Option(mdb.FIELDS, m.Conf(SYNC, kit.META_FIELD))
|
||||
m.Option(ice.MSG_CONTROL, ice.CONTROL_PAGE)
|
||||
defer m.PushAction(FAVOR)
|
||||
if m.Option(ice.MSG_CONTROL, "_page"); m.Option(mdb.CACHE_LIMIT) == "" {
|
||||
m.Option(mdb.CACHE_LIMIT, "10")
|
||||
}
|
||||
}
|
||||
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, m.Option(mdb.CACHE_FILED), m.Option(mdb.CACHE_VALUE))
|
||||
}},
|
||||
"/sync": {Name: "/sync", Help: "同步", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
switch arg[0] {
|
||||
case "history":
|
||||
"/sync": {Name: "/sync", Help: "同步", Action: map[string]*ice.Action{
|
||||
"history": {Name: "history", Help: "历史", Hand: func(m *ice.Message, arg ...string) {
|
||||
ls := strings.SplitN(strings.TrimSpace(m.Option(ARG)), " ", 4)
|
||||
if text := strings.TrimSpace(strings.Join(ls[3:], " ")); text != "" {
|
||||
m.Cmd(mdb.INSERT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_TYPE, SHELL, kit.MDB_NAME, ls[0],
|
||||
@ -64,10 +62,10 @@ func init() {
|
||||
kit.MDB_TEXT, text, PWD, m.Option(PWD), kit.MDB_TIME, ls[1]+" "+ls[2])
|
||||
|
||||
}
|
||||
default:
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmd(mdb.INSERT, m.Prefix(SYNC), "", mdb.HASH, kit.MDB_TYPE, SHELL, kit.MDB_NAME, arg[0],
|
||||
kit.MDB_TEXT, m.Option(SUB), PWD, m.Option(PWD))
|
||||
}
|
||||
}},
|
||||
},
|
||||
})
|
||||
|
@ -5,6 +5,7 @@ import (
|
||||
"github.com/shylinux/icebergs/base/cli"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/base/nfs"
|
||||
"github.com/shylinux/icebergs/base/tcp"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"path"
|
||||
@ -15,12 +16,12 @@ const TRASH = "trash"
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
TRASH: {Name: TRASH, Help: "收藏夹", Value: kit.Data(
|
||||
TRASH: {Name: TRASH, Help: "回收站", Value: kit.Data(
|
||||
kit.MDB_FIELD, "time,hash,hostname,size,from,to",
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
TRASH: {Name: "TRASH hash path auto 清理", Help: "收藏夹", Action: map[string]*ice.Action{
|
||||
TRASH: {Name: "TRASH hash path auto prunes", Help: "回收站", Action: map[string]*ice.Action{
|
||||
mdb.INSERT: {Name: "insert from= to=", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(TRASH), "", mdb.HASH, "from", m.Option("from"), "to", m.Option("to"))
|
||||
}},
|
||||
@ -28,12 +29,12 @@ func init() {
|
||||
m.Cmdy(cli.SYSTEM, "rm", "-rf", m.Option("to"))
|
||||
m.Cmdy(mdb.DELETE, m.Prefix(TRASH), "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
|
||||
}},
|
||||
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||
}},
|
||||
"reback": {Name: "reback", Help: "恢复", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(cli.SYSTEM, "mv", m.Option("to"), m.Option("from"))
|
||||
m.Cmdy(mdb.DELETE, m.Prefix(TRASH), "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
|
||||
}},
|
||||
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) > 0 {
|
||||
m.Cmd(mdb.SELECT, m.Prefix(TRASH), "", mdb.HASH, kit.MDB_HASH, arg).Table(func(index int, value map[string]string, head []string) {
|
||||
@ -43,15 +44,15 @@ func init() {
|
||||
}
|
||||
m.Option(mdb.FIELDS, kit.Select(m.Conf(m.Prefix(TRASH), kit.META_FIELD), mdb.DETAIL, len(arg) > 0))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(TRASH), "", mdb.HASH, kit.MDB_HASH, arg)
|
||||
m.PushAction("恢复", "删除")
|
||||
m.PushAction("reback", mdb.REMOVE)
|
||||
}},
|
||||
|
||||
"/trash": {Name: "/trash", Help: "回收", Action: map[string]*ice.Action{
|
||||
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(TRASH), "", mdb.HASH, "hostname", m.Option("hostname"),
|
||||
"size", m.Option("size"), "from", m.Option("from"), "to", m.Option("to"))
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(TRASH), "", mdb.HASH, tcp.HOSTNAME, m.Option(tcp.HOSTNAME),
|
||||
kit.MDB_SIZE, m.Option(kit.MDB_SIZE), "from", m.Option("from"), "to", m.Option("to"))
|
||||
}},
|
||||
},
|
||||
})
|
||||
|
@ -1,213 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# 连接配置
|
||||
if [ "${ctx_dev}" = "" ] || [ "${ctx_dev}" = "-" ]; then
|
||||
ctx_dev="http://localhost:9020"
|
||||
fi
|
||||
ctx_sid=${ctx_sid:=""}
|
||||
ctx_share=${ctx_share:=""}
|
||||
ctx_sh=`ps|grep $$|grep -v grep`
|
||||
|
||||
# 请求配置
|
||||
ctx_head=${ctx_head:="Content-Type: application/json"}
|
||||
ctx_curl=${ctx_curl:="curl"}
|
||||
ctx_url=$ctx_dev"/code/zsh/"
|
||||
ctx_cmd=${ctx_cmd:=""}
|
||||
|
||||
# 输出配置
|
||||
ctx_silent=${ctx_silent:=""}
|
||||
ctx_err=${ctx_err:="/dev/null"}
|
||||
ctx_welcome=${ctx_welcome:="^_^ \033[32mWelcome to Context world\033[0m ^_^"}
|
||||
ctx_goodbye=${ctx_goodbye:="v_v \033[31mGoodbye to Context world\033[0m v_v"}
|
||||
|
||||
# 输出信息
|
||||
ShyRight() {
|
||||
[ "$1" = "" ] && return 1
|
||||
[ "$1" = "0" ] && return 1
|
||||
[ "$1" = "false" ] && return 1
|
||||
return 0
|
||||
}
|
||||
ShyEcho() {
|
||||
ShyRight "$ctx_silent" || echo "$@"
|
||||
}
|
||||
ShyLog() {
|
||||
echo "$@" > $ctx_err
|
||||
}
|
||||
|
||||
# 发送数据
|
||||
ShyWord() {
|
||||
echo "$*"|sed "s/\ /%20/g"|sed "s/|/%7C/g"|sed "s/\;/%3B/g"|sed "s/\[/%5B/g"|sed "s/\]/%5D/g"
|
||||
}
|
||||
ShyLine() {
|
||||
echo "$*"|sed -e 's/\"/\\\"/g' -e 's/\n/\\n/g'
|
||||
}
|
||||
ShyJSON() {
|
||||
[ $# -eq 1 ] && echo \"`ShyLine "$1"`\" && return
|
||||
echo -n "{"
|
||||
while [ $# -gt 1 ]; do
|
||||
echo -n \"`ShyLine "$1"`\"\:\"`ShyLine "$2"`\"
|
||||
shift 2 && [ $# -gt 1 ] && echo -n ","
|
||||
done
|
||||
echo -n "}"
|
||||
}
|
||||
ShyPost() {
|
||||
ctx_cmd="$1" && shift
|
||||
case $ctx_sh in
|
||||
*zsh)
|
||||
ShyJSON SHELL "${SHELL:=bash}" pwd "${PWD:=/root}" sid "${ctx_sid:=0}" cmds "$@"|read data
|
||||
;;
|
||||
*)
|
||||
local data=`ShyJSON SHELL "${SHELL:=bash}" pwd "${PWD:=/root}" sid "${ctx_sid:=0}" cmds "$@"`
|
||||
;;
|
||||
esac
|
||||
echo $data > $ctx_err
|
||||
${ctx_curl} -s "${ctx_url}${ctx_cmd}" -H "${ctx_head}" -d "${data}"
|
||||
}
|
||||
|
||||
# 终端登录
|
||||
ShyHelp() {
|
||||
ShyPost help "$@"
|
||||
}
|
||||
ShyLogin() {
|
||||
HOST=`hostname` ctx_sid=`ShyPost login "" share "${ctx_share}" pid "$$" pane "${TMUX_PANE}" hostname "${HOST}" username "${USER}"`
|
||||
echo "${ctx_welcome}"
|
||||
echo "${ctx_dev} "
|
||||
echo -n "sid: ${ctx_sid} "
|
||||
echo "begin: ${ctx_begin} "
|
||||
export ctx_sid
|
||||
}
|
||||
ShyLogout() {
|
||||
ShySync history
|
||||
echo ${ctx_goodbye} && [ "$ctx_sid" != "" ] && ShyPost logout
|
||||
}
|
||||
|
||||
# 发送文件
|
||||
ShySend() {
|
||||
local TEMP=`mktemp /tmp/tmp.XXXXXX` && "$@" > $TEMP
|
||||
ShyRight "$ctx_silent" || cat $TEMP
|
||||
${ctx_curl} -s "${ctx_url}sync" -F "cmds=$1" -F "cmds=$*" -F "sub=@$TEMP" \
|
||||
-F "SHELL=${SHELL}" -F "pwd=${PWD}" -F "sid=${ctx_sid}"
|
||||
}
|
||||
ShyUpload() {
|
||||
${ctx_curl} -s "${ctx_url}upload" -F "upload=@$1" \
|
||||
-F "SHELL=${SHELL}" -F "pwd=${PWD}" -F "sid=${ctx_sid}"
|
||||
}
|
||||
ShyDownload() {
|
||||
${ctx_curl} -s "${ctx_url}download" -F "cmds=$1" \
|
||||
-F "SHELL=${SHELL}" -F "pwd=${PWD}" -F "sid=${ctx_sid}"
|
||||
}
|
||||
ShyInstall() {
|
||||
case "$1" in
|
||||
"vim")
|
||||
# git vim
|
||||
curl -fLo ~/.vimrc https://raw.githubusercontent.com/shylinux/contexts/master/etc/conf/vimrc
|
||||
curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
|
||||
vim -c PlugInstall
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
}
|
||||
ShyUpgrade() {
|
||||
file=auto.sh && [ "$1" != "" ] && file=$1
|
||||
${ctx_curl} -s $ctx_dev/publish/$file > $file && source auto.sh
|
||||
}
|
||||
|
||||
ShyRelay() {
|
||||
which=relay && [ "$1" != "" ] && which=$1 && shift
|
||||
favor=tmux.auto && [ "$1" != "" ] && favor=$1 && shift
|
||||
step=before arg="" && for cmd in "$@"; do
|
||||
[ "$cmd" = after ] && step=after && continue
|
||||
arg="$arg&$step="`ShyWord $cmd`
|
||||
done
|
||||
${ctx_curl} -s "$ctx_dev/code/tmux/favor?relay=$which&cmds=$favor&$arg" &
|
||||
}
|
||||
ShyLocal() {
|
||||
which=alpine && [ "$1" != "" ] && which=$1 && shift
|
||||
favor=tmux.auto && [ "$1" != "" ] && favor=$1 && shift
|
||||
step=before arg="" && for cmd in "$@"; do
|
||||
[ "$cmd" = after ] && step=after && continue
|
||||
arg="$arg&$step="`ShyWord $cmd`
|
||||
done
|
||||
${ctx_curl} -s "$ctx_dev/code/tmux/favor?local=$which&cmds=$favor&$arg" &
|
||||
}
|
||||
ShyFavor() {
|
||||
cmd=$1; [ "$READLINE_LINE" != "" ] && set $READLINE_LINE && READLINE_LINE=""
|
||||
if [ "$cmd" = "sh" ] ; then
|
||||
# 查看收藏
|
||||
ctx_word="sh"
|
||||
shift && [ "$1" != "" ] && ctx_tab="$1"
|
||||
shift && ctx_note="$1"
|
||||
else
|
||||
# 添加收藏
|
||||
[ "$1" != "" ] && ctx_word="$*" || ctx_word=`history|tail -n1|head -n1|sed -e 's/^[\ 0-9]*//g'`
|
||||
fi
|
||||
ShyPost favor "${ctx_word}" tab "${ctx_tab}" note "${ctx_note}"
|
||||
}
|
||||
ShyInput() {
|
||||
if [ "$1" = "line" ] ; then
|
||||
READLINE_LINE=`ShyPost input "$1" line "$READLINE_LINE" point "$READLINE_POINT"`
|
||||
else
|
||||
COMPREPLY=(`ShyPost input "$COMP_WORDS" line "$COMP_LINE" index "$COMP_CWORD" break "$COMP_WORDBREAKS"`)
|
||||
fi
|
||||
}
|
||||
# 同步数据
|
||||
ShySync() {
|
||||
case "$1" in
|
||||
"base")
|
||||
ShySync df &>/dev/null
|
||||
ShySync ps &>/dev/null
|
||||
ShySync env &>/dev/null
|
||||
ShySync free &>/dev/null
|
||||
ShySync history
|
||||
;;
|
||||
"history")
|
||||
ctx_end=`history|tail -n1|awk '{print $1}'`
|
||||
ctx_begin=${ctx_begin:=$ctx_end}
|
||||
ctx_count=`expr $ctx_end - $ctx_begin`
|
||||
ShyEcho "sync $ctx_begin-$ctx_end count $ctx_count to $ctx_dev"
|
||||
HISTTIMEFORMAT="%F %T " history|tail -n $ctx_count |while read line; do
|
||||
ShyPost sync history arg "$line" >/dev/null
|
||||
done
|
||||
ctx_begin=$ctx_end
|
||||
;;
|
||||
ps) ShySend ps -ef ;;
|
||||
*) ShySend "$@"
|
||||
esac
|
||||
}
|
||||
ShyInit() {
|
||||
[ "$ctx_begin" = "" ] && ctx_begin=`history|tail -n1|awk '{print $1}'`
|
||||
|
||||
case "${SHELL##*/}" in
|
||||
"zsh") PROMPT='%![%*]%c$ ' ;;
|
||||
*) PS1="\!-$$-\u@\h[\t]\W\$ " ;;
|
||||
esac
|
||||
|
||||
if bind &>/dev/null; then
|
||||
# bash
|
||||
bind -x '"\C-G\C-R":ShySync base'
|
||||
bind -x '"\C-G\C-G":ShySync history'
|
||||
# bind -x '"\C-P":history-search-backward'
|
||||
# bind -x '"\C-N":history-search-forward'
|
||||
|
||||
# bind 'TAB:complete'
|
||||
bind 'TAB:menu-complete'
|
||||
complete -F ShyInput word
|
||||
bind -x '"\C-K":ShyInput line'
|
||||
bind -x '"\C-G\C-F":ShyFavor'
|
||||
bind -x '"\C-GF":ShyFavor sh'
|
||||
bind -x '"\C-Gf":ShyFavor sh'
|
||||
|
||||
elif bindkey &>/dev/null; then
|
||||
# zsh
|
||||
setopt nosharehistory
|
||||
bindkey -s '\C-G\C-R' 'ShySync base\n'
|
||||
bindkey -s '\C-G\C-G' 'ShySync history\n'
|
||||
fi
|
||||
|
||||
echo "url: ${ctx_url}"
|
||||
echo -n "pid: $$"
|
||||
echo -n "begin: ${ctx_begin}"
|
||||
echo -n "share: ${ctx_share}"
|
||||
echo "pane: $TMUX_PANE"
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user