diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index 41960d35c5ad..cd92c42d0226 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -1977,7 +1977,7 @@ fn extend_line_impl(cx: &mut Context, extend: Extend) { let end = text.line_to_char( match extend { Extend::Above => end_line + 1, // the start of next line - Extend::Below => (end_line + count), + Extend::Below => end_line + count, } .min(text.len_lines()), ); diff --git a/helix-term/src/ui/prompt.rs b/helix-term/src/ui/prompt.rs index 1b2c35e9a608..24fc8233339d 100644 --- a/helix-term/src/ui/prompt.rs +++ b/helix-term/src/ui/prompt.rs @@ -533,18 +533,24 @@ impl Component for Prompt { if self.selection.is_some() && self.line.ends_with(std::path::MAIN_SEPARATOR) { self.recalculate_completion(cx.editor); } else { + let last_item = self + .history_register + .and_then(|reg| cx.editor.registers.last(reg).cloned()) + .map(|entry| entry.into()) + .unwrap_or_else(|| Cow::from("")); + // handle executing with last command in history if nothing entered let input: Cow = if self.line.is_empty() { - // latest value in the register list - self.history_register - .and_then(|reg| cx.editor.registers.last(reg).cloned()) - .map(|entry| entry.into()) - .unwrap_or_else(|| Cow::from("")) + last_item } else { - if let Some(register) = self.history_register { + if last_item != self.line { // store in history - let register = cx.editor.registers.get_mut(register); - register.push(self.line.clone()); + if let Some(register) = self.history_register { + cx.editor + .registers + .get_mut(register) + .push(self.line.clone()); + }; } self.line.as_str().into()