Skip to content

Commit 4f8bdb4

Browse files
committed
feature: supports to customize diff/merge options for external diff/merge tool (#1971)
Signed-off-by: leo <[email protected]>
1 parent a7c6de3 commit 4f8bdb4

File tree

6 files changed

+97
-7
lines changed

6 files changed

+97
-7
lines changed

src/Native/OS.cs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,18 @@ public static string ExternalMergerExecFile
9494
set;
9595
} = string.Empty;
9696

97+
public static string ExternalMergeArgs
98+
{
99+
get;
100+
set;
101+
} = string.Empty;
102+
103+
public static string ExternalDiffArgs
104+
{
105+
get;
106+
set;
107+
} = string.Empty;
108+
97109
public static bool UseSystemWindowFrame
98110
{
99111
get => OperatingSystem.IsLinux() && _enableSystemWindowFrame;
@@ -187,7 +199,7 @@ public static Models.DiffMergeTool GetDiffMergeTool(bool onlyDiff)
187199
return null;
188200

189201
var tool = Models.ExternalMerger.Supported[ExternalMergerType];
190-
return new Models.DiffMergeTool(ExternalMergerExecFile, onlyDiff ? tool.DiffCmd : tool.MergeCmd);
202+
return new Models.DiffMergeTool(ExternalMergerExecFile, onlyDiff ? ExternalDiffArgs : ExternalMergeArgs);
191203
}
192204

193205
public static void AutoSelectExternalMergeToolExecFile()
@@ -202,6 +214,15 @@ public static void AutoSelectExternalMergeToolExecFile()
202214
ExternalMergerExecFile = merger.Finder;
203215
else
204216
ExternalMergerExecFile = string.Empty;
217+
218+
ExternalDiffArgs = merger.DiffCmd;
219+
ExternalMergeArgs = merger.MergeCmd;
220+
}
221+
else
222+
{
223+
ExternalMergerExecFile = string.Empty;
224+
ExternalDiffArgs = string.Empty;
225+
ExternalMergeArgs = string.Empty;
205226
}
206227
}
207228

src/Resources/Locales/en_US.axaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -589,6 +589,8 @@
589589
<x:String x:Key="Text.Preferences.Appearance.UseFixedTabWidth" xml:space="preserve">Use fixed tab width in titlebar</x:String>
590590
<x:String x:Key="Text.Preferences.Appearance.UseNativeWindowFrame" xml:space="preserve">Use native window frame</x:String>
591591
<x:String x:Key="Text.Preferences.DiffMerge" xml:space="preserve">DIFF/MERGE TOOL</x:String>
592+
<x:String x:Key="Text.Preferences.DiffMerge.DiffArgs" xml:space="preserve">Diff Arguments</x:String>
593+
<x:String x:Key="Text.Preferences.DiffMerge.MergeArgs" xml:space="preserve">Merge Arguments</x:String>
592594
<x:String x:Key="Text.Preferences.DiffMerge.Path" xml:space="preserve">Install Path</x:String>
593595
<x:String x:Key="Text.Preferences.DiffMerge.Path.Placeholder" xml:space="preserve">Input path for diff/merge tool</x:String>
594596
<x:String x:Key="Text.Preferences.DiffMerge.Type" xml:space="preserve">Tool</x:String>

src/Resources/Locales/zh_CN.axaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,8 @@
593593
<x:String x:Key="Text.Preferences.Appearance.UseFixedTabWidth" xml:space="preserve">主标签使用固定宽度</x:String>
594594
<x:String x:Key="Text.Preferences.Appearance.UseNativeWindowFrame" xml:space="preserve">使用系统默认窗体样式</x:String>
595595
<x:String x:Key="Text.Preferences.DiffMerge" xml:space="preserve">对比/合并工具</x:String>
596+
<x:String x:Key="Text.Preferences.DiffMerge.DiffArgs" xml:space="preserve">对比命令参数</x:String>
597+
<x:String x:Key="Text.Preferences.DiffMerge.MergeArgs" xml:space="preserve">合并命令参数</x:String>
596598
<x:String x:Key="Text.Preferences.DiffMerge.Path" xml:space="preserve">安装路径</x:String>
597599
<x:String x:Key="Text.Preferences.DiffMerge.Path.Placeholder" xml:space="preserve">填写工具可执行文件所在位置</x:String>
598600
<x:String x:Key="Text.Preferences.DiffMerge.Type" xml:space="preserve">工具</x:String>

src/Resources/Locales/zh_TW.axaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,8 @@
593593
<x:String x:Key="Text.Preferences.Appearance.UseFixedTabWidth" xml:space="preserve">使用固定寬度的分頁標籤</x:String>
594594
<x:String x:Key="Text.Preferences.Appearance.UseNativeWindowFrame" xml:space="preserve">使用系統原生預設視窗樣式</x:String>
595595
<x:String x:Key="Text.Preferences.DiffMerge" xml:space="preserve">對比/合併工具</x:String>
596+
<x:String x:Key="Text.Preferences.DiffMerge.DiffArgs" xml:space="preserve">對比命令參數</x:String>
597+
<x:String x:Key="Text.Preferences.DiffMerge.MergeArgs" xml:space="preserve">合併命令參數</x:String>
596598
<x:String x:Key="Text.Preferences.DiffMerge.Path" xml:space="preserve">安裝路徑</x:String>
597599
<x:String x:Key="Text.Preferences.DiffMerge.Path.Placeholder" xml:space="preserve">填寫可執行檔案所在路徑</x:String>
598600
<x:String x:Key="Text.Preferences.DiffMerge.Type" xml:space="preserve">工具</x:String>

src/ViewModels/Preferences.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public static Preferences Instance
2323

2424
_instance.PrepareGit();
2525
_instance.PrepareShellOrTerminal();
26+
_instance.PrepareExternalDiffMergeTool();
2627
_instance.PrepareWorkspaces();
2728

2829
return _instance;
@@ -402,6 +403,8 @@ public int ExternalMergeToolType
402403
{
403404
Native.OS.AutoSelectExternalMergeToolExecFile();
404405
OnPropertyChanged(nameof(ExternalMergeToolPath));
406+
OnPropertyChanged(nameof(ExternalMergeToolDiffArgs));
407+
OnPropertyChanged(nameof(ExternalMergeToolMergeArgs));
405408
}
406409
}
407410
}
@@ -420,6 +423,32 @@ public string ExternalMergeToolPath
420423
}
421424
}
422425

426+
public string ExternalMergeToolDiffArgs
427+
{
428+
get => Native.OS.ExternalDiffArgs;
429+
set
430+
{
431+
if (!Native.OS.ExternalDiffArgs.Equals(value, StringComparison.Ordinal))
432+
{
433+
Native.OS.ExternalDiffArgs = value;
434+
OnPropertyChanged();
435+
}
436+
}
437+
}
438+
439+
public string ExternalMergeToolMergeArgs
440+
{
441+
get => Native.OS.ExternalMergeArgs;
442+
set
443+
{
444+
if (!Native.OS.ExternalMergeArgs.Equals(value, StringComparison.Ordinal))
445+
{
446+
Native.OS.ExternalMergeArgs = value;
447+
OnPropertyChanged();
448+
}
449+
}
450+
}
451+
423452
public uint StatisticsSampleColor
424453
{
425454
get => _statisticsSampleColor;
@@ -630,6 +659,19 @@ private void PrepareShellOrTerminal()
630659
}
631660
}
632661

662+
private void PrepareExternalDiffMergeTool()
663+
{
664+
var mergerType = Native.OS.ExternalMergerType;
665+
if (mergerType > 0 && mergerType < Models.ExternalMerger.Supported.Count)
666+
{
667+
var merger = Models.ExternalMerger.Supported[mergerType];
668+
if (string.IsNullOrEmpty(Native.OS.ExternalDiffArgs))
669+
Native.OS.ExternalDiffArgs = merger.DiffCmd;
670+
if (string.IsNullOrEmpty(Native.OS.ExternalMergeArgs))
671+
Native.OS.ExternalMergeArgs = merger.MergeCmd;
672+
}
673+
}
674+
633675
private void PrepareWorkspaces()
634676
{
635677
if (Workspaces.Count == 0)

src/Views/Preferences.axaml

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -537,7 +537,7 @@
537537
<TextBlock Classes="bold" Margin="4,0,0,0" Text="{DynamicResource Text.Preferences.DiffMerge}"/>
538538
</StackPanel>
539539
<Rectangle Margin="0,8" Fill="{DynamicResource Brush.Border2}" Height=".6" HorizontalAlignment="Stretch"/>
540-
<Grid Margin="8,0,0,8" RowDefinitions="32,Auto">
540+
<Grid Margin="8,0,0,8" RowDefinitions="32,Auto,32,32">
541541
<Grid.ColumnDefinitions>
542542
<ColumnDefinition Width="Auto" SharedSizeGroup="IntegrationLabel"/>
543543
<ColumnDefinition Width="*"/>
@@ -566,11 +566,14 @@
566566
</ComboBox.ItemTemplate>
567567
</ComboBox>
568568

569-
<TextBlock Grid.Row="1" Grid.Column="0"
570-
Text="{DynamicResource Text.Preferences.DiffMerge.Path}"
571-
HorizontalAlignment="Right"
572-
Margin="0,0,16,0"
573-
IsVisible="{Binding ExternalMergeToolType, Converter={x:Static c:IntConverters.IsGreaterThanZero}}"/>
569+
<Border Grid.Row="1" Grid.Column="0"
570+
Height="32"
571+
Margin="0,0,16,0"
572+
IsVisible="{Binding ExternalMergeToolType, Converter={x:Static c:IntConverters.IsGreaterThanZero}}">
573+
<TextBlock Grid.Row="1" Grid.Column="0"
574+
Text="{DynamicResource Text.Preferences.DiffMerge.Path}"
575+
HorizontalAlignment="Right" />
576+
</Border>
574577
<TextBox Grid.Row="1" Grid.Column="1"
575578
Height="28"
576579
CornerRadius="3"
@@ -583,6 +586,24 @@
583586
</Button>
584587
</TextBox.InnerRightContent>
585588
</TextBox>
589+
590+
<TextBlock Grid.Row="2" Grid.Column="0"
591+
Text="{DynamicResource Text.Preferences.DiffMerge.DiffArgs}"
592+
HorizontalAlignment="Right"
593+
Margin="0,0,16,0"/>
594+
<TextBox Grid.Row="2" Grid.Column="1"
595+
Height="28"
596+
CornerRadius="3"
597+
Text="{Binding ExternalMergeToolDiffArgs, Mode=TwoWay}"/>
598+
599+
<TextBlock Grid.Row="3" Grid.Column="0"
600+
Text="{DynamicResource Text.Preferences.DiffMerge.MergeArgs}"
601+
HorizontalAlignment="Right"
602+
Margin="0,0,16,0"/>
603+
<TextBox Grid.Row="3" Grid.Column="1"
604+
Height="28"
605+
CornerRadius="3"
606+
Text="{Binding ExternalMergeToolMergeArgs, Mode=TwoWay}"/>
586607
</Grid>
587608
</StackPanel>
588609
</TabItem>

0 commit comments

Comments
 (0)