summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--helix-term/src/commands.rs2
-rw-r--r--helix-term/src/ui/prompt.rs22
2 files changed, 15 insertions, 9 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 41960d35..cd92c42d 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 1b2c35e9..24fc8233 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<str> = 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()