-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathupdate.go
More file actions
77 lines (61 loc) · 1.73 KB
/
update.go
File metadata and controls
77 lines (61 loc) · 1.73 KB
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
package readline
func (rl *Instance) insertStr(r []rune) string {
for {
// I don't really understand why `0` is creeping in at the end of the
// array but it only happens with unicode characters. Also have a similar
// annoyance with \r when copy/pasting from iTerm.
if len(r) > 1 && (r[len(r)-1] == 0 || r[len(r)-1] == '\r') {
r = r[:len(r)-1]
continue
}
break
}
switch {
case rl.line.RuneLen() == 0:
rl.line.Set(rl, r)
case rl.line.RunePos() == 0:
rl.line.Set(rl, append(r, rl.line.Runes()...))
case rl.line.RunePos() < rl.line.RuneLen():
value := rl.line.Runes()
new := append(r, value[rl.line.RunePos():]...)
new = append(value[:rl.line.RunePos()], new...)
rl.line.Set(rl, new)
default:
rl.line.Set(rl, append(rl.line.Runes(), r...))
}
output := rl.moveCursorByRuneAdjustStr(len(r))
output += rl.echoStr()
// TODO: check me
if rl.modeViMode == vimInsert {
output += rl.updateHelpersStr()
}
return output
}
func (rl *Instance) backspaceStr() string {
if rl.line.RuneLen() == 0 || rl.line.RunePos() == 0 {
return ""
}
rl.line.SetRunePos(rl.line.RunePos() - 1)
return rl.deleteStr()
}
func (rl *Instance) deleteStr() string {
var output string
switch {
case rl.line.RuneLen() == 0:
return ""
case rl.line.RunePos() == 0:
rl.line.Set(rl, rl.line.Runes()[1:])
output = rl.echoStr()
case rl.line.RunePos() > rl.line.RuneLen():
output = rl.backspaceStr()
return output
case rl.line.RunePos() == rl.line.RuneLen():
rl.line.Set(rl, rl.line.Runes()[:rl.line.RunePos()])
output = rl.echoStr()
default:
rl.line.Set(rl, append(rl.line.Runes()[:rl.line.RunePos()], rl.line.Runes()[rl.line.RunePos()+1:]...))
output = rl.echoStr()
}
output += rl.updateHelpersStr()
return output
}