diff --git a/src/Resources/Locales/en_US.axaml b/src/Resources/Locales/en_US.axaml
index 15c1f341..68e57b4c 100644
--- a/src/Resources/Locales/en_US.axaml
+++ b/src/Resources/Locales/en_US.axaml
@@ -137,8 +137,9 @@
Previous Difference
Side-By-Side Diff
Syntax Highlighting
- Open With Merge Tool
+ Open In Merge Tool
SELECT FILE TO VIEW CHANGES
+ Open In Merge Tool
Discard Changes
All local changes in working copy.
Changes :
diff --git a/src/Resources/Locales/zh_CN.axaml b/src/Resources/Locales/zh_CN.axaml
index f771b493..79cf9973 100644
--- a/src/Resources/Locales/zh_CN.axaml
+++ b/src/Resources/Locales/zh_CN.axaml
@@ -139,6 +139,7 @@
语法高亮
使用外部合并工具查看
请选择需要对比的文件
+ 使用外部比对工具查看
放弃更改确认
所有本地址未提交的修改。
需要放弃的变更 :
diff --git a/src/ViewModels/CommitDetail.cs b/src/ViewModels/CommitDetail.cs
index c0453cf0..79c29545 100644
--- a/src/ViewModels/CommitDetail.cs
+++ b/src/ViewModels/CommitDetail.cs
@@ -8,6 +8,7 @@ using Avalonia.Platform.Storage;
using Avalonia.Threading;
using CommunityToolkit.Mvvm.ComponentModel;
+using Microsoft.VisualBasic.FileIO;
namespace SourceGit.ViewModels
{
@@ -195,6 +196,28 @@ namespace SourceGit.ViewModels
{
var menu = new ContextMenu();
+ var diffWithMerger = new MenuItem();
+ diffWithMerger.Header = App.Text("DiffWithMerger");
+ diffWithMerger.Icon = App.CreateMenuIcon("Icons.Diff");
+ diffWithMerger.Click += (_, ev) =>
+ {
+ var opt = new Models.DiffOption(_commit, change);
+ var type = Preference.Instance.ExternalMergeToolType;
+ var exec = Preference.Instance.ExternalMergeToolPath;
+
+ var tool = Models.ExternalMergeTools.Supported.Find(x => x.Type == type);
+ if (tool == null || !File.Exists(exec))
+ {
+ App.RaiseException(_repo, "Invalid merge tool in preference setting!");
+ return;
+ }
+
+ var args = tool.Type != 0 ? tool.DiffCmd : Preference.Instance.ExternalMergeToolDiffCmd;
+ Task.Run(() => Commands.MergeTool.OpenForDiff(_repo, exec, args, opt));
+ ev.Handled = true;
+ };
+ menu.Items.Add(diffWithMerger);
+
if (change.Index != Models.ChangeState.Deleted)
{
var history = new MenuItem();
@@ -228,10 +251,12 @@ namespace SourceGit.ViewModels
ev.Handled = true;
};
+ menu.Items.Add(new MenuItem { Header = "-" });
menu.Items.Add(history);
menu.Items.Add(blame);
menu.Items.Add(explore);
- }
+ menu.Items.Add(new MenuItem { Header = "-" });
+ }
var copyPath = new MenuItem();
copyPath.Header = App.Text("CopyPath");
@@ -241,8 +266,8 @@ namespace SourceGit.ViewModels
App.CopyText(change.Path);
ev.Handled = true;
};
-
menu.Items.Add(copyPath);
+
return menu;
}
diff --git a/src/ViewModels/DiffContext.cs b/src/ViewModels/DiffContext.cs
index adb7c7c9..c5001fc8 100644
--- a/src/ViewModels/DiffContext.cs
+++ b/src/ViewModels/DiffContext.cs
@@ -147,7 +147,7 @@ namespace SourceGit.ViewModels
});
}
- public async void OpenExternalMergeTool()
+ public void OpenExternalMergeTool()
{
var type = Preference.Instance.ExternalMergeToolType;
var exec = Preference.Instance.ExternalMergeToolPath;
@@ -160,7 +160,7 @@ namespace SourceGit.ViewModels
}
var args = tool.Type != 0 ? tool.DiffCmd : Preference.Instance.ExternalMergeToolDiffCmd;
- await Task.Run(() => Commands.MergeTool.OpenForDiff(_repo, exec, args, _option));
+ Task.Run(() => Commands.MergeTool.OpenForDiff(_repo, exec, args, _option));
}
private static readonly HashSet IMG_EXTS = new HashSet()
diff --git a/src/ViewModels/RevisionCompare.cs b/src/ViewModels/RevisionCompare.cs
index 92805dea..167f3a41 100644
--- a/src/ViewModels/RevisionCompare.cs
+++ b/src/ViewModels/RevisionCompare.cs
@@ -157,33 +157,46 @@ namespace SourceGit.ViewModels
{
var menu = new ContextMenu();
+ var diffWithMerger = new MenuItem();
+ diffWithMerger.Header = App.Text("DiffWithMerger");
+ diffWithMerger.Icon = App.CreateMenuIcon("Icons.Diff");
+ diffWithMerger.Click += (_, ev) =>
+ {
+ var opt = new Models.DiffOption(StartPoint.SHA, EndPoint.SHA, change);
+ var type = Preference.Instance.ExternalMergeToolType;
+ var exec = Preference.Instance.ExternalMergeToolPath;
+
+ var tool = Models.ExternalMergeTools.Supported.Find(x => x.Type == type);
+ if (tool == null || !File.Exists(exec))
+ {
+ App.RaiseException(_repo, "Invalid merge tool in preference setting!");
+ return;
+ }
+
+ var args = tool.Type != 0 ? tool.DiffCmd : Preference.Instance.ExternalMergeToolDiffCmd;
+ Task.Run(() => Commands.MergeTool.OpenForDiff(_repo, exec, args, opt));
+ ev.Handled = true;
+ };
+ menu.Items.Add(diffWithMerger);
+
if (change.Index != Models.ChangeState.Deleted)
{
- var history = new MenuItem();
- history.Header = App.Text("FileHistory");
- history.Click += (_, ev) =>
- {
- var window = new Views.FileHistories() { DataContext = new FileHistories(_repo, change.Path) };
- window.Show();
- ev.Handled = true;
- };
-
var full = Path.GetFullPath(Path.Combine(_repo, change.Path));
var explore = new MenuItem();
explore.Header = App.Text("RevealFile");
+ explore.Icon = App.CreateMenuIcon("Icons.Folder.Open");
explore.IsEnabled = File.Exists(full);
explore.Click += (_, ev) =>
{
Native.OS.OpenInFileManager(full, true);
ev.Handled = true;
};
-
- menu.Items.Add(history);
menu.Items.Add(explore);
}
var copyPath = new MenuItem();
copyPath.Header = App.Text("CopyPath");
+ copyPath.Icon = App.CreateMenuIcon("Icons.Copy");
copyPath.Click += (_, ev) =>
{
App.CopyText(change.Path);