mirror of
https://github.com/sourcegit-scm/sourcegit
synced 2025-06-26 04:44:59 +00:00
ux: Add system default terminal option.
This commit is contained in:
parent
467a39b2e9
commit
8a255cd260
5 changed files with 35 additions and 24 deletions
|
@ -117,9 +117,9 @@ namespace SourceGit.Native
|
||||||
public IReadOnlyList<Models.ExternalTerminal> FindExternalTerminals()
|
public IReadOnlyList<Models.ExternalTerminal> FindExternalTerminals()
|
||||||
{
|
{
|
||||||
var finder = new Models.ExternalTerminalFinder();
|
var finder = new Models.ExternalTerminalFinder();
|
||||||
|
finder.WindowsTerminal(() => FindExternalTerminal("wt"));
|
||||||
finder.WindowsGitBash(() => FindExternalTerminal("bash"));
|
finder.WindowsGitBash(() => FindExternalTerminal("bash"));
|
||||||
finder.PowerShell(() => FindExternalTerminal("pwsh"));
|
finder.PowerShell(() => FindExternalTerminal("pwsh"));
|
||||||
finder.WindowsTerminal(() => FindExternalTerminal("wt"));
|
|
||||||
return finder.Terminals;
|
return finder.Terminals;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -255,6 +255,7 @@
|
||||||
<x:String x:Key="Text.Preference.General" xml:space="preserve">GENERAL</x:String>
|
<x:String x:Key="Text.Preference.General" xml:space="preserve">GENERAL</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.AvatarServer" xml:space="preserve">Avatar Server</x:String>
|
<x:String x:Key="Text.Preference.General.AvatarServer" xml:space="preserve">Avatar Server</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.DefaultTerminal" xml:space="preserve">Default Terminal/Shell</x:String>
|
<x:String x:Key="Text.Preference.General.DefaultTerminal" xml:space="preserve">Default Terminal/Shell</x:String>
|
||||||
|
<x:String x:Key="Text.Preference.General.DefaultTerminalOrShell" xml:space="preserve">System Default</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.DefaultTerminalOrShell.wt" xml:space="preserve">Windows Terminal</x:String>
|
<x:String x:Key="Text.Preference.General.DefaultTerminalOrShell.wt" xml:space="preserve">Windows Terminal</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.DefaultTerminalOrShell.git-bash" xml:space="preserve">Git Bash</x:String>
|
<x:String x:Key="Text.Preference.General.DefaultTerminalOrShell.git-bash" xml:space="preserve">Git Bash</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.DefaultTerminalOrShell.pwsh" xml:space="preserve">PowerShell</x:String>
|
<x:String x:Key="Text.Preference.General.DefaultTerminalOrShell.pwsh" xml:space="preserve">PowerShell</x:String>
|
||||||
|
|
|
@ -255,6 +255,7 @@
|
||||||
<x:String x:Key="Text.Preference.General" xml:space="preserve">通用配置</x:String>
|
<x:String x:Key="Text.Preference.General" xml:space="preserve">通用配置</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.AvatarServer" xml:space="preserve">头像服务</x:String>
|
<x:String x:Key="Text.Preference.General.AvatarServer" xml:space="preserve">头像服务</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.DefaultTerminal" xml:space="preserve">默认终端</x:String>
|
<x:String x:Key="Text.Preference.General.DefaultTerminal" xml:space="preserve">默认终端</x:String>
|
||||||
|
<x:String x:Key="Text.Preference.General.DefaultTerminalOrShell" xml:space="preserve">系统默认</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.DefaultTerminalOrShell.wt" xml:space="preserve">终端 (Windows Terminal)</x:String>
|
<x:String x:Key="Text.Preference.General.DefaultTerminalOrShell.wt" xml:space="preserve">终端 (Windows Terminal)</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.DefaultTerminalOrShell.git-bash" xml:space="preserve">Git Bash</x:String>
|
<x:String x:Key="Text.Preference.General.DefaultTerminalOrShell.git-bash" xml:space="preserve">Git Bash</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.DefaultTerminalOrShell.pwsh" xml:space="preserve">PowerShell</x:String>
|
<x:String x:Key="Text.Preference.General.DefaultTerminalOrShell.pwsh" xml:space="preserve">PowerShell</x:String>
|
||||||
|
|
|
@ -117,15 +117,8 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public string DefaultTerminal
|
public string DefaultTerminal
|
||||||
{
|
{
|
||||||
get => Models.AvatarManager.SelectedServer;
|
get => _defaultTerminal ??= "";
|
||||||
set
|
set => SetProperty(ref _defaultTerminal, value ?? "");
|
||||||
{
|
|
||||||
if (Models.AvatarManager.SelectedServer != value)
|
|
||||||
{
|
|
||||||
Models.AvatarManager.SelectedServer = value;
|
|
||||||
OnPropertyChanged(nameof(DefaultTerminal));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int MaxHistoryCommits
|
public int MaxHistoryCommits
|
||||||
|
@ -442,6 +435,7 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
private string _locale = "en_US";
|
private string _locale = "en_US";
|
||||||
private string _theme = "Default";
|
private string _theme = "Default";
|
||||||
|
private string _defaultTerminal;
|
||||||
private FontFamily _defaultFont = null;
|
private FontFamily _defaultFont = null;
|
||||||
private FontFamily _monospaceFont = null;
|
private FontFamily _monospaceFont = null;
|
||||||
private double _defaultFontSize = 13;
|
private double _defaultFontSize = 13;
|
||||||
|
|
|
@ -128,7 +128,7 @@ namespace SourceGit.Views
|
||||||
Dispatcher.UIThread.Post(() => InstalledMonospaceFonts.AddRange(sysMonoFonts));
|
Dispatcher.UIThread.Post(() => InstalledMonospaceFonts.AddRange(sysMonoFonts));
|
||||||
});
|
});
|
||||||
|
|
||||||
ExternalTerminals = [..OS.ExternalTerminals.Select(x => x.Name)];
|
ExternalTerminals = ["", ..OS.ExternalTerminals.Select(x => x.Name)];
|
||||||
|
|
||||||
var ver = string.Empty;
|
var ver = string.Empty;
|
||||||
if (pref.IsGitConfigured)
|
if (pref.IsGitConfigured)
|
||||||
|
@ -261,32 +261,47 @@ namespace SourceGit.Views
|
||||||
{
|
{
|
||||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||||
{
|
{
|
||||||
if (value is string terminalName && !string.IsNullOrWhiteSpace(terminalName))
|
var iconKey = value is string terminalName && !string.IsNullOrWhiteSpace(terminalName) ?
|
||||||
{
|
terminalName :
|
||||||
var icon = AssetLoader.Open(new Uri($"avares://SourceGit/Resources/ExternalTerminalIcons/{terminalName}.png", UriKind.RelativeOrAbsolute));
|
GetSystemDefaultTerminalIconKey();
|
||||||
return new Bitmap(icon);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
var icon = AssetLoader.Open(new Uri($"avares://SourceGit/Resources/ExternalTerminalIcons/{iconKey}.png", UriKind.RelativeOrAbsolute));
|
||||||
|
return new Bitmap(icon);
|
||||||
}
|
}
|
||||||
|
|
||||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||||
{
|
{
|
||||||
throw new NotSupportedException();
|
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
|
public sealed class TerminalOrShellNameToLocalizedNameConverter : IValueConverter
|
||||||
{
|
{
|
||||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||||
{
|
{
|
||||||
if (value is string terminalName && !string.IsNullOrWhiteSpace(terminalName))
|
return value is string terminalName && !string.IsNullOrWhiteSpace(terminalName) ?
|
||||||
{
|
App.Text($"Preference.General.DefaultTerminalOrShell.{terminalName}") :
|
||||||
var name = App.Text($"Preference.General.DefaultTerminalOrShell.{terminalName}");
|
App.Text($"Preference.General.DefaultTerminalOrShell");
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue