mirror of
https://github.com/sourcegit-scm/sourcegit
synced 2025-06-26 04:44:59 +00:00
ux: Link found terminals to the UI
This commit is contained in:
parent
41f7aa84ac
commit
467a39b2e9
9 changed files with 28 additions and 16 deletions
|
@ -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)
|
||||||
|
|
|
@ -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");
|
||||||
|
|
|
@ -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());
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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"));
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue