aboutsummaryrefslogtreecommitdiffstats
path: root/crates
diff options
context:
space:
mode:
authorBraelyn Boynton <bboynton97@gmail.com>2024-11-19 10:59:16 -0800
committerGitHub <noreply@github.com>2024-11-19 10:59:16 -0800
commit4f0084a8c1ea9c8e0cfd9dd0f7ccd1af02861b16 (patch)
treef90cb51652a03e084e04af152edf084d600729df /crates
parentfix: disable the actuated mirror on the x86 docker builder (#2443) (diff)
downloadatuin-4f0084a8c1ea9c8e0cfd9dd0f7ccd1af02861b16.zip
feat: right Arrow to modify selected command (#2453)
* right arrow functionality * use or within match * handles cursor not at end of line * left cursor exits at start * cargo fmt
Diffstat (limited to 'crates')
-rw-r--r--crates/atuin/src/command/client/search/cursor.rs4
-rw-r--r--crates/atuin/src/command/client/search/interactive.rs9
2 files changed, 11 insertions, 2 deletions
diff --git a/crates/atuin/src/command/client/search/cursor.rs b/crates/atuin/src/command/client/search/cursor.rs
index 2bce4f37..56355f12 100644
--- a/crates/atuin/src/command/client/search/cursor.rs
+++ b/crates/atuin/src/command/client/search/cursor.rs
@@ -203,6 +203,10 @@ impl Cursor {
pub fn start(&mut self) {
self.index = 0;
}
+
+ pub fn position(&self) -> usize {
+ self.index
+ }
}
#[cfg(test)]
diff --git a/crates/atuin/src/command/client/search/interactive.rs b/crates/atuin/src/command/client/search/interactive.rs
index c87fff1c..5549cbfd 100644
--- a/crates/atuin/src/command/client/search/interactive.rs
+++ b/crates/atuin/src/command/client/search/interactive.rs
@@ -205,6 +205,9 @@ impl State {
let ctrl = input.modifiers.contains(KeyModifiers::CONTROL);
let esc_allow_exit = !(self.tab_index == 0 && self.keymap_mode == KeymapMode::VimInsert);
+ let cursor_at_end_of_line =
+ self.search.input.position() == UnicodeWidthStr::width(self.search.input.as_str());
+ let cursor_at_start_of_line = self.search.input.position() == 0;
// support ctrl-a prefix, like screen or tmux
if !self.prefix
@@ -221,12 +224,14 @@ impl State {
KeyCode::Esc if esc_allow_exit => Some(Self::handle_key_exit(settings)),
KeyCode::Char('[') if ctrl && esc_allow_exit => Some(Self::handle_key_exit(settings)),
KeyCode::Tab => Some(InputAction::Accept(self.results_state.selected())),
+ KeyCode::Right if cursor_at_end_of_line => {
+ Some(InputAction::Accept(self.results_state.selected()))
+ }
+ KeyCode::Left if cursor_at_start_of_line => Some(Self::handle_key_exit(settings)),
KeyCode::Char('o') if ctrl => {
self.tab_index = (self.tab_index + 1) % TAB_TITLES.len();
-
Some(InputAction::Continue)
}
-
_ => None,
};