From 879e95502452ccc02c92279e6f13fa1a9798aca7 Mon Sep 17 00:00:00 2001 From: Frithjof Schulze Date: Mon, 30 Sep 2013 16:06:07 -0400 Subject: [PATCH] go.crypto/ssh/terminal: Allow ^A and ^E as synonyms for Home and End. I understand that ssh/terminal can't implement everybodys favorite keyboard shortcuts, but I think these are very widespread. They exist not only in Emacs or Readline, but also in Acme and Sam. Also they almost come for free. R=golang-dev CC=agl, golang-dev https://golang.org/cl/13839047 --- terminal.go | 4 ++++ terminal_test.go | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/terminal.go b/terminal.go index 66439cf..86853d6 100644 --- a/terminal.go +++ b/terminal.go @@ -132,6 +132,10 @@ func bytesToKey(b []byte) (rune, []byte) { } switch b[0] { + case 1: // ^A + return keyHome, b[1:] + case 5: // ^E + return keyEnd, b[1:] case 8: // ^H return keyBackspace, b[1:] case 11: // ^K diff --git a/terminal_test.go b/terminal_test.go index 7fbf0e6..641576c 100644 --- a/terminal_test.go +++ b/terminal_test.go @@ -101,6 +101,18 @@ var keyPressTests = []struct { line: "line1xxx", throwAwayLines: 2, }, + { + // Ctrl-A to move to beginning of line followed by ^K to kill + // line. + in: "a b \001\013\r", + line: "", + }, + { + // Ctrl-A to move to beginning of line, Ctrl-E to move to end, + // finally ^K to kill nothing. + in: "a b \001\005\013\r", + line: "a b ", + }, { in: "\027\r", line: "",