60 lines
1.1 KiB
Go
60 lines
1.1 KiB
Go
|
package prompt
|
||
|
|
||
|
// KeyBindFunc receives buffer and processed it.
|
||
|
type KeyBindFunc func(*Buffer)
|
||
|
|
||
|
// KeyBind represents which key should do what operation.
|
||
|
type KeyBind struct {
|
||
|
Key Key
|
||
|
Fn KeyBindFunc
|
||
|
}
|
||
|
|
||
|
// ASCIICodeBind represents which []byte should do what operation
|
||
|
type ASCIICodeBind struct {
|
||
|
ASCIICode []byte
|
||
|
Fn KeyBindFunc
|
||
|
}
|
||
|
|
||
|
// KeyBindMode to switch a key binding flexibly.
|
||
|
type KeyBindMode string
|
||
|
|
||
|
const (
|
||
|
// CommonKeyBind is a mode without any keyboard shortcut
|
||
|
CommonKeyBind KeyBindMode = "common"
|
||
|
// EmacsKeyBind is a mode to use emacs-like keyboard shortcut
|
||
|
EmacsKeyBind KeyBindMode = "emacs"
|
||
|
)
|
||
|
|
||
|
var commonKeyBindings = []KeyBind{
|
||
|
// Go to the End of the line
|
||
|
{
|
||
|
Key: End,
|
||
|
Fn: GoLineEnd,
|
||
|
},
|
||
|
// Go to the beginning of the line
|
||
|
{
|
||
|
Key: Home,
|
||
|
Fn: GoLineBeginning,
|
||
|
},
|
||
|
// Delete character under the cursor
|
||
|
{
|
||
|
Key: Delete,
|
||
|
Fn: DeleteChar,
|
||
|
},
|
||
|
// Backspace
|
||
|
{
|
||
|
Key: Backspace,
|
||
|
Fn: DeleteBeforeChar,
|
||
|
},
|
||
|
// Right allow: Forward one character
|
||
|
{
|
||
|
Key: Right,
|
||
|
Fn: GoRightChar,
|
||
|
},
|
||
|
// Left allow: Backward one character
|
||
|
{
|
||
|
Key: Left,
|
||
|
Fn: GoLeftChar,
|
||
|
},
|
||
|
}
|