mirror of
https://fastgit.cc/github.com/sourcegit-scm/sourcegit
synced 2026-04-24 02:40:24 +08:00
feature: add hotkeys to save revision file
Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
@@ -254,6 +254,33 @@ namespace SourceGit.ViewModels
|
||||
new Commands.DiffTool(_repo.FullPath, toolType, toolPath, opt).Open();
|
||||
}
|
||||
|
||||
public async Task SaveRevisionFile(Models.Object file)
|
||||
{
|
||||
var storageProvider = App.GetStorageProvider();
|
||||
if (storageProvider == null)
|
||||
return;
|
||||
|
||||
var options = new FolderPickerOpenOptions() { AllowMultiple = false };
|
||||
try
|
||||
{
|
||||
var selected = await storageProvider.OpenFolderPickerAsync(options);
|
||||
if (selected.Count == 1)
|
||||
{
|
||||
var folder = selected[0];
|
||||
var folderPath = folder is { Path: { IsAbsoluteUri: true } path } ? path.LocalPath : folder.Path.ToString();
|
||||
var saveTo = Path.Combine(folderPath, Path.GetFileName(file.Path)!);
|
||||
|
||||
await Commands.SaveRevisionFile
|
||||
.RunAsync(_repo.FullPath, _commit.SHA, file.Path, saveTo)
|
||||
.ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
App.RaiseException(_repo.FullPath, $"Failed to save file: {e.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
public ContextMenu CreateChangeContextMenuByFolder(ChangeTreeNode node, List<Models.Change> changes)
|
||||
{
|
||||
var fullPath = Native.OS.GetAbsPath(_repo.FullPath, node.FullPath);
|
||||
@@ -540,32 +567,10 @@ namespace SourceGit.ViewModels
|
||||
saveAs.Header = App.Text("SaveAs");
|
||||
saveAs.Icon = App.CreateMenuIcon("Icons.Save");
|
||||
saveAs.IsEnabled = file.Type == Models.ObjectType.Blob;
|
||||
saveAs.Tag = OperatingSystem.IsMacOS() ? "⌘+S" : "Ctrl+S";
|
||||
saveAs.Click += async (_, ev) =>
|
||||
{
|
||||
var storageProvider = App.GetStorageProvider();
|
||||
if (storageProvider == null)
|
||||
return;
|
||||
|
||||
var options = new FolderPickerOpenOptions() { AllowMultiple = false };
|
||||
try
|
||||
{
|
||||
var selected = await storageProvider.OpenFolderPickerAsync(options);
|
||||
if (selected.Count == 1)
|
||||
{
|
||||
var folder = selected[0];
|
||||
var folderPath = folder is { Path: { IsAbsoluteUri: true } path } ? path.LocalPath : folder.Path.ToString();
|
||||
var saveTo = Path.Combine(folderPath, Path.GetFileName(file.Path)!);
|
||||
|
||||
await Commands.SaveRevisionFile
|
||||
.RunAsync(_repo.FullPath, _commit.SHA, file.Path, saveTo)
|
||||
.ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
App.RaiseException(_repo.FullPath, $"Failed to save file: {e.Message}");
|
||||
}
|
||||
|
||||
await SaveRevisionFile(file);
|
||||
ev.Handled = true;
|
||||
};
|
||||
|
||||
|
||||
@@ -132,6 +132,17 @@ namespace SourceGit.Views
|
||||
e.Handled = true;
|
||||
}
|
||||
}
|
||||
else if (node.Backend is { Type: Models.ObjectType.Blob } file &&
|
||||
e.Key == Key.S &&
|
||||
e.KeyModifiers.HasFlag(OperatingSystem.IsMacOS() ? KeyModifiers.Meta : KeyModifiers.Control))
|
||||
{
|
||||
var detailView = this.FindAncestorOfType<CommitDetail>();
|
||||
if (detailView is { DataContext: ViewModels.CommitDetail detail })
|
||||
{
|
||||
await detail.SaveRevisionFile(file);
|
||||
e.Handled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!e.Handled)
|
||||
|
||||
Reference in New Issue
Block a user