feature: Open in selected default terminal.

This commit is contained in:
walterlv 2024-04-08 19:37:13 +08:00
parent 8a255cd260
commit 26f2a1435a
3 changed files with 15 additions and 23 deletions

View file

@ -117,8 +117,8 @@ namespace SourceGit.Native
public IReadOnlyList<Models.ExternalTerminal> FindExternalTerminals()
{
var finder = new Models.ExternalTerminalFinder();
finder.WindowsTerminal(() => FindExternalTerminal("wt"));
finder.WindowsGitBash(() => FindExternalTerminal("bash"));
finder.WindowsTerminal(() => FindExternalTerminal("wt"));
finder.PowerShell(() => FindExternalTerminal("pwsh"));
return finder.Terminals;
}

View file

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Collections.Immutable;
using System.IO;
using System.Linq;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using System.Windows.Input;
@ -296,7 +297,16 @@ namespace SourceGit.ViewModels
public void OpenInTerminal()
{
Native.OS.OpenTerminal(_fullpath);
var terminal = Native.OS.ExternalTerminals.FirstOrDefault(x => x.Name == Preference.Instance.DefaultTerminal)
?? Native.OS.ExternalTerminals.FirstOrDefault();
if (terminal is not null)
{
terminal.Open(_fullpath);
return;
}
App.RaiseException(_fullpath, "No available external terminals found!");
}
public void OpenWithExternalTool()

View file

@ -263,7 +263,9 @@ namespace SourceGit.Views
{
var iconKey = value is string terminalName && !string.IsNullOrWhiteSpace(terminalName) ?
terminalName :
GetSystemDefaultTerminalIconKey();
OS.ExternalTerminals.FirstOrDefault()?.Name
// Impossible to be null, just a fallback.
?? "git-bash";
var icon = AssetLoader.Open(new Uri($"avares://SourceGit/Resources/ExternalTerminalIcons/{iconKey}.png", UriKind.RelativeOrAbsolute));
return new Bitmap(icon);
@ -273,26 +275,6 @@ namespace SourceGit.Views
{
throw new NotSupportedException();
}
private string GetSystemDefaultTerminalIconKey()
{
if (OperatingSystem.IsWindows())
{
return "git-bash";
}
else if (OperatingSystem.IsMacOS())
{
return "osascript";
}
else if (OperatingSystem.IsLinux())
{
return "gnome-terminal";
}
else
{
throw new PlatformNotSupportedException();
}
}
}
public sealed class TerminalOrShellNameToLocalizedNameConverter : IValueConverter