diff options
| author | Koichi Murase <myoga.murase@gmail.com> | 2024-03-12 00:25:57 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-11 15:25:57 +0000 |
| commit | 0d3741f1cccf88e60439d37430a368faa95f3512 (patch) | |
| tree | 923cf5a08dbf1b052ff56074ddf1b7acc3eabd68 | |
| parent | fix(dotfiles): use latest client (#1859) (diff) | |
| download | atuin-0d3741f1cccf88e60439d37430a368faa95f3512.zip | |
feat(search): process [C-h] and [C-?] as representations of backspace (#1857)
In the conventional terminal protocol, Backspace can be transmitted as
the code \x08 or \x7F depending on the terminal. Ctrl+Backspace can
also be transmitted as the code \x08 or \x7F. These overlap with the
code for Ctrl+H and Ctrl+?. The crossterm library does not try to
handle these terminal dependencies (probably because it is hard to
resolve it perfectly). To provide a consistent experience among
terminals, we assign to C-h and C-? the same feature as backspace.
Note: The crossterm seems to produce Ctrl+Backspace only in the
extended keyboard protocol, so we can trust crossterm particularly for
Ctrl+Backspace. For this reason, we keep the feature of removing a
backward word by Ctrl+Backspace.
https://github.com/atuinsh/atuin/issues/1753
| -rw-r--r-- | atuin/src/command/client/search/interactive.rs | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/atuin/src/command/client/search/interactive.rs b/atuin/src/command/client/search/interactive.rs index f74be643..a1247964 100644 --- a/atuin/src/command/client/search/interactive.rs +++ b/atuin/src/command/client/search/interactive.rs @@ -379,6 +379,21 @@ impl State { KeyCode::Backspace => { self.search.input.back(); } + KeyCode::Char('h' | '?') if ctrl => { + // Depending on the terminal, [Backspace] can be transmitted as + // \x08 or \x7F. Also, [Ctrl+Backspace] can be transmitted as + // \x08 or \x7F or \x1F. On the other hand, [Ctrl+h] and + // [Ctrl+?] are also transmitted as \x08 or \x7F by the + // terminals. + // + // The crossterm library translates \x08 and \x7F to C-h and + // Backspace, respectively. With the extended keyboard + // protocol enabled, crossterm can faithfully translate + // [Ctrl+h] and [Ctrl+?] to C-h and C-?. There is no perfect + // solution, but we treat C-h and C-? the same as backspace to + // suppress quirks as much as possible. + self.search.input.back(); + } KeyCode::Delete if ctrl => self .search .input |
