From 2ce07eb6d6c5c113d7c379dca516c2b245df3809 Mon Sep 17 00:00:00 2001 From: xiaofan hu Date: Wed, 12 Sep 2018 15:01:28 +0200 Subject: [PATCH] Support backward/forward by word with ctrl+<-/-> --- doc/shortcut.md | 64 ++++++++++++++++++++++++------------------------- utils.go | 12 ++++++++-- 2 files changed, 42 insertions(+), 34 deletions(-) diff --git a/doc/shortcut.md b/doc/shortcut.md index 404f95d..bb1e64d 100644 --- a/doc/shortcut.md +++ b/doc/shortcut.md @@ -1,40 +1,40 @@ ## Readline Shortcut -`Meta`+`B` means press `Esc` and `n` separately. -Users can change that in terminal simulator(i.e. iTerm2) to `Alt`+`B` +`Meta`+`B` means press `Esc` and `n` separately. +Users can change that in terminal simulator(i.e. iTerm2) to `Alt`+`B` Notice: `Meta`+`B` is equals with `Alt`+`B` in windows. * Shortcut in normal mode -| Shortcut | Comment | -| ------------------ | --------------------------------- | -| `Ctrl`+`A` | Beginning of line | -| `Ctrl`+`B` / `←` | Backward one character | -| `Meta`+`B` | Backward one word | -| `Ctrl`+`C` | Send io.EOF | -| `Ctrl`+`D` | Delete one character | -| `Meta`+`D` | Delete one word | -| `Ctrl`+`E` | End of line | -| `Ctrl`+`F` / `→` | Forward one character | -| `Meta`+`F` | Forward one word | -| `Ctrl`+`G` | Cancel | -| `Ctrl`+`H` | Delete previous character | -| `Ctrl`+`I` / `Tab` | Command line completion | -| `Ctrl`+`J` | Line feed | -| `Ctrl`+`K` | Cut text to the end of line | -| `Ctrl`+`L` | Clear screen | -| `Ctrl`+`M` | Same as Enter key | -| `Ctrl`+`N` / `↓` | Next line (in history) | -| `Ctrl`+`P` / `↑` | Prev line (in history) | -| `Ctrl`+`R` | Search backwards in history | -| `Ctrl`+`S` | Search forwards in history | -| `Ctrl`+`T` | Transpose characters | -| `Meta`+`T` | Transpose words (TODO) | -| `Ctrl`+`U` | Cut text to the beginning of line | -| `Ctrl`+`W` | Cut previous word | -| `Backspace` | Delete previous character | -| `Meta`+`Backspace` | Cut previous word | -| `Enter` | Line feed | +| Shortcut | Comment | +| ------------------------- | --------------------------------- | +| `Ctrl`+`A` | Beginning of line | +| `Ctrl`+`B` / `←` | Backward one character | +| `Meta`+`B` / `Ctrl`+`←` | Backward one word | +| `Ctrl`+`C` | Send io.EOF | +| `Ctrl`+`D` | Delete one character | +| `Meta`+`D` | Delete one word | +| `Ctrl`+`E` | End of line | +| `Ctrl`+`F` / `→` | Forward one character | +| `Meta`+`F` / `Ctrl`+`→` | Forward one word | +| `Ctrl`+`G` | Cancel | +| `Ctrl`+`H` | Delete previous character | +| `Ctrl`+`I` / `Tab` | Command line completion | +| `Ctrl`+`J` | Line feed | +| `Ctrl`+`K` | Cut text to the end of line | +| `Ctrl`+`L` | Clear screen | +| `Ctrl`+`M` | Same as Enter key | +| `Ctrl`+`N` / `↓` | Next line (in history) | +| `Ctrl`+`P` / `↑` | Prev line (in history) | +| `Ctrl`+`R` | Search backwards in history | +| `Ctrl`+`S` | Search forwards in history | +| `Ctrl`+`T` | Transpose characters | +| `Meta`+`T` | Transpose words (TODO) | +| `Ctrl`+`U` | Cut text to the beginning of line | +| `Ctrl`+`W` | Cut previous word | +| `Backspace` | Delete previous character | +| `Meta`+`Backspace` | Cut previous word | +| `Enter` | Line feed | * Shortcut in Search Mode (`Ctrl`+`S` or `Ctrl`+`r` to enter this mode) @@ -59,4 +59,4 @@ Notice: `Meta`+`B` is equals with `Alt`+`B` in windows. | `Ctrl`+`E` | Move to the last candicate in current line | | `Tab` / `Enter` | Use the word on cursor to complete | | `Ctrl`+`C` / `Ctrl`+`G` | Exit Complete Select Mode | -| Other | Exit Complete Select Mode | \ No newline at end of file +| Other | Exit Complete Select Mode | diff --git a/utils.go b/utils.go index af4e005..4c78a0e 100644 --- a/utils.go +++ b/utils.go @@ -101,9 +101,17 @@ func escapeExKey(key *escapeKeyPair) rune { var r rune switch key.typ { case 'D': - r = CharBackward + if key.attr == "1;5" { + r = MetaBackward + } else { + r = CharBackward + } case 'C': - r = CharForward + if key.attr == "1;5" { + r = MetaForward + } else { + r = CharForward + } case 'A': r = CharPrev case 'B':