Skip to content

Commit cadcf40

Browse files
committed
feature: support to open selected folder in file manager
Signed-off-by: leo <[email protected]>
1 parent fcf1107 commit cadcf40

File tree

2 files changed

+40
-2
lines changed

2 files changed

+40
-2
lines changed

src/ViewModels/WorkingCopy.cs

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1052,6 +1052,22 @@ public ContextMenu CreateContextMenuForUnstagedChanges(string selectedSingleFold
10521052
return menu;
10531053
}
10541054

1055+
if (!string.IsNullOrEmpty(selectedSingleFolder))
1056+
{
1057+
var dir = Path.Combine(_repo.FullPath, selectedSingleFolder);
1058+
var explore = new MenuItem();
1059+
explore.Header = App.Text("RevealFile");
1060+
explore.Icon = App.CreateMenuIcon("Icons.Explore");
1061+
explore.IsEnabled = Directory.Exists(dir);
1062+
explore.Click += (_, e) =>
1063+
{
1064+
Native.OS.OpenInFileManager(dir, true);
1065+
e.Handled = true;
1066+
};
1067+
menu.Items.Add(explore);
1068+
menu.Items.Add(new MenuItem() { Header = "-" });
1069+
}
1070+
10551071
var stage = new MenuItem();
10561072
stage.Header = App.Text("FileCM.StageMulti", _selectedUnstaged.Count);
10571073
stage.Icon = App.CreateMenuIcon("Icons.File.Add");
@@ -1134,7 +1150,7 @@ public ContextMenu CreateContextMenuForUnstagedChanges(string selectedSingleFold
11341150
return menu;
11351151
}
11361152

1137-
public ContextMenu CreateContextMenuForStagedChanges()
1153+
public ContextMenu CreateContextMenuForStagedChanges(string selectedSingleFolder)
11381154
{
11391155
if (_selectedStaged == null || _selectedStaged.Count == 0)
11401156
return null;
@@ -1383,6 +1399,23 @@ public ContextMenu CreateContextMenuForStagedChanges()
13831399
}
13841400
else
13851401
{
1402+
if (!string.IsNullOrEmpty(selectedSingleFolder))
1403+
{
1404+
var dir = Path.Combine(_repo.FullPath, selectedSingleFolder);
1405+
var explore = new MenuItem();
1406+
explore.IsEnabled = Directory.Exists(dir);
1407+
explore.Header = App.Text("RevealFile");
1408+
explore.Icon = App.CreateMenuIcon("Icons.Explore");
1409+
explore.Click += (_, e) =>
1410+
{
1411+
Native.OS.OpenInFileManager(dir, true);
1412+
e.Handled = true;
1413+
};
1414+
1415+
menu.Items.Add(explore);
1416+
menu.Items.Add(new MenuItem() { Header = "-" });
1417+
}
1418+
13861419
var unstage = new MenuItem();
13871420
unstage.Header = App.Text("FileCM.UnstageMulti", _selectedStaged.Count);
13881421
unstage.Icon = App.CreateMenuIcon("Icons.File.Remove");

src/Views/WorkingCopy.axaml.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,12 @@ private void OnStagedContextRequested(object sender, ContextRequestedEventArgs e
4545
{
4646
if (DataContext is ViewModels.WorkingCopy vm && sender is Control control)
4747
{
48-
var menu = vm.CreateContextMenuForStagedChanges();
48+
var container = control.FindDescendantOfType<ChangeCollectionContainer>();
49+
var selectedSingleFolder = string.Empty;
50+
if (container is { SelectedItems: { Count: 1 }, SelectedItem: ViewModels.ChangeTreeNode { IsFolder: true } node })
51+
selectedSingleFolder = node.FullPath;
52+
53+
var menu = vm.CreateContextMenuForStagedChanges(selectedSingleFolder);
4954
menu?.Open(control);
5055
e.Handled = true;
5156
}

0 commit comments

Comments
 (0)