feat: add configurable three-pane conflict views
This commit is contained in:
+23
-8
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user