feat: add configurable three-pane conflict views

This commit is contained in:
Valdemar Lorenzen
2026-10-16 16:19:54 +02:00
parent a6310594c5
commit de6a57e67d
11 changed files with 176 additions and 20 deletions
+23 -8
View File
@@ -1596,6 +1596,13 @@ pub enum ResolverView {
History,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, serde::Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ResolverLayout {
Columns,
BaseBelow,
}
pub struct ResolverFile {
pub path: PathBuf,
pub draft_buffer: usize,
@@ -2088,6 +2095,7 @@ pub struct Editor {
tabs: BTreeMap<usize, Tab>,
resolvers: BTreeMap<usize, ResolverWorkspace>,
resolver_requests: VecDeque<ResolverRequest>,
pub(crate) resolve_history_layout: ResolverLayout,
pane_bounds: PaneRect,
render_pane_focused: bool,
diff_owner: Option<usize>,
@@ -2190,6 +2198,7 @@ impl Editor {
tabs: BTreeMap::new(),
resolvers: BTreeMap::new(),
resolver_requests: VecDeque::new(),
resolve_history_layout: ResolverLayout::Columns,
pane_bounds: PaneRect {
x: 0,
y: 0,
@@ -2836,14 +2845,20 @@ impl Editor {
.collect(),
ResolverView::History => {
let mut panes = Vec::new();
for index in [
Some(resolver.history_sources[0]),
resolver.selected_base,
Some(resolver.history_sources[1]),
]
.into_iter()
.flatten()
{
let sources = if self.resolve_history_layout == ResolverLayout::BaseBelow {
[
Some(resolver.history_sources[0]),
Some(resolver.history_sources[1]),
resolver.selected_base,
]
} else {
[
Some(resolver.history_sources[0]),
resolver.selected_base,
Some(resolver.history_sources[1]),
]
};
for index in sources.into_iter().flatten() {
if let Some(&pane) = resolver.history_panes.get(index)
&& !panes.contains(&pane)
{