diff --git a/src/Resources/Locales/en_US.axaml b/src/Resources/Locales/en_US.axaml
index 68e57b4c..3c580bb1 100644
--- a/src/Resources/Locales/en_US.axaml
+++ b/src/Resources/Locales/en_US.axaml
@@ -254,6 +254,14 @@
Theme
GENERAL
Avatar Server
+ Default Terminal/Shell
+ Windows Terminal
+ Git Bash (Shell)
+ PowerShell (Shell)
+ Gnome
+ Konsole
+ AppleScript
+ xfce4
Check for updates on startup
Language
History Commits
diff --git a/src/Resources/Locales/zh_CN.axaml b/src/Resources/Locales/zh_CN.axaml
index 79cf9973..8fd35e6b 100644
--- a/src/Resources/Locales/zh_CN.axaml
+++ b/src/Resources/Locales/zh_CN.axaml
@@ -254,6 +254,14 @@
主题
通用配置
头像服务
+ 默认终端
+ 终端
+ Git Bash (Shell)
+ PowerShell (Shell)
+ Gnome
+ Konsole
+ AppleScript
+ xfce4
启动时检测软件更新
显示语言
最大历史提交数
diff --git a/src/ViewModels/Preference.cs b/src/ViewModels/Preference.cs
index ee8f96a9..1d5670b8 100644
--- a/src/ViewModels/Preference.cs
+++ b/src/ViewModels/Preference.cs
@@ -115,6 +115,19 @@ namespace SourceGit.ViewModels
}
}
+ public string DefaultTerminal
+ {
+ get => Models.AvatarManager.SelectedServer;
+ set
+ {
+ if (Models.AvatarManager.SelectedServer != value)
+ {
+ Models.AvatarManager.SelectedServer = value;
+ OnPropertyChanged(nameof(DefaultTerminal));
+ }
+ }
+ }
+
public int MaxHistoryCommits
{
get => _maxHistoryCommits;
diff --git a/src/Views/Preference.axaml b/src/Views/Preference.axaml
index 24d10e8d..b9265b9d 100644
--- a/src/Views/Preference.axaml
+++ b/src/Views/Preference.axaml
@@ -20,6 +20,12 @@
ExtendClientAreaToDecorationsHint="True"
ExtendClientAreaChromeHints="NoChrome"
SystemDecorations="{OnPlatform Full, Linux=None}">
+
+
+
+
+
+
-
+
https://cravatar.cn/avatar/
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
diff --git a/src/Views/Preference.axaml.cs b/src/Views/Preference.axaml.cs
index 9dfe9c30..0d35c8e2 100644
--- a/src/Views/Preference.axaml.cs
+++ b/src/Views/Preference.axaml.cs
@@ -6,9 +6,12 @@ using System.Threading.Tasks;
using Avalonia.Collections;
using Avalonia.Controls;
+using Avalonia.Data.Converters;
using Avalonia.Input;
using Avalonia.Interactivity;
using Avalonia.Media;
+using Avalonia.Media.Imaging;
+using Avalonia.Platform;
using Avalonia.Platform.Storage;
using Avalonia.Threading;
@@ -242,4 +245,42 @@ namespace SourceGit.Views
}
}
}
+
+ public sealed class TerminalOrShellNameToBitmapConverter : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (value is string terminalName && !string.IsNullOrWhiteSpace(terminalName))
+ {
+ var icon = AssetLoader.Open(new Uri($"avares://SourceGit/Resources/ExternalTerminalIcons/{terminalName}.png", UriKind.RelativeOrAbsolute));
+ return new Bitmap(icon);
+ }
+
+ return null;
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotSupportedException();
+ }
+ }
+
+ public sealed class TerminalOrShellNameToLocalizedNameConverter : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (value is string terminalName && !string.IsNullOrWhiteSpace(terminalName))
+ {
+ var name = App.Text($"Text.Preference.General.DefaultTerminalOrShell.{terminalName}");
+ return name;
+ }
+
+ return null;
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotSupportedException();
+ }
+ }
}