From c0449955e38da95a88893337bef0b004e135e177 Mon Sep 17 00:00:00 2001 From: Richard Turner <63139+zygous@users.noreply.github.com> Date: Thu, 27 Jul 2023 09:10:40 +0100 Subject: [PATCH] use Ctrl-n instead of Alt-n on macOS (#1106) * use Ctrl-n instead of Alt-n on macOS * make ctrl-n instead of alt-n configurable --- atuin-client/config.toml | 4 ++++ atuin-client/src/settings.rs | 2 ++ atuin/src/command/client/search/interactive.rs | 5 ++++- docs/docs/config/config.md | 9 +++++++++ docs/docs/key-binding.md | 9 +++++++++ 5 files changed, 28 insertions(+), 1 deletion(-) diff --git a/atuin-client/config.toml b/atuin-client/config.toml index 7313f9f..b84151a 100644 --- a/atuin-client/config.toml +++ b/atuin-client/config.toml @@ -68,6 +68,10 @@ ## number of context lines to show when scrolling by pages # scroll_context_lines = 1 +## use ctrl instead of alt as the shortcut modifier key for numerical UI shortcuts +## alt-0 .. alt-9 +# ctrl_n_shortcuts = false + ## prevent commands matching any of these regexes from being written to history. ## Note that these regular expressions are unanchored, i.e. if they don't start ## with ^ or end with $, they'll match anywhere in the command. diff --git a/atuin-client/src/settings.rs b/atuin-client/src/settings.rs index 3bcb270..622abde 100644 --- a/atuin-client/src/settings.rs +++ b/atuin-client/src/settings.rs @@ -168,6 +168,7 @@ pub struct Settings { #[serde(with = "serde_regex", default = "RegexSet::empty")] pub cwd_filter: RegexSet, pub workspaces: bool, + pub ctrl_n_shortcuts: bool, // This is automatically loaded when settings is created. Do not set in // config! Keep secrets and settings apart. @@ -380,6 +381,7 @@ impl Settings { .set_default("shell_up_key_binding", false)? .set_default("session_token", "")? .set_default("workspaces", false)? + .set_default("ctrl_n_shortcuts", false)? .add_source( Environment::with_prefix("atuin") .prefix_separator("_") diff --git a/atuin/src/command/client/search/interactive.rs b/atuin/src/command/client/search/interactive.rs index 710d027..e7e7189 100644 --- a/atuin/src/command/client/search/interactive.rs +++ b/atuin/src/command/client/search/interactive.rs @@ -102,6 +102,9 @@ impl State { let ctrl = input.modifiers.contains(KeyModifiers::CONTROL); let alt = input.modifiers.contains(KeyModifiers::ALT); + // Use Ctrl-n instead of Alt-n? + let modfr = if settings.ctrl_n_shortcuts { ctrl } else { alt }; + // reset the state, will be set to true later if user really did change it self.switched_search_mode = false; match input.code { @@ -115,7 +118,7 @@ impl State { KeyCode::Enter => { return Some(self.results_state.selected()); } - KeyCode::Char(c @ '1'..='9') if alt => { + KeyCode::Char(c @ '1'..='9') if modfr => { let c = c.to_digit(10)? as usize; return Some(self.results_state.selected() + c); } diff --git a/docs/docs/config/config.md b/docs/docs/config/config.md index 1f4e166..209d34c 100644 --- a/docs/docs/config/config.md +++ b/docs/docs/config/config.md @@ -231,3 +231,12 @@ history_filter = [ "^innocuous-cmd .*--secret=.+" ] ``` + +## macOS Ctrl-n key shortcuts + +macOS does not have an Alt key, although terminal emulators can often be configured to map the Option key to be used as Alt. *However*, remapping Option this way may prevent typing some characters, such as using Option-3 to type `#` on the British English layout. For such a scenario, set the `ctrl_n_shortcuts` option to `true` in your config file to replace Alt-0 to Alt-9 shortcuts with Ctrl-0 to Ctrl-9 instead: + +``` +# Use Ctrl-0 .. Ctrl-9 instead of Alt-0 .. Alt-9 UI shortcuts +ctrl_n_shortcuts = true +``` diff --git a/docs/docs/key-binding.md b/docs/docs/key-binding.md index 2069e25..c393197 100644 --- a/docs/docs/key-binding.md +++ b/docs/docs/key-binding.md @@ -46,6 +46,15 @@ eval "$(atuin init zsh)" You can then choose to bind Atuin if needed, do this after the call to init. +## Ctrl-n key shortcuts + +macOS does not have an Alt key, although terminal emulators can often be configured to map the Option key to be used as Alt. *However*, remapping Option this way may prevent typing some characters, such as using Option-3 to type `#` on the British English layout. For such a scenario, set the `ctrl_n_shortcuts` option to `true` in your config file to replace Alt-0 to Alt-9 shortcuts with Ctrl-0 to Ctrl-9 instead: + +``` +# Use Ctrl-0 .. Ctrl-9 instead of Alt-0 .. Alt-9 UI shortcuts +ctrl_n_shortcuts = true +``` + ## zsh If you'd like to customize your bindings further, it's possible to do so with custom shell config: