ux: Link found terminals to the UI

This commit is contained in:
walterlv 2024-04-08 19:10:30 +08:00
parent 41f7aa84ac
commit 467a39b2e9
9 changed files with 28 additions and 16 deletions

View file

@ -34,7 +34,7 @@ namespace SourceGit.Models
public void WindowsGitBash(Func<string> platform_finder) public void WindowsGitBash(Func<string> platform_finder)
{ {
TryAdd("Git Bash", "git-bash.png", "bash", "", platform_finder); TryAdd("git-bash", "git-bash.png", "bash", "", platform_finder);
} }
public void Gnome(Func<string> platform_finder) public void Gnome(Func<string> platform_finder)
@ -58,19 +58,19 @@ namespace SourceGit.Models
Terminals.Add(terminal with Terminals.Add(terminal with
{ {
Name = "AppleScript", Name = "osascript",
Icon = "osascript.png", Icon = "osascript.png",
}); });
} }
public void PowerShell(Func<string> platform_finder) public void PowerShell(Func<string> platform_finder)
{ {
TryAdd("PowerShell", "pwsh.png", "pwsh", "-WorkingDirectory \"{0}\"", platform_finder); TryAdd("pwsh", "pwsh.png", "pwsh", "-WorkingDirectory \"{0}\"", platform_finder);
} }
public void WindowsTerminal(Func<string> platform_finder) public void WindowsTerminal(Func<string> 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<string> platform_finder) public void Xfce4(Func<string> platform_finder)

View file

@ -31,7 +31,7 @@ namespace SourceGit.Native
return string.Empty; return string.Empty;
} }
public List<Models.ExternalTerminal> FindExternalTerminals() public IReadOnlyList<Models.ExternalTerminal> FindExternalTerminals()
{ {
var finder = new Models.ExternalTerminalFinder(); var finder = new Models.ExternalTerminalFinder();
finder.Gnome(() => "/usr/bin/gnome-terminal"); finder.Gnome(() => "/usr/bin/gnome-terminal");

View file

@ -28,7 +28,7 @@ namespace SourceGit.Native
return string.Empty; return string.Empty;
} }
public List<Models.ExternalTerminal> FindExternalTerminals() public IReadOnlyList<Models.ExternalTerminal> FindExternalTerminals()
{ {
var finder = new Models.ExternalTerminalFinder(); var finder = new Models.ExternalTerminalFinder();
finder.AppleScript(new AppleScriptTerminal()); finder.AppleScript(new AppleScriptTerminal());

View file

@ -13,7 +13,7 @@ namespace SourceGit.Native
string FindGitExecutable(); string FindGitExecutable();
List<Models.ExternalTerminal> FindExternalTerminals(); IReadOnlyList<Models.ExternalTerminal> FindExternalTerminals();
List<Models.ExternalEditor> FindExternalEditors(); List<Models.ExternalEditor> FindExternalEditors();
void OpenTerminal(string workdir); void OpenTerminal(string workdir);
@ -23,7 +23,7 @@ namespace SourceGit.Native
} }
public static string GitExecutable { get; set; } = string.Empty; public static string GitExecutable { get; set; } = string.Empty;
public static List<Models.ExternalTerminal> ExternalTerminals { get; set; } = new List<Models.ExternalTerminal>(); public static IReadOnlyList<Models.ExternalTerminal> ExternalTerminals { get; private set; }
public static List<Models.ExternalEditor> ExternalEditors { get; set; } = new List<Models.ExternalEditor>(); public static List<Models.ExternalEditor> ExternalEditors { get; set; } = new List<Models.ExternalEditor>();
static OS() static OS()

View file

@ -114,7 +114,7 @@ namespace SourceGit.Native
return null; return null;
} }
public List<Models.ExternalTerminal> FindExternalTerminals() public IReadOnlyList<Models.ExternalTerminal> FindExternalTerminals()
{ {
var finder = new Models.ExternalTerminalFinder(); var finder = new Models.ExternalTerminalFinder();
finder.WindowsGitBash(() => FindExternalTerminal("bash")); finder.WindowsGitBash(() => FindExternalTerminal("bash"));

View file

@ -256,8 +256,8 @@
<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.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 (Shell)</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 (Shell)</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.gnome" xml:space="preserve">Gnome</x:String> <x:String x:Key="Text.Preference.General.DefaultTerminalOrShell.gnome" xml:space="preserve">Gnome</x:String>
<x:String x:Key="Text.Preference.General.DefaultTerminalOrShell.konsole" xml:space="preserve">Konsole</x:String> <x:String x:Key="Text.Preference.General.DefaultTerminalOrShell.konsole" xml:space="preserve">Konsole</x:String>
<x:String x:Key="Text.Preference.General.DefaultTerminalOrShell.osascript" xml:space="preserve">AppleScript</x:String> <x:String x:Key="Text.Preference.General.DefaultTerminalOrShell.osascript" xml:space="preserve">AppleScript</x:String>

View file

@ -255,9 +255,9 @@
<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.wt" 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.git-bash" xml:space="preserve">Git Bash (Shell)</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 (Shell)</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.gnome" xml:space="preserve">Gnome</x:String> <x:String x:Key="Text.Preference.General.DefaultTerminalOrShell.gnome" xml:space="preserve">Gnome</x:String>
<x:String x:Key="Text.Preference.General.DefaultTerminalOrShell.konsole" xml:space="preserve">Konsole</x:String> <x:String x:Key="Text.Preference.General.DefaultTerminalOrShell.konsole" xml:space="preserve">Konsole</x:String>
<x:String x:Key="Text.Preference.General.DefaultTerminalOrShell.osascript" xml:space="preserve">AppleScript</x:String> <x:String x:Key="Text.Preference.General.DefaultTerminalOrShell.osascript" xml:space="preserve">AppleScript</x:String>

View file

@ -109,11 +109,12 @@
MinHeight="28" MinHeight="28"
Padding="8,0" Padding="8,0"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
ItemsSource="{Binding #me.ExternalTerminals}"
SelectedItem="{Binding DefaultTerminal, Mode=TwoWay}"> SelectedItem="{Binding DefaultTerminal, Mode=TwoWay}">
<ComboBox.ItemTemplate> <ComboBox.ItemTemplate>
<DataTemplate DataType="x:String"> <DataTemplate DataType="x:String">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<Image Width="16" Height="16" Source="{Binding Converter={StaticResource TerminalOrShellNameToBitmapConverter}}" /> <Image Width="16" Height="16" Margin="4,4,8,4" Source="{Binding Converter={StaticResource TerminalOrShellNameToBitmapConverter}}" />
<TextBlock Text="{Binding Converter={StaticResource TerminalOrShellNameToLocalizedNameConverter}}" /> <TextBlock Text="{Binding Converter={StaticResource TerminalOrShellNameToLocalizedNameConverter}}" />
</StackPanel> </StackPanel>
</DataTemplate> </DataTemplate>

View file

@ -2,6 +2,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.IO; using System.IO;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Avalonia.Collections; using Avalonia.Collections;
@ -15,6 +16,8 @@ using Avalonia.Platform;
using Avalonia.Platform.Storage; using Avalonia.Platform.Storage;
using Avalonia.Threading; using Avalonia.Threading;
using SourceGit.Native;
namespace SourceGit.Views namespace SourceGit.Views
{ {
public partial class Preference : Window public partial class Preference : Window
@ -31,6 +34,12 @@ namespace SourceGit.Views
private set; private set;
} }
public AvaloniaList<string> ExternalTerminals
{
get;
private set;
}
public string DefaultUser public string DefaultUser
{ {
get; get;
@ -119,6 +128,8 @@ namespace SourceGit.Views
Dispatcher.UIThread.Post(() => InstalledMonospaceFonts.AddRange(sysMonoFonts)); Dispatcher.UIThread.Post(() => InstalledMonospaceFonts.AddRange(sysMonoFonts));
}); });
ExternalTerminals = [..OS.ExternalTerminals.Select(x => x.Name)];
var ver = string.Empty; var ver = string.Empty;
if (pref.IsGitConfigured) if (pref.IsGitConfigured)
{ {
@ -271,7 +282,7 @@ namespace SourceGit.Views
{ {
if (value is string terminalName && !string.IsNullOrWhiteSpace(terminalName)) 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; return name;
} }