mirror of
https://github.com/shazow/ssh-chat.git
synced 2025-06-14 06:12:12 +03:00
sshd/terminal: Add more readline-compatible navigation
- Alt-F: jump forward by a word - Alt-B: jump backword by a word - Ctrl-F: jump forward by a character - Ctrl-B: jump backword by a character
This commit is contained in:
parent
0a122be81e
commit
1b2a3e97a0
@ -129,6 +129,8 @@ const (
|
|||||||
keyRight
|
keyRight
|
||||||
keyAltLeft
|
keyAltLeft
|
||||||
keyAltRight
|
keyAltRight
|
||||||
|
keyAltF
|
||||||
|
keyAltB
|
||||||
keyHome
|
keyHome
|
||||||
keyEnd
|
keyEnd
|
||||||
keyDeleteWord
|
keyDeleteWord
|
||||||
@ -155,8 +157,12 @@ func bytesToKey(b []byte, pasteActive bool) (rune, []byte) {
|
|||||||
switch b[0] {
|
switch b[0] {
|
||||||
case 1: // ^A
|
case 1: // ^A
|
||||||
return keyHome, b[1:]
|
return keyHome, b[1:]
|
||||||
|
case 2: // ^B
|
||||||
|
return keyLeft, b[1:]
|
||||||
case 5: // ^E
|
case 5: // ^E
|
||||||
return keyEnd, b[1:]
|
return keyEnd, b[1:]
|
||||||
|
case 6: // ^F
|
||||||
|
return keyRight, b[1:]
|
||||||
case 8: // ^H
|
case 8: // ^H
|
||||||
return keyBackspace, b[1:]
|
return keyBackspace, b[1:]
|
||||||
case 11: // ^K
|
case 11: // ^K
|
||||||
@ -206,6 +212,15 @@ func bytesToKey(b []byte, pasteActive bool) (rune, []byte) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !pasteActive && len(b) >= 2 && b[0] == keyEscape {
|
||||||
|
switch b[1] {
|
||||||
|
case 'f':
|
||||||
|
return keyAltF, b[2:]
|
||||||
|
case 'b':
|
||||||
|
return keyAltB, b[2:]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if !pasteActive && len(b) >= 6 && bytes.Equal(b[:6], pasteStart) {
|
if !pasteActive && len(b) >= 6 && bytes.Equal(b[:6], pasteStart) {
|
||||||
return keyPasteStart, b[6:]
|
return keyPasteStart, b[6:]
|
||||||
}
|
}
|
||||||
@ -467,10 +482,14 @@ func (t *Terminal) handleKey(key rune) (line string, ok bool) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
t.eraseNPreviousChars(1)
|
t.eraseNPreviousChars(1)
|
||||||
|
case keyAltB:
|
||||||
|
fallthrough
|
||||||
case keyAltLeft:
|
case keyAltLeft:
|
||||||
// move left by a word.
|
// move left by a word.
|
||||||
t.pos -= t.countToLeftWord()
|
t.pos -= t.countToLeftWord()
|
||||||
t.moveCursorToPos(t.pos)
|
t.moveCursorToPos(t.pos)
|
||||||
|
case keyAltF:
|
||||||
|
fallthrough
|
||||||
case keyAltRight:
|
case keyAltRight:
|
||||||
// move right by a word.
|
// move right by a word.
|
||||||
t.pos += t.countToRightWord()
|
t.pos += t.countToRightWord()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user