Compare commits

...
44 Commits
Author SHA1 Message Date
Felix Seidl 68208ff0ec increase version 2020-08-07 14:56:35 +02:00
DennisandEric Cornelissen 2d7d1810a9 Update Dutch translations (#822)
* Update Dutch translations

Add new translations.
Fix typo's.

* Update FluentTerminal.App/Strings/nl/Resources.resw

Fix typo

Co-authored-by: Eric Cornelissen <ericornelissen@gmail.com>

* Update FluentTerminal.App/Strings/nl/Resources.resw

Fix typo

Co-authored-by: Eric Cornelissen <ericornelissen@gmail.com>

* Update FluentTerminal.App/Strings/nl/Resources.resw

Cut English text from Dutch translation

Co-authored-by: Eric Cornelissen <ericornelissen@gmail.com>

* Update FluentTerminal.App/Strings/nl/Resources.resw

Fix typo

Co-authored-by: Eric Cornelissen <ericornelissen@gmail.com>

* Update FluentTerminal.App/Strings/nl/Resources.resw

Fix typo

Co-authored-by: Eric Cornelissen <ericornelissen@gmail.com>

* Update Resources.resw

Fix typo

* Fix typo

Co-authored-by: Eric Cornelissen <ericornelissen@gmail.com>

Co-authored-by: Eric Cornelissen <ericornelissen@gmail.com>
2020-08-06 14:53:21 +02:00
dependabot[bot] cbc90cc94c Bump elliptic from 6.5.2 to 6.5.3 in /FluentTerminal.Client (#825)
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.2 to 6.5.3.
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.2...v6.5.3)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-08-01 23:01:17 +02:00
Felix Seidl 0d48fac129 Add missing store constant for x64
fixes #768
2020-07-21 22:21:45 +02:00
Felix Seidl 099f7c701d Add Esperanto and Uyghur localizations 2020-07-21 22:08:17 +02:00
RhavoXandFelix Seidl 2057c6d189 Fixed almost all warnings in the project. (#820)
* Fixed almost all warnings in the project. Only lanuage warning remains for the bundle project due to weird AZ language detection issues.

* changed binding mode to onetime to avoid binding warnings

Co-authored-by: Felix Seidl <f.seidl@me.com>
2020-07-20 21:55:44 +02:00
RhavoX 56ed197b02 Fix for a crash in search popup. (#817)
The crash occured because the popup is treated like the mainwindow and the main window grabs keypresses. Because of this a paste command can be executed on the main window when attempting to paste into the search box (when ctrl-c is used as a paste binding).
Adding an empty binding for copy and paste resolves this. Additionally it was required to prevent the terminal view from handling paste requests to prevent pasting to searchbox and terminal at the same time.
2020-07-18 10:28:52 +02:00
Loreno10andFelix Seidl 5642e755af ADD base for increasing and decreasing font size with keys (#728)
* ADD base for increasing and decreasing font size with keys

* finish resize implementation

Co-authored-by: Felix Seidl <f.seidl@me.com>
2020-07-15 20:00:56 +02:00
RhavoX 981eb9b362 fixes #761 (#814)
Also copies title to other tabs
2020-07-15 17:39:41 +02:00
RhavoX dd6917e1f7 Allows to hide dialog on escape press even when textbox has focus. (#815)
Also regains focus on wrong input when enter is used instead of allowing the terminal in the background to grab it.
2020-07-15 07:46:34 +02:00
RhavoX e9769a776d fixes #790 (#813) 2020-07-15 07:43:15 +02:00
RhavoX 1068ca98e8 Fix for lack of focus on search textbox. Reason being that attempt to focus was set before the control was visible most of the time. (#812) 2020-07-13 21:04:10 +02:00
Felix Seidl c2c93878c7 Update README.md 2020-06-28 17:22:51 +02:00
Felix Seidl cded0ad97a Update readme 2020-06-28 17:18:40 +02:00
Felix Seidl fb299121a3 Fix localisation of tab close button tooltip
fixes #764
2020-06-28 17:12:48 +02:00
Felix Seidl cce7b6e0f1 update dependencies 2020-06-28 17:06:05 +02:00
Felix Seidl c169dd496b update to latest xterm.js 2020-06-28 17:03:24 +02:00
kocuvan 70d117cb64 Added Slovenian translation (#789) 2020-06-06 22:45:33 +02:00
Max Hora 39e8f2ba7a Export/import settings for default shell profile and default theme. (#773) 2020-06-01 10:52:59 +02:00
Felix Seidl 0a8c186a98 update xterm 2020-05-30 11:41:14 +02:00
Felix Seidl ea23b37947 Update nuget dependencies 2020-05-30 11:32:38 +02:00
Max Hora ea50883d1c Enhance OpenSSH output on restart of session. (#767) 2020-05-24 14:09:08 +02:00
Felix Seidl 1c08a6d486 Increase version 2020-05-23 10:30:19 +02:00
Felix Seidl 9f75007e21 Added croatian translation 2020-05-09 11:04:31 +02:00
Felix Seidl 38e1c4f68f temporarily remove smart buffer 2020-05-02 21:07:46 +02:00
Felix Seidl 57cfa6e99a Update translations 2020-05-02 20:55:50 +02:00
Felix Seidl 1e7831c9a5 revert Win2D to fix build issues 2020-05-02 20:49:24 +02:00
Felix Seidl 16730d2810 update dependencies 2020-04-25 23:39:32 +02:00
Max Hora 4ca061baa9 Fixes random hanging on closing of ConPty session by disposing pseudo console before its writing pipe. (#733) 2020-04-23 08:04:37 +02:00
Felix Seidl b753dcbf4d Update translations 2020-04-20 21:33:01 +02:00
Felix Seidl 7dc2c85d62 Update main.yml 2020-04-15 22:19:02 +02:00
Felix Seidl 5e76cf9967 Fix CI 2020-04-15 22:10:15 +02:00
Felix Seidl 8999ded059 Fix search panel icon for older windows 10 versions
fixes #721
2020-04-15 22:00:39 +02:00
Felix Seidl 6d83e357d6 Revert to official xterm.js release and update dependencies 2020-04-13 12:06:19 +02:00
Max Hora 05c385342c Fixes performance issues of multiple ConPty sessions with fast output. (#715) 2020-04-12 23:00:47 +02:00
Felix Seidl 0dc1a1cd5d don't treat AltGr like Alt+Ctrl
fixes #699
2020-04-10 15:03:19 +02:00
Felix Seidl e1fc980779 fix missing translations for tab color names 2020-04-10 14:00:40 +02:00
Felix Seidl ccd8c1eaa4 improve settings import/export 2020-04-10 13:52:23 +02:00
Restia666Ashdoll ad1a933207 Update README.md (#707) 2020-04-08 08:04:46 +02:00
Felix Seidl 8d7c57d6fe allow more keybindings (again)
fixes #697
2020-04-05 18:33:43 +02:00
Felix Seidl 8d039f59ef prevent conpty from changing the title to its executable location
fixes #687
2020-04-05 17:43:53 +02:00
Felix Seidl cb8d3cabc7 fix missing tab color names 2020-04-05 17:23:47 +02:00
Felix Seidl 579def4f63 Fix tab color for unselected tabs
fixes #688
2020-04-05 17:19:08 +02:00
Max Hora 5d54d448b0 Rollback to use double quotes around identity file for ssh cli cmd. (#698) 2020-04-05 13:28:46 +02:00
94 changed files with 12739 additions and 3733 deletions

No files matched your search

+1 -1
View File
@@ -20,4 +20,4 @@ jobs:
uses: warrenbuckley/Setup-MSBuild@v1
- name: MSBuild
run: msbuild FluentTerminal.sln -t:build -p:Configuration=Debug -p:Platform=x64 -p:AppxPackage=false -m -restore
run: msbuild FluentTerminal.sln -t:build -p:Configuration=Debug -p:Platform=x64 -m -restore
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
<TargetFramework>netcoreapp3.1</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
@@ -12,12 +12,12 @@
<ItemGroup>
<PackageReference Include="AutoFixture" Version="4.11.0" />
<PackageReference Include="FluentAssertions" Version="5.10.2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
<PackageReference Include="Moq" Version="4.13.1" />
<PackageReference Include="FluentAssertions" Version="5.10.3" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.6.1" />
<PackageReference Include="Moq" Version="4.14.4" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
@@ -0,0 +1,23 @@
using System;
namespace FluentTerminal.App.Services.Exceptions
{
public class ReadTextFileException : Exception
{
public ReadTextFileException() : base()
{
}
public ReadTextFileException(string message) : base(message)
{
}
public ReadTextFileException(string message, Exception innerException) : base(message, innerException)
{
}
protected ReadTextFileException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) : base(info, context)
{
}
}
}
@@ -7,10 +7,10 @@
<ItemGroup>
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="MvvmLightLibs" Version="5.4.1.1" />
<PackageReference Include="MvvmLightLibsStd10" Version="5.4.1.1" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
<PackageReference Include="PListNet" Version="3.0.0" />
<PackageReference Include="RestSharp" Version="106.10.1" />
<PackageReference Include="PListNet" Version="3.2.0" />
<PackageReference Include="RestSharp" Version="106.11.4" />
<PackageReference Include="Serilog.Sinks.Async" Version="1.4.0" />
<PackageReference Include="Serilog.Sinks.File" Version="4.1.0" />
<PackageReference Include="System.Runtime.InteropServices.WindowsRuntime" Version="4.3.0" />
@@ -1,12 +0,0 @@
using FluentTerminal.Models.Enums;
namespace FluentTerminal.App.Services
{
// This validator is needed because accelerator key has to be member of VirtualKey enum.
public interface IAcceleratorKeyValidator
{
bool Valid(int key);
bool Valid(ExtendedVirtualKey key);
}
}
@@ -35,6 +35,8 @@ namespace FluentTerminal.App.Services
Task SaveTextFileAsync(string path, string content);
Task<string> ReadTextFileAsync(string path);
Task<string> GetSshConfigDirAsync();
Task<string[]> GetFilesFromSshConfigDirAsync();
@@ -1,5 +1,4 @@
using FluentTerminal.App.Services.Utilities;
using FluentTerminal.Models;
using FluentTerminal.Models;
using FluentTerminal.Models.Enums;
using System;
using System.Collections.Generic;
@@ -231,8 +230,7 @@ namespace FluentTerminal.App.Services.Implementation
Command = nameof(Command.ShowSettings),
Ctrl = true,
Shift = true,
// I've had to replace ExtendedVirtualKey.Comma because it isn't a member of VirtualKey enum, thus cannot be shown in menu.
Key = (int)ExtendedVirtualKey.S
Key = (int)ExtendedVirtualKey.Comma
}
};
@@ -324,7 +322,36 @@ namespace FluentTerminal.App.Services.Implementation
Key = (int)ExtendedVirtualKey.L
}
};
case Command.IncreaseFontSize:
return new List<KeyBinding>
{
new KeyBinding
{
Command = nameof(Command.IncreaseFontSize),
Ctrl = true,
Key = (int)ExtendedVirtualKey.Plus
}
};
case Command.DecreaseFontSize:
return new List<KeyBinding>
{
new KeyBinding
{
Command = nameof(Command.DecreaseFontSize),
Ctrl = true,
Key = (int)ExtendedVirtualKey.Minus
}
};
case Command.ResetFontSize:
return new List<KeyBinding>
{
new KeyBinding
{
Command = nameof(Command.ResetFontSize),
Ctrl = true,
Key = (int)ExtendedVirtualKey.Number0
}
};
default:
throw new InvalidOperationException($"Default keybindings for Command '{command}' are missing");
}
@@ -342,7 +369,7 @@ namespace FluentTerminal.App.Services.Implementation
new TabTheme
{
Id = 0,
Name = I18N.Translate("TabTheme.None"),
Name = "TabTheme.None",
BackgroundOpacity = double.NaN,
BackgroundPointerOverOpacity = double.NaN,
BackgroundPressedOpacity = double.NaN,
@@ -353,37 +380,37 @@ namespace FluentTerminal.App.Services.Implementation
new TabTheme
{
Id = 1,
Name = I18N.Translate("TabTheme.Red"),
Name = "TabTheme.Red",
Color = "#E81123"
},
new TabTheme
{
Id = 2,
Name = I18N.Translate("TabTheme.Green"),
Name = "TabTheme.Green",
Color = "#10893E"
},
new TabTheme
{
Id = 3,
Name = I18N.Translate("TabTheme.Blue"),
Name = "TabTheme.Blue",
Color = "#0078D7"
},
new TabTheme
{
Id = 4,
Name = I18N.Translate("TabTheme.Purple"),
Name = "TabTheme.Purple",
Color = "#881798"
},
new TabTheme
{
Id = 5,
Name = I18N.Translate("TabTheme.Orange"),
Name = "TabTheme.Orange",
Color = "#FF8C00"
},
new TabTheme
{
Id = 6,
Name = I18N.Translate("TabTheme.Teal"),
Name = "TabTheme.Teal",
Color = "#00B7C3"
}
};
@@ -63,7 +63,8 @@ namespace FluentTerminal.App.Services.Implementation
TerminalOptions = GetTerminalOptions(),
Themes = new List<TerminalTheme>(),
Profiles = new List<ShellProfile>(),
SshProfiles = new List<SshProfile>()
SshProfiles = new List<SshProfile>(),
DefaultSettings = GetDefaultSettings(),
};
foreach (var theme in GetThemes().Where(x => !x.PreInstalled))
@@ -71,7 +72,7 @@ namespace FluentTerminal.App.Services.Implementation
config.Themes.Add(theme);
}
foreach (var profile in GetShellProfiles().Where(x => !x.PreInstalled))
foreach (var profile in GetShellProfiles())
{
config.Profiles.Add(profile);
}
@@ -84,6 +85,15 @@ namespace FluentTerminal.App.Services.Implementation
return JsonConvert.SerializeObject(config, PreserveDictionaryKeyCaseContractResolver.SerializerSettings);
}
private Dictionary<string, string> GetDefaultSettings()
{
return new Dictionary<string, string>
{
[DefaultShellProfileKey] = GetDefaultShellProfileId().ToString(),
[CurrentThemeKey] = GetCurrentThemeId().ToString(),
};
}
public void ImportSettings(string serializedSettings)
{
var config = new
@@ -93,7 +103,8 @@ namespace FluentTerminal.App.Services.Implementation
Themes = new List<TerminalTheme>(),
Profiles = new List<ShellProfile>(),
SshProfiles = new List<SshProfile>(),
TerminalOptions = GetTerminalOptions()
TerminalOptions = GetTerminalOptions(),
DefaultSettings = new Dictionary<string, string>(),
};
JsonConvert.PopulateObject(serializedSettings, config);
@@ -117,21 +128,18 @@ namespace FluentTerminal.App.Services.Implementation
SaveTheme(theme, existingTheme != null);
}
// Can't create pre-installed profiles
foreach (var profile in config.Profiles.Where(x => !x.PreInstalled))
foreach (var profile in config.Profiles)
{
var existingProfile = GetShellProfile(profile.Id);
var isNew = existingProfile.EqualTo(default);
var isNew = existingProfile == default;
// You can only edit certain parts of preinstalled profiles
if (!isNew && existingProfile.PreInstalled)
{
existingProfile.WorkingDirectory = profile.WorkingDirectory;
existingProfile.Arguments = profile.Arguments;
existingProfile.TabThemeId = profile.TabThemeId;
existingProfile.TerminalThemeId = profile.TerminalThemeId;
existingProfile.KeyBindings = profile.KeyBindings;
SaveShellProfile(profile, isNew);
// those cannot be edited
profile.Name = existingProfile.Name;
profile.Location = existingProfile.Location;
SaveShellProfile(profile, false);
continue;
}
SaveShellProfile(profile, isNew);
@@ -140,12 +148,22 @@ namespace FluentTerminal.App.Services.Implementation
foreach (var profile in config.SshProfiles)
{
var existingProfile = GetSshProfile(profile.Id);
var isNew = existingProfile.EqualTo(default(SshProfile));
var isNew = existingProfile == default;
SaveSshProfile(profile, isNew);
}
SaveTerminalOptions(config.TerminalOptions);
if (config.DefaultSettings.ContainsKey(DefaultShellProfileKey))
{
SaveDefaultShellProfileId(new Guid(config.DefaultSettings[DefaultShellProfileKey]));
}
if (config.DefaultSettings.ContainsKey(CurrentThemeKey))
{
SaveCurrentThemeId(new Guid(config.DefaultSettings[CurrentThemeKey]));
}
}
public void DeleteShellProfile(Guid id)
@@ -84,6 +84,18 @@ namespace FluentTerminal.App.Services.Implementation
}
}
public async Task<string> ReadTextFileAsync(string path)
{
var response = await GetResponseAsync<StringValueResponse>(new ReadTextFileRequest { Path = path }).ConfigureAwait(false);
if (!response.Success)
{
throw new ReadTextFileException(string.IsNullOrWhiteSpace(response.Error) ? "Failed to read the file." : response.Error);
}
return response.Value;
}
public async Task<string> GetSshConfigDirAsync()
{
if (!string.IsNullOrEmpty(_sshConfigDir))
+4
View File
@@ -77,6 +77,8 @@ namespace FluentTerminal.App.Services
public byte Id { get; }
public ShellProfile Profile { get; private set; }
/// <summary>
/// To be called by either view or viewmodel
/// </summary>
@@ -143,6 +145,8 @@ namespace FluentTerminal.App.Services
/// </summary>
public async Task<TerminalResponse> StartShellProcessAsync(ShellProfile shellProfile, TerminalSize size, SessionType sessionType, string termState)
{
Profile = shellProfile;
if (!_requireShellProcessStart && !string.IsNullOrEmpty(termState))
{
OutputReceived?.Invoke(this, Encoding.UTF8.GetBytes(termState));
@@ -5,7 +5,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="MvvmLightLibs" Version="5.4.1.1" />
<PackageReference Include="MvvmLightLibsStd10" Version="5.4.1.1" />
</ItemGroup>
<ItemGroup>
@@ -6,6 +6,7 @@ namespace FluentTerminal.App.ViewModels
{
public interface ITerminalView : IDisposable
{
Task ChangeFontSize(int fontSize);
Task ChangeThemeAsync(TerminalTheme theme);
Task ChangeKeyBindingsAsync();
Task ChangeOptionsAsync(TerminalOptions options);
+12 -19
View File
@@ -28,7 +28,6 @@ namespace FluentTerminal.App.ViewModels
private readonly ISettingsService _settingsService;
private readonly ITrayProcessCommunicationService _trayProcessCommunicationService;
private readonly ICommandHistoryService _commandHistoryService;
private readonly IAcceleratorKeyValidator _acceleratorKeyValidator;
private ApplicationSettings _applicationSettings;
private bool _useAcrylicBackground;
private double _backgroundOpacity;
@@ -38,7 +37,7 @@ namespace FluentTerminal.App.ViewModels
private IDictionary<string, ICollection<KeyBinding>> _keyBindings;
public MainViewModel(ISettingsService settingsService, ITrayProcessCommunicationService trayProcessCommunicationService, IDialogService dialogService, IKeyboardCommandService keyboardCommandService,
IApplicationView applicationView, IClipboardService clipboardService, ICommandHistoryService commandHistoryService, IAcceleratorKeyValidator acceleratorKeyValidator)
IApplicationView applicationView, IClipboardService clipboardService, ICommandHistoryService commandHistoryService)
{
MessengerInstance.Register<ApplicationSettingsChangedMessage>(this, OnApplicationSettingsChanged);
MessengerInstance.Register<ShellProfileAddedMessage>(this, OnShellProfileAdded);
@@ -57,7 +56,6 @@ namespace FluentTerminal.App.ViewModels
_clipboardService = clipboardService;
_keyboardCommandService = keyboardCommandService;
_commandHistoryService = commandHistoryService;
_acceleratorKeyValidator = acceleratorKeyValidator;
_keyboardCommandService.RegisterCommandHandler(nameof(Command.NewTab), async () => await AddDefaultProfileAsync(NewTerminalLocation.Tab));
_keyboardCommandService.RegisterCommandHandler(nameof(Command.NewWindow), async () => await AddDefaultProfileAsync(NewTerminalLocation.Window));
@@ -73,10 +71,16 @@ namespace FluentTerminal.App.ViewModels
_keyboardCommandService.RegisterCommandHandler(nameof(Command.DuplicateTab), async () => await AddTabAsync(SelectedTerminal.ShellProfile.Clone()));
_keyboardCommandService.RegisterCommandHandler(nameof(Command.ReconnectTab), async () => { if (SelectedTerminal.ReconnectTabCommand.CanExecute()) await SelectedTerminal.ReconnectTabAsync(); });
// empty command handlers for copy and paste so that the main window does not execute these when copy keyboard shortcut is used in a popup search panel
// in such a case an exception would be thrown if no handlers are available so these empty ones mitigate that. Also there is no need for these on the main window anyway
// so leaving them empty is fine.
_keyboardCommandService.RegisterCommandHandler(nameof(Command.Paste), () => { });
_keyboardCommandService.RegisterCommandHandler(nameof(Command.Copy), () => { });
// Add all of the commands for switching to a tab of a given ID, if there's one open there
for (int i = 0; i < 9; i++)
{
var switchCmd = Command.SwitchToTerm1 + i;
var switchCmd = Command.SwitchToTerm1 + i;
int tabNumber = i;
// ReSharper disable once InconsistentNaming
void handler() => SelectTabNumber(tabNumber);
@@ -677,8 +681,7 @@ namespace FluentTerminal.App.ViewModels
icon: Mdl2Icon.Settings());
if (_keyBindings.TryGetValue(nameof(Command.ShowSettings), out var keyBindings) &&
keyBindings.FirstOrDefault() is KeyBinding settingsKeyBinding &&
_acceleratorKeyValidator.Valid(settingsKeyBinding.Key))
keyBindings.FirstOrDefault() is KeyBinding settingsKeyBinding)
{
LoadKeyBindingsFromModel(settingsItem, settingsKeyBinding);
}
@@ -720,8 +723,7 @@ namespace FluentTerminal.App.ViewModels
var defaultProfileCommand = tab ? nameof(Command.NewTab) : nameof(Command.NewWindow);
if (_keyBindings.TryGetValue(defaultProfileCommand, out var kbs) &&
kbs.FirstOrDefault() is KeyBinding tabKeyBindings &&
_acceleratorKeyValidator.Valid(tabKeyBindings.Key))
kbs.FirstOrDefault() is KeyBinding tabKeyBindings)
{
LoadKeyBindingsFromModel(defaultProfileItem, tabKeyBindings);
}
@@ -743,8 +745,7 @@ namespace FluentTerminal.App.ViewModels
var command = tab ? nameof(Command.NewSshTab) : nameof(Command.NewSshWindow);
if (_keyBindings.TryGetValue(command, out var keyBindings) &&
keyBindings.FirstOrDefault() is KeyBinding remoteTabKeyBinding &&
_acceleratorKeyValidator.Valid(remoteTabKeyBinding.Key))
keyBindings.FirstOrDefault() is KeyBinding remoteTabKeyBinding)
{
LoadKeyBindingsFromModel(remoteConnectItem, remoteTabKeyBinding);
}
@@ -765,8 +766,7 @@ namespace FluentTerminal.App.ViewModels
command = tab ? nameof(Command.NewCustomCommandTab) : nameof(Command.NewCustomCommandWindow);
if (_keyBindings.TryGetValue(command, out keyBindings) &&
keyBindings.FirstOrDefault() is KeyBinding quickTabKeyBinding &&
_acceleratorKeyValidator.Valid(quickTabKeyBinding.Key))
keyBindings.FirstOrDefault() is KeyBinding quickTabKeyBinding)
{
LoadKeyBindingsFromModel(quickLaunchItem, quickTabKeyBinding);
}
@@ -795,13 +795,6 @@ namespace FluentTerminal.App.ViewModels
private void LoadKeyBindingsFromModel(MenuItemViewModel menuItemViewModel, KeyBinding keyBinding)
{
if (!_acceleratorKeyValidator.Valid(keyBinding.Key))
{
menuItemViewModel.KeyBinding = null;
return;
}
if (menuItemViewModel.KeyBinding == null)
{
menuItemViewModel.KeyBinding = new MenuItemKeyBindingViewModel(keyBinding);
@@ -1,12 +1,15 @@
using FluentTerminal.Models;
using FluentTerminal.App.Services.Utilities;
using FluentTerminal.Models;
using FluentTerminal.Models.Enums;
using GalaSoft.MvvmLight;
using System;
using System.Collections.Generic;
using Windows.System;
namespace FluentTerminal.App.ViewModels.Menu
{
public class MenuItemKeyBindingViewModel : ViewModelBase
{
#region Properties
private int _key;
public int Key
@@ -80,9 +83,21 @@ namespace FluentTerminal.App.ViewModels.Menu
}
}
#endregion Properties
public bool IsExtendedVirtualKey => !Enum.IsDefined(typeof(VirtualKey), Key);
#region Constructors
public string GetOverrideText()
{
var segments = new List<string>();
if (Ctrl) segments.Add("Ctrl");
if (Alt) segments.Add("Alt");
if (Windows) segments.Add("Windows");
if (Shift) segments.Add("Shift");
segments.Add(EnumHelper.GetEnumDescription((ExtendedVirtualKey)Key));
return string.Join("+", segments);
}
public MenuItemKeyBindingViewModel(int key = 0, bool ctrl = false, bool alt = false, bool shift = false,
bool windows = false)
@@ -101,9 +116,7 @@ namespace FluentTerminal.App.ViewModels.Menu
{
}
#endregion Constructors
#region Methods
private void SetKeyModifiers()
{
@@ -142,6 +155,5 @@ namespace FluentTerminal.App.ViewModels.Menu
return _key == other._key && _keyModifiers == other._keyModifiers;
}
#endregion Methods
}
}
@@ -199,8 +199,8 @@ namespace FluentTerminal.App.ViewModels.Profiles
}
return _sshPort == SshProfile.DefaultSshPort
? $"-i '{_identityFile}'"
: $"-p {_sshPort:#####} -i '{_identityFile}'";
? $"-i \"{_identityFile}\""
: $"-p {_sshPort:#####} -i \"{_identityFile}\"";
}
protected override void LoadFromProfile(ShellProfile profile)
@@ -46,6 +46,7 @@ namespace FluentTerminal.App.ViewModels
public string XtermBufferState { get; set; }
public byte TerminalId { get; set; }
public ShellProfile ShellProfile { get; set; }
public int FontSize { get; set; }
}
public async Task<string> SerializeAsync()
@@ -64,7 +65,8 @@ namespace FluentTerminal.App.ViewModels
SearchWithRegex = SearchWithRegex,
XtermBufferState = await SerializeXtermStateAsync().ConfigureAwait(false),
TerminalId = Terminal.Id,
ShellProfile = ShellProfile
ShellProfile = ShellProfile,
FontSize = FontSize
};
return JsonConvert.SerializeObject(state);
@@ -88,7 +90,7 @@ namespace FluentTerminal.App.ViewModels
XtermBufferState = state.XtermBufferState;
_terminalId = state.TerminalId;
ShellProfile = state.ShellProfile;
FontSize = state.FontSize;
TabTheme.IsSelected = true;
}
}
@@ -116,6 +118,8 @@ namespace FluentTerminal.App.ViewModels
private string _hoveredUri;
private MenuViewModel _contextMenu;
private MenuViewModel _tabContextMenu;
private readonly TabThemeViewModel _transparentTabThemeViewModel;
private int _fontSize;
public TerminalViewModel(ISettingsService settingsService, ITrayProcessCommunicationService trayProcessCommunicationService, IDialogService dialogService,
IKeyboardCommandService keyboardCommandService, ApplicationSettings applicationSettings, ShellProfile shellProfile,
@@ -157,6 +161,8 @@ namespace FluentTerminal.App.ViewModels
CopyLinkCommand = new AsyncCommand(() => CopyTextAsync(HoveredUri), () => !string.IsNullOrWhiteSpace(HoveredUri));
ShowSearchPanelCommand = new RelayCommand(() => ShowSearchPanel = true, () => !ShowSearchPanel);
FontSize = _terminalOptions.FontSize;
if (!string.IsNullOrEmpty(terminalState))
{
Restore(terminalState);
@@ -167,6 +173,8 @@ namespace FluentTerminal.App.ViewModels
defaultTabTheme.IsSelected = true;
}
_transparentTabThemeViewModel = TabThemes.FirstOrDefault(t => t.Theme.Id == 0);
Terminal = new Terminal(TrayProcessCommunicationService, _terminalId);
Terminal.KeyboardCommandReceived += Terminal_KeyboardCommandReceived;
Terminal.OutputReceived += Terminal_OutputReceived;
@@ -213,18 +221,19 @@ namespace FluentTerminal.App.ViewModels
public event EventHandler CloseRightTabsRequested;
public event EventHandler CloseOtherTabsRequested;
public event EventHandler DuplicateTabRequested;
public event EventHandler<int> FontSizeChanged;
public ApplicationSettings ApplicationSettings { get; private set; }
public IApplicationView ApplicationView { get; }
public TabTheme BackgroundTabTheme
public TabThemeViewModel BackgroundTabTheme
{
// The effective background theme depends on whether it is selected (use the theme), or if it is inactive
// (if we're set to underline inactive tabs, use the null theme).
get => IsSelected || (!IsSelected && ApplicationSettings.InactiveTabColorMode == InactiveTabColorMode.Background) ?
_tabTheme?.Theme :
SettingsService.GetTabThemes().FirstOrDefault(t => t.Color == null);
TabTheme :
_transparentTabThemeViewModel;
}
public IClipboardService ClipboardService { get; }
@@ -377,6 +386,8 @@ namespace FluentTerminal.App.ViewModels
set => Set(ref _showSearchPanel, value);
}
public bool SearchHasFocus { get; set; }
public TabThemeViewModel TabTheme
{
get => _tabTheme;
@@ -385,6 +396,9 @@ namespace FluentTerminal.App.ViewModels
Set(ref _tabTheme, value);
RaisePropertyChanged(nameof(IsUnderlined));
RaisePropertyChanged(nameof(BackgroundTabTheme));
// necessary to update this constantly so that duplicated tabs will also carry over the color
ShellProfile.TabThemeId = value.Theme.Id;
}
}
@@ -429,6 +443,7 @@ namespace FluentTerminal.App.ViewModels
}
Set(ref _tabTitle, title);
ShellProfile.Name = title;
}
}
@@ -444,6 +459,15 @@ namespace FluentTerminal.App.ViewModels
}
}
public int FontSize
{
get => _fontSize;
set
{
_fontSize = value > 0 ? value : 1;
}
}
public ITrayProcessCommunicationService TrayProcessCommunicationService { get; }
public Task CloseAsync()
@@ -660,6 +684,28 @@ namespace FluentTerminal.App.ViewModels
}).ConfigureAwait(false);
return;
}
case nameof(Command.IncreaseFontSize):
{
FontSize++;
FontSizeChanged?.Invoke(this, FontSize);
return;
}
case nameof(Command.DecreaseFontSize):
{
if (FontSize > 2)
{
FontSize--;
FontSizeChanged?.Invoke(this, FontSize);
}
return;
}
case nameof(Command.ResetFontSize):
{
FontSize = _terminalOptions.FontSize;
FontSizeChanged?.Invoke(this, FontSize);
return;
}
default:
{
await ApplicationView.ExecuteOnUiThreadAsync(() => _keyboardCommandService.SendCommand(e))
@@ -689,6 +735,7 @@ namespace FluentTerminal.App.ViewModels
private void Terminal_TitleChanged(object sender, string e)
{
if (e == Terminal.Profile.Location) return;
ApplicationView.ExecuteOnUiThreadAsync(() => ShellTitle = e);
}
@@ -716,10 +763,15 @@ namespace FluentTerminal.App.ViewModels
private async Task Paste()
{
var content = await ClipboardService.GetTextAsync().ConfigureAwait(false);
if (content != null)
// prevent from pasting something into the terminal window when the actual command is executed
// while being in the search box
if (!SearchHasFocus)
{
TerminalView.Paste(content);
var content = await ClipboardService.GetTextAsync().ConfigureAwait(false);
if (content != null)
{
TerminalView.Paste(content);
}
}
}
@@ -777,7 +829,7 @@ namespace FluentTerminal.App.ViewModels
{
//todo localise name
var icon = tabTheme.Theme.Id == 0 ? Mdl2Icon.PaginationDotOutline10() : Mdl2Icon.PaginationDotSolid10(tabTheme.Theme.Color);
return new RadioMenuItemViewModel(I18N.Translate($"TabTheme.{tabTheme.Theme.Name}"), $"{Terminal.Id}_tabTheme", tabTheme, bindingPath: nameof(TabThemeViewModel.IsSelected) , icon: icon);
return new RadioMenuItemViewModel(I18N.Translate($"{tabTheme.Theme.Name}"), $"{Terminal.Id}_tabTheme", tabTheme, bindingPath: nameof(TabThemeViewModel.IsSelected) , icon: icon);
}
var tabColor = new ExpandableMenuItemViewModel(I18N.Translate("Color.Text"));
+14 -1
View File
@@ -9,11 +9,24 @@ namespace FluentTerminal.App.Actions
public object Execute(object sender, object parameter)
{
var control = TargetObject ?? sender as Control;
control?.Focus(FocusState.Programmatic);
if (control != null)
{
if (!control.IsLoaded)
control.Loaded += Control_Loaded;
else
control.Focus(FocusState.Programmatic);
}
return null;
}
private void Control_Loaded(object sender, RoutedEventArgs e)
{
Control control = sender as Control;
control.Focus(FocusState.Programmatic);
control.Loaded -= Control_Loaded; // won't be needed anymore. Remove reference just in case
}
public Control TargetObject
{
get { return (Control)GetValue(TargetObjectProperty); }
+193 -149
View File
@@ -47,6 +47,7 @@ namespace FluentTerminal.App
private readonly ISettingsService _settingsService;
private readonly ITrayProcessCommunicationService _trayProcessCommunicationService;
private readonly IDialogService _dialogService;
private readonly INotificationService _notificationService;
private bool _alreadyLaunched;
private bool _isLaunching;
private ApplicationSettings _applicationSettings;
@@ -110,13 +111,13 @@ namespace FluentTerminal.App
builder.RegisterType<StartupTaskService>().As<IStartupTaskService>().SingleInstance();
builder.RegisterType<ApplicationLanguageService>().As<IApplicationLanguageService>().SingleInstance();
builder.RegisterType<ShellProfileMigrationService>().As<IShellProfileMigrationService>().SingleInstance();
builder.RegisterType<AcceleratorKeyValidator>().As<IAcceleratorKeyValidator>().SingleInstance();
_container = builder.Build();
Messenger.Default.Register<ApplicationSettingsChangedMessage>(this, OnApplicationSettingsChanged);
_settingsService = _container.Resolve<ISettingsService>();
_notificationService = _container.Resolve<INotificationService>();
var shellProfileMigrationService = _container.Resolve<IShellProfileMigrationService>();
foreach (var profile in _settingsService.GetShellProfiles())
@@ -186,7 +187,189 @@ namespace FluentTerminal.App
protected override async void OnActivated(IActivatedEventArgs args)
{
if (args is ProtocolActivatedEventArgs protocolActivated)
await OnLaunchOrActivate(args);
base.OnActivated(args);
}
private async Task ParseCommandLineArgumentsAsync(object verb, CommandLineActivatedEventArgs commandLineActivated)
{
using var deferral = commandLineActivated.Operation.GetDeferral();
if (verb is SettingsVerb settingsVerb)
{
if (string.IsNullOrWhiteSpace(settingsVerb.Import) && !settingsVerb.Export)
{
await ShowSettingsAsync();
}
else if (settingsVerb.Export)
{
var settings = _settingsService.ExportSettings();
var path = Path.Combine(commandLineActivated.Operation.CurrentDirectoryPath, "config.json");
try
{
await StartSystemTray().ConfigureAwait(false);
await _trayProcessCommunicationService.SaveTextFileAsync(path, settings).ConfigureAwait(false);
_notificationService.ShowNotification("Export settings", $"Settings were exported to {path}.");
}
catch (Exception e)
{
_notificationService.ShowNotification("Export settings", $"Failed with error: {e.Message}");
commandLineActivated.Operation.ExitCode = 1;
}
if (!_isLaunching && !_alreadyLaunched)
{
Exit();
}
}
else if (!string.IsNullOrWhiteSpace(settingsVerb.Import))
{
var path = Path.Combine(commandLineActivated.Operation.CurrentDirectoryPath, settingsVerb.Import.Replace(".\\", string.Empty));
try
{
await StartSystemTray().ConfigureAwait(false);
var content = await _trayProcessCommunicationService.ReadTextFileAsync(path).ConfigureAwait(false);
_settingsService.ImportSettings(content);
_notificationService.ShowNotification("Import settings", $"Successfully imported settings from {path}.");
}
catch (Exception e)
{
_notificationService.ShowNotification("Import settings", $"Failed with error: {e.Message}");
commandLineActivated.Operation.ExitCode = 1;
}
if (!_isLaunching && !_alreadyLaunched)
{
Exit();
}
}
}
else if (verb is NewVerb newVerb)
{
var profile = default(ShellProfile);
if (!string.IsNullOrWhiteSpace(newVerb.Profile))
{
profile = _settingsService.GetShellProfiles().FirstOrDefault(x => x.Name.Equals(newVerb.Profile, StringComparison.CurrentCultureIgnoreCase));
}
if (profile == null)
{
profile = _settingsService.GetDefaultShellProfile();
}
if (!string.IsNullOrWhiteSpace(newVerb.Directory) && newVerb.Directory != ".")
{
profile.WorkingDirectory = newVerb.Directory;
}
else
{
profile.WorkingDirectory = commandLineActivated.Operation.CurrentDirectoryPath;
}
var location = newVerb.Target == Target.Default ? _applicationSettings.NewTerminalLocation
: newVerb.Target == Target.Tab ? NewTerminalLocation.Tab
: NewTerminalLocation.Window;
await CreateTerminalAsync(profile, location);
}
else if (verb is RunVerb runVerb)
{
var profile = new ShellProfile
{
Id = Guid.Empty,
Location = null,
Arguments = runVerb.Command,
WorkingDirectory = runVerb.Directory
};
if (runVerb.SmartBuffer.HasValue)
{
profile.UseBuffer = runVerb.SmartBuffer.Value;
}
if (!string.IsNullOrWhiteSpace(runVerb.Theme))
{
var theme = _settingsService.GetThemes().FirstOrDefault(x => x.Name.Equals(runVerb.Theme, StringComparison.CurrentCultureIgnoreCase));
if (theme != null)
{
profile.TerminalThemeId = theme.Id;
}
}
if (string.IsNullOrWhiteSpace(profile.WorkingDirectory))
{
profile.WorkingDirectory = commandLineActivated.Operation.CurrentDirectoryPath;
}
var location = runVerb.Target == Target.Default ? _applicationSettings.NewTerminalLocation
: runVerb.Target == Target.Tab ? NewTerminalLocation.Tab
: NewTerminalLocation.Window;
await CreateTerminalAsync(profile, location);
}
}
private Task ShowOrCreateWindowAsync(ActivationViewSwitcher viewSwitcher)
{
var viewModel = _mainViewModels.Find(o => o.ApplicationView.Id == _activeWindowId) ??
_mainViewModels.LastOrDefault();
return viewModel == null
? CreateTerminalAsync(_settingsService.GetDefaultShellProfile(), NewTerminalLocation.Tab, viewSwitcher)
: ShowAsStandaloneAsync(viewModel, viewSwitcher);
}
protected override async void OnLaunched(LaunchActivatedEventArgs args)
{
await OnLaunchOrActivate(args);
}
public async Task OnLaunchOrActivate(IActivatedEventArgs args)
{
if (args is LaunchActivatedEventArgs launchActivated)
{
if (_isLaunching)
{
return;
}
_isLaunching = true;
if (!_alreadyLaunched)
{
await InitializeLoggerAsync();
// ReSharper disable once AssignmentIsFullyDiscarded
_ = JumpListHelper.UpdateAsync(_settingsService);
var viewModel = _container.Resolve<MainViewModel>();
if (launchActivated.Arguments.StartsWith(JumpListHelper.ShellProfileFlag))
{
await viewModel.AddProfileByGuidAsync(Guid.Parse(launchActivated.Arguments.Replace(JumpListHelper.ShellProfileFlag, string.Empty)));
}
else
{
await viewModel.AddDefaultProfileAsync(NewTerminalLocation.Tab);
}
await CreateMainViewAsync(typeof(MainPage), viewModel, true);
Window.Current.Activate();
}
else if (launchActivated.Arguments.StartsWith(JumpListHelper.ShellProfileFlag))
{
var location = _applicationSettings.NewTerminalLocation;
var profile = _settingsService.GetShellProfile(Guid.Parse(launchActivated.Arguments.Replace(JumpListHelper.ShellProfileFlag, string.Empty)));
await CreateTerminalAsync(profile, location, launchActivated.ViewSwitcher);
}
else
{
var viewModel = await CreateNewTerminalWindowAsync();
await viewModel.AddDefaultProfileAsync(NewTerminalLocation.Tab);
await ShowAsStandaloneAsync(viewModel, launchActivated.ViewSwitcher);
}
_isLaunching = false;
}
else if (args is ProtocolActivatedEventArgs protocolActivated)
{
if (protocolActivated.Uri == new Uri("ftcmd://fluent.terminal?focus"))
{
@@ -262,7 +445,7 @@ namespace FluentTerminal.App
var error = await vm.AcceptChangesAsync(true);
var profile = (SshProfile) vm.Model;
var profile = (SshProfile)vm.Model;
if (!string.IsNullOrEmpty(error))
{
@@ -347,8 +530,7 @@ namespace FluentTerminal.App
return;
}
if (args is CommandLineActivatedEventArgs commandLineActivated)
else if (args is CommandLineActivatedEventArgs commandLineActivated)
{
var arguments = commandLineActivated.Operation.Arguments;
if (string.IsNullOrWhiteSpace(arguments))
@@ -358,153 +540,10 @@ namespace FluentTerminal.App
_commandLineParser
.ParseArguments(SplitArguments(arguments), typeof(NewVerb), typeof(RunVerb), typeof(SettingsVerb))
.WithParsed(async verb => await CliRunAsync(verb, commandLineActivated));
.WithParsed(async verb => await ParseCommandLineArgumentsAsync(verb, commandLineActivated));
}
}
private async Task CliRunAsync(object verb, CommandLineActivatedEventArgs commandLineActivated)
{
if (verb is SettingsVerb settingsVerb)
{
if (!settingsVerb.Import && !settingsVerb.Export)
{
await ShowSettingsAsync();
}
else if (settingsVerb.Export)
{
var exportFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("config.json", CreationCollisionOption.OpenIfExists);
var settings = _settingsService.ExportSettings();
await FileIO.WriteTextAsync(exportFile, settings);
await new MessageDialog($"{I18N.Translate("SettingsExported")} {exportFile.Path}").ShowAsync();
}
else if (settingsVerb.Import)
{
var file = await ApplicationData.Current.LocalFolder.GetFileAsync("config.json");
var content = await FileIO.ReadTextAsync(file);
_settingsService.ImportSettings(content);
await new MessageDialog($"{I18N.Translate("SettingsImported")} {file.Path}").ShowAsync();
}
}
else if (verb is NewVerb newVerb)
{
var profile = default(ShellProfile);
if (!string.IsNullOrWhiteSpace(newVerb.Profile))
{
profile = _settingsService.GetShellProfiles().FirstOrDefault(x => x.Name.Equals(newVerb.Profile, StringComparison.CurrentCultureIgnoreCase));
}
if (profile == null)
{
profile = _settingsService.GetDefaultShellProfile();
}
if (!string.IsNullOrWhiteSpace(newVerb.Directory) && newVerb.Directory != ".")
{
profile.WorkingDirectory = newVerb.Directory;
}
else
{
profile.WorkingDirectory = commandLineActivated.Operation.CurrentDirectoryPath;
}
var location = newVerb.Target == Target.Default ? _applicationSettings.NewTerminalLocation
: newVerb.Target == Target.Tab ? NewTerminalLocation.Tab
: NewTerminalLocation.Window;
await CreateTerminalAsync(profile, location);
}
else if (verb is RunVerb runVerb)
{
var profile = new ShellProfile
{
Id = Guid.Empty,
Location = null,
Arguments = runVerb.Command,
WorkingDirectory = runVerb.Directory
};
if (!string.IsNullOrEmpty(runVerb.Buffer) && bool.TryParse(runVerb.Buffer, out var useBuffer))
{
profile.UseBuffer = useBuffer;
}
if (!string.IsNullOrWhiteSpace(runVerb.Theme))
{
var theme = _settingsService.GetThemes().FirstOrDefault(x => x.Name.Equals(runVerb.Theme, StringComparison.CurrentCultureIgnoreCase));
if (theme != null)
{
profile.TerminalThemeId = theme.Id;
}
}
if (string.IsNullOrWhiteSpace(profile.WorkingDirectory))
{
profile.WorkingDirectory = commandLineActivated.Operation.CurrentDirectoryPath;
}
var location = runVerb.Target == Target.Default ? _applicationSettings.NewTerminalLocation
: runVerb.Target == Target.Tab ? NewTerminalLocation.Tab
: NewTerminalLocation.Window;
await CreateTerminalAsync(profile, location);
}
}
private Task ShowOrCreateWindowAsync(ActivationViewSwitcher viewSwitcher)
{
var viewModel = _mainViewModels.Find(o => o.ApplicationView.Id == _activeWindowId) ??
_mainViewModels.LastOrDefault();
return viewModel == null
? CreateTerminalAsync(_settingsService.GetDefaultShellProfile(), NewTerminalLocation.Tab, viewSwitcher)
: ShowAsStandaloneAsync(viewModel, viewSwitcher);
}
protected override async void OnLaunched(LaunchActivatedEventArgs args)
{
if (_isLaunching)
{
return;
}
_isLaunching = true;
if (!_alreadyLaunched)
{
await InitializeLoggerAsync();
// ReSharper disable once AssignmentIsFullyDiscarded
_ = JumpListHelper.UpdateAsync(_settingsService);
var viewModel = _container.Resolve<MainViewModel>();
if (args.Arguments.StartsWith(JumpListHelper.ShellProfileFlag))
{
await viewModel.AddProfileByGuidAsync(Guid.Parse(args.Arguments.Replace(JumpListHelper.ShellProfileFlag, string.Empty)));
}
else
{
await viewModel.AddDefaultProfileAsync(NewTerminalLocation.Tab);
}
await CreateMainViewAsync(typeof(MainPage), viewModel, true);
Window.Current.Activate();
}
else if (args.Arguments.StartsWith(JumpListHelper.ShellProfileFlag))
{
var location = _applicationSettings.NewTerminalLocation;
var profile = _settingsService.GetShellProfile(Guid.Parse(args.Arguments.Replace(JumpListHelper.ShellProfileFlag, string.Empty)));
await CreateTerminalAsync(profile, location, args.ViewSwitcher);
}
else
{
var viewModel = await CreateNewTerminalWindowAsync();
await viewModel.AddDefaultProfileAsync(NewTerminalLocation.Tab);
await ShowAsStandaloneAsync(viewModel, args.ViewSwitcher);
}
_isLaunching = false;
}
private static async Task InitializeLoggerAsync()
{
var logDirectory = await ApplicationData.Current.LocalCacheFolder.CreateFolderAsync("Logs", CreationCollisionOption.OpenIfExists);
@@ -759,6 +798,11 @@ namespace FluentTerminal.App
private Task StartSystemTray()
{
if (_trayReady.Task.IsCompleted)
{
return Task.CompletedTask;
}
var launch = FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync("AppLaunchedParameterGroup").AsTask();
return Task.WhenAll(launch, _trayReady.Task).ContinueWith(
@@ -14,8 +14,8 @@ namespace FluentTerminal.App.CommandLineArguments
[Option("theme")]
public string Theme { get; set; }
[Option("buffer")]
public string Buffer { get; set; }
[Option("smart-buffer")]
public bool? SmartBuffer { get; set; }
[Option("target")]
public Target Target { get; set; }
@@ -6,8 +6,8 @@ namespace FluentTerminal.App.CommandLineArguments
public class SettingsVerb
{
[Option('i', "import",
HelpText = "Import settings.")]
public bool Import { get; set; }
HelpText = "Import settings from specified file.")]
public string Import { get; set; }
[Option('e', "export",
HelpText = "Export settings.")]
@@ -20,6 +20,10 @@ namespace FluentTerminal.App.Converters
{
return Translate($"{enumType}.{enumValue}");
}
else if (value is string stringValue)
{
return Translate(stringValue);
}
else if (parameter is string resource)
{
return Translate(resource);
@@ -7,6 +7,7 @@ using Windows.UI.Xaml.Input;
using FluentTerminal.App.ViewModels.Menu;
using FluentTerminal.App.Views;
using Microsoft.UI.Xaml.Controls;
using Windows.Foundation.Metadata;
// ReSharper disable LocalizableElement
@@ -90,12 +91,22 @@ namespace FluentTerminal.App.Converters
if (viewModel.KeyBinding != null)
{
item.KeyboardAccelerators?.Add(new KeyboardAccelerator
if (viewModel.KeyBinding.IsExtendedVirtualKey)
{
Key = (VirtualKey) viewModel.KeyBinding.Key,
Modifiers = (VirtualKeyModifiers) viewModel.KeyBinding.KeyModifiers,
IsEnabled = true
});
if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 6))
{
item.KeyboardAcceleratorTextOverride = viewModel.KeyBinding.GetOverrideText();
}
}
else
{
item.KeyboardAccelerators?.Add(new KeyboardAccelerator
{
Key = (VirtualKey)viewModel.KeyBinding.Key,
Modifiers = (VirtualKeyModifiers)viewModel.KeyBinding.KeyModifiers,
IsEnabled = true
});
}
}
return item;
@@ -16,8 +16,6 @@ namespace FluentTerminal.App.Dialogs
// ReSharper disable once RedundantExtendsListEntry
public sealed partial class CreateKeyBindingDialog : ContentDialog, ICreateKeyBindingDialog, INotifyPropertyChanged
{
private readonly IAcceleratorKeyValidator _acceleratorKeyValidator;
private bool _ctrl;
private bool _shift;
private bool _alt;
@@ -53,17 +51,12 @@ namespace FluentTerminal.App.Dialogs
get => _key;
set
{
// We're ignoring invalid keys.
if (_acceleratorKeyValidator.Valid(value))
{
Set(ref _key, value);
}
Set(ref _key, value);
}
}
public CreateKeyBindingDialog(IAcceleratorKeyValidator acceleratorKeyValidator)
public CreateKeyBindingDialog()
{
_acceleratorKeyValidator = acceleratorKeyValidator;
InitializeComponent();
ResetCommand = new RelayCommand(Reset);
PreviewKeyDown += RegisterKeyBindingDialog_PreviewKeyDown;
@@ -79,7 +79,6 @@
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<!-- Row -->
@@ -124,16 +123,6 @@
Margin="0,8,0,0"
Content="{x:Bind Converter={StaticResource I18NConverter}, ConverterParameter=UseConPty}"
IsChecked="{x:Bind ViewModel.UseConPty, Mode=TwoWay}" />
<!-- Row -->
<CheckBox
Grid.Row="3"
Grid.Column="0"
Grid.ColumnSpan="2"
Margin="0,8,0,0"
Content="{x:Bind Converter={StaticResource I18NConverter}, ConverterParameter=UseBuffer}"
IsChecked="{x:Bind ViewModel.UseBuffer, Mode=TwoWay}" />
</Grid>
</controls:Expander>
@@ -233,9 +233,13 @@ namespace FluentTerminal.App.Dialogs
else
{
await new MessageDialog(error, I18N.Translate("InvalidInput")).ShowAsync();
SetupFocus(); // needed to apply focus back to the textbox instead of the terminal in the background.
}
}
return;
case VirtualKey.Escape:
Hide();
return;
}
}
@@ -129,7 +129,6 @@
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<!-- Row -->
@@ -209,16 +208,6 @@
Margin="0,8,0,0"
Content="{x:Bind Converter={StaticResource I18NConverter}, ConverterParameter=UseConPty}"
IsChecked="{x:Bind ViewModel.UseConPty, Mode=TwoWay}" />
<!-- Row -->
<CheckBox
Grid.Row="4"
Grid.Column="0"
Grid.ColumnSpan="4"
Margin="0,8,0,0"
Content="{x:Bind Converter={StaticResource I18NConverter}, ConverterParameter=UseBuffer}"
IsChecked="{x:Bind ViewModel.UseBuffer, Mode=TwoWay}" />
</Grid>
</controls:Expander>
+39 -12
View File
@@ -9,7 +9,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>FluentTerminal.App</RootNamespace>
<AssemblyName>FluentTerminal.App</AssemblyName>
<DefaultLanguage>en</DefaultLanguage>
<DefaultLanguage>en-US</DefaultLanguage>
<TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
<TargetPlatformVersion Condition=" '$(TargetPlatformVersion)' == '' ">10.0.18362.0</TargetPlatformVersion>
<TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>
@@ -17,6 +17,7 @@
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WindowsXamlEnableOverview>true</WindowsXamlEnableOverview>
<AppxBundlePlatforms>x64</AppxBundlePlatforms>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
@@ -133,7 +134,6 @@
<Compile Include="Dialogs\AboutDialog.xaml.cs">
<DependentUpon>AboutDialog.xaml</DependentUpon>
</Compile>
<Compile Include="Services\AcceleratorKeyValidator.cs" />
<Compile Include="Services\CommandHistoryService.cs" />
<Compile Include="Utilities\DelayedAction.cs" />
<Compile Include="Utilities\DispatcherExtensions.cs" />
@@ -237,12 +237,14 @@
<Content Include="Client\index.html" />
<Content Include="Client\style.css" />
<Content Include="Client\xterm.css" />
<PRIResource Include="Strings\eo\Resources.resw" />
<PRIResource Include="Strings\ru\Resources.resw" />
<PRIResource Include="Strings\fr\Resources.resw" />
<PRIResource Include="Strings\es\Resources.resw" />
<PRIResource Include="Strings\de\Resources.resw" />
<PRIResource Include="Strings\ug-Arab\Resources.resw" />
<PRIResource Include="Strings\zh-Hant\Resources.resw" />
<PRIResource Include="Strings\en\Resources.resw" />
<PRIResource Include="Strings\en-US\Resources.resw" />
</ItemGroup>
<ItemGroup>
<Content Include="Properties\Default.rd.xml" />
@@ -351,22 +353,22 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Autofac">
<Version>5.1.2</Version>
<Version>5.2.0</Version>
</PackageReference>
<PackageReference Include="CommandLineParser">
<Version>2.7.82</Version>
<Version>2.8.0</Version>
</PackageReference>
<PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform">
<Version>6.2.10</Version>
</PackageReference>
<PackageReference Include="Microsoft.Toolkit.Uwp.UI">
<Version>6.0.0</Version>
<Version>6.1.0</Version>
</PackageReference>
<PackageReference Include="Microsoft.Toolkit.Uwp.UI.Controls">
<Version>6.0.0</Version>
<Version>6.1.0</Version>
</PackageReference>
<PackageReference Include="Microsoft.UI.Xaml">
<Version>2.3.200213001</Version>
<Version>2.4.2</Version>
</PackageReference>
<PackageReference Include="Microsoft.Xaml.Behaviors.Uwp.Managed">
<Version>2.0.1</Version>
@@ -374,8 +376,17 @@
<PackageReference Include="Newtonsoft.Json">
<Version>12.0.3</Version>
</PackageReference>
<PackageReference Include="System.IO.FileSystem.Primitives">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Runtime.Handles">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Text.Encoding.Extensions">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="Win2D.uwp">
<Version>1.24.0</Version>
<Version>1.25.0</Version>
</PackageReference>
</ItemGroup>
<ItemGroup>
@@ -416,9 +427,6 @@
<ItemGroup>
<PRIResource Include="Strings\he\Resources.resw" />
</ItemGroup>
<ItemGroup>
<PRIResource Include="Strings\az\Resources.resw" />
</ItemGroup>
<ItemGroup>
<PRIResource Include="Strings\ja\Resources.resw" />
</ItemGroup>
@@ -437,6 +445,25 @@
<ItemGroup>
<PRIResource Include="Strings\zh-Hans\Resources.resw" />
</ItemGroup>
<ItemGroup>
<PRIResource Include="Strings\fa\Resources.resw" />
</ItemGroup>
<ItemGroup>
<PRIResource Include="Strings\hu\Resources.resw" />
</ItemGroup>
<ItemGroup>
<PRIResource Include="Strings\tr\Resources.resw" />
</ItemGroup>
<ItemGroup>
<PRIResource Include="Strings\hr\Resources.resw" />
</ItemGroup>
<ItemGroup>
<PRIResource Include="Strings\sl\Resources.resw" />
</ItemGroup>
<ItemGroup>
<PRIResource Include="Strings\az-Latn\Resources.resw" />
</ItemGroup>
<ItemGroup />
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' ">
<VisualStudioVersion>14.0</VisualStudioVersion>
</PropertyGroup>
@@ -1,4 +1,5 @@
using System.Reflection;
using System.Resources;
using System.Reflection;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
@@ -25,4 +26,5 @@ using System.Runtime.InteropServices;
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: ComVisible(false)]
[assembly: ComVisible(false)]
[assembly: NeutralResourcesLanguage("en-US")]
@@ -1,13 +0,0 @@
using System;
using Windows.System;
using FluentTerminal.Models.Enums;
namespace FluentTerminal.App.Services
{
public class AcceleratorKeyValidator : IAcceleratorKeyValidator
{
public bool Valid(int key) => Enum.IsDefined(typeof(VirtualKey), key);
public bool Valid(ExtendedVirtualKey key) => Valid((int) key);
}
}
@@ -12,13 +12,17 @@ namespace FluentTerminal.App.Services
[""] = "System default",
["ar"] = "العربية",
["ar-IQ"] = "اللهجة العراقية",
["az"] = "azərbaycan dili",
["az-Latn"] = "azərbaycan dili",
["de"] = "Deutsch",
["en"] = "English",
["eo"] = "Esperanto",
["es"] = "Español",
["fa"] = "فارسی",
["fr"] = "Français",
["he"] = "עברית",
["hi"] = "हिन्दुस्तानी",
["hr"] = "Hrvatski",
["hu"] = "magyar",
["id"] = "Bahasa Indonesia",
["it"] = "Italiano",
["ja"] = "日本語",
@@ -28,9 +32,12 @@ namespace FluentTerminal.App.Services
["pt-BR"] = "Português-Brasil",
["ro"] = "Română",
["ru"] = "Pусский",
["sl"] = "Slovenščina",
["tr"] = "Türkçe",
["ug-Arab"] = "ئۇيغۇر تىلى",
["uk"] = "Українська",
["zh-Hans"] = "繁體中文",
["zh-Hant"] = "简体中文"
["zh-Hans"] = "简体中文",
["zh-Hant"] = "繁體中文"
};
public IEnumerable<string> Languages => _languages.Values;
@@ -1052,4 +1052,13 @@
<data name="SessionDisconnected.Text" xml:space="preserve">
<value>Session disconnected.</value>
</data>
<data name="Command.IncreaseFontSize" xml:space="preserve">
<value>Increase font size</value>
</data>
<data name="Command.DecreaseFontSize" xml:space="preserve">
<value>Decrease font size</value>
</data>
<data name="Command.ResetFontSize" xml:space="preserve">
<value>Reset font size</value>
</data>
</root>
@@ -1095,4 +1095,13 @@ Type &quot;أخرج من منفذ الأوامر &quot; then type the name in th
<data name="SessionDisconnected.Text" xml:space="preserve">
<value>Session disconnected.</value>
</data>
<data name="Command.IncreaseFontSize" xml:space="preserve">
<value>Increase font size</value>
</data>
<data name="Command.DecreaseFontSize" xml:space="preserve">
<value>Decrease font size</value>
</data>
<data name="Command.ResetFontSize" xml:space="preserve">
<value>Reset font size</value>
</data>
</root>
@@ -1052,4 +1052,13 @@
<data name="SessionDisconnected.Text" xml:space="preserve">
<value>Session disconnected.</value>
</data>
<data name="Command.IncreaseFontSize" xml:space="preserve">
<value>Increase font size</value>
</data>
<data name="Command.DecreaseFontSize" xml:space="preserve">
<value>Decrease font size</value>
</data>
<data name="Command.ResetFontSize" xml:space="preserve">
<value>Reset font size</value>
</data>
</root>
@@ -1085,4 +1085,13 @@ Fuzzy</comment>
<data name="SessionDisconnected.Text" xml:space="preserve">
<value>Sitzung wurde getrennt.</value>
</data>
<data name="Command.IncreaseFontSize" xml:space="preserve">
<value>Schriftgröße vergrößern</value>
</data>
<data name="Command.DecreaseFontSize" xml:space="preserve">
<value>Schriftgröße verkleinern</value>
</data>
<data name="Command.ResetFontSize" xml:space="preserve">
<value>Schriftgröße zurücksetzen</value>
</data>
</root>
@@ -1117,4 +1117,13 @@ Fuzzy</comment>
<data name="SessionDisconnected.Text" xml:space="preserve">
<value>Session disconnected.</value>
</data>
<data name="Command.IncreaseFontSize" xml:space="preserve">
<value>Increase font size</value>
</data>
<data name="Command.DecreaseFontSize" xml:space="preserve">
<value>Decrease font size</value>
</data>
<data name="Command.ResetFontSize" xml:space="preserve">
<value>Reset font size</value>
</data>
</root>
File diff suppressed because it is too large. Load diff
+11 -2
View File
@@ -1068,9 +1068,18 @@ Fuzzy</comment>
<value>Usar búfer inteligente</value>
</data>
<data name="RestartSession.Content" xml:space="preserve">
<value>Restart</value>
<value>Reiniciar sesión</value>
</data>
<data name="SessionDisconnected.Text" xml:space="preserve">
<value>Session disconnected.</value>
<value>Sesión finalizada.</value>
</data>
<data name="Command.IncreaseFontSize" xml:space="preserve">
<value>Increase font size</value>
</data>
<data name="Command.DecreaseFontSize" xml:space="preserve">
<value>Decrease font size</value>
</data>
<data name="Command.ResetFontSize" xml:space="preserve">
<value>Reset font size</value>
</data>
</root>
File diff suppressed because it is too large. Load diff
+110 -100
View File
@@ -123,7 +123,7 @@
Fuzzy</comment>
</data>
<data name="Background.Content" xml:space="preserve">
<value>Fond</value>
<value>Arrière-plan</value>
<comment>GeneralSettings.xaml</comment>
</data>
<data name="TabTheme.Blue" xml:space="preserve">
@@ -177,11 +177,11 @@ Fuzzy</comment>
Fuzzy</comment>
</data>
<data name="IndicatorOutput.Header" xml:space="preserve">
<value>Afficher l&apos;indicateur de nouvelle sortie sur les onglets en arrière-plan</value>
<value>Afficher l&apos;indicateur de nouvelle sortie sur les onglets inactifs</value>
<comment>GeneralSettings.xaml</comment>
</data>
<data name="NeedRelaunch.Text" xml:space="preserve">
<value>Redémarrage de l&apos;application requis pour appliquer le réglage</value>
<value>Relancez l&apos;application pour appliquer ce réglage</value>
<comment>GeneralSettings.xaml</comment>
</data>
<data name="NewTab.Text" xml:space="preserve">
@@ -202,7 +202,7 @@ Fuzzy</comment>
<comment>GeneralSettings.xaml</comment>
</data>
<data name="OpenNewTerminalAs.Text" xml:space="preserve">
<value>Ouvrir de nouveaux terminaux en tant que</value>
<value>Ouvrir les nouveaux terminaux en tant que</value>
<comment>GeneralSettings.xaml</comment>
</data>
<data name="TabTheme.Orange" xml:space="preserve">
@@ -246,7 +246,7 @@ Fuzzy</comment>
<comment>GeneralSettings.xaml</comment>
</data>
<data name="TabsPostion.Text" xml:space="preserve">
<value>Afficher les onglets sur</value>
<value>Disposition des onglets</value>
<comment>GeneralSettings.xaml</comment>
</data>
<data name="TabTheme.Teal" xml:space="preserve">
@@ -255,11 +255,11 @@ Fuzzy</comment>
Fuzzy</comment>
</data>
<data name="TP_Bottom.Content" xml:space="preserve">
<value>Bas</value>
<value>En bas</value>
<comment>GeneralSettings.xaml</comment>
</data>
<data name="TP_Top.Content" xml:space="preserve">
<value>Haut</value>
<value>En haut</value>
<comment>GeneralSettings.xaml</comment>
</data>
<data name="Underline.Content" xml:space="preserve">
@@ -267,11 +267,11 @@ Fuzzy</comment>
<comment>GeneralSettings.xaml</comment>
</data>
<data name="UnderlineTab.Header" xml:space="preserve">
<value>Souligner l&apos;onglet sélectionné</value>
<value>Souligner l&apos;onglet actif</value>
<comment>GeneralSettings.xaml</comment>
</data>
<data name="Setting_About.Content" xml:space="preserve">
<value>A propos</value>
<value>À propos</value>
<comment>SettingsPage.xaml</comment>
</data>
<data name="Setting_General.Content" xml:space="preserve">
@@ -287,7 +287,7 @@ Fuzzy</comment>
<comment>SettingsPage.xaml</comment>
</data>
<data name="Setting_Profiles.Content" xml:space="preserve">
<value>Profiles</value>
<value>Profils</value>
<comment>SettingsPage.xaml</comment>
</data>
<data name="Setting_Terminal.Content" xml:space="preserve">
@@ -308,15 +308,15 @@ Fuzzy</comment>
<comment>ShellProfileSettings.xaml</comment>
</data>
<data name="BackgroundOpacity.Header" xml:space="preserve">
<value>Opacité du fond</value>
<value>Opacité de l&apos;arrière-plan</value>
<comment>TerminalSettings.xaml</comment>
</data>
<data name="BlinkingCursor.Header" xml:space="preserve">
<value>Clignotement du curseur</value>
<value>Curseur clignotant</value>
<comment>TerminalSettings.xaml</comment>
</data>
<data name="BoldText.Header" xml:space="preserve">
<value>Texte en gras</value>
<value>Texte gras</value>
<comment>TerminalSettings.xaml</comment>
</data>
<data name="CancelAppBarButton.Label" xml:space="preserve">
@@ -324,7 +324,7 @@ Fuzzy</comment>
<comment>ShellProfileSettings.xaml</comment>
</data>
<data name="CheckingUpdates.Text" xml:space="preserve">
<value>Vérification des mises à jour ...</value>
<value>Vérification des mises à jour...</value>
<comment>About.xaml</comment>
</data>
<data name="CheckUpdates.Label" xml:space="preserve">
@@ -332,7 +332,7 @@ Fuzzy</comment>
<comment>About.xaml</comment>
</data>
<data name="ClickColorEdit.Text" xml:space="preserve">
<value>Cliquez sur une couleur pour éditer</value>
<value>Cliquez sur une couleur pour l&apos;éditer</value>
<comment>ThemeSettings.xaml</comment>
</data>
<data name="CloneAppBarButton.Label" xml:space="preserve">
@@ -348,11 +348,11 @@ Fuzzy</comment>
<comment>TerminalSettings.xaml</comment>
</data>
<data name="CopyOnSelect.Header" xml:space="preserve">
<value>Copier sur sélectionner</value>
<value>Copie automatique</value>
<comment>MouseSettings.xaml</comment>
</data>
<data name="CreateProfile.Text" xml:space="preserve">
<value>Créer un nouveau</value>
<value>Créer un profil</value>
<comment>ShellProfileSettings.xaml</comment>
</data>
<data name="CurrentVersion.Text" xml:space="preserve">
@@ -385,7 +385,7 @@ Fuzzy</comment>
Fuzzy</comment>
</data>
<data name="EditAppBarButton.Label" xml:space="preserve">
<value>Editer</value>
<value>Éditer</value>
<comment>ShellProfileSettings.xaml</comment>
</data>
<data name="ExportAppBarButton.Label" xml:space="preserve">
@@ -393,7 +393,7 @@ Fuzzy</comment>
<comment>ThemeSettings.xaml</comment>
</data>
<data name="FontFamily.Header" xml:space="preserve">
<value>Famille de polices</value>
<value>Famille de police</value>
<comment>TerminalSettings.xaml</comment>
</data>
<data name="FontSize.Header" xml:space="preserve">
@@ -421,15 +421,15 @@ Fuzzy</comment>
<comment>About.xaml</comment>
</data>
<data name="LineEndingMode.Header" xml:space="preserve">
<value>Mode de traduction de fin de ligne</value>
<value>Conversion de fin de ligne</value>
<comment>ShellProfileSettings.xaml</comment>
</data>
<data name="LineEndingModeOnPaste.Text" xml:space="preserve">
<value>Mode de traduction de fin de ligne sur coller:</value>
<value>Conversion de fin des lignes collées:</value>
<comment>ShellProfileSettings.xaml</comment>
</data>
<data name="MiddleButtonAction.Text" xml:space="preserve">
<value>Action du bouton du milieu</value>
<value>Action du bouton central</value>
<comment>MouseSettings.xaml</comment>
</data>
<data name="Mouse.Text" xml:space="preserve">
@@ -450,11 +450,11 @@ Fuzzy</comment>
<comment>MouseSettings.xaml</comment>
</data>
<data name="NewTheme.Text" xml:space="preserve">
<value>Créer un nouveau</value>
<value>Créer un thème</value>
<comment>ThemeSettings.xaml</comment>
</data>
<data name="Padding.Header" xml:space="preserve">
<value>Padding</value>
<value>Bords</value>
<comment>TerminalSettings.xaml</comment>
</data>
<data name="ProfileName.Header" xml:space="preserve">
@@ -462,7 +462,7 @@ Fuzzy</comment>
<comment>ShellProfileSettings.xaml</comment>
</data>
<data name="Profiles.Text" xml:space="preserve">
<value>Profiles</value>
<value>Profils</value>
<comment>ShellProfileSettings.xaml</comment>
</data>
<data name="ProfileTheme.Header" xml:space="preserve">
@@ -478,7 +478,7 @@ Fuzzy</comment>
<comment>MouseSettings.xaml</comment>
</data>
<data name="SaveAppBarButton.Label" xml:space="preserve">
<value>Sauvgarder</value>
<value>Sauvegarder</value>
<comment>ShellProfileSettings.xaml</comment>
</data>
<data name="ScrollbackLimit.Header" xml:space="preserve">
@@ -486,15 +486,15 @@ Fuzzy</comment>
<comment>TerminalSettings.xaml</comment>
</data>
<data name="ScrollBarAuto.Content" xml:space="preserve">
<value>Masquage automatique</value>
<value>Masquer automatiquement</value>
<comment>TerminalSettings.xaml</comment>
</data>
<data name="ScrollBarHidden.Content" xml:space="preserve">
<value>Masqué</value>
<value>Masquée</value>
<comment>TerminalSettings.xaml</comment>
</data>
<data name="ScrollbarStyle.Text" xml:space="preserve">
<value>Style de barre de défilement</value>
<value>Barre de défilement</value>
<comment>TerminalSettings.xaml</comment>
</data>
<data name="ScrollBarVisible.Content" xml:space="preserve">
@@ -502,7 +502,7 @@ Fuzzy</comment>
<comment>TerminalSettings.xaml</comment>
</data>
<data name="SetActiveAppBarButton.Label" xml:space="preserve">
<value>Définir actif</value>
<value>Définir comme actif</value>
<comment>ThemeSettings.xaml</comment>
</data>
<data name="SetDefaultAppBarButton.Label" xml:space="preserve">
@@ -510,11 +510,11 @@ Fuzzy</comment>
<comment>ShellProfileSettings.xaml</comment>
</data>
<data name="ShellLocation.Header" xml:space="preserve">
<value>Emplacement exécutable du shell</value>
<value>Emplacement de l&apos;exécutable du shell</value>
<comment>ShellProfileSettings.xaml</comment>
</data>
<data name="TabColor.Header" xml:space="preserve">
<value>Couleur d&apos;onglet</value>
<value>Couleur de l&apos;onglet</value>
<comment>ShellProfileSettings.xaml</comment>
</data>
<data name="Terminal.Text" xml:space="preserve">
@@ -549,51 +549,51 @@ Fuzzy</comment>
Fuzzy</comment>
</data>
<data name="WorkingDir.Header" xml:space="preserve">
<value>Directeur de travail</value>
<value>Dossier de départ</value>
<comment>ShellProfileSettings.xaml</comment>
</data>
<data name="ConfirmCloseTab" xml:space="preserve">
<value>Êtes-vous sûr de vouloir fermer &quot;{0}&quot; onglets?</value>
<value>Êtes-vous sûr(e) de vouloir fermer &quot;{0}&quot; onglets ?</value>
<comment>ViewModel</comment>
</data>
<data name="ConfirmCloseWindow" xml:space="preserve">
<value>Are you sure you want to close this window?</value>
<value>Voulez-vous fermer cette fenêtre ?</value>
<comment>ViewModel</comment>
</data>
<data name="ConfirmDeleteKeybindings" xml:space="preserve">
<value>Are you sure you want to delete this keybinding?</value>
<value>Voulez-vous supprimer ce raccourci ?</value>
<comment>ViewModel</comment>
</data>
<data name="ConfirmDeleteTheme" xml:space="preserve">
<value>Êtes-vous sûr de vouloir supprimer ce thème?</value>
<value>Voulez-vous supprimer ce thème ?</value>
<comment>ViewModel</comment>
</data>
<data name="ConfirmDiscardChanges" xml:space="preserve">
<value>Êtes-vous sûr de vouloir annuler toutes les modifications?</value>
<value>Voulez-vous annuler toutes les modifications ?</value>
<comment>ViewModel</comment>
</data>
<data name="ConfirmRestoreGeneralSettings" xml:space="preserve">
<value>Êtes-vous sûr de vouloir restaurer les paramètres généraux?</value>
<value>Voulez-vous restaurer les paramètres généraux ?</value>
<comment>ViewModel</comment>
</data>
<data name="ConfirmRestoreKeybindings" xml:space="preserve">
<value>Êtes-vous sûr de vouloir restaurer les raccourcis clavier par défaut?</value>
<value>Voulez-vous restaurer les raccourcis clavier par défaut ?</value>
<comment>ViewModel</comment>
</data>
<data name="ConfirmRestoreMouseSettings" xml:space="preserve">
<value>Êtes-vous sûr de vouloir restaurer les paramètres de la souris?</value>
<value>Voulez-vous restaurer les paramètres de la souris ?</value>
<comment>ViewModel</comment>
</data>
<data name="ConfirmRestoreProfile" xml:space="preserve">
<value>Êtes-vous sûr de vouloir restaurer ce profil?</value>
<value>Voulez-vous restaurer ce profil ?</value>
<comment>ViewModel</comment>
</data>
<data name="ConfirmRestoreTerminalOptions" xml:space="preserve">
<value>Êtes-vous sûr de vouloir restaurer les options du terminal par défaut?</value>
<value>Voulez-vous restaurer les options du terminal par défaut ?</value>
<comment>ViewModel</comment>
</data>
<data name="DisabledByPolicy" xml:space="preserve">
<value>Désactivé par politique.</value>
<value>Désactivé par Stratégie de Goupe.</value>
<comment>ViewModel</comment>
</data>
<data name="DisabledByUser" xml:space="preserve">
@@ -601,7 +601,7 @@ Fuzzy</comment>
<comment>ViewModel</comment>
</data>
<data name="EditTitleString" xml:space="preserve">
<value>Editer le titre</value>
<value>Éditer le titre</value>
<comment>ViewModel</comment>
</data>
<data name="Error" xml:space="preserve">
@@ -613,7 +613,7 @@ Fuzzy</comment>
<comment>ViewModel</comment>
</data>
<data name="ImportThemeFailed" xml:space="preserve">
<value>L&apos;importation du thème a échouer</value>
<value>L&apos;importation du thème a échoué</value>
<comment>ViewModel</comment>
</data>
<data name="NoSuitableParserFound" xml:space="preserve">
@@ -628,7 +628,7 @@ Fuzzy</comment>
<value>Annuler</value>
</data>
<data name="KeybindingDialogTitle.Text" xml:space="preserve">
<value>Entrez votre raccourcis maintenant</value>
<value>Entrez votre raccourci maintenant</value>
</data>
<data name="OK" xml:space="preserve">
<value>OK</value>
@@ -638,7 +638,7 @@ Fuzzy</comment>
<comment>Fuzzy</comment>
</data>
<data name="TextCopied" xml:space="preserve">
<value>Texte copier</value>
<value>Texte copié</value>
<comment>ViewModel</comment>
</data>
<data name="AddAppBarButton.Label" xml:space="preserve">
@@ -670,7 +670,7 @@ Fuzzy</comment>
Fuzzy</comment>
</data>
<data name="KeyBindingsViewEdit.Content" xml:space="preserve">
<value>Editer</value>
<value>Éditer</value>
<comment>KeyBindingsView.xaml</comment>
</data>
<data name="Command.NewTab" xml:space="preserve">
@@ -699,12 +699,12 @@ Fuzzy</comment>
Fuzzy</comment>
</data>
<data name="Command.Search" xml:space="preserve">
<value>Chercher</value>
<value>Recherche</value>
<comment>Command
Fuzzy</comment>
</data>
<data name="Command.SelectAll" xml:space="preserve">
<value>Selectionner tout</value>
<value>Sélectionner tout</value>
<comment>Command
Fuzzy</comment>
</data>
@@ -759,12 +759,12 @@ Fuzzy</comment>
Fuzzy</comment>
</data>
<data name="Command.ToggleFullScreen" xml:space="preserve">
<value>Basculer en plein écran</value>
<value>Plein écran</value>
<comment>Command
Fuzzy</comment>
</data>
<data name="Command.ToggleWindow" xml:space="preserve">
<value>Basculer la fenêtre</value>
<value>Afficher/Masquer la fenêtre</value>
<comment>Command
Fuzzy</comment>
</data>
@@ -773,11 +773,11 @@ Fuzzy</comment>
<comment>Fuzzy</comment>
</data>
<data name="Command.NewSshTab" xml:space="preserve">
<value>Nouvel SSH onglet</value>
<value>Nouvel onglet SSH</value>
<comment>Fuzzy</comment>
</data>
<data name="SshInfoDialog.Title" xml:space="preserve">
<value>SSH Informations</value>
<value>Informations SSH</value>
</data>
<data name="UserTextBox.PlaceholderText" xml:space="preserve">
<value>utilisateur</value>
@@ -797,7 +797,7 @@ Fuzzy</comment>
<value>Naviguer</value>
</data>
<data name="UseMoshCheckBox.Content" xml:space="preserve">
<value>Utilisez Mosh</value>
<value>Utiliser Mosh</value>
</data>
<data name="AdvancedExpander.Header" xml:space="preserve">
<value>Avancé</value>
@@ -825,7 +825,7 @@ Fuzzy</comment>
<comment>Fuzzy</comment>
</data>
<data name="SshConnectionInfoValidationResult.UsernameEmpty" xml:space="preserve">
<value>Le nom d&apos;utilisateur ne peut pas être vide.</value>
<value>Le nom d&apos;utilisateur ne peut être vide.</value>
</data>
<data name="SshConnectionInfoValidationResult.HostEmpty" xml:space="preserve">
<value>L&apos;hôte ne peut être vide.</value>
@@ -849,7 +849,7 @@ Fuzzy</comment>
<value>Non</value>
</data>
<data name="Language.Header" xml:space="preserve">
<value>Language</value>
<value>Langage</value>
</data>
<data name="None.Text" xml:space="preserve">
<value>Aucun</value>
@@ -861,7 +861,7 @@ Fuzzy</comment>
<value>Sortie avec erreur</value>
</data>
<data name="ConfirmDeleteProfile" xml:space="preserve">
<value>Êtes-vous sûr de vouloir supprimer ce profil?</value>
<value>Voulez-vous supprimer ce profil ?</value>
</data>
<data name="Command.NewSshWindow" xml:space="preserve">
<value>Nouvelle fenêtre SSH</value>
@@ -875,7 +875,7 @@ Fuzzy</comment>
<comment>Fuzzy</comment>
</data>
<data name="UseConPty" xml:space="preserve">
<value>Utilisez ConPty</value>
<value>Utiliser ConPty</value>
<comment>Fuzzy</comment>
</data>
<data name="Username.Header" xml:space="preserve">
@@ -887,7 +887,7 @@ Fuzzy</comment>
<comment>Fuzzy</comment>
</data>
<data name="MoshPortTo.Header" xml:space="preserve">
<value>au portt</value>
<value>au port</value>
<comment>Fuzzy</comment>
</data>
<data name="MoshPortRange.Text" xml:space="preserve">
@@ -906,28 +906,28 @@ Fuzzy</comment>
<value>Le fichier d&apos;identification n&apos;existe pas</value>
</data>
<data name="AutoFallbackToWindowsUsername.Header" xml:space="preserve">
<value>Utilisez le nom d&apos;utilisateur Windows lors de l&apos;ouverture d&apos;URL SSH qui don&apos;t spécifier un</value>
<value>Utiliser le nom d&apos;utilisateur Windows pour les connexions SSH qui n&apos;en spécifient aucun</value>
</data>
<data name="UseMoshByDefault.Header" xml:space="preserve">
<value>Mosh par défaut pour les connexions SSH</value>
</data>
<data name="RTrimCopiedLines.Header" xml:space="preserve">
<value>Couper les lignes copiées</value>
<value>Rogner les lignes copiées</value>
</data>
<data name="QuickSshDefault.Header" xml:space="preserve">
<value>Utiliser SSH rapide par défaut</value>
</data>
<data name="InvalidCommand" xml:space="preserve">
<value>Commande non valide.</value>
<value>Commande invalide.</value>
</data>
<data name="LocationCantBeEmpty" xml:space="preserve">
<value>L&apos;emplacement ne peut pas être vide.</value>
</data>
<data name="MuteTerminalBeeps.Header" xml:space="preserve">
<value>Mutter les bips du terminal</value>
<value>Désactiver les bips du terminal</value>
</data>
<data name="CommandTextBox.PlaceholderText" xml:space="preserve">
<value>Entrez une commande (e.g. &apos;ssh username@host&apos;)</value>
<value>Entrez une commande (ex: &apos;ssh username@host&apos;)</value>
</data>
<data name="CommandLine.Header" xml:space="preserve">
<value>Commande</value>
@@ -936,17 +936,17 @@ Fuzzy</comment>
<value>Commande non supportée:</value>
</data>
<data name="CommandArgumentsMandatory" xml:space="preserve">
<value>Les arguments de commande sont manquants.</value>
<value>Les arguments de la commande sont manquants.</value>
</data>
<data name="QuickCommandDialog.Title" xml:space="preserve">
<value>Démarrage rapide</value>
<value>Lancement rapide</value>
<comment>Fuzzy</comment>
</data>
<data name="Command.NewCustomCommandTab" xml:space="preserve">
<value>Nouvel onglet de lancement rapide</value>
<value>Lancement rapide (onglet)</value>
</data>
<data name="Command.NewCustomCommandWindow" xml:space="preserve">
<value>Nouvelle fenêtre de lancement rapide</value>
<value>Lancement rapide (fenêtre)</value>
</data>
<data name="NewQuickTab.Text" xml:space="preserve">
<value>Nouvel onglet rapide</value>
@@ -958,7 +958,7 @@ Fuzzy</comment>
<value>Lien invalide.</value>
</data>
<data name="DropTabHere" xml:space="preserve">
<value>Drop tab here</value>
<value>Déposez l&apos;onglet ici</value>
</data>
<data name="CloseLeft.Text" xml:space="preserve">
<value>Fermer les onglets à gauche</value>
@@ -970,7 +970,7 @@ Fuzzy</comment>
<value>Fermer les onglets à droite</value>
</data>
<data name="Command.DuplicateTab" xml:space="preserve">
<value>Onglet dupliquer</value>
<value>Dupliquer l&apos;onglet</value>
<comment>Fuzzy</comment>
</data>
<data name="Duplicate.Text" xml:space="preserve">
@@ -989,16 +989,16 @@ Fuzzy</comment>
<value>Fermer le panneau de recherche</value>
</data>
<data name="FindNext.ToolTipService.ToolTip" xml:space="preserve">
<value>Trouver le suivant</value>
<value>Résultat suivant</value>
</data>
<data name="FindPrevious.ToolTipService.ToolTip" xml:space="preserve">
<value>Trouver le précédent</value>
<value>Résultat précédent</value>
</data>
<data name="SearchTextBox.PlaceholderText" xml:space="preserve">
<value>Entrez le terme de recherche</value>
</data>
<data name="Search.Text" xml:space="preserve">
<value>Chercher</value>
<value>Recherche</value>
</data>
<data name="PrintableOutputOnly.Content" xml:space="preserve">
<value>Sortie imprimable seulement</value>
@@ -1010,79 +1010,80 @@ Fuzzy</comment>
<value>Caractères séparateurs de mots</value>
</data>
<data name="Recent.Text" xml:space="preserve">
<value>Récent</value>
<value>Récents</value>
</data>
<data name="NewTab_Description" xml:space="preserve">
<value>Ouvrir le profile par défaut dans un nouvel onglet.</value>
<value>Ouvre le profil par défaut dans un nouvel onglet.</value>
</data>
<data name="NewSshTab_Description" xml:space="preserve">
<value>Ouvrir une session SSH ou Msh dans un nouvel onglet.</value>
<value>Ouvre une session SSH ou Mosh dans un nouvel onglet.</value>
</data>
<data name="NewQuickTab_Description" xml:space="preserve">
<value>Ouvrir le dialogue &quot;Lancement rapide&quot; et commencer une session dans un nouvel onglet.</value>
<value>Ouvre le dialogue &quot;Lancement rapide&quot; et démarre une session dans un nouvel onglet.</value>
</data>
<data name="Settings_Description" xml:space="preserve">
<value>Ouvrir les paramètres.</value>
<value>Ouvre les paramètres.</value>
</data>
<data name="About_Description" xml:space="preserve">
<value>Informations sur l&apos;application.</value>
</data>
<data name="Recent_Description" xml:space="preserve">
<value>Session récentes.</value>
<value>Sessions récentes.</value>
</data>
<data name="MenuItem_DefaultProfile_Description" xml:space="preserve">
<value>Commencer une nouvelle session du profil par défaut.</value>
<value>Démarre une nouvelle session de terminal du profil par défaut.</value>
</data>
<data name="MenuItem_Remote_Text" xml:space="preserve">
<value>Connexion distante...</value>
<value>Connexion à distance...</value>
</data>
<data name="MenuItem_Remote_Description" xml:space="preserve">
<value>Ouvrir un dialogue pour une nouvelle session SSH ou Mosh.</value>
<value>Ouvre un dialogue permettant de lancer une nouvelle session SSH ou Mosh.</value>
</data>
<data name="MenuItem_QuickLaunch_Text" xml:space="preserve">
<value>Lancement rapide...</value>
</data>
<data name="MenuItem_QuickLaunch_Description" xml:space="preserve">
<value>Ouvrir un dialogue &quot;Lancement rapide&quot; pour un nouvelle session.</value>
<value>Ouvrir un dialogue &quot;Lancement rapide&quot; pour une nouvelle session de terminal.</value>
</data>
<data name="MenuItem_NewWindow_Text" xml:space="preserve">
<value>Nouvelle fenêtre.</value>
<value>Nouvelle fenêtre</value>
</data>
<data name="MenuItem_NewTab_Text" xml:space="preserve">
<value>Nouvel onglet.</value>
<value>Nouvel onglet</value>
<comment>@William Why adding dots everywhere? These are not sentences</comment>
</data>
<data name="MenuItem_NewTab_Description" xml:space="preserve">
<value>Lancer une session dans un nouvel onglet.</value>
<value>Lance une session dans un nouvel onglet.</value>
</data>
<data name="MenuItem_NewWindow_Description" xml:space="preserve">
<value>Lancer une session dans une nouvelle fenêtre.</value>
<value>Lance une session dans une nouvelle fenêtre.</value>
</data>
<data name="AppMenuType.Text" xml:space="preserve">
<value>Application menu type</value>
<value>Style du menu d&apos;application</value>
</data>
<data name="AppMenuType_Flat.Content" xml:space="preserve">
<value>Plat, honorant le paramètre &quot;Ouvrir de nouveaux terminaux comme&quot;</value>
<value>Plat, honorant le paramètre &quot;Ouvrir les nouveaux terminaux en tant que&quot;</value>
</data>
<data name="AppMenuType_Cascading.Content" xml:space="preserve">
<value>&quot;Nouvel onglet&quot; / &quot;Nouvelle fenêtre&quot; en cascade.</value>
</data>
<data name="Quit.Text" xml:space="preserve">
<value>Quitter.</value>
<value>Quitter</value>
</data>
<data name="Quit.Description" xml:space="preserve">
<value>Quitter Fluent Terminal</value>
</data>
<data name="EnabledByPolicy" xml:space="preserve">
<value>Autorisé par la politique.</value>
<value>Autorisé par Stratégie de Goupe.</value>
</data>
<data name="BackgroundImage.Content" xml:space="preserve">
<value>Image de fond</value>
<value>Image d&apos;arrière-plan</value>
</data>
<data name="AcrylicBackground.Header" xml:space="preserve">
<value>Utilise un fond acrylique.</value>
<value>Arrière-plan transparent</value>
</data>
<data name="ConfirmDeleteBackgroundImage" xml:space="preserve">
<value>Êtes vous sûr de vouloir supprimer cette image de fond ?</value>
<value>Voulez-vous supprimer cet arrière-plan ?</value>
</data>
<data name="Colors.Text" xml:space="preserve">
<value>Couleurs</value>
@@ -1100,18 +1101,27 @@ Fuzzy</comment>
<value>Mot entier</value>
</data>
<data name="SearchCaseSensitive.ToolTipService.ToolTip" xml:space="preserve">
<value>Sensible à la casse.</value>
<value>Sensible à la casse</value>
</data>
<data name="MouseCopySelectionOrPaste.Content" xml:space="preserve">
<value>Copier la sélection ou coller</value>
</data>
<data name="UseBuffer" xml:space="preserve">
<value>Use smart buffer</value>
<value>Utiliser le buffer intelligent</value>
</data>
<data name="RestartSession.Content" xml:space="preserve">
<value>Restart</value>
<value>Redémarrer</value>
</data>
<data name="SessionDisconnected.Text" xml:space="preserve">
<value>Session disconnected.</value>
<value>Session déconnectée.</value>
</data>
<data name="Command.IncreaseFontSize" xml:space="preserve">
<value>Increase font size</value>
</data>
<data name="Command.DecreaseFontSize" xml:space="preserve">
<value>Decrease font size</value>
</data>
<data name="Command.ResetFontSize" xml:space="preserve">
<value>Reset font size</value>
</data>
</root>
@@ -1061,4 +1061,13 @@ Fuzzy</comment>
<data name="SessionDisconnected.Text" xml:space="preserve">
<value>Session disconnected.</value>
</data>
<data name="Command.IncreaseFontSize" xml:space="preserve">
<value>Increase font size</value>
</data>
<data name="Command.DecreaseFontSize" xml:space="preserve">
<value>Decrease font size</value>
</data>
<data name="Command.ResetFontSize" xml:space="preserve">
<value>Reset font size</value>
</data>
</root>
@@ -1052,4 +1052,13 @@
<data name="SessionDisconnected.Text" xml:space="preserve">
<value>Session disconnected.</value>
</data>
<data name="Command.IncreaseFontSize" xml:space="preserve">
<value>Increase font size</value>
</data>
<data name="Command.DecreaseFontSize" xml:space="preserve">
<value>Decrease font size</value>
</data>
<data name="Command.ResetFontSize" xml:space="preserve">
<value>Reset font size</value>
</data>
</root>
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -1052,4 +1052,13 @@
<data name="SessionDisconnected.Text" xml:space="preserve">
<value>Session disconnected.</value>
</data>
<data name="Command.IncreaseFontSize" xml:space="preserve">
<value>Increase font size</value>
</data>
<data name="Command.DecreaseFontSize" xml:space="preserve">
<value>Decrease font size</value>
</data>
<data name="Command.ResetFontSize" xml:space="preserve">
<value>Reset font size</value>
</data>
</root>
+13 -7
View File
@@ -255,8 +255,7 @@
</data>
<data name="UnderlineTab.Header" xml:space="preserve">
<value>Sottolinea la scheda attiva</value>
<comment>GeneralSettings.xaml
Fuzzy</comment>
<comment>GeneralSettings.xaml</comment>
</data>
<data name="Setting_About.Content" xml:space="preserve">
<value>Informazioni su</value>
@@ -578,8 +577,7 @@ Fuzzy</comment>
</data>
<data name="DisabledByPolicy" xml:space="preserve">
<value>Disattivato da policy</value>
<comment>ViewModel
Fuzzy</comment>
<comment>ViewModel</comment>
</data>
<data name="DisabledByUser" xml:space="preserve">
<value>Disattivato dall&apos;utente. Riattiva Fluent Terminal nella scheda Avvio del Task Manager</value>
@@ -863,7 +861,6 @@ Fuzzy</comment>
</data>
<data name="QuickSshDefault.Header" xml:space="preserve">
<value>Usa Quick SSH come impostazione predefinita</value>
<comment>Fuzzy</comment>
</data>
<data name="InvalidCommand" xml:space="preserve">
<value>Comando non valido</value>
@@ -1059,9 +1056,18 @@ Fuzzy</comment>
<value>Usa smart buffer</value>
</data>
<data name="RestartSession.Content" xml:space="preserve">
<value>Restart</value>
<value>Riavvia</value>
</data>
<data name="SessionDisconnected.Text" xml:space="preserve">
<value>Session disconnected.</value>
<value>Sessione terminata.</value>
</data>
<data name="Command.IncreaseFontSize" xml:space="preserve">
<value>Increase font size</value>
</data>
<data name="Command.DecreaseFontSize" xml:space="preserve">
<value>Decrease font size</value>
</data>
<data name="Command.ResetFontSize" xml:space="preserve">
<value>Reset font size</value>
</data>
</root>
+22 -13
View File
@@ -1014,42 +1014,51 @@
<value>ポリシーによる許可</value>
</data>
<data name="BackgroundImage.Content" xml:space="preserve">
<value>Background image</value>
<value>背景画像</value>
</data>
<data name="AcrylicBackground.Header" xml:space="preserve">
<value>Use acrylic background</value>
<value>透過背景</value>
</data>
<data name="ConfirmDeleteBackgroundImage" xml:space="preserve">
<value>Are you sure you want to delete this background image?</value>
<value>この背景画像を削除してもよろしいですか?</value>
</data>
<data name="Colors.Text" xml:space="preserve">
<value>Colors</value>
<value>色</value>
</data>
<data name="BrightColors.Text" xml:space="preserve">
<value>Bright colors</value>
<value>明色</value>
</data>
<data name="CopyLink" xml:space="preserve">
<value>Copy link</value>
<value>リンクをコピー</value>
</data>
<data name="SearchWithRegex.ToolTipService.ToolTip" xml:space="preserve">
<value>Regex</value>
<value>正規表現</value>
</data>
<data name="SearchWholeWord.ToolTipService.ToolTip" xml:space="preserve">
<value>Whole word</value>
<value>単語単位</value>
</data>
<data name="SearchCaseSensitive.ToolTipService.ToolTip" xml:space="preserve">
<value>Case sensitive</value>
<value>大/小文字</value>
</data>
<data name="MouseCopySelectionOrPaste.Content" xml:space="preserve">
<value>Copy selection or paste</value>
<value>選択部分のコピーあるいは貼り付け</value>
</data>
<data name="UseBuffer" xml:space="preserve">
<value>Use smart buffer</value>
<value>スマートバッファを使用</value>
</data>
<data name="RestartSession.Content" xml:space="preserve">
<value>Restart</value>
<value>再起動</value>
</data>
<data name="SessionDisconnected.Text" xml:space="preserve">
<value>Session disconnected.</value>
<value>セッションが切断されました</value>
</data>
<data name="Command.IncreaseFontSize" xml:space="preserve">
<value>Increase font size</value>
</data>
<data name="Command.DecreaseFontSize" xml:space="preserve">
<value>Decrease font size</value>
</data>
<data name="Command.ResetFontSize" xml:space="preserve">
<value>Reset font size</value>
</data>
</root>
@@ -1061,4 +1061,13 @@ Fuzzy</comment>
<data name="SessionDisconnected.Text" xml:space="preserve">
<value>Session disconnected.</value>
</data>
<data name="Command.IncreaseFontSize" xml:space="preserve">
<value>Increase font size</value>
</data>
<data name="Command.DecreaseFontSize" xml:space="preserve">
<value>Decrease font size</value>
</data>
<data name="Command.ResetFontSize" xml:space="preserve">
<value>Reset font size</value>
</data>
</root>
+105 -96
View File
@@ -137,7 +137,7 @@ Fuzzy</comment>
Fuzzy</comment>
</data>
<data name="ConfirmWindowClosing.Header" xml:space="preserve">
<value>Vraag voor het sluiten van alle window&apos;s</value>
<value>Vraag voor het sluiten van alle vensters</value>
<comment>GeneralSettings.xaml
Fuzzy</comment>
</data>
@@ -151,7 +151,7 @@ Fuzzy</comment>
<comment>TabBar.xaml</comment>
</data>
<data name="ColorInactiveTabs.Text" xml:space="preserve">
<value>Kleuren in interactive tab&apos;s</value>
<value>Kleuren in interactieve tab&apos;s</value>
<comment>GeneralSettings.xaml</comment>
</data>
<data name="Command.Copy" xml:space="preserve">
@@ -160,11 +160,11 @@ Fuzzy</comment>
Fuzzy</comment>
</data>
<data name="CustomTitle.Header" xml:space="preserve">
<value>Laat de tab zijn title zien in de title balk</value>
<value>Toon de tab naam in de titelbalk</value>
<comment>GeneralSettings.xaml</comment>
</data>
<data name="EditTitle.Text" xml:space="preserve">
<value>Verander Title</value>
<value>Verander Titel</value>
<comment>TabBar.xaml</comment>
</data>
<data name="General.Text" xml:space="preserve">
@@ -181,7 +181,7 @@ Fuzzy</comment>
<comment>GeneralSettings.xaml</comment>
</data>
<data name="NeedRelaunch.Text" xml:space="preserve">
<value>herstart is nodig om de settings toe te passen</value>
<value>herstart is nodig om de instellingen toe te passen</value>
<comment>GeneralSettings.xaml</comment>
</data>
<data name="NewTab.Text" xml:space="preserve">
@@ -198,7 +198,7 @@ Fuzzy</comment>
<comment>GeneralSettings.xaml</comment>
</data>
<data name="ONTA_Windows.Content" xml:space="preserve">
<value>Window&apos;s</value>
<value>Vensters</value>
<comment>GeneralSettings.xaml</comment>
</data>
<data name="OpenNewTerminalAs.Text" xml:space="preserve">
@@ -234,7 +234,7 @@ Fuzzy</comment>
<comment>GeneralSettings.xaml</comment>
</data>
<data name="Setting" xml:space="preserve">
<value>Instellingen</value>
<value>Instelling</value>
<comment>SettingsPage.xaml.cs</comment>
</data>
<data name="Settings.Text" xml:space="preserve">
@@ -397,15 +397,15 @@ Fuzzy</comment>
<comment>TerminalSettings.xaml</comment>
</data>
<data name="FontSize.Header" xml:space="preserve">
<value>Letter grote</value>
<value>Letter grootte</value>
<comment>TerminalSettings.xaml</comment>
</data>
<data name="ImportTheme.Text" xml:space="preserve">
<value>Importerne</value>
<value>Importeren</value>
<comment>ThemeSettings.xaml</comment>
</data>
<data name="KeyboardShortcut.Header" xml:space="preserve">
<value>Keyboard shortcut</value>
<value>Sneltoets</value>
<comment>ShellProfileSettings.xaml</comment>
</data>
<data name="KeyboardShortcut1.Text" xml:space="preserve">
@@ -429,7 +429,7 @@ Fuzzy</comment>
<comment>ShellProfileSettings.xaml</comment>
</data>
<data name="MiddleButtonAction.Text" xml:space="preserve">
<value>Middle muisklik</value>
<value>Midden muisklik</value>
<comment>MouseSettings.xaml</comment>
</data>
<data name="Mouse.Text" xml:space="preserve">
@@ -454,7 +454,7 @@ Fuzzy</comment>
<comment>ThemeSettings.xaml</comment>
</data>
<data name="Padding.Header" xml:space="preserve">
<value>Padding</value>
<value>Vulling</value>
<comment>TerminalSettings.xaml</comment>
</data>
<data name="ProfileName.Header" xml:space="preserve">
@@ -466,7 +466,7 @@ Fuzzy</comment>
<comment>ShellProfileSettings.xaml</comment>
</data>
<data name="ProfileTheme.Header" xml:space="preserve">
<value>Theme</value>
<value>Thema</value>
<comment>ShellProfileSettings.xaml</comment>
</data>
<data name="ReleaseNotes.Text" xml:space="preserve">
@@ -482,7 +482,7 @@ Fuzzy</comment>
<comment>ShellProfileSettings.xaml</comment>
</data>
<data name="ScrollbackLimit.Header" xml:space="preserve">
<value>Terug scrollen liemiet</value>
<value>Terug scrollen limiet</value>
<comment>TerminalSettings.xaml</comment>
</data>
<data name="ScrollBarAuto.Content" xml:space="preserve">
@@ -494,7 +494,7 @@ Fuzzy</comment>
<comment>TerminalSettings.xaml</comment>
</data>
<data name="ScrollbarStyle.Text" xml:space="preserve">
<value>Scrollbar style</value>
<value>Scrollbar stijl</value>
<comment>TerminalSettings.xaml</comment>
</data>
<data name="ScrollBarVisible.Content" xml:space="preserve">
@@ -549,60 +549,60 @@ Fuzzy</comment>
Fuzzy</comment>
</data>
<data name="WorkingDir.Header" xml:space="preserve">
<value>Working directory</value>
<value>Werkmap</value>
<comment>ShellProfileSettings.xaml</comment>
</data>
<data name="ConfirmCloseTab" xml:space="preserve">
<value>Weet je het zeker dat je tab &quot;{0}&quot; wil sluiten?</value>
<value>Weet je zeker dat je tab &quot;{0}&quot; wilt sluiten?</value>
<comment>ViewModel
Fuzzy</comment>
</data>
<data name="ConfirmCloseWindow" xml:space="preserve">
<value>Weet je zeker dat je deze window wil sluiten?</value>
<value>Weet je zeker dat je dit venster wilt sluiten?</value>
<comment>ViewModel</comment>
</data>
<data name="ConfirmDeleteKeybindings" xml:space="preserve">
<value>Weet je zeker dat je deze keybinding wil verwijderen?</value>
<value>Weet je zeker dat je deze sneltoets wilt verwijderen?</value>
<comment>ViewModel</comment>
</data>
<data name="ConfirmDeleteTheme" xml:space="preserve">
<value>Weet je zeker dat je deze thema wil verwijderen?</value>
<value>Weet je zeker dat je dit thema wilt verwijderen?</value>
<comment>ViewModel</comment>
</data>
<data name="ConfirmDiscardChanges" xml:space="preserve">
<value>Weet je zeker dat je alle wijzigingen wil negeeren?</value>
<value>Weet je zeker dat je alle wijzigingen wilt negeren?</value>
<comment>ViewModel</comment>
</data>
<data name="ConfirmRestoreGeneralSettings" xml:space="preserve">
<value>Weet je zeker dat je de algemene instellingen wil terug zetten naar de standaard instellingen?</value>
<value>Weet je zeker dat je de algemene instellingen wilt terug zetten naar de standaard instellingen?</value>
<comment>ViewModel</comment>
</data>
<data name="ConfirmRestoreKeybindings" xml:space="preserve">
<value>Weet je zeker dat je de keybindings will terug zetten naar de standaard instellingen?</value>
<value>Weet je zeker dat je de keybindings wilt terug zetten naar de standaard instellingen?</value>
<comment>ViewModel</comment>
</data>
<data name="ConfirmRestoreMouseSettings" xml:space="preserve">
<value>Weet je zeker dat je de muis instellingen will terug zetten naar de standaard instellingen?</value>
<value>Weet je zeker dat je de muis instellingen wilt terug zetten naar de standaard instellingen?</value>
<comment>ViewModel</comment>
</data>
<data name="ConfirmRestoreProfile" xml:space="preserve">
<value>Weet je zeker dat je dit profiel wil herstellen?</value>
<value>Weet je zeker dat je dit profiel wilt herstellen?</value>
<comment>ViewModel</comment>
</data>
<data name="ConfirmRestoreTerminalOptions" xml:space="preserve">
<value>Weet je zeker dat je wil terug gaan naar de standaard terminal instellingen?</value>
<value>Weet je zeker dat je de standaard terminal instellingen wilt herstellen?</value>
<comment>ViewModel</comment>
</data>
<data name="DisabledByPolicy" xml:space="preserve">
<value>Uitgeschakeld door policy.</value>
<value>Uitgeschakeld door beleid.</value>
<comment>ViewModel</comment>
</data>
<data name="DisabledByUser" xml:space="preserve">
<value>Uit gezet door gebruiker. Activeer het opnieuw in de automaties starten tab in Taak Beheer.</value>
<value>Uitgezet door gebruiker. Activeer deze opnieuw in de automatisch starten tab in Taak Beheer.</value>
<comment>ViewModel</comment>
</data>
<data name="EditTitleString" xml:space="preserve">
<value>Verander Title</value>
<value>Verander Titel</value>
<comment>ViewModel</comment>
</data>
<data name="Error" xml:space="preserve">
@@ -610,11 +610,11 @@ Fuzzy</comment>
<comment>ViewModel</comment>
</data>
<data name="ErrorString1" xml:space="preserve">
<value>De actie kan niet worden voltooid door de volgende error:</value>
<value>De actie kan niet worden voltooid door de volgende fout:</value>
<comment>ViewModel</comment>
</data>
<data name="ImportThemeFailed" xml:space="preserve">
<value>Inporteren van theme mislukt</value>
<value>Inporteren van thema mislukt</value>
<comment>ViewModel</comment>
</data>
<data name="NoSuitableParserFound" xml:space="preserve">
@@ -629,10 +629,10 @@ Fuzzy</comment>
<value>Annuleren</value>
</data>
<data name="KeybindingDialogTitle.Text" xml:space="preserve">
<value>Voer de keybinding nu in</value>
<value>Voer de sneltoets nu in</value>
</data>
<data name="OK" xml:space="preserve">
<value>Oke</value>
<value>Oké</value>
</data>
<data name="ResetBtn.Content" xml:space="preserve">
<value>Reset</value>
@@ -647,7 +647,7 @@ Fuzzy</comment>
<comment>KeyBindingSettings.xaml</comment>
</data>
<data name="Command.ChangeTabTitle" xml:space="preserve">
<value>Verander tab title</value>
<value>Verander tab titel</value>
<comment>Command
Fuzzy</comment>
</data>
@@ -662,7 +662,7 @@ Fuzzy</comment>
Fuzzy</comment>
</data>
<data name="Keybindings.Text" xml:space="preserve">
<value>Keybindings</value>
<value>Sneltoetsen</value>
<comment>KeyBindingSettings.xaml</comment>
</data>
<data name="Delete.Content" xml:space="preserve">
@@ -680,7 +680,7 @@ Fuzzy</comment>
Fuzzy</comment>
</data>
<data name="Command.NewWindow" xml:space="preserve">
<value>Nieuwe window</value>
<value>Nieuw venster</value>
<comment>Command
Fuzzy</comment>
</data>
@@ -710,7 +710,7 @@ Fuzzy</comment>
Fuzzy</comment>
</data>
<data name="Command.ShowSettings" xml:space="preserve">
<value>Laat settings zien</value>
<value>Laat instellingen zien</value>
<comment>Command
Fuzzy</comment>
</data>
@@ -760,17 +760,17 @@ Fuzzy</comment>
Fuzzy</comment>
</data>
<data name="Command.ToggleFullScreen" xml:space="preserve">
<value>Schakel naar Fullscreen</value>
<value>Schakel naar volledig scherm</value>
<comment>Command
Fuzzy</comment>
</data>
<data name="Command.ToggleWindow" xml:space="preserve">
<value>Schakel naar window</value>
<value>Schakel naar venster</value>
<comment>Command
Fuzzy</comment>
</data>
<data name="NewSshTab.Text" xml:space="preserve">
<value>Nieuwe remote tab</value>
<value>Nieuwe externe tab</value>
<comment>Fuzzy</comment>
</data>
<data name="Command.NewSshTab" xml:space="preserve">
@@ -788,7 +788,7 @@ Fuzzy</comment>
<value>host</value>
</data>
<data name="PortTextBox.PlaceholderText" xml:space="preserve">
<value>port</value>
<value>poort</value>
</data>
<data name="IdentityFileTextBox.PlaceholderText" xml:space="preserve">
<value>Identiteit bestand pad</value>
@@ -801,20 +801,20 @@ Fuzzy</comment>
<value>Gebruik Mosh</value>
</data>
<data name="AdvancedExpander.Header" xml:space="preserve">
<value>Advanced</value>
<value>Geavanceerd</value>
</data>
<data name="MoshPorts.Text" xml:space="preserve">
<value>Mosh poorten:</value>
</data>
<data name="SaveShortcutButton.Content" xml:space="preserve">
<value>Shortcut opslaan</value>
<value>Sneltoets opslaan</value>
<comment>Fuzzy</comment>
</data>
<data name="NeedsToRestart.Text" xml:space="preserve">
<value>De applicatie moet herstarten om deze veranderingen in werking te stellen.</value>
</data>
<data name="InvalidInput" xml:space="preserve">
<value>Ongeldige Input</value>
<value>Ongeldige Invoer</value>
<comment>Fuzzy</comment>
</data>
<data name="PortCannotBeZero" xml:space="preserve">
@@ -822,7 +822,7 @@ Fuzzy</comment>
<comment>Fuzzy</comment>
</data>
<data name="UserAndHostMandatory" xml:space="preserve">
<value>Gebruiker en host azijn verplichte velden.</value>
<value>Gebruiker en host zijn verplichte velden.</value>
<comment>Fuzzy</comment>
</data>
<data name="SshConnectionInfoValidationResult.UsernameEmpty" xml:space="preserve">
@@ -833,7 +833,7 @@ Fuzzy</comment>
<comment>Fuzzy</comment>
</data>
<data name="SshConnectionInfoValidationResult.SshPortZeroOrNegative" xml:space="preserve">
<value>SSH port moet meer dan nul zijn.</value>
<value>SSH poort moet groter dan nul zijn.</value>
<comment>Fuzzy</comment>
</data>
<data name="SshConnectionInfoValidationResult.MoshPortZeroOrNegative" xml:space="preserve">
@@ -856,16 +856,16 @@ Fuzzy</comment>
<value>Geen</value>
</data>
<data name="NewOutput.ToolTipService.ToolTip" xml:space="preserve">
<value>Nieuwe output</value>
<value>Nieuwe uitvoer</value>
</data>
<data name="ExitedWithError.ToolTipService.ToolTip" xml:space="preserve">
<value>Gestopt met een fout</value>
</data>
<data name="ConfirmDeleteProfile" xml:space="preserve">
<value>Weet je zeker dat je deze profiel wil verwijderen?</value>
<value>Weet je zeker dat je dit profiel wilt verwijderen?</value>
</data>
<data name="Command.NewSshWindow" xml:space="preserve">
<value>Nieuwe SSH window</value>
<value>Nieuw SSH venster</value>
</data>
<data name="Setting_SShProfiles.Content" xml:space="preserve">
<value>SSH-profielen</value>
@@ -901,10 +901,10 @@ Fuzzy</comment>
<value>Instellingen zijn geëxporteerd naar bestand</value>
</data>
<data name="SettingsImported" xml:space="preserve">
<value>Instellingen zijn geimporteerd van bestand</value>
<value>Instellingen zijn geïmporteerd van bestand</value>
</data>
<data name="SshConnectionInfoValidationResult.IdentityFileDoesNotExist" xml:space="preserve">
<value>Identitijt bestaat niet, Identitijt bestand bestaat niet</value>
<value>Identiteit bestaat niet, Identiteit bestand bestaat niet</value>
</data>
<data name="AutoFallbackToWindowsUsername.Header" xml:space="preserve">
<value>Gebruik Windows gebruikersnaam bij het openen van SSH URLs die geen gebruikersnaam hebben</value>
@@ -922,7 +922,7 @@ Fuzzy</comment>
<value>Ongeldig command.</value>
</data>
<data name="LocationCantBeEmpty" xml:space="preserve">
<value>Locaatsie kan niet leeg zijn.</value>
<value>Locatie kan niet leeg zijn.</value>
</data>
<data name="MuteTerminalBeeps.Header" xml:space="preserve">
<value>Demp terminal geluiden</value>
@@ -931,7 +931,7 @@ Fuzzy</comment>
<value>Voer een commando (b.v. &apos;ssh gebruikersnaam@host&apos;)</value>
</data>
<data name="CommandLine.Header" xml:space="preserve">
<value>Command</value>
<value>Commando</value>
</data>
<data name="UnsupportedCommand" xml:space="preserve">
<value>Niet ondersteund commando:</value>
@@ -947,7 +947,7 @@ Fuzzy</comment>
<value>Nieuwe snel uitvoeren tab</value>
</data>
<data name="Command.NewCustomCommandWindow" xml:space="preserve">
<value>Nieuw snelle uitvoeren window</value>
<value>Nieuw snel uitvoeren venster</value>
</data>
<data name="NewQuickTab.Text" xml:space="preserve">
<value>Snel nieuwe tab</value>
@@ -959,7 +959,7 @@ Fuzzy</comment>
<value>Ongeldige link.</value>
</data>
<data name="DropTabHere" xml:space="preserve">
<value>Drop tab here</value>
<value>Plaats tab hier</value>
</data>
<data name="CloseLeft.Text" xml:space="preserve">
<value>Sluit alle tabs naar links</value>
@@ -977,16 +977,16 @@ Fuzzy</comment>
<value>Duplicaat</value>
</data>
<data name="DuplicateEnvironmentVariable" xml:space="preserve">
<value>Kan niet 2 envourment variables met dezelfde naam hebben.</value>
<value>Kan niet 2 omgeving variabelen met dezelfde naam hebben.</value>
</data>
<data name="EmptyEnvironmentVariableName" xml:space="preserve">
<value>Kan geen envourment variable aanmaken zonder een naam.</value>
<value>Kan geen omgeving variabele aanmaken zonder een naam.</value>
</data>
<data name="EnvironmentVariables.Text" xml:space="preserve">
<value>Environment variables</value>
<value>Omgeving variabelen</value>
</data>
<data name="CloseSearchPanel.ToolTipService.ToolTip" xml:space="preserve">
<value>Sluit zoek balk</value>
<value>Sluit zoekbalk</value>
</data>
<data name="FindNext.ToolTipService.ToolTip" xml:space="preserve">
<value>Find volgende</value>
@@ -995,17 +995,17 @@ Fuzzy</comment>
<value>Find vorige</value>
</data>
<data name="SearchTextBox.PlaceholderText" xml:space="preserve">
<value>Enter zoek term</value>
<value>Voer zoekterm in</value>
</data>
<data name="Search.Text" xml:space="preserve">
<value>Zoekken</value>
<value>Zoeken</value>
</data>
<data name="PrintableOutputOnly.Content" xml:space="preserve">
<value>Print output alleen</value>
<value>Print alleen uitvoer</value>
<comment>Fuzzy</comment>
</data>
<data name="EnableLogging.Header" xml:space="preserve">
<value>Log output voor debugging</value>
<value>Log uitvoer voor debugging</value>
</data>
<data name="WordSeparator.Header" xml:space="preserve">
<value>Woord scheidingstekens</value>
@@ -1015,105 +1015,114 @@ Fuzzy</comment>
<value>Recent</value>
</data>
<data name="NewTab_Description" xml:space="preserve">
<value>Opens default profile in a new tab.</value>
<value>Opent standaard profiel in een nieuw tab</value>
</data>
<data name="NewSshTab_Description" xml:space="preserve">
<value>Opens a new SSH or Mosh session in a new tab.</value>
</data>
<data name="NewQuickTab_Description" xml:space="preserve">
<value>Opens &quot;Quick Launch&quot; dialog and starts session in a new tab.</value>
<value>Opent &quot;Snel Laden&quot; dialoog en start een sessie in een nieuwe tab</value>
</data>
<data name="Settings_Description" xml:space="preserve">
<value>Opens settings window.</value>
<value>Opent het instellingen venster</value>
</data>
<data name="About_Description" xml:space="preserve">
<value>Basic info about the app.</value>
<value>Basisinformatie over de applicatie.</value>
</data>
<data name="Recent_Description" xml:space="preserve">
<value>Recently opened sessions.</value>
<value>Recentelijk geopende sessies.</value>
</data>
<data name="MenuItem_DefaultProfile_Description" xml:space="preserve">
<value>Starts new terminal session based on the default profile.</value>
<value>Start een nieuwe Terminal sessie, gebaseerd op het standaard profiel.</value>
</data>
<data name="MenuItem_Remote_Text" xml:space="preserve">
<value>Remote Connect...</value>
<value>Extern verbinden...</value>
</data>
<data name="MenuItem_Remote_Description" xml:space="preserve">
<value>Opens a dialog for launching a new SSH or Mosh terminal session.</value>
<value>Opent een dialoog voor het starten van een nieuwe SSH of Mosh Terminal sessie.</value>
</data>
<data name="MenuItem_QuickLaunch_Text" xml:space="preserve">
<value>Quick Launch...</value>
<value>Snel Laden...</value>
</data>
<data name="MenuItem_QuickLaunch_Description" xml:space="preserve">
<value>Opens a &quot;Quick Launch&quot; dialog for starting a new terminal session.</value>
<value>Opent een &quot;Snel Laden&quot; dialoog om een nieuwe Terminal sessie te starten.</value>
</data>
<data name="MenuItem_NewWindow_Text" xml:space="preserve">
<value>New Window</value>
<value>Nieuw Venster</value>
</data>
<data name="MenuItem_NewTab_Text" xml:space="preserve">
<value>New Tab</value>
<value>Nieuwe Tab</value>
</data>
<data name="MenuItem_NewTab_Description" xml:space="preserve">
<value>Launches a session in a new tab.</value>
<value>Start een sessie in een nieuw tab</value>
</data>
<data name="MenuItem_NewWindow_Description" xml:space="preserve">
<value>Launches a session in a new window.</value>
<value>Start een sessie in een nieuw venster.</value>
</data>
<data name="AppMenuType.Text" xml:space="preserve">
<value>Application menu type</value>
<value>Applicatie menu type</value>
</data>
<data name="AppMenuType_Flat.Content" xml:space="preserve">
<value>Flat, honoring &quot;Open new terminals as&quot; setting</value>
<value>Plat, naar de &quot;Open nieuwe terminals als&quot; instelling</value>
</data>
<data name="AppMenuType_Cascading.Content" xml:space="preserve">
<value>&quot;New Tab&quot; / &quot;New Window&quot; cascading</value>
<value>&quot;Nieuw Tab&quot; / &quot;Nieuw Venster&quot; trapsgewijs</value>
</data>
<data name="Quit.Text" xml:space="preserve">
<value>Quit</value>
<value>Stop</value>
</data>
<data name="Quit.Description" xml:space="preserve">
<value>Quit Fluent Terminal</value>
<value>Stop Fluent Terminal</value>
</data>
<data name="EnabledByPolicy" xml:space="preserve">
<value>Enabled by policy.</value>
<value>Aangezet doot beleid.</value>
</data>
<data name="BackgroundImage.Content" xml:space="preserve">
<value>Background image</value>
<value>Achtergrond afbeelding</value>
</data>
<data name="AcrylicBackground.Header" xml:space="preserve">
<value>Use acrylic background</value>
<value>Gebruik een acryl achtergrond</value>
</data>
<data name="ConfirmDeleteBackgroundImage" xml:space="preserve">
<value>Are you sure you want to delete this background image?</value>
<value>Weet je zeker dat je deze achtergrond wilt verwijderen?</value>
</data>
<data name="Colors.Text" xml:space="preserve">
<value>Colors</value>
<value>Kleuren</value>
</data>
<data name="BrightColors.Text" xml:space="preserve">
<value>Bright colors</value>
<value>Felle kleuren</value>
</data>
<data name="CopyLink" xml:space="preserve">
<value>Copy link</value>
<value>Kopieer link</value>
</data>
<data name="SearchWithRegex.ToolTipService.ToolTip" xml:space="preserve">
<value>Regex</value>
</data>
<data name="SearchWholeWord.ToolTipService.ToolTip" xml:space="preserve">
<value>Whole word</value>
<value>Heel woord</value>
</data>
<data name="SearchCaseSensitive.ToolTipService.ToolTip" xml:space="preserve">
<value>Case sensitive</value>
<value>Hoofdlettergevoelig</value>
</data>
<data name="MouseCopySelectionOrPaste.Content" xml:space="preserve">
<value>Copy selection or paste</value>
<value>Kopieer selectie of plak</value>
</data>
<data name="UseBuffer" xml:space="preserve">
<value>Use smart buffer</value>
<value>Gebruik slimme buffer</value>
</data>
<data name="RestartSession.Content" xml:space="preserve">
<value>Restart</value>
<value>Herstart</value>
</data>
<data name="SessionDisconnected.Text" xml:space="preserve">
<value>Session disconnected.</value>
<value>Sessie verbroken.</value>
</data>
</root>
<data name="Command.IncreaseFontSize" xml:space="preserve">
<value>Verhoog lettertype grootte</value>
</data>
<data name="Command.DecreaseFontSize" xml:space="preserve">
<value>Verlaag lettertype grootte</value>
</data>
<data name="Command.ResetFontSize" xml:space="preserve">
<value>Herstel lettertype grootte</value>
</data>
</root>
+47 -39
View File
@@ -154,9 +154,8 @@
<comment>XtermTerminalView.xaml.cs</comment>
</data>
<data name="CustomTitle.Header" xml:space="preserve">
<value>Pokaż</value>
<comment>GeneralSettings.xaml
Fuzzy</comment>
<value>Pokaż niestandardowe tytuły kart także w pasku tytułu</value>
<comment>GeneralSettings.xaml</comment>
</data>
<data name="EditTitle.Text" xml:space="preserve">
<value>Zmień tytuł</value>
@@ -772,13 +771,13 @@ Fuzzy</comment>
<value>Port nie może być 0</value>
</data>
<data name="UserAndHostMandatory" xml:space="preserve">
<value>Użytkownik i IP są niezbędne</value>
<value>Użytkownik i adres hosta są niezbędne</value>
</data>
<data name="SshConnectionInfoValidationResult.UsernameEmpty" xml:space="preserve">
<value>Nazwa użytkownika nie może być pusta</value>
</data>
<data name="SshConnectionInfoValidationResult.HostEmpty" xml:space="preserve">
<value>IP nie może być puste</value>
<value>Adres hosta nie może być pusty</value>
</data>
<data name="SshConnectionInfoValidationResult.SshPortZeroOrNegative" xml:space="preserve">
<value>Port SSH musi być większy od 0</value>
@@ -949,108 +948,117 @@ Fuzzy</comment>
<value>Znaki seperujące słowa</value>
</data>
<data name="Recent.Text" xml:space="preserve">
<value>Recent</value>
<value>Ostatnie</value>
</data>
<data name="NewTab_Description" xml:space="preserve">
<value>Opens default profile in a new tab.</value>
<value>Otwórz domyślny profil w nowej karcie.</value>
</data>
<data name="NewSshTab_Description" xml:space="preserve">
<value>Opens a new SSH or Mosh session in a new tab.</value>
<value>Otwórz nową sesję SSH lub Mosh w nowej karcie.</value>
</data>
<data name="NewQuickTab_Description" xml:space="preserve">
<value>Opens &quot;Quick Launch&quot; dialog and starts session in a new tab.</value>
<value>Otwiera okno dialogowe &quot;Szybkie uruchomienie&quot; i rozpoczyna sesję w nowej karcie.</value>
</data>
<data name="Settings_Description" xml:space="preserve">
<value>Opens settings window.</value>
<value>Otwórz okno ustawień.</value>
</data>
<data name="About_Description" xml:space="preserve">
<value>Basic info about the app.</value>
<value>Podstawowe informacje o aplikacji.</value>
</data>
<data name="Recent_Description" xml:space="preserve">
<value>Recently opened sessions.</value>
<value>Niedawno otwarte sesje.</value>
</data>
<data name="MenuItem_DefaultProfile_Description" xml:space="preserve">
<value>Starts new terminal session based on the default profile.</value>
<value>Rozpoczyna nowa sesję terminala bazującą na domyślnym profilu.</value>
</data>
<data name="MenuItem_Remote_Text" xml:space="preserve">
<value>Remote Connect...</value>
<value>Połącz zdalnie...</value>
</data>
<data name="MenuItem_Remote_Description" xml:space="preserve">
<value>Opens a dialog for launching a new SSH or Mosh terminal session.</value>
<value>Otwiera okno dialogowe do rozpoczynania nowej sesji terminala SSH lub Mosh.</value>
</data>
<data name="MenuItem_QuickLaunch_Text" xml:space="preserve">
<value>Quick Launch...</value>
<value>Szybkie uruchomienie...</value>
</data>
<data name="MenuItem_QuickLaunch_Description" xml:space="preserve">
<value>Opens a &quot;Quick Launch&quot; dialog for starting a new terminal session.</value>
<value>Otwiera okno dialogowe &quot;Szybkie uruchomienie&quot; aby rozpocząć nową sesje terminala.</value>
</data>
<data name="MenuItem_NewWindow_Text" xml:space="preserve">
<value>New Window</value>
<value>Nowe okno</value>
</data>
<data name="MenuItem_NewTab_Text" xml:space="preserve">
<value>New Tab</value>
<value>Nowa Karta</value>
</data>
<data name="MenuItem_NewTab_Description" xml:space="preserve">
<value>Launches a session in a new tab.</value>
<value>Otwiera sesję w nowej karcie.</value>
</data>
<data name="MenuItem_NewWindow_Description" xml:space="preserve">
<value>Launches a session in a new window.</value>
<value>Otwiera sesję w nowym oknie.</value>
</data>
<data name="AppMenuType.Text" xml:space="preserve">
<value>Application menu type</value>
<value>Typ menu aplikacji</value>
</data>
<data name="AppMenuType_Flat.Content" xml:space="preserve">
<value>Flat, honoring &quot;Open new terminals as&quot; setting</value>
<value>Płaskie, przestrzegające ustawienia &quot;Otwórz nowe terminale jako&quot;.</value>
</data>
<data name="AppMenuType_Cascading.Content" xml:space="preserve">
<value>&quot;New Tab&quot; / &quot;New Window&quot; cascading</value>
<value>&quot;Nowa karta&quot; / &quot;Nowe okno&quot; kaskadowo</value>
</data>
<data name="Quit.Text" xml:space="preserve">
<value>Quit</value>
<value>Zakończ</value>
</data>
<data name="Quit.Description" xml:space="preserve">
<value>Quit Fluent Terminal</value>
<value>Wyjdź z Fluent Terminal</value>
</data>
<data name="EnabledByPolicy" xml:space="preserve">
<value>Enabled by policy.</value>
<value>Włączone przez polityke.</value>
</data>
<data name="BackgroundImage.Content" xml:space="preserve">
<value>Background image</value>
<value>Obraz tła</value>
</data>
<data name="AcrylicBackground.Header" xml:space="preserve">
<value>Use acrylic background</value>
<value>Użyj akrylowego tła</value>
</data>
<data name="ConfirmDeleteBackgroundImage" xml:space="preserve">
<value>Are you sure you want to delete this background image?</value>
<value>Czy na pewno chcesz usunąć ten obraz tła?</value>
</data>
<data name="Colors.Text" xml:space="preserve">
<value>Colors</value>
<value>Kolory</value>
</data>
<data name="BrightColors.Text" xml:space="preserve">
<value>Bright colors</value>
<value>Jasne kolory</value>
</data>
<data name="CopyLink" xml:space="preserve">
<value>Copy link</value>
<value>Skopiuj łącze</value>
</data>
<data name="SearchWithRegex.ToolTipService.ToolTip" xml:space="preserve">
<value>Regex</value>
</data>
<data name="SearchWholeWord.ToolTipService.ToolTip" xml:space="preserve">
<value>Whole word</value>
<value>Całe słowo</value>
</data>
<data name="SearchCaseSensitive.ToolTipService.ToolTip" xml:space="preserve">
<value>Case sensitive</value>
<value>Uwzględnij wielkość liter</value>
</data>
<data name="MouseCopySelectionOrPaste.Content" xml:space="preserve">
<value>Copy selection or paste</value>
<value>Skopiuj zaznaczenie lub wklej</value>
</data>
<data name="UseBuffer" xml:space="preserve">
<value>Use smart buffer</value>
<value>Użyj inteligentnego buforowania</value>
</data>
<data name="RestartSession.Content" xml:space="preserve">
<value>Restart</value>
<value>Uruchom ponownie</value>
</data>
<data name="SessionDisconnected.Text" xml:space="preserve">
<value>Session disconnected.</value>
<value>Sesja rozłączona</value>
</data>
<data name="Command.IncreaseFontSize" xml:space="preserve">
<value>Zwiększ rozmiar czcionki</value>
</data>
<data name="Command.DecreaseFontSize" xml:space="preserve">
<value>Zmniejsz rozmiar czcionki</value>
</data>
<data name="Command.ResetFontSize" xml:space="preserve">
<value>Zresetuj rozmiar czcionki</value>
</data>
</root>
+23 -15
View File
@@ -230,9 +230,8 @@
<comment>MainPage.xaml</comment>
</data>
<data name="SystemTray.Header" xml:space="preserve">
<value>Exibir em segundo plano</value>
<comment>GeneralSettings.xaml
Fuzzy</comment>
<value>Exibir na bandeja do sistema</value>
<comment>GeneralSettings.xaml</comment>
</data>
<data name="TabsPostion.Text" xml:space="preserve">
<value>Exibir abas em</value>
@@ -1015,42 +1014,51 @@ Fuzzy</comment>
<value>Habilitado pela política</value>
</data>
<data name="BackgroundImage.Content" xml:space="preserve">
<value>Background image</value>
<value>Imagem de fundo</value>
</data>
<data name="AcrylicBackground.Header" xml:space="preserve">
<value>Use acrylic background</value>
<value>Usar fundo acrílico</value>
</data>
<data name="ConfirmDeleteBackgroundImage" xml:space="preserve">
<value>Are you sure you want to delete this background image?</value>
<value>Tem certeza que deseja remover esta imagem de fundo?</value>
</data>
<data name="Colors.Text" xml:space="preserve">
<value>Colors</value>
<value>Cores</value>
</data>
<data name="BrightColors.Text" xml:space="preserve">
<value>Bright colors</value>
<value>Cores claras</value>
</data>
<data name="CopyLink" xml:space="preserve">
<value>Copy link</value>
<value>Copiar link</value>
</data>
<data name="SearchWithRegex.ToolTipService.ToolTip" xml:space="preserve">
<value>Regex</value>
</data>
<data name="SearchWholeWord.ToolTipService.ToolTip" xml:space="preserve">
<value>Whole word</value>
<value>Toda a palavra</value>
</data>
<data name="SearchCaseSensitive.ToolTipService.ToolTip" xml:space="preserve">
<value>Case sensitive</value>
<value>Sensível à maiúsculas</value>
</data>
<data name="MouseCopySelectionOrPaste.Content" xml:space="preserve">
<value>Copy selection or paste</value>
<value>Copiar seleção ou colar</value>
</data>
<data name="UseBuffer" xml:space="preserve">
<value>Use smart buffer</value>
<value>Usar buffer inteligente</value>
</data>
<data name="RestartSession.Content" xml:space="preserve">
<value>Restart</value>
<value>Reiniciar</value>
</data>
<data name="SessionDisconnected.Text" xml:space="preserve">
<value>Session disconnected.</value>
<value>Sessão desconectada</value>
</data>
<data name="Command.IncreaseFontSize" xml:space="preserve">
<value>Increase font size</value>
</data>
<data name="Command.DecreaseFontSize" xml:space="preserve">
<value>Decrease font size</value>
</data>
<data name="Command.ResetFontSize" xml:space="preserve">
<value>Reset font size</value>
</data>
</root>
+21 -12
View File
@@ -1014,42 +1014,51 @@
<value>Activat de politică.</value>
</data>
<data name="BackgroundImage.Content" xml:space="preserve">
<value>Background image</value>
<value>Imagine de fundal</value>
</data>
<data name="AcrylicBackground.Header" xml:space="preserve">
<value>Use acrylic background</value>
<value>Folosiți fundal acrilic</value>
</data>
<data name="ConfirmDeleteBackgroundImage" xml:space="preserve">
<value>Are you sure you want to delete this background image?</value>
<value>Sigur doriți să ștergeți această imagine de fundal?</value>
</data>
<data name="Colors.Text" xml:space="preserve">
<value>Colors</value>
<value>Culori</value>
</data>
<data name="BrightColors.Text" xml:space="preserve">
<value>Bright colors</value>
<value>Culori deschise</value>
</data>
<data name="CopyLink" xml:space="preserve">
<value>Copy link</value>
<value>Copiere link</value>
</data>
<data name="SearchWithRegex.ToolTipService.ToolTip" xml:space="preserve">
<value>Regex</value>
</data>
<data name="SearchWholeWord.ToolTipService.ToolTip" xml:space="preserve">
<value>Whole word</value>
<value>Întregul cuvânt</value>
</data>
<data name="SearchCaseSensitive.ToolTipService.ToolTip" xml:space="preserve">
<value>Case sensitive</value>
<value>Potrivire litere</value>
</data>
<data name="MouseCopySelectionOrPaste.Content" xml:space="preserve">
<value>Copy selection or paste</value>
<value>Copiați selecția sau lipiți</value>
</data>
<data name="UseBuffer" xml:space="preserve">
<value>Use smart buffer</value>
<value>Folosiți tampon inteligent</value>
</data>
<data name="RestartSession.Content" xml:space="preserve">
<value>Restart</value>
<value>Repornire</value>
</data>
<data name="SessionDisconnected.Text" xml:space="preserve">
<value>Session disconnected.</value>
<value>Sesiunea a fost deconectată.</value>
</data>
<data name="Command.IncreaseFontSize" xml:space="preserve">
<value>Increase font size</value>
</data>
<data name="Command.DecreaseFontSize" xml:space="preserve">
<value>Decrease font size</value>
</data>
<data name="Command.ResetFontSize" xml:space="preserve">
<value>Reset font size</value>
</data>
</root>
+23 -14
View File
@@ -182,7 +182,7 @@
<comment>MainPage.xaml</comment>
</data>
<data name="TabTheme.None" xml:space="preserve">
<value>Ничего</value>
<value>Нет</value>
<comment>TabBar.xaml</comment>
</data>
<data name="ONTA_Tabs.Content" xml:space="preserve">
@@ -362,7 +362,7 @@
<comment>TerminalSettings.xaml</comment>
</data>
<data name="DeleteAppBarButton.Label" xml:space="preserve">
<value>Удали</value>
<value>Удалить</value>
<comment>ShellProfileSettings.xaml</comment>
</data>
<data name="LineEndingStyle.DoNotModify" xml:space="preserve">
@@ -442,7 +442,7 @@
<comment>TerminalSettings.xaml</comment>
</data>
<data name="ProfileName.Header" xml:space="preserve">
<value>Назване</value>
<value>Название</value>
<comment>ShellProfileSettings.xaml</comment>
</data>
<data name="Profiles.Text" xml:space="preserve">
@@ -542,11 +542,11 @@
<comment>ViewModel</comment>
</data>
<data name="ConfirmDeleteKeybindings" xml:space="preserve">
<value>Вы действительно хотите удалить горячую клавишу?</value>
<value>Вы действительно хотите удалить эту горячую клавишу?</value>
<comment>ViewModel</comment>
</data>
<data name="ConfirmDeleteTheme" xml:space="preserve">
<value>Вы действительно хотите удалить тему?</value>
<value>Вы действительно хотите удалить эту тему?</value>
<comment>ViewModel</comment>
</data>
<data name="ConfirmDiscardChanges" xml:space="preserve">
@@ -771,7 +771,7 @@
<value>Порт не может быть 0.</value>
</data>
<data name="UserAndHostMandatory" xml:space="preserve">
<value>Пользователь и хост обязательные поля</value>
<value>Пользователь и хост обязательные поля.</value>
</data>
<data name="SshConnectionInfoValidationResult.UsernameEmpty" xml:space="preserve">
<value>Пользователь не может быть пустым.</value>
@@ -786,7 +786,7 @@
<value>Порт Mosh не может быть равен нулю.</value>
</data>
<data name="SshConnectionInfoValidationResult.MoshPortRangeInvalid" xml:space="preserve">
<value>Диапозон портов Mosh недействителен.</value>
<value>Диапазон Mosh портов недействителен.</value>
</data>
<data name="Yes.Text" xml:space="preserve">
<value>Да</value>
@@ -825,19 +825,19 @@
<value>Пользователь</value>
</data>
<data name="MoshPortFrom.Header" xml:space="preserve">
<value>C порта</value>
<value>От порта</value>
</data>
<data name="MoshPortTo.Header" xml:space="preserve">
<value>До порта</value>
</data>
<data name="MoshPortRange.Text" xml:space="preserve">
<value>Диапозон Mosh портов</value>
<value>Диапазон Mosh портов</value>
</data>
<data name="Authenticate" xml:space="preserve">
<value>Аутентификация</value>
</data>
<data name="SettingsExported" xml:space="preserve">
<value>Настройки сохранены в файл</value>
<value>Настройки экспортированы в файл</value>
</data>
<data name="SettingsImported" xml:space="preserve">
<value>Настройки импортированы из файла</value>
@@ -1021,7 +1021,7 @@
<value>Использовать акриловый фон</value>
</data>
<data name="ConfirmDeleteBackgroundImage" xml:space="preserve">
<value>Удалить это фоновое изображение?</value>
<value>Вы действительно хотите удалить это фоновое изображение?</value>
</data>
<data name="Colors.Text" xml:space="preserve">
<value>Цвета</value>
@@ -1045,12 +1045,21 @@
<value>Скопировать выделение или вставить</value>
</data>
<data name="UseBuffer" xml:space="preserve">
<value>Use smart buffer</value>
<value>Использовать буфер</value>
</data>
<data name="RestartSession.Content" xml:space="preserve">
<value>Restart</value>
<value>Перезапустить</value>
</data>
<data name="SessionDisconnected.Text" xml:space="preserve">
<value>Session disconnected.</value>
<value>Соединение разорвано.</value>
</data>
<data name="Command.IncreaseFontSize" xml:space="preserve">
<value>Increase font size</value>
</data>
<data name="Command.DecreaseFontSize" xml:space="preserve">
<value>Decrease font size</value>
</data>
<data name="Command.ResetFontSize" xml:space="preserve">
<value>Reset font size</value>
</data>
</root>
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -1052,4 +1052,13 @@
<data name="SessionDisconnected.Text" xml:space="preserve">
<value>Session disconnected.</value>
</data>
<data name="Command.IncreaseFontSize" xml:space="preserve">
<value>Increase font size</value>
</data>
<data name="Command.DecreaseFontSize" xml:space="preserve">
<value>Decrease font size</value>
</data>
<data name="Command.ResetFontSize" xml:space="preserve">
<value>Reset font size</value>
</data>
</root>
@@ -971,13 +971,13 @@ Fuzzy</comment>
<value>最近</value>
</data>
<data name="NewTab_Description" xml:space="preserve">
<value>Opens default profile in a new tab.</value>
<value>在新标签打开默认配置。</value>
</data>
<data name="NewSshTab_Description" xml:space="preserve">
<value>从新标签页打开SSH或Mosh会话</value>
</data>
<data name="NewQuickTab_Description" xml:space="preserve">
<value>Opens &quot;Quick Launch&quot; dialog and starts session in a new tab.</value>
<value>打开“快速启动”对话框并在新标签中开启会话。</value>
</data>
<data name="Settings_Description" xml:space="preserve">
<value>打开设置页面</value>
@@ -989,19 +989,19 @@ Fuzzy</comment>
<value>最近打开的会话</value>
</data>
<data name="MenuItem_DefaultProfile_Description" xml:space="preserve">
<value>Starts new terminal session based on the default profile.</value>
<value>基于默认配置开启新的终端会话。</value>
</data>
<data name="MenuItem_Remote_Text" xml:space="preserve">
<value>远程连接</value>
</data>
<data name="MenuItem_Remote_Description" xml:space="preserve">
<value>Opens a dialog for launching a new SSH or Mosh terminal session.</value>
<value>打开对话框开启新的 SSH 或 Mosh 终端会话。</value>
</data>
<data name="MenuItem_QuickLaunch_Text" xml:space="preserve">
<value>快捷启动</value>
</data>
<data name="MenuItem_QuickLaunch_Description" xml:space="preserve">
<value>Opens a &quot;Quick Launch&quot; dialog for starting a new terminal session.</value>
<value>打开“快速启动”对话框并开启终端会话。</value>
</data>
<data name="MenuItem_NewWindow_Text" xml:space="preserve">
<value>新建窗口</value>
@@ -1016,13 +1016,13 @@ Fuzzy</comment>
<value>从新窗口启动会话</value>
</data>
<data name="AppMenuType.Text" xml:space="preserve">
<value>Application menu type</value>
<value>应用菜单类型</value>
</data>
<data name="AppMenuType_Flat.Content" xml:space="preserve">
<value>Flat, honoring &quot;Open new terminals as&quot; setting</value>
<value>扁平,荣耀的“打开新的终端”设置</value>
</data>
<data name="AppMenuType_Cascading.Content" xml:space="preserve">
<value>&quot;New Tab&quot; / &quot;New Window&quot; cascading</value>
<value>“新标签”/“新窗口”级联菜单</value>
</data>
<data name="Quit.Text" xml:space="preserve">
<value>退出</value>
@@ -1031,16 +1031,16 @@ Fuzzy</comment>
<value>退出关于</value>
</data>
<data name="EnabledByPolicy" xml:space="preserve">
<value>Enabled by policy.</value>
<value>根据策略启用。</value>
</data>
<data name="BackgroundImage.Content" xml:space="preserve">
<value>背景图片</value>
</data>
<data name="AcrylicBackground.Header" xml:space="preserve">
<value>Use acrylic background</value>
<value>使用亚克力背景</value>
</data>
<data name="ConfirmDeleteBackgroundImage" xml:space="preserve">
<value>Are you sure you want to delete this background image?</value>
<value>你确定你想要删除这个背景图片吗?</value>
</data>
<data name="Colors.Text" xml:space="preserve">
<value>颜色</value>
@@ -1055,21 +1055,30 @@ Fuzzy</comment>
<value>正则表达式</value>
</data>
<data name="SearchWholeWord.ToolTipService.ToolTip" xml:space="preserve">
<value>Whole word</value>
<value>全字匹配</value>
</data>
<data name="SearchCaseSensitive.ToolTipService.ToolTip" xml:space="preserve">
<value>大小写敏感</value>
</data>
<data name="MouseCopySelectionOrPaste.Content" xml:space="preserve">
<value>Copy selection or paste</value>
<value>复制或者粘贴选中的文本</value>
</data>
<data name="UseBuffer" xml:space="preserve">
<value>Use smart buffer</value>
<value>使用智能缓冲</value>
</data>
<data name="RestartSession.Content" xml:space="preserve">
<value>Restart</value>
<value>重启</value>
</data>
<data name="SessionDisconnected.Text" xml:space="preserve">
<value>Session disconnected.</value>
<value>会话已断开</value>
</data>
<data name="Command.IncreaseFontSize" xml:space="preserve">
<value>Increase font size</value>
</data>
<data name="Command.DecreaseFontSize" xml:space="preserve">
<value>Decrease font size</value>
</data>
<data name="Command.ResetFontSize" xml:space="preserve">
<value>Reset font size</value>
</data>
</root>
File diff suppressed because it is too large. Load diff
@@ -249,13 +249,6 @@
IsEnabled="{x:Bind InEditMode, Mode=OneWay}"
IsOn="{x:Bind ProfileVm.UseConPty, Mode=TwoWay}" />
<ToggleSwitch
x:Uid="UseBuffer"
Margin="{StaticResource ItemMargin}"
Header="{x:Bind Converter={StaticResource I18NConverter}, ConverterParameter=UseBuffer}"
IsEnabled="{x:Bind InEditMode, Mode=OneWay}"
IsOn="{x:Bind ProfileVm.UseBuffer, Mode=TwoWay}" />
<StackPanel Margin="{StaticResource ItemMargin}">
<TextBlock
x:Uid="EnvironmentVariables"
@@ -283,11 +276,11 @@
Style="{StaticResource SubtitleTextBlockStyle}"
Text="{x:Bind Name, Mode=OneWay}" />
<controls:HeaderedTextBlock
<controls:HeaderedContentControl
x:Uid="ShellLocation"
Margin="{StaticResource ItemMargin}"
Header="Shell executable location"
Text="{x:Bind ProfileVm.Location, Mode=OneWay}" />
Content="{x:Bind ProfileVm.Location, Mode=OneWay}" />
<controls:HeaderedContentControl
x:Uid="WorkingDir"
@@ -350,18 +343,6 @@
FontWeight="Light" />
</controls:HeaderedContentControl>
<controls:HeaderedContentControl
Margin="{StaticResource ItemMargin}"
HorizontalContentAlignment="Stretch"
Header="{x:Bind Converter={StaticResource I18NConverter}, ConverterParameter=UseBuffer}">
<ContentControl
Margin="0,6,0,0"
Content="{x:Bind ProfileVm.UseBuffer, Mode=OneWay}"
ContentTemplateSelector="{StaticResource UseConPtyTemplateSelector}"
FontSize="18"
FontWeight="Light" />
</controls:HeaderedContentControl>
<controls:HeaderedContentControl
Margin="{StaticResource ItemMargin}"
HorizontalContentAlignment="Stretch"
@@ -291,12 +291,6 @@
IsEnabled="{x:Bind InEditMode, Mode=OneWay}"
IsOn="{x:Bind ProfileVm.UseConPty, Mode=TwoWay}" />
<ToggleSwitch
Margin="{StaticResource ItemMargin}"
Header="{x:Bind Converter={StaticResource I18NConverter}, ConverterParameter=UseBuffer}"
IsEnabled="{x:Bind InEditMode, Mode=OneWay}"
IsOn="{x:Bind ProfileVm.UseBuffer, Mode=TwoWay}" />
<StackPanel Margin="{StaticResource ItemMargin}">
<TextBlock
x:Uid="EnvironmentVariables"
@@ -468,19 +462,6 @@
FontWeight="Light" />
</controls:HeaderedContentControl>
<controls:HeaderedContentControl
Margin="{StaticResource ItemMargin}"
HorizontalContentAlignment="Stretch"
DataContext="{Binding ProfileVm}"
Header="{x:Bind Converter={StaticResource I18NConverter}, ConverterParameter=UseBuffer}">
<ContentControl
Margin="0,6,0,0"
Content="{Binding UseBuffer, Mode=OneWay}"
ContentTemplateSelector="{StaticResource UseConPtyTemplateSelector}"
FontSize="18"
FontWeight="Light" />
</controls:HeaderedContentControl>
<controls:HeaderedContentControl
Margin="{StaticResource ItemMargin}"
HorizontalContentAlignment="Stretch"
+3 -3
View File
@@ -88,7 +88,7 @@
RelativePanel.AlignRightWithPanel="True"
Visibility="{x:Bind IsUnderlined, Mode=OneWay, Converter={StaticResource TrueToVisibleConverter}}" />
<Grid
x:Name="HasExitedWithError"
x:Name="HasExitedWithErrorGrid"
Height="32"
Margin="6,0,0,0"
RelativePanel.AlignLeftWithPanel="True"
@@ -105,7 +105,7 @@
<TextBlock
Margin="12,8,6,0"
RelativePanel.LeftOf="CloseButton"
RelativePanel.RightOf="HasExitedWithError"
RelativePanel.RightOf="HasExitedWithErrorGrid"
Style="{StaticResource CaptionTextBlockStyle}"
Text="{x:Bind TabTitle, Mode=OneWay, Converter={StaticResource TextMiddleEllipsisConverter}}"
TextWrapping="NoWrap" />
@@ -118,7 +118,7 @@
HorizontalAlignment="Center"
Command="{x:Bind CloseCommand}"
Style="{StaticResource TitleBarButtonStyle}"
ToolTipService.ToolTip="Close"
ToolTipService.ToolTip="{x:Bind Converter={StaticResource I18NConverter}, ConverterParameter=Close}"
Visibility="{x:Bind ShowCloseButton, Mode=OneWay, Converter={StaticResource TrueToVisibleConverter}}">
<Viewbox Width="12" Height="12">
<SymbolIcon Symbol="Cancel" />
+15 -15
View File
@@ -1,19 +1,19 @@
<ResourceDictionary
x:Class="FluentTerminal.App.Views.TemplateSelectors"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:views="using:FluentTerminal.App.Views"
xmlns:models="using:FluentTerminal.Models"
xmlns:settings="using:FluentTerminal.App.ViewModels.Settings">
xmlns:settings="using:FluentTerminal.App.ViewModels.Settings"
xmlns:views="using:FluentTerminal.App.Views">
<views:TabThemeTemplateSelector x:Key="TabThemeTemplateSelector">
<views:TabThemeTemplateSelector.DefaultTemplate>
<DataTemplate x:DataType="models:TabTheme">
<StackPanel Orientation="Horizontal">
<FontIcon
Margin="0,0,6,0"
FontFamily="{StaticResource SymbolThemeFontFamily}"
Glyph="&#xF126;" />
<TextBlock Text="{x:Bind Name, Mode=OneWay}" />
Margin="0,0,6,0"
FontFamily="{StaticResource SymbolThemeFontFamily}"
Glyph="&#xF126;" />
<TextBlock Text="{x:Bind Name, Mode=OneTime, Converter={StaticResource I18NConverter}}" />
</StackPanel>
</DataTemplate>
</views:TabThemeTemplateSelector.DefaultTemplate>
@@ -21,11 +21,11 @@
<DataTemplate x:DataType="models:TabTheme">
<StackPanel Orientation="Horizontal">
<FontIcon
Margin="0,0,6,0"
FontFamily="{StaticResource SymbolThemeFontFamily}"
Foreground="{x:Bind Color}"
Glyph="&#xF127;" />
<TextBlock Text="{x:Bind Name, Mode=OneWay}" />
Margin="0,0,6,0"
FontFamily="{StaticResource SymbolThemeFontFamily}"
Foreground="{x:Bind Color}"
Glyph="&#xF127;" />
<TextBlock Text="{x:Bind Name, Mode=OneTime, Converter={StaticResource I18NConverter}}" />
</StackPanel>
</DataTemplate>
</views:TabThemeTemplateSelector.ColoredTemplate>
@@ -51,9 +51,9 @@
<views:TerminalKeybindTemplateSelector.KeyBindingsTemplate>
<DataTemplate x:DataType="settings:KeyBindingsViewModel">
<views:KeyBindingsView
Margin="0,6,0,0"
ShowCommandName="False"
ViewModel="{x:Bind}" />
Margin="0,6,0,0"
ShowCommandName="False"
ViewModel="{x:Bind}" />
</DataTemplate>
</views:TerminalKeybindTemplateSelector.KeyBindingsTemplate>
</views:TerminalKeybindTemplateSelector>
+4 -2
View File
@@ -35,7 +35,7 @@
Width="16"
Height="16"
Margin="6,0,0,0">
<FontIcon FontFamily="{StaticResource SymbolThemeFontFamily}" Glyph="&#xF78B;" />
<SymbolIcon Symbol="Find" />
</Viewbox>
<TextBox
Name="SearchTextBox"
@@ -47,7 +47,9 @@
IsTabStop="True"
KeyUp="OnSearchTextBoxKeyUp"
PlaceholderText="Enter search term"
Text="{x:Bind ViewModel.SearchText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
Text="{x:Bind ViewModel.SearchText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
GotFocus="SearchTextBox_GotFocus"
LostFocus="SearchTextBox_LostFocus">
<Interactivity:Interaction.Behaviors>
<Core:DataTriggerBehavior Binding="{x:Bind ViewModel.ShowSearchPanel, Mode=OneWay}" Value="true">
<actions:FocusAction />
+18 -2
View File
@@ -28,6 +28,7 @@ namespace FluentTerminal.App.Views
ViewModel.ThemeChanged += OnThemeChanged;
ViewModel.FindNextRequested += OnFindNextRequested;
ViewModel.FindPreviousRequested += OnFindPreviousRequested;
ViewModel.FontSizeChanged += OnFontSizeChanged;
InitializeComponent();
_terminalView = new XtermTerminalView();
TerminalContainer.Children.Add((UIElement)_terminalView);
@@ -54,6 +55,7 @@ namespace FluentTerminal.App.Views
ViewModel.ThemeChanged -= OnThemeChanged;
ViewModel.FindNextRequested -= OnFindNextRequested;
ViewModel.FindPreviousRequested -= OnFindPreviousRequested;
ViewModel.FontSizeChanged -= OnFontSizeChanged;
ViewModel = null;
}
@@ -107,10 +109,14 @@ namespace FluentTerminal.App.Views
await _terminalView.ChangeThemeAsync(e);
SetGridBackgroundTheme(e);
}
private async void OnFontSizeChanged(object sender, int e)
{
await _terminalView.ChangeFontSize(e);
}
private void SetGridBackgroundTheme(TerminalTheme terminalTheme)
{
var color = terminalTheme.Colors.Background;
var imageFile = terminalTheme.BackgroundImage;
Brush backgroundBrush;
@@ -132,5 +138,15 @@ namespace FluentTerminal.App.Views
TerminalContainer.Background = backgroundBrush;
}
private void SearchTextBox_GotFocus(object sender, RoutedEventArgs e)
{
ViewModel.SearchHasFocus = true;
}
private void SearchTextBox_LostFocus(object sender, RoutedEventArgs e)
{
ViewModel.SearchHasFocus = false;
}
}
}
@@ -118,6 +118,7 @@ namespace FluentTerminal.App.Views
public event EventHandler<object> OnOutput;
public event EventHandler<string> OnPaste;
public event EventHandler<string> OnSessionRestart;
public XtermTerminalView()
{
@@ -179,6 +180,16 @@ namespace FluentTerminal.App.Views
return ExecuteScriptAsync($"changeTheme('{serialized}')");
}
public Task ChangeFontSize(int fontSize)
{
if (_terminalClosed)
{
return Task.CompletedTask;
}
return ExecuteScriptAsync($"setFontSize({fontSize})");
}
public Task<string> SerializeXtermStateAsync()
{
if (_terminalClosed)
@@ -225,10 +236,23 @@ namespace FluentTerminal.App.Views
return Task.CompletedTask;
}
private const string OpenSSH = "OpenSSH";
public async Task ReconnectAsync()
{
// Fill full screen with new output to not allow erasing of available output on start of new shell
Terminal_OutputReceived(this, System.Text.Encoding.UTF8.GetBytes(new String('\n', _requestedSize.Rows + 1)));
if (ViewModel.ShellProfile.Location.Contains(OpenSSH))
{
OnSessionRestart?.Invoke(this, OpenSSH);
await Task.Delay(500).ConfigureAwait(false);
Terminal_OutputReceived(this, System.Text.Encoding.UTF8.GetBytes("\n\x1b[2EReconnecting current session...\n\x1b[E"));
}
else
{
// Fill full screen with new output to not allow erasing of available output on start of new shell
Terminal_OutputReceived(this, System.Text.Encoding.UTF8.GetBytes(new String('\n', _requestedSize.Rows + 1)));
}
if (true == await StartShellProcessAsync(_requestedSize).ConfigureAwait(false))
{
File diff suppressed because it is too large. Load diff
+11 -11
View File
@@ -5,22 +5,22 @@
"main": "src/index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "xcopy /y /s node_modules\\xterm\\css\\xterm.css dist\\ && xcopy /y /s src\\style.css dist\\ && xcopy /y /s src\\index.html dist\\ && cd node_modules/xterm && yarn && yarn package && cd ../.. && npx webpack --config webpack.config.js"
"build": "xcopy /y /s node_modules\\xterm\\css\\xterm.css dist\\ && xcopy /y /s src\\style.css dist\\ && xcopy /y /s src\\index.html dist\\ && npx webpack --config webpack.config.js"
},
"author": "FS Apps",
"license": "GPL-3.0",
"devDependencies": {
"ts-loader": "^6.0.2",
"typescript": "^3.5.1",
"webpack": "^4.29.6",
"webpack-cli": "^3.2.3"
"ts-loader": "^7.0.5",
"typescript": "^3.9.5",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.12"
},
"dependencies": {
"xterm": "felixse/xterm.js#fix-edge-selection-color",
"xterm-addon-fit": "^0.3.0",
"xterm-addon-search": "^0.5.0",
"xterm-addon-serialize": "^0.1.2",
"xterm-addon-unicode11": "^0.1.1",
"xterm-addon-web-links": "^0.2.1"
"xterm": "^4.8.1",
"xterm-addon-fit": "^0.4.0",
"xterm-addon-search": "^0.7.0",
"xterm-addon-serialize": "^0.3.0",
"xterm-addon-unicode11": "^0.2.0",
"xterm-addon-web-links": "^0.4.0"
}
}
+58 -3
View File
@@ -19,6 +19,7 @@ interface ExtendedWindow extends Window {
findNext(content: string, caseSensitive: boolean, wholeWord: boolean, regex: boolean): void;
findPrevious(content: string, caseSensitive: boolean, wholeWord: boolean, regex: boolean): void;
serializeTerminal() : void;
setFontSize(fontSize: number): void;
}
declare var window: ExtendedWindow;
@@ -29,6 +30,8 @@ let searchAddon: SearchAddon;
let serializeAddon: SerializeAddon;
let webLinksAddon: WebLinksAddon;
let unicode11Addon: Unicode11Addon;
let altGrPressed = false;
let filterOutOpenSSHOutput = false;
const terminalContainer = document.getElementById('terminal-container');
@@ -42,6 +45,13 @@ function DecodeSpecialChars(data: string) {
return replaceAll("&bsol;", "\\", data);
}
window.setFontSize = (fontSize: number) => {
if (fontSize > 0) {
term.setOption('fontSize', fontSize);
fitAddon.fit();
}
}
window.serializeTerminal = () => {
let serialized = serializeAddon.serialize();
return serialized;
@@ -101,7 +111,46 @@ window.createTerminal = (options, theme, keyBindings) => {
window.term = term;
function stringToUint8Array(param: string) {
var str = unescape(encodeURIComponent(param));
var charList = str.split('');
var output = [];
for (var i = 0; i < charList.length; i++) {
output.push(charList[i].charCodeAt(0));
}
return new Uint8Array(output);
}
function uint8ArrayToString(param: Uint8Array) {
var encodedString = String.fromCharCode.apply(null, param);
return decodeURIComponent(escape(encodedString));
}
window.terminalBridge.onsessionrestart = ((param: string) => {
if (filterOutOpenSSHOutput == false) {
filterOutOpenSSHOutput = true;
}
});
window.terminalBridge.onoutput = (data => {
if (filterOutOpenSSHOutput == true) {
var str = uint8ArrayToString(data);
var sessionStarted = str.search(/(\x1b\[H\x1b\[\?25h)|(\x1b\[2;1H\x1b\]0;OpenSSH SSH client)/u);
if (sessionStarted != -1) {
filterOutOpenSSHOutput = false;
}
// Filter out new line characters following by cursor movement CSIs X and C
str = replaceAll(/\n\x1b\[\d*X\x1b\[\d*C/u, "", str);
// Filter out J (clear screen) CSIs and H (set cursor position) CSIs
str = replaceAll(/\x1b\[\d*J/u, "", str);
// Filter out H (set cursor position) CSIs
str = replaceAll(/\x1b\[\d*;?\d*H/u, "", str);
data = stringToUint8Array(str);
}
term.writeUtf8(data);
});
@@ -135,7 +184,7 @@ window.createTerminal = (options, theme, keyBindings) => {
setPadding(options.padding);
let resizeTimeout: any;
let resizeTimeout: number;
window.onresize = function () {
clearTimeout(resizeTimeout);
resizeTimeout = setTimeout(() => fitAddon.fit(), 500);
@@ -165,9 +214,16 @@ window.createTerminal = (options, theme, keyBindings) => {
});
term.attachCustomKeyEventHandler(function (e) {
if (e.type != "keydown") {
if (e.altKey && e.type === "keydown" && e.location === 2) {
altGrPressed = true;
} else if (e.altKey && e.type === "keyup" && e.key === "Control") {
altGrPressed = false
}
if (e.type != "keydown" || altGrPressed) {
return true;
}
for (var i = 0; i < window.keyBindings.length; i++) {
var keyBinding = window.keyBindings[i];
if (keyBinding.ctrl == e.ctrlKey
@@ -189,7 +245,6 @@ window.createTerminal = (options, theme, keyBindings) => {
return false;
}
e.preventDefault();
window.terminalBridge.invokeCommand(keyBinding.command);
}
File diff suppressed because it is too large. Load diff
+4 -1
View File
@@ -31,6 +31,9 @@
SwitchToTerm8,
SwitchToTerm9,
DuplicateTab,
ReconnectTab
ReconnectTab,
IncreaseFontSize,
DecreaseFontSize,
ResetFontSize
}
}
+2 -1
View File
@@ -20,6 +20,7 @@
GetCommandPathRequest = 15,
PauseTerminalOutputRequest = 16,
PauseTerminalOutputResponse = 17,
QuitApplicationRequest = 18
QuitApplicationRequest = 18,
ReadTextFileRequest = 19
}
}
@@ -0,0 +1,9 @@
namespace FluentTerminal.Models.Requests
{
public class ReadTextFileRequest : IMessage
{
public byte Identifier => (byte)MessageIdentifiers.ReadTextFileRequest;
public string Path { get; set; }
}
}
@@ -1,11 +1,7 @@
namespace FluentTerminal.Models.Responses
{
public class CommonResponse : IMessage
public class CommonResponse : TerminalResponse
{
public virtual byte Identifier => (byte) MessageIdentifiers.CommonResponse;
public bool Success { get; set; }
public string Error { get; set; }
public override byte Identifier => (byte) MessageIdentifiers.CommonResponse;
}
}
@@ -1,8 +1,8 @@
namespace FluentTerminal.Models.Responses
{
public class CreateTerminalResponse : TerminalResponse, IMessage
public class CreateTerminalResponse : TerminalResponse
{
public byte Identifier => (byte) MessageIdentifiers.CreateTerminalResponse;
public override byte Identifier => (byte) MessageIdentifiers.CreateTerminalResponse;
public string Name { get; set; }
}
@@ -1,7 +1,7 @@
namespace FluentTerminal.Models.Responses
{
public class PauseTerminalOutputResponse : TerminalResponse, IMessage
public class PauseTerminalOutputResponse : TerminalResponse
{
public byte Identifier => (byte) MessageIdentifiers.PauseTerminalOutputResponse;
public override byte Identifier => (byte) MessageIdentifiers.PauseTerminalOutputResponse;
}
}
@@ -1,11 +1,8 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace FluentTerminal.Models.Responses
namespace FluentTerminal.Models.Responses
{
public class TerminalResponse
public abstract class TerminalResponse : IMessage
{
public abstract byte Identifier { get; }
public bool Success { get; set; }
public string Error { get; set; }
}
+3 -1
View File
@@ -1,4 +1,6 @@
namespace FluentTerminal.Models
using System.ComponentModel;
namespace FluentTerminal.Models
{
public class TabTheme
{
@@ -59,6 +59,7 @@
<TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>
<DefaultLanguage>en-US</DefaultLanguage>
<AppxPackageSigningEnabled>True</AppxPackageSigningEnabled>
<PackageCertificateKeyFile>FluentTerminal.App_StoreKey.pfx</PackageCertificateKeyFile>
<EntryPointProjectUniqueName>$(SolutionDir)FluentTerminal.App\FluentTerminal.App.csproj</EntryPointProjectUniqueName>
<GenerateAppInstallerFile>False</GenerateAppInstallerFile>
<AppxAutoIncrementPackageRevision>False</AppxAutoIncrementPackageRevision>
@@ -66,48 +67,47 @@
<AppxBundlePlatforms>x64</AppxBundlePlatforms>
<HoursBetweenUpdateChecks>0</HoursBetweenUpdateChecks>
<AppxPackageSigningTimestampDigestAlgorithm>SHA256</AppxPackageSigningTimestampDigestAlgorithm>
<PackageCertificateThumbprint>9E39FAC27F1AEA1BAC9BCF60FF29B32B354E0E93</PackageCertificateThumbprint>
<AppxPackageSigningTimestampServerUrl>http://timestamp.comodoca.com</AppxPackageSigningTimestampServerUrl>
<PackageCertificateThumbprint>8A5DE5B20B663BD6A99B44C5BA278289521F419F</PackageCertificateThumbprint>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<AppxBundle>Always</AppxBundle>
<DefaultLanguage>en</DefaultLanguage>
<DefaultLanguage>en-US</DefaultLanguage>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<AppxBundle>Always</AppxBundle>
<DefaultLanguage>en</DefaultLanguage>
<DefaultLanguage>en-US</DefaultLanguage>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<AppxBundle>Always</AppxBundle>
<DefaultLanguage>en</DefaultLanguage>
<DefaultLanguage>en-US</DefaultLanguage>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<AppxBundle>Always</AppxBundle>
<DefaultLanguage>en</DefaultLanguage>
<DefaultLanguage>en-US</DefaultLanguage>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<AppxBundle>Always</AppxBundle>
<DefaultLanguage>en</DefaultLanguage>
<DefaultLanguage>en-US</DefaultLanguage>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<AppxBundle>Always</AppxBundle>
<DefaultLanguage>en</DefaultLanguage>
<DefaultLanguage>en-US</DefaultLanguage>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<AppxBundle>Always</AppxBundle>
<DefaultLanguage>en</DefaultLanguage>
<DefaultLanguage>en-US</DefaultLanguage>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<AppxBundle>Always</AppxBundle>
<DefaultLanguage>en</DefaultLanguage>
<DefaultLanguage>en-US</DefaultLanguage>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'">
<AppxBundle>Always</AppxBundle>
<DefaultLanguage>en</DefaultLanguage>
<DefaultLanguage>en-US</DefaultLanguage>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">
<AppxBundle>Always</AppxBundle>
<DefaultLanguage>en</DefaultLanguage>
<DefaultLanguage>en-US</DefaultLanguage>
</PropertyGroup>
<ItemGroup>
<AppxManifest Include="Package.appxmanifest">
+1 -1
View File
@@ -8,7 +8,7 @@
xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
IgnorableNamespaces="uap rescap desktop">
<Identity Name="53621FSApps.FluentTerminal" Publisher="CN=Felix Seidl, O=Felix Seidl, STREET=Kapellenstr. 4, L=Nürnberg, S=Bayern, PostalCode=90478, C=DE" Version="0.7.0.0" />
<Identity Name="53621FSApps.FluentTerminal" Publisher="CN=BDC72197-B634-438A-B863-16DCB7D90C85" Version="0.7.2.0" />
<Properties>
<DisplayName>Fluent Terminal</DisplayName>
+1 -1
View File
@@ -1,3 +1,3 @@
<default>
<qualifier name="Language" value="ar;ar-IQ;az;de;en;es;fr;he;hi;id;it;ja;ko;nl;pl;pt-BR;ro;ru;uk;zh-Hans;zh-Hant" />
<qualifier name="Language" value="ar;ar-IQ;az-Latn;de;en-US;eo;es;fa;fr;he;hi;hr;hu;id;it;ja;ko;nl;pl;pt-BR;ro;ru;sl;tr;ug-Arab;uk;zh-Hans;zh-Hant" />
</default>
@@ -24,5 +24,6 @@ namespace FluentTerminal.RuntimeComponent.Interfaces
event EventHandler<object> OnOutput;
event EventHandler<string> OnPaste;
event EventHandler<string> OnSessionRestart;
}
}
@@ -17,6 +17,7 @@ namespace FluentTerminal.RuntimeComponent.WebAllowedObjects
_terminalEventListener = terminalEventListener;
_terminalEventListener.OnOutput += OnOutput;
_terminalEventListener.OnPaste += OnPaste;
_terminalEventListener.OnSessionRestart += OnSessionRestart;
}
private void OnPaste(object sender, string e)
@@ -29,8 +30,14 @@ namespace FluentTerminal.RuntimeComponent.WebAllowedObjects
Task.Factory.StartNew(() => Output?.Invoke(this, e));
}
private void OnSessionRestart(object sender, string e)
{
Task.Factory.StartNew(() => SessionRestart?.Invoke(this, e));
}
public event EventHandler<object> Output;
public event EventHandler<string> Paste;
public event EventHandler<string> SessionRestart;
public void InputReceived(string message)
{
@@ -53,6 +53,9 @@ namespace FluentTerminal.SystemTray
{
while (true)
{
// Allow CPU to jump between TerminalSessions' ReadingLoop Tasks
await Task.Delay(1).ConfigureAwait(false);
bool paused;
lock (_lock)
@@ -95,7 +95,7 @@
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Store|x64'">
<OutputPath>bin\x64\Store\</OutputPath>
<DefineConstants>TRACE;X64</DefineConstants>
<DefineConstants>TRACE;X64;STORE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
@@ -203,7 +203,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Autofac">
<Version>5.1.2</Version>
<Version>5.2.0</Version>
</PackageReference>
<PackageReference Include="GlobalHotKey">
<Version>1.1.0</Version>
@@ -134,6 +134,9 @@ namespace FluentTerminal.SystemTray.Services
case MessageIdentifiers.QuitApplicationRequest:
HandleQuitApplicationRequest();
return;
case MessageIdentifiers.ReadTextFileRequest:
await HandleReadTextFileRequestAsync(args).ConfigureAwait(false);
return;
default:
Logger.Instance.Error("Received unknown message type: {messageType}", messageType);
return;
@@ -214,6 +217,31 @@ namespace FluentTerminal.SystemTray.Services
deferral.Complete();
}
private async Task HandleReadTextFileRequestAsync(AppServiceRequestReceivedEventArgs args)
{
var deferreal = args.GetDeferral();
var deferral = args.GetDeferral();
var messageContent = (string)args.Request.Message[MessageKeys.Content];
var request = JsonConvert.DeserializeObject<ReadTextFileRequest>(messageContent);
var response = new StringValueResponse();
try
{
var content = Utilities.ReadFile(request.Path);
response.Success = true;
response.Value = content;
}
catch (Exception e)
{
response.Success = false;
response.Error = e.Message;
}
await args.Request.SendResponseAsync(CreateMessage(response));
deferral.Complete();
}
private async Task HandleGetSshConfigFolderRequestAsync(AppServiceRequestReceivedEventArgs args)
{
var deferral = args.GetDeferral();
@@ -34,7 +34,7 @@ namespace FluentTerminal.SystemTray.Services.ConPty
public void Start(CreateTerminalRequest request, TerminalsManager terminalsManager)
{
_enableBuffer = request.Profile.UseBuffer;
_enableBuffer = false; // request.Profile.UseBuffer;
_reader?.Dispose();
_reader = null;
@@ -91,6 +91,11 @@ namespace FluentTerminal.SystemTray.Services.ConPty
_reader?.SetPaused(value);
}
~ConPtySession()
{
Dispose(false);
}
#region IDisposable Support
private bool _disposed;
@@ -113,6 +118,7 @@ namespace FluentTerminal.SystemTray.Services.ConPty
public void Dispose()
{
_terminal.Exited -= _terminal_Exited;
_terminal.OutputReady -= _terminal_OutputReady;
Dispose(true);
}
@@ -42,10 +42,19 @@ namespace FluentTerminal.SystemTray.Services.ConPty
ResizePseudoConsole(Handle, new COORD { X = (short)width, Y = (short)height });
}
private bool alreadyDisposed = false;
public void Dispose()
{
if (alreadyDisposed)
{
return;
}
ClosePseudoConsole(Handle);
GC.SuppressFinalize(this);
alreadyDisposed = true;
}
}
}
@@ -175,9 +175,12 @@ namespace FluentTerminal.SystemTray.Services.ConPty
if (disposeManaged)
{
ConsoleOutStream.Dispose();
// Dispose pseudo console before _consoleInputWriter to avoid
// hanging on call of ClosePseudoConsole
_pseudoConsole?.Dispose();
_consoleInputWriter?.Dispose();
_process?.Dispose();
_pseudoConsole?.Dispose();
_outputPipe?.Dispose();
_inputPipe?.Dispose();
}
@@ -22,7 +22,7 @@ namespace FluentTerminal.SystemTray.Services.WinPty
public void Start(CreateTerminalRequest request, TerminalsManager terminalsManager)
{
_enableBuffer = request.Profile.UseBuffer;
_enableBuffer = false; // request.Profile.UseBuffer;
Id = request.Id;
_terminalsManager = terminalsManager;
@@ -39,6 +39,7 @@ namespace FluentTerminal.SystemTray
private void Exit(object sender, EventArgs e)
{
_notifyIcon.Dispose(); // cleans up the tray icon
Application.Exit();
}
+5
View File
@@ -536,6 +536,11 @@ namespace FluentTerminal.SystemTray
}
}
internal static string ReadFile(string path)
{
return File.ReadAllText(path);
}
private static bool? MuteProcess(int id, bool mute, bool force = false)
{
bool? isAudioSessionMuted = VolumeControl.GetAudioSessionMute(id);
+6 -2
View File
@@ -12,6 +12,9 @@
A Terminal Emulator based on UWP and web technologies.
<a href='//www.microsoft.com/store/apps/9p2krlmfxf9t?cid=storebadge&ocid=badge'><img src='store-badge.png' alt='Get it from Microsoft' width="284px" height="104px" /></a>
## Features
- Terminal for PowerShell, CMD, WSL or custom shells
@@ -62,14 +65,15 @@ Sign up to [POEditor](https://poeditor.com/join/project/TfKNIt826z) to help with
### Prerequisite
- You need to update to Fall Creators Update or later.
### Microsoft Store
- Search for Fluent Terminal in the Microsoft Store App or click [here](https://www.microsoft.com/store/apps/9p2krlmfxf9t)
### Chocolatey package manager installation
- Install [Chocolatey](https://chocolatey.org/)
- From an elevated/admin shell, execute `choco install fluent-terminal`
### Scoop package manager installation
- [Enable sideloading apps](https://www.windowscentral.com/how-enable-windows-10-sideload-apps-outside-store)
- Alternatively, [enable developer mode](https://docs.microsoft.com/en-US/windows/uwp/get-started/enable-your-device-for-development) if you plan to do UWP app development. **For most users that do not intend to do UWP app development, developer mode will not be necessary.**
- Install Scoop
- Install 7zip and git (to add buckets): `scoop install 7zip git`
- From an elevated/admin shell, execute
+11 -4
View File
@@ -23,13 +23,15 @@ function DownloadLanguageFile($language, $directory)
Invoke-WebRequest -Uri $response.result.url -OutFile "FluentTerminal.App/Strings/$($directory)/Resources.resw"
}
DownloadLanguageFile "en"
DownloadLanguageFile "zh-CN" "zh-Hant"
DownloadLanguageFile "en" "en-US"
DownloadLanguageFile "zh-TW" "zh-Hant"
DownloadLanguageFile "zh-Hans"
DownloadLanguageFile "de"
DownloadLanguageFile "es"
DownloadLanguageFile "fr"
DownloadLanguageFile "he"
DownloadLanguageFile "hi"
DownloadLanguageFile "hr"
DownloadLanguageFile "pt-BR"
DownloadLanguageFile "ru"
DownloadLanguageFile "ro"
@@ -40,7 +42,12 @@ DownloadLanguageFile "ja"
DownloadLanguageFile "ar-iq"
DownloadLanguageFile "uk"
DownloadLanguageFile "ko"
DownloadLanguageFile "az"
DownloadLanguageFile "az" "az-Latn"
DownloadLanguageFile "ar"
DownloadLanguageFile "id"
DownloadLanguageFile "zh-Hans"
DownloadLanguageFile "fa"
DownloadLanguageFile "tr"
DownloadLanguageFile "hu"
DownloadLanguageFile "sl"
DownloadLanguageFile "ug" "ug-Arab"
DownloadLanguageFile "eo"
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB