Append changes to history on jumps (#13619)

Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
pull/11700/merge
CalebLarsen 2025-05-27 09:44:47 -05:00 committed by GitHub
parent c9e7b0f84f
commit 7dcddf98c6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 39 additions and 1 deletions

View File

@ -3762,7 +3762,8 @@ fn normal_mode(cx: &mut Context) {
}
// Store a jump on the jumplist.
fn push_jump(view: &mut View, doc: &Document) {
fn push_jump(view: &mut View, doc: &mut Document) {
doc.append_changes_to_history(view);
let jump = (doc.id(), doc.selection(view.id).clone());
view.jumps.push(jump);
}

View File

@ -534,3 +534,40 @@ async fn try_restore_indent() -> anyhow::Result<()> {
Ok(())
}
// Tests being able to jump in insert mode, then undo the write performed by the jump
// https://github.com/helix-editor/helix/issues/13480
#[tokio::test(flavor = "multi_thread")]
async fn test_jump_undo_redo() -> anyhow::Result<()> {
use helix_core::hashmap;
use helix_term::keymap;
use helix_view::document::Mode;
let mut config = Config::default();
config.keys.insert(
Mode::Insert,
keymap!({"Insert Mode"
"C-i" => goto_file_start,
"C-o" => goto_file_end,
}),
);
// Undo
test_with_config(
AppBuilder::new().with_config(config.clone()),
("#[|]#", "iworld<C-i>Hello, <esc>u", "#[w|]#orld"),
)
.await?;
// Redo
test_with_config(
AppBuilder::new().with_config(config),
(
"#[|]#",
"iworld<C-i>Hello, <esc>ui<C-o><esc>U",
"Hello, #[w|]#orld",
),
)
.await?;
Ok(())
}