From 1adbec2d3785c23da52090bc509c652db81855ca Mon Sep 17 00:00:00 2001 From: Mahmoud Al-Qudsi Date: Fri, 29 Mar 2024 14:09:34 -0500 Subject: [PATCH] Add backward-char-passive --- src/input.rs | 1 + src/input_common.rs | 1 + src/reader.rs | 19 +++++++++++++------ tests/checks/tmux-complete.fish | 6 ++---- 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/input.rs b/src/input.rs index f72fd743a..270ddad08 100644 --- a/src/input.rs +++ b/src/input.rs @@ -119,6 +119,7 @@ const INPUT_FUNCTION_METADATA: &[InputFunctionMetadata] = &[ make_md(L!("and"), ReadlineCmd::FuncAnd), make_md(L!("backward-bigword"), ReadlineCmd::BackwardBigword), make_md(L!("backward-char"), ReadlineCmd::BackwardChar), + make_md(L!("backward-char-passive"), ReadlineCmd::BackwardCharPassive), make_md(L!("backward-delete-char"), ReadlineCmd::BackwardDeleteChar), make_md(L!("backward-jump"), ReadlineCmd::BackwardJump), make_md(L!("backward-jump-till"), ReadlineCmd::BackwardJumpTill), diff --git a/src/input_common.rs b/src/input_common.rs index 43b91af8a..cd97c6231 100644 --- a/src/input_common.rs +++ b/src/input_common.rs @@ -34,6 +34,7 @@ pub enum ReadlineCmd { EndOfLine, ForwardChar, BackwardChar, + BackwardCharPassive, ForwardSingleChar, ForwardCharPassive, ForwardWord, diff --git a/src/reader.rs b/src/reader.rs index 5053a039b..21742a251 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -2497,6 +2497,14 @@ impl ReaderData { self.update_buff_pos(elt, Some(el.position() - 1)); } } + rl::BackwardCharPassive => { + let (elt, el) = self.active_edit_line(); + if el.position() != 0 { + if elt == EditableLineTag::SearchField || !self.is_navigating_pager_contents() { + self.update_buff_pos(elt, Some(el.position() - 1)); + } + } + } rl::ForwardChar | rl::ForwardSingleChar => { let (elt, el) = self.active_edit_line(); if self.is_navigating_pager_contents() { @@ -2513,12 +2521,10 @@ impl ReaderData { } rl::ForwardCharPassive => { let (elt, el) = self.active_edit_line(); - if self.is_navigating_pager_contents() { - // Do nothing - } else if self.is_at_end(el) { - // Do nothing - } else { - self.update_buff_pos(elt, Some(el.position() + 1)); + if !self.is_at_end(el) { + if elt == EditableLineTag::SearchField || !self.is_navigating_pager_contents() { + self.update_buff_pos(elt, Some(el.position() + 1)); + } } } rl::BackwardKillWord | rl::BackwardKillPathComponent | rl::BackwardKillBigword => { @@ -4504,6 +4510,7 @@ fn command_ends_paging(c: ReadlineCmd, focused_on_search_field: bool) -> bool { | rl::CompleteAndSearch | rl::HistoryPager | rl::BackwardChar + | rl::BackwardCharPassive | rl::ForwardChar | rl::ForwardCharPassive | rl::ForwardSingleChar diff --git a/tests/checks/tmux-complete.fish b/tests/checks/tmux-complete.fish index 25ea48075..81ab019d1 100644 --- a/tests/checks/tmux-complete.fish +++ b/tests/checks/tmux-complete.fish @@ -104,13 +104,11 @@ isolated-tmux capture-pane -p # CHECK: prompt 7> echo suggest nothing isolated-tmux send-keys C-u 'bind \cs forward-char-passive' Enter C-l -isolated-tmux send-keys C-u 'bind \cp backward-char' Enter C-l +isolated-tmux send-keys C-u 'bind \cb backward-char-passive' Enter C-l isolated-tmux send-keys C-u 'echo do not accept this' Enter C-l tmux-sleep -isolated-tmux send-keys 'echo do not accept thi' C-p C-p Delete C-p C-s 'h' +isolated-tmux send-keys 'echo do not accept thi' C-b C-b Delete C-b C-s 'h' tmux-sleep isolated-tmux send-keys C-s C-s C-s 'x' -tmux-sleep isolated-tmux capture-pane -p -tmux-sleep # CHECK: prompt 10> echo do not accept thix