forked from c-bata/go-prompt
-
Notifications
You must be signed in to change notification settings - Fork 0
/
key_bind_func.go
141 lines (111 loc) · 3.38 KB
/
key_bind_func.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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
package prompt
import (
"github.com/c-bata/go-prompt/internal/debug"
)
// Yank memory
var lastCut string
// Navigate
// Move to the next character
func KeyBindMoveCharNext(buf *Buffer) {
buf.CursorRight(1)
}
// Move to the previous character
func KeyBindMoveCharPrev(buf *Buffer) {
buf.CursorLeft(1)
}
// Move to the start of the next word
func KeyBindMoveWordNext(buf *Buffer) {
buf.CursorRight(len([]rune(buf.Document().GetWordAfterCursorWithSpace())))
}
// Move to the start of the previous word
func KeyBindMoveWordPrev(buf *Buffer) {
buf.CursorLeft(len([]rune(buf.Document().GetWordBeforeCursorWithSpace())))
}
// Move to the end of the line
func KeyBindMoveLineEnd(buf *Buffer) {
x := []rune(buf.Document().TextAfterCursor())
buf.CursorRight(len(x))
}
// Move to the beginning of the line
func KeyBindMoveLineStart(buf *Buffer) {
x := []rune(buf.Document().TextBeforeCursor())
buf.CursorLeft(len(x))
}
// Edit
// Cut the character after the cursor
func KeyBindCutCharAfter(buf *Buffer) {
if buf.Text() != "" {
lastCut = buf.Delete(1)
}
}
// Cut the character before the cursor
func KeyBindCutCharBefore(buf *Buffer) {
lastCut = buf.DeleteBeforeCursor(1)
}
// Cut the word after the cursor
func KeyBindCutWordAfter(buf *Buffer) {
lastCut = buf.Delete(len([]rune(buf.Document().GetWordAfterCursorWithSpace())))
}
// Cut the word before the cursor
func KeyBindCutWordBefore(buf *Buffer) {
lastCut = buf.DeleteBeforeCursor(len([]rune(buf.Document().GetWordBeforeCursorWithSpace())))
}
// Cut the line after the cursor
func KeyBindCutLineAfter(buf *Buffer) {
x := []rune(buf.Document().TextAfterCursor())
lastCut = buf.Delete(len(x))
}
// Cut the line before the cursor
func KeyBindCutLineBefore(buf *Buffer) {
x := []rune(buf.Document().TextBeforeCursor())
lastCut = buf.DeleteBeforeCursor(len(x))
}
// Insert the last thing to be cut after cursor
func KeyBindInsertLastCutAfter(buf *Buffer) {
buf.InsertText(lastCut, false, true)
}
// Utility
// Clear the screen, similar to the clear command
func KeyBindUtilScreenClear(buf *Buffer) {
consoleWriter.EraseScreen()
consoleWriter.CursorGoTo(0, 0)
debug.AssertNoError(consoleWriter.Flush())
}
// Deprecated
// Deprecated GoLineEnd Go to the End of the line
func GoLineEnd(buf *Buffer) {
KeyBindMoveLineEnd(buf)
}
// Deprecated GoLineBeginning Go to the beginning of the line
func GoLineBeginning(buf *Buffer) {
KeyBindMoveLineStart(buf)
}
// Deprecated DeleteChar Delete character under the cursor
func DeleteChar(buf *Buffer) {
KeyBindCutCharAfter(buf)
}
// Deprecated DeleteBeforeChar Go to Backspace
func DeleteBeforeChar(buf *Buffer) {
KeyBindCutCharBefore(buf)
}
// Deprecated GoRightChar Forward one character
func GoRightChar(buf *Buffer) {
KeyBindMoveCharNext(buf)
}
// Deprecated GoLeftChar Backward one character
func GoLeftChar(buf *Buffer) {
KeyBindMoveCharPrev(buf)
}
// Deprecated & unmapped
// Deprecated DeleteWord Delete word before the cursor
func DeleteWord(buf *Buffer) {
buf.DeleteBeforeCursor(len([]rune(buf.Document().TextBeforeCursor())) - buf.Document().FindStartOfPreviousWordWithSpace())
}
// Deprecated GoRightWord Forward one word
func GoRightWord(buf *Buffer) {
buf.CursorRight(buf.Document().FindEndOfCurrentWordWithSpace())
}
// Deprecated GoLeftWord Backward one word
func GoLeftWord(buf *Buffer) {
buf.CursorLeft(len([]rune(buf.Document().TextBeforeCursor())) - buf.Document().FindStartOfPreviousWordWithSpace())
}