feat: add configurable diff modes and split orientation
This commit is contained in:
@@ -225,6 +225,7 @@ impl EditorSession {
|
||||
));
|
||||
}
|
||||
editor.set_diff_context_options(config.diff_context_lines, config.diff_expand_lines);
|
||||
editor.set_diff_display_options(config.diff_view_mode, config.diff_split_orientation);
|
||||
if let Err(error) =
|
||||
editor.set_chrome_config(config.top_bar, config.bottom_bar, config.labels)
|
||||
{
|
||||
@@ -1815,6 +1816,46 @@ end
|
||||
assert_eq!(session.editor().lines(), &["a!bc"]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn diff_display_preferences_survive_reopening() {
|
||||
use crate::{diff::ViewMode, panes::SplitAxis};
|
||||
let fixture = Fixture::new();
|
||||
fixture.file("buffer.txt", "abc");
|
||||
for (mode, orientation, expected_mode, expected_axis) in [
|
||||
(
|
||||
"unified",
|
||||
"above_below",
|
||||
ViewMode::Unified,
|
||||
SplitAxis::Horizontal,
|
||||
),
|
||||
(
|
||||
"split",
|
||||
"above_below",
|
||||
ViewMode::Split,
|
||||
SplitAxis::Horizontal,
|
||||
),
|
||||
] {
|
||||
let mut session = fixture.open(&format!(
|
||||
r#"Vamp.configure do |config|
|
||||
config.diff_view_mode = "{mode}"
|
||||
config.diff_split_orientation = "{orientation}"
|
||||
config.bind "n", config.core.right
|
||||
end"#
|
||||
));
|
||||
session.handle(Input::Char('n'));
|
||||
assert_eq!(session.editor().cursor().column, 1);
|
||||
for _ in 0..2 {
|
||||
session.execute("diff");
|
||||
let diff = session.editor().diff().unwrap();
|
||||
assert_eq!(diff.view_mode, expected_mode);
|
||||
assert_eq!(diff.split_axis, expected_axis);
|
||||
session.execute("diff.close");
|
||||
assert!(session.editor().diff().is_none());
|
||||
assert_eq!(session.editor().lines(), &["abc"]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn no_config_uses_space_leader_for_palette_and_write() {
|
||||
let fixture = Fixture::new();
|
||||
@@ -3008,6 +3049,38 @@ end
|
||||
("config.leader = 7", "leader key must be a String"),
|
||||
("config.leader = nil", "leader key must be a String"),
|
||||
(r#"config.leader = """#, "leader key must not be empty"),
|
||||
(
|
||||
r#"config.diff_view_mode = "invalid""#,
|
||||
"diff view mode must be split or unified",
|
||||
),
|
||||
(
|
||||
r#"config.diff_split_orientation = "invalid""#,
|
||||
"diff split orientation must be left_right or above_below",
|
||||
),
|
||||
(
|
||||
"config.diff_view_mode = 7",
|
||||
"diff view mode must be a String",
|
||||
),
|
||||
(
|
||||
"config.diff_view_mode = nil",
|
||||
"diff view mode must be a String",
|
||||
),
|
||||
(
|
||||
r#"config.diff_view_mode = """#,
|
||||
"diff view mode must not be empty",
|
||||
),
|
||||
(
|
||||
"config.diff_split_orientation = 7",
|
||||
"diff split orientation must be a String",
|
||||
),
|
||||
(
|
||||
"config.diff_split_orientation = nil",
|
||||
"diff split orientation must be a String",
|
||||
),
|
||||
(
|
||||
r#"config.diff_split_orientation = """#,
|
||||
"diff split orientation must not be empty",
|
||||
),
|
||||
(
|
||||
"config.file_explorer_side = 7",
|
||||
"file explorer side must be a String",
|
||||
|
||||
Reference in New Issue
Block a user