From 467a39b2e9d4787d10e856a90b852a6cbe9c3620 Mon Sep 17 00:00:00 2001 From: walterlv Date: Mon, 8 Apr 2024 19:10:30 +0800 Subject: [PATCH] ux: Link found terminals to the UI --- src/Models/ExternalTerminal.cs | 8 ++++---- src/Native/Linux.cs | 2 +- src/Native/MacOS.cs | 2 +- src/Native/OS.cs | 4 ++-- src/Native/Windows.cs | 2 +- src/Resources/Locales/en_US.axaml | 4 ++-- src/Resources/Locales/zh_CN.axaml | 6 +++--- src/Views/Preference.axaml | 3 ++- src/Views/Preference.axaml.cs | 13 ++++++++++++- 9 files changed, 28 insertions(+), 16 deletions(-) diff --git a/src/Models/ExternalTerminal.cs b/src/Models/ExternalTerminal.cs index 56304a36..0b8cfa40 100644 --- a/src/Models/ExternalTerminal.cs +++ b/src/Models/ExternalTerminal.cs @@ -34,7 +34,7 @@ namespace SourceGit.Models public void WindowsGitBash(Func platform_finder) { - TryAdd("Git Bash", "git-bash.png", "bash", "", platform_finder); + TryAdd("git-bash", "git-bash.png", "bash", "", platform_finder); } public void Gnome(Func platform_finder) @@ -58,19 +58,19 @@ namespace SourceGit.Models Terminals.Add(terminal with { - Name = "AppleScript", + Name = "osascript", Icon = "osascript.png", }); } public void PowerShell(Func platform_finder) { - TryAdd("PowerShell", "pwsh.png", "pwsh", "-WorkingDirectory \"{0}\"", platform_finder); + TryAdd("pwsh", "pwsh.png", "pwsh", "-WorkingDirectory \"{0}\"", platform_finder); } public void WindowsTerminal(Func platform_finder) { - TryAdd("Windows Terminal", "wt.png", "wt", "-d \"{0}\"", platform_finder); + TryAdd("wt", "wt.png", "wt", "-d \"{0}\"", platform_finder); } public void Xfce4(Func platform_finder) diff --git a/src/Native/Linux.cs b/src/Native/Linux.cs index 6adb64a4..bc537d04 100644 --- a/src/Native/Linux.cs +++ b/src/Native/Linux.cs @@ -31,7 +31,7 @@ namespace SourceGit.Native return string.Empty; } - public List FindExternalTerminals() + public IReadOnlyList FindExternalTerminals() { var finder = new Models.ExternalTerminalFinder(); finder.Gnome(() => "/usr/bin/gnome-terminal"); diff --git a/src/Native/MacOS.cs b/src/Native/MacOS.cs index 9b5b23de..b2c05810 100644 --- a/src/Native/MacOS.cs +++ b/src/Native/MacOS.cs @@ -28,7 +28,7 @@ namespace SourceGit.Native return string.Empty; } - public List FindExternalTerminals() + public IReadOnlyList FindExternalTerminals() { var finder = new Models.ExternalTerminalFinder(); finder.AppleScript(new AppleScriptTerminal()); diff --git a/src/Native/OS.cs b/src/Native/OS.cs index 44f07bef..eb3e9a97 100644 --- a/src/Native/OS.cs +++ b/src/Native/OS.cs @@ -13,7 +13,7 @@ namespace SourceGit.Native string FindGitExecutable(); - List FindExternalTerminals(); + IReadOnlyList FindExternalTerminals(); List FindExternalEditors(); void OpenTerminal(string workdir); @@ -23,7 +23,7 @@ namespace SourceGit.Native } public static string GitExecutable { get; set; } = string.Empty; - public static List ExternalTerminals { get; set; } = new List(); + public static IReadOnlyList ExternalTerminals { get; private set; } public static List ExternalEditors { get; set; } = new List(); static OS() diff --git a/src/Native/Windows.cs b/src/Native/Windows.cs index 3f95fa14..3c1c5194 100644 --- a/src/Native/Windows.cs +++ b/src/Native/Windows.cs @@ -114,7 +114,7 @@ namespace SourceGit.Native return null; } - public List FindExternalTerminals() + public IReadOnlyList FindExternalTerminals() { var finder = new Models.ExternalTerminalFinder(); finder.WindowsGitBash(() => FindExternalTerminal("bash")); diff --git a/src/Resources/Locales/en_US.axaml b/src/Resources/Locales/en_US.axaml index 3c580bb1..795a8843 100644 --- a/src/Resources/Locales/en_US.axaml +++ b/src/Resources/Locales/en_US.axaml @@ -256,8 +256,8 @@ Avatar Server Default Terminal/Shell Windows Terminal - Git Bash (Shell) - PowerShell (Shell) + Git Bash + PowerShell Gnome Konsole AppleScript diff --git a/src/Resources/Locales/zh_CN.axaml b/src/Resources/Locales/zh_CN.axaml index 8fd35e6b..9ae65cf3 100644 --- a/src/Resources/Locales/zh_CN.axaml +++ b/src/Resources/Locales/zh_CN.axaml @@ -255,9 +255,9 @@ 通用配置 头像服务 默认终端 - 终端 - Git Bash (Shell) - PowerShell (Shell) + 终端 (Windows Terminal) + Git Bash + PowerShell Gnome Konsole AppleScript diff --git a/src/Views/Preference.axaml b/src/Views/Preference.axaml index b9265b9d..8f79e49d 100644 --- a/src/Views/Preference.axaml +++ b/src/Views/Preference.axaml @@ -109,11 +109,12 @@ MinHeight="28" Padding="8,0" HorizontalAlignment="Stretch" + ItemsSource="{Binding #me.ExternalTerminals}" SelectedItem="{Binding DefaultTerminal, Mode=TwoWay}"> - + diff --git a/src/Views/Preference.axaml.cs b/src/Views/Preference.axaml.cs index 0d35c8e2..6cd36f0c 100644 --- a/src/Views/Preference.axaml.cs +++ b/src/Views/Preference.axaml.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Globalization; using System.IO; +using System.Linq; using System.Threading.Tasks; using Avalonia.Collections; @@ -15,6 +16,8 @@ using Avalonia.Platform; using Avalonia.Platform.Storage; using Avalonia.Threading; +using SourceGit.Native; + namespace SourceGit.Views { public partial class Preference : Window @@ -31,6 +34,12 @@ namespace SourceGit.Views private set; } + public AvaloniaList ExternalTerminals + { + get; + private set; + } + public string DefaultUser { get; @@ -119,6 +128,8 @@ namespace SourceGit.Views Dispatcher.UIThread.Post(() => InstalledMonospaceFonts.AddRange(sysMonoFonts)); }); + ExternalTerminals = [..OS.ExternalTerminals.Select(x => x.Name)]; + var ver = string.Empty; if (pref.IsGitConfigured) { @@ -271,7 +282,7 @@ namespace SourceGit.Views { if (value is string terminalName && !string.IsNullOrWhiteSpace(terminalName)) { - var name = App.Text($"Text.Preference.General.DefaultTerminalOrShell.{terminalName}"); + var name = App.Text($"Preference.General.DefaultTerminalOrShell.{terminalName}"); return name; }