feat: add literal buffer search and match navigation
This commit is contained in:
@@ -404,6 +404,49 @@ end
|
||||
assert!(session.editor().should_quit());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn typed_search_bindings_drive_navigation_and_the_search_prompt_only() {
|
||||
let fixture = Fixture::new();
|
||||
fixture.file("buffer.txt", "cat\ncat\ncat");
|
||||
let mut session = fixture.open(
|
||||
r#"
|
||||
Vamp.configure do |config|
|
||||
config.bind "ctrl+f", config.core.search
|
||||
config.bind "ctrl+n", config.core.search_next
|
||||
config.bind "ctrl+p", config.core.search_previous
|
||||
config.bind "ctrl+x", config.core.submit, mode: config.modes.search
|
||||
config.bind "ctrl+c", config.core.normal, mode: config.modes.search
|
||||
config.bind "ctrl+h", config.core.backspace, mode: config.modes.search
|
||||
config.bind "enter", nil, mode: config.modes.search
|
||||
config.bind "/", nil
|
||||
end
|
||||
"#,
|
||||
);
|
||||
session.handle(Input::Char('/'));
|
||||
assert_eq!(session.editor().mode(), crate::editor::Mode::Normal);
|
||||
session.handle(Input::Ctrl('f'));
|
||||
assert_eq!(session.editor().mode(), crate::editor::Mode::Search);
|
||||
for ch in "cat界".chars() {
|
||||
session.handle(Input::Char(ch));
|
||||
}
|
||||
session.handle(Input::Backspace);
|
||||
session.handle(Input::Enter);
|
||||
assert_eq!(session.editor().mode(), crate::editor::Mode::Search);
|
||||
session.handle(Input::Ctrl('x'));
|
||||
assert_eq!(session.editor().cursor().row, 1);
|
||||
session.handle(Input::Ctrl('n'));
|
||||
assert_eq!(session.editor().cursor().row, 2);
|
||||
session.handle(Input::Ctrl('p'));
|
||||
assert_eq!(session.editor().cursor().row, 1);
|
||||
session.handle(Input::Ctrl('f'));
|
||||
session.handle(Input::Char('q'));
|
||||
session.handle(Input::Ctrl('c'));
|
||||
session.handle(Input::Ctrl('n'));
|
||||
assert_eq!(session.editor().cursor().row, 2);
|
||||
assert!(!session.editor().dirty());
|
||||
assert!(!session.editor().should_quit());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn typed_config_errors_discard_partial_bindings_and_leave_default_editing_available() {
|
||||
let fixture = Fixture::new();
|
||||
|
||||
Reference in New Issue
Block a user