forked from x/ContextOS
tce add nfs.Read.KeyTab 添加Tab补全命令
This commit is contained in:
parent
86ba6d97af
commit
03b1438e0b
@ -726,6 +726,11 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
|
||||
fun := m.Find("nfs.file1." + arg[0]) // {{{
|
||||
fun.Target().Start(fun) // }}}
|
||||
}},
|
||||
"target": &ctx.Command{Name: "taget", Help: "函数调用, name: 函数名, arg: 参数", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||
if cli, ok := m.Target().Server.(*CLI); m.Assert(ok) {
|
||||
m.Put("append", "target", cli.target)
|
||||
}
|
||||
}},
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -230,6 +230,10 @@ func (lex *LEX) parse(page int, line []byte) (hash int, rest []byte, word []byte
|
||||
pos++
|
||||
c = lex.charset(line[pos])[0]
|
||||
}
|
||||
if c > 127 {
|
||||
word = append(word, c)
|
||||
continue
|
||||
}
|
||||
|
||||
state := lex.mat[s][c]
|
||||
lex.Log("debug", nil, "(%d,%d): %v", s, c, state)
|
||||
|
@ -70,23 +70,27 @@ func (nfs *NFS) Read(p []byte) (n int, err error) {
|
||||
his := len(nfs.buf)
|
||||
buf := make([]rune, 0, 1024)
|
||||
back := buf
|
||||
tab := []string{}
|
||||
tabi := 0
|
||||
|
||||
for {
|
||||
switch ev := termbox.PollEvent(); ev.Type {
|
||||
case termbox.EventKey:
|
||||
switch ev.Key {
|
||||
case termbox.KeyCtrlC:
|
||||
case termbox.KeyCtrlC, termbox.KeyCtrlD:
|
||||
termbox.Close()
|
||||
os.Exit(1)
|
||||
case termbox.KeyCtrlJ, termbox.KeyEnter:
|
||||
tab = tab[:0]
|
||||
|
||||
buf = append(buf, '\n')
|
||||
nfs.print("\n")
|
||||
nfs.y++
|
||||
|
||||
b := []byte(string(buf[:len(buf)]))
|
||||
n = len(b)
|
||||
nfs.Log("fuck", nil, "%d %v", n, b)
|
||||
copy(p, b)
|
||||
nfs.Log("info", nil, "get %d %d %s", len(b), len(p), p)
|
||||
return
|
||||
case termbox.KeyCtrlP:
|
||||
his = (his + len(nfs.buf) - 1) % len(nfs.buf)
|
||||
@ -115,6 +119,7 @@ func (nfs *NFS) Read(p []byte) (n int, err error) {
|
||||
nfs.y = 0
|
||||
nfs.clear(string(buf))
|
||||
case termbox.KeyCtrlU:
|
||||
tab = tab[:0]
|
||||
nfs.clear("")
|
||||
if len(buf) > 0 {
|
||||
back = buf
|
||||
@ -125,12 +130,41 @@ func (nfs *NFS) Read(p []byte) (n int, err error) {
|
||||
buf = back
|
||||
n = len(buf)
|
||||
nfs.clear(string(buf))
|
||||
case termbox.KeyTab:
|
||||
if len(tab) == 0 {
|
||||
tab = tab[:0]
|
||||
tabi = 0
|
||||
msg := nfs.Message.Spawn(nfs.cli.Target())
|
||||
target := msg.Cmd("target").Data["target"].(*ctx.Context)
|
||||
msg.Spawn(target).BackTrace(func(msg *ctx.Message) bool {
|
||||
for k, _ := range msg.Target().Commands {
|
||||
if strings.HasPrefix(k, string(buf)) {
|
||||
tab = append(tab, k)
|
||||
nfs.Log("info", nil, "add %s", k)
|
||||
}
|
||||
}
|
||||
return true
|
||||
})
|
||||
}
|
||||
|
||||
if tabi >= 0 && tabi < len(tab) {
|
||||
nfs.Log("info", nil, "get %d %d %s", len(tab), tabi, tab[tabi])
|
||||
buf = buf[:len(tab[tabi])]
|
||||
n := copy(buf, []rune(tab[tabi]))
|
||||
buf = buf[:n]
|
||||
nfs.clear(string(buf))
|
||||
tabi = (tabi + 1) % len(tab)
|
||||
}
|
||||
|
||||
case termbox.KeySpace:
|
||||
tab = tab[:0]
|
||||
nfs.print(" ")
|
||||
buf = append(buf, ' ')
|
||||
n++
|
||||
default:
|
||||
print(string(ev.Ch))
|
||||
tab = tab[:0]
|
||||
nfs.Log("fuck", nil, "%v", ev.Ch)
|
||||
nfs.print(string(ev.Ch))
|
||||
buf = append(buf, ev.Ch)
|
||||
n++
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user