Skip to content

Commit

Permalink
feat(search): process [C-h] and [C-?] as representations of backspace (
Browse files Browse the repository at this point in the history
…#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.

#1753
  • Loading branch information
akinomyoga authored Mar 11, 2024
1 parent c00e54c commit 0d3741f
Showing 1 changed file with 15 additions and 0 deletions.
15 changes: 15 additions & 0 deletions atuin/src/command/client/search/interactive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 0d3741f

Please sign in to comment.