feat: add Visual selection and clipboard editing
This commit is contained in:
@@ -404,6 +404,55 @@ end
|
||||
assert!(session.editor().should_quit());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn typed_visual_actions_copy_cut_paste_and_cancel_without_splitting_history() {
|
||||
let fixture = Fixture::new();
|
||||
fixture.file("buffer.txt", "one two");
|
||||
let mut session = fixture.open(
|
||||
r#"
|
||||
Vamp.configure do |config|
|
||||
config.bind "v", nil
|
||||
config.bind "ctrl+v", config.core.select
|
||||
config.bind "ctrl+c", config.core.copy, mode: config.modes.visual
|
||||
config.bind "ctrl+x", config.core.cut, mode: config.modes.visual
|
||||
config.bind "ctrl+g", config.core.normal, mode: config.modes.visual
|
||||
config.bind "ctrl+f", config.core.word_end, mode: config.modes.visual
|
||||
config.bind "ctrl+b", config.core.paste_before
|
||||
config.bind "ctrl+p", config.core.paste_after
|
||||
end
|
||||
"#,
|
||||
);
|
||||
session.handle(Input::Char('v'));
|
||||
assert_eq!(session.editor().mode(), crate::editor::Mode::Normal);
|
||||
session.handle(Input::Ctrl('v'));
|
||||
assert_eq!(session.editor().mode(), crate::editor::Mode::Visual);
|
||||
session.handle(Input::Ctrl('f'));
|
||||
assert_eq!(session.editor().selection().unwrap().end.column, 3);
|
||||
session.handle(Input::Ctrl('c'));
|
||||
assert_eq!(session.editor().mode(), crate::editor::Mode::Normal);
|
||||
assert!(!session.editor().dirty());
|
||||
session.handle(Input::Ctrl('p'));
|
||||
assert_eq!(session.editor().lines(), &["oonene two"]);
|
||||
session.handle(Input::Char('u'));
|
||||
assert_eq!(session.editor().lines(), &["one two"]);
|
||||
session.handle(Input::Ctrl('v'));
|
||||
session.handle(Input::Ctrl('f'));
|
||||
session.handle(Input::Ctrl('x'));
|
||||
assert_eq!(session.editor().lines(), &[" two"]);
|
||||
assert_eq!(session.editor().mode(), crate::editor::Mode::Normal);
|
||||
session.handle(Input::Ctrl('b'));
|
||||
assert_eq!(session.editor().lines(), &["one two"]);
|
||||
session.handle(Input::Char('u'));
|
||||
assert_eq!(session.editor().lines(), &[" two"]);
|
||||
session.handle(Input::Char('u'));
|
||||
assert_eq!(session.editor().lines(), &["one two"]);
|
||||
assert!(!session.editor().dirty());
|
||||
session.handle(Input::Ctrl('v'));
|
||||
session.handle(Input::Ctrl('g'));
|
||||
assert_eq!(session.editor().mode(), crate::editor::Mode::Normal);
|
||||
assert_eq!(session.editor().selection(), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn typed_word_motions_remap_keys_and_keep_insert_typing_in_one_undo_group() {
|
||||
let fixture = Fixture::new();
|
||||
|
||||
Reference in New Issue
Block a user