-
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathexecfs.go
113 lines (91 loc) · 2.19 KB
/
execfs.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package main
import (
"fmt"
"os"
"strings"
"syscall"
"github.com/aarzilli/yacco/util"
)
func ExecFs(ec *ExecContext, cmd string) syscall.Errno {
cmd = strings.TrimSpace(cmd)
if cmd == "" {
return 0
}
switch cmd {
case "addr=dot":
ec.ed.otherSel[OS_ADDR] = ec.fr.Sel
case "clean":
ec.buf.Modified = false
sideChan <- RefreshMsg(ec.buf, ec.ed, true)
case "dirty":
ec.buf.Modified = true
sideChan <- RefreshMsg(ec.buf, ec.ed, true)
case "cleartag":
ec.ed.tagbuf.Replace([]rune{}, &util.Sel{ec.ed.tagbuf.EditableStart, ec.ed.tagbuf.Size()}, true, nil, 0)
ec.ed.TagRefresh()
case "del":
DelCmd(*ec, "", false)
case "delete":
DelCmd(*ec, "", true)
case "dot=addr":
ec.fr.SelColor = 0
ec.fr.Sel = ec.ed.otherSel[OS_ADDR]
sideChan <- RefreshMsg(ec.buf, ec.ed, true)
case "get":
ec.ed.bodybuf.Modified = false
GetCmd(*ec, "")
case "get-special":
ec.ed.bodybuf.Modified = false
getCmdIntl(*ec, "", true)
case "limit=addr":
fmt.Fprintf(os.Stderr, "limit=addr not implemented\n")
case "mark":
ec.buf.EditMarkNext = true
case "nomark":
ec.buf.EditMarkNext = false
case "put":
PutCmd(*ec, "")
case "show":
sideChan <- func() {
if ec.ed.size < ec.ed.MinHeight()*3 {
Wnd.GrowEditor(ec.ed.Column(), ec.ed, nil)
}
ec.ed.Warp()
}
case "show-nowarp":
sideChan <- func() {
if ec.ed.size < ec.ed.MinHeight()*3 {
Wnd.GrowEditor(ec.ed.Column(), ec.ed, nil)
}
}
case "show-tag":
sideChan <- func() {
if ec.ed.size < ec.ed.MinHeight()*3 {
Wnd.GrowEditor(ec.ed.Column(), ec.ed, nil)
}
ec.ed.WarpToTag()
}
case "noautocompl":
ec.ed.noAutocompl = true
case "compat":
// legacy command, does nothing
case "disconnect":
if ec.ed.eventChan != nil {
ec.ed.eventChan <- ""
close(ec.ed.eventChan)
ec.ed.eventChan = nil
}
default:
if strings.HasPrefix(cmd, "dumpdir") {
ec.buf.DumpDir = strings.TrimSpace(cmd[len("dumpdir"):])
} else if strings.HasPrefix(cmd, "dump") {
ec.buf.DumpCmd = strings.TrimSpace(cmd[len("dump"):])
} else if strings.HasPrefix(cmd, "name ") {
RenameCmd(*ec, cmd[len("name"):])
} else {
debugfsf("Unrecognized ctl command <%s>\n", cmd)
return syscall.EINVAL
}
}
return 0
}