From 6931c8d86cfe4b6b2ab40103047db1cc6bcd6a11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Mon, 24 May 2021 10:21:39 +0800 Subject: [PATCH 001/625] add cache for program plugin --- Plugins/Flow.Launcher.Plugin.Program/Main.cs | 48 ++++++++++++-------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Program/Main.cs b/Plugins/Flow.Launcher.Plugin.Program/Main.cs index 5175970fd41..b58422d2cd1 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Main.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -26,10 +27,12 @@ public class Main : ISettingProvider, IAsyncPlugin, IPluginI18n, IContextMenu, I private static BinaryStorage _win32Storage; private static BinaryStorage _uwpStorage; - public Main() - { - - } + private static readonly ConcurrentDictionary> cache = new(); + + private static readonly List emptyResults = new(); + + private int reg_count; + private int query_count; public void Save() { @@ -42,23 +45,27 @@ public async Task> QueryAsync(Query query, CancellationToken token) if (IsStartupIndexProgramsRequired) _ = IndexPrograms(); - Win32[] win32; - UWP.Application[] uwps; + query_count++; - win32 = _win32s; - uwps = _uwps; - - var result = await Task.Run(delegate + if (!cache.TryGetValue(query.Search, out var result)) { - return win32.Cast() - .Concat(uwps) - .AsParallel() - .WithCancellation(token) - .Where(p => p.Enabled) - .Select(p => p.Result(query.Search, _context.API)) - .Where(r => r?.Score > 0) - .ToList(); - }, token).ConfigureAwait(false); + result = await Task.Run(delegate + { + return _win32s.Cast() + .Concat(_uwps) + .AsParallel() + .WithCancellation(token) + .Where(p => p.Enabled) + .Select(p => p.Result(query.Search, _context.API)) + .Where(r => r?.Score > 0) + .ToList(); + }, token).ConfigureAwait(false); + + if (result.Count == 0) + result = emptyResults; + + cache[query.Search] = result; + } token.ThrowIfCancellationRequested(); @@ -110,7 +117,7 @@ public async Task InitAsync(PluginInitContext context) if (indexedWinApps && indexedUWPApps) _settings.LastIndexTime = DateTime.Today; }); - + if (!(_win32s.Any() && _uwps.Any())) await indexTask; } @@ -134,6 +141,7 @@ public static async Task IndexPrograms() var t1 = Task.Run(IndexWin32Programs); var t2 = Task.Run(IndexUwpPrograms); await Task.WhenAll(t1, t2).ConfigureAwait(false); + cache.Clear(); _settings.LastIndexTime = DateTime.Today; } From 9b1180fc892914e62fb0f849c1f75fd8d2b7b2b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Mon, 24 May 2021 11:14:20 +0800 Subject: [PATCH 002/625] remove testing code --- Plugins/Flow.Launcher.Plugin.Program/Main.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Program/Main.cs b/Plugins/Flow.Launcher.Plugin.Program/Main.cs index b58422d2cd1..c954cab8eab 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Main.cs @@ -31,8 +31,6 @@ public class Main : ISettingProvider, IAsyncPlugin, IPluginI18n, IContextMenu, I private static readonly List emptyResults = new(); - private int reg_count; - private int query_count; public void Save() { @@ -45,7 +43,6 @@ public async Task> QueryAsync(Query query, CancellationToken token) if (IsStartupIndexProgramsRequired) _ = IndexPrograms(); - query_count++; if (!cache.TryGetValue(query.Search, out var result)) { From 8eecbfbed3fdba7fd531ff159fda392bb87b8cb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Thu, 27 May 2021 19:28:17 +0800 Subject: [PATCH 003/625] Use MemoryCache to control size --- Plugins/Flow.Launcher.Plugin.Program/Main.cs | 57 ++++++++++++-------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Program/Main.cs b/Plugins/Flow.Launcher.Plugin.Program/Main.cs index c954cab8eab..b7fe1373f61 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Main.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; +using System.Collections.Specialized; using System.Diagnostics; using System.Linq; using System.Threading; @@ -10,6 +11,9 @@ using Flow.Launcher.Infrastructure.Storage; using Flow.Launcher.Plugin.Program.Programs; using Flow.Launcher.Plugin.Program.Views; +using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Primitives; using Stopwatch = Flow.Launcher.Infrastructure.Stopwatch; namespace Flow.Launcher.Plugin.Program @@ -27,10 +31,17 @@ public class Main : ISettingProvider, IAsyncPlugin, IPluginI18n, IContextMenu, I private static BinaryStorage _win32Storage; private static BinaryStorage _uwpStorage; - private static readonly ConcurrentDictionary> cache = new(); - private static readonly List emptyResults = new(); + private static readonly MemoryCacheOptions cacheOptions = new() + { + SizeLimit = 1560 + }; + private static MemoryCache cache = new(cacheOptions); + + static Main() + { + } public void Save() { @@ -40,31 +51,29 @@ public void Save() public async Task> QueryAsync(Query query, CancellationToken token) { + if (IsStartupIndexProgramsRequired) _ = IndexPrograms(); + var result = await cache.GetOrCreateAsync(query.Search, async entry => + { + var resultList = await Task.Run(() => + _win32s.Cast() + .Concat(_uwps) + .AsParallel() + .WithCancellation(token) + .Where(p => p.Enabled) + .Select(p => p.Result(query.Search, _context.API)) + .Where(r => r?.Score > 0) + .ToList()); - if (!cache.TryGetValue(query.Search, out var result)) - { - result = await Task.Run(delegate - { - return _win32s.Cast() - .Concat(_uwps) - .AsParallel() - .WithCancellation(token) - .Where(p => p.Enabled) - .Select(p => p.Result(query.Search, _context.API)) - .Where(r => r?.Score > 0) - .ToList(); - }, token).ConfigureAwait(false); - - if (result.Count == 0) - result = emptyResults; - - cache[query.Search] = result; - } + resultList = resultList.Any() ? resultList : emptyResults; + + entry.SetSize(resultList.Count); + entry.SetSlidingExpiration(TimeSpan.FromHours(8)); - token.ThrowIfCancellationRequested(); + return resultList; + }); return result; } @@ -138,7 +147,9 @@ public static async Task IndexPrograms() var t1 = Task.Run(IndexWin32Programs); var t2 = Task.Run(IndexUwpPrograms); await Task.WhenAll(t1, t2).ConfigureAwait(false); - cache.Clear(); + var oldCache = cache; + cache = new MemoryCache(cacheOptions); + oldCache.Dispose(); _settings.LastIndexTime = DateTime.Today; } From 6c61f5ddecb5c6c8560fe3c136749d5ddd0dab1e Mon Sep 17 00:00:00 2001 From: Mykhailo Pylyp Date: Wed, 9 Jun 2021 18:04:03 +0300 Subject: [PATCH 004/625] [Run-Plugin] Settings plugin (#11663) * Current settings plugin state on fresh master * typo fixes * Add to YML * Add to WXS * Address feedback - highlight the note in the tool-tip a little bit * Address feedback add extra note for "Manage known networks" * Address feedback - Show type of settings in sub-line and remove extra ControlPanel prefix in json * Add "WiFi" as alternative name for each Wi-Fi setting * Add a few more alternative names * Make RESX happy * exclude WindowsSettings.json from spell checker because all entries are placeholders for the translation * Translate all alternative names * Translate all notes * fix for not find "wifi" * fix typo * typo fixes and remove debug * Address feedback - correct author * Address feedback - settings entries * Address feedback - code changes * Address feedback - RESX changes and tool-tip * fix typo * Address feedback - remove superfluous interface * Address feedback - Update RESX * Address feedback - simplification * Address feedback - remove enumeration * Address feedback - move big function in extra helper classes * Address feedback - move big function in extra helper class * Address feedback - correct namespace * Address feedback - move translation to translation helper and make translation more robust * fix typo * Update src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Main.cs Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com> * Update src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/ResultHelper.cs Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com> * Update src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Main.cs Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com> * fix build * Address feedback * ups * Address feedback - Correct windows update settings name * Update src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/WindowsSettings.json Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com> * adding in dependencies so when you build Launcher, all plugins are included * Address feedback - add optional updates * Address feedback - use build numebr instaed of Windows version * Address feedback - Log difference between registry values + fix wrong ValueType (ushort -> uint) * Address feebdback - improved warning message on different registry values * fix typo * removed not need using * Update src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/UnsupportedSettingsHelper.cs Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com> * Update src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/UnsupportedSettingsHelper.cs Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com> * Update src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/UnsupportedSettingsHelper.cs Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com> * Addrress feedback, don't copy embed file * Address feedback - Remove duplicated or not available settings * Address feedback - Improve scoring * Address feedback - Add extra filter * Address feedback - replace the are filter sign with a better one * Address feedback - fix unwanted behavior * Address feedback - Change class name * Address feedback - Rename settings type * typo fix * Fix installer * Comment out localization support Co-authored-by: Sekan, Tobias Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com> Co-authored-by: crutkas --- .../Classes/WindowsSetting.cs | 66 + .../Helper/ContextMenuHelper.cs | 71 + .../Helper/JsonSettingsListHelper.cs | 62 + .../Helper/ResultHelper.cs | 188 + .../Helper/TranslationHelper.cs | 90 + .../Helper/UnsupportedSettingsHelper.cs | 89 + .../Images/WindowsSettings.dark.png | Bin 0 -> 2882 bytes .../Images/WindowsSettings.light.png | Bin 0 -> 2781 bytes .../Main.cs | 217 + ...owerToys.Run.Plugin.WindowsSettings.csproj | 111 + .../Properties/Resources.Designer.cs | 3951 +++++++++++++++++ .../Properties/Resources.resx | 1739 ++++++++ .../WindowsSettings.json | 1739 ++++++++ .../plugin.json | 13 + 14 files changed, 8336 insertions(+) create mode 100644 src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Classes/WindowsSetting.cs create mode 100644 src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/ContextMenuHelper.cs create mode 100644 src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/JsonSettingsListHelper.cs create mode 100644 src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/ResultHelper.cs create mode 100644 src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/TranslationHelper.cs create mode 100644 src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/UnsupportedSettingsHelper.cs create mode 100644 src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Images/WindowsSettings.dark.png create mode 100644 src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Images/WindowsSettings.light.png create mode 100644 src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Main.cs create mode 100644 src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Microsoft.PowerToys.Run.Plugin.WindowsSettings.csproj create mode 100644 src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Properties/Resources.Designer.cs create mode 100644 src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Properties/Resources.resx create mode 100644 src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/WindowsSettings.json create mode 100644 src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/plugin.json diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Classes/WindowsSetting.cs b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Classes/WindowsSetting.cs new file mode 100644 index 00000000000..5c5d2654ada --- /dev/null +++ b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Classes/WindowsSetting.cs @@ -0,0 +1,66 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Collections.Generic; + +namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings +{ + /// + /// A windows setting + /// + internal class WindowsSetting + { + /// + /// Initializes a new instance of the class. + /// + public WindowsSetting() + { + Name = string.Empty; + Area = string.Empty; + Command = string.Empty; + Type = string.Empty; + } + + /// + /// Gets or sets the name of this setting. + /// + public string Name { get; set; } + + /// + /// Gets or sets the area of this setting. + /// + public string Area { get; set; } + + /// + /// Gets or sets the command of this setting. + /// + public string Command { get; set; } + + /// + /// Gets or sets the type of the windows setting. + /// + public string Type { get; set; } + + /// + /// Gets or sets the alternative names of this setting. + /// + public IEnumerable? AltNames { get; set; } + + /// + /// Gets or sets a additional note of this settings. + /// (e.g. why is not supported on your system) + /// + public string? Note { get; set; } + + /// + /// Gets or sets the minimum need Windows build for this setting. + /// + public uint? IntroducedInBuild { get; set; } + + /// + /// Gets or sets the Windows build since this settings is not longer present. + /// + public uint? DeprecatedInBuild { get; set; } + } +} diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/ContextMenuHelper.cs b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/ContextMenuHelper.cs new file mode 100644 index 00000000000..b5cbe173c7e --- /dev/null +++ b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/ContextMenuHelper.cs @@ -0,0 +1,71 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Windows; +using System.Windows.Input; +using Microsoft.PowerToys.Run.Plugin.WindowsSettings.Properties; +using Wox.Plugin; +using Wox.Plugin.Logger; + +namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper +{ + /// + /// Helper class to easier work with context menu entries + /// + internal static class ContextMenuHelper + { + /// + /// Return a list with all context menu entries for the given + /// Symbols taken from + /// + /// The result for the context menu entires + /// The name of the this assembly + /// A list with context menu entries + internal static List GetContextMenu(in Result result, in string assemblyName) + { + if (!(result?.ContextData is WindowsSetting entry)) + { + return new List(0); + } + + var list = new List(1) + { + new ContextMenuResult + { + AcceleratorKey = Key.C, + AcceleratorModifiers = ModifierKeys.Control, + Action = _ => TryToCopyToClipBoard(entry.Command), + FontFamily = "Segoe MDL2 Assets", + Glyph = "\xE8C8", // E8C8 => Symbol: Copy + PluginName = assemblyName, + Title = $"{Resources.CopyCommand} (Ctrl+C)", + }, + }; + + return list; + } + + /// + /// Copy the given text to the clipboard + /// + /// The text to copy to the clipboard + /// The text successful copy to the clipboard, otherwise + private static bool TryToCopyToClipBoard(in string text) + { + try + { + Clipboard.Clear(); + Clipboard.SetText(text); + return true; + } + catch (Exception exception) + { + Log.Exception("Can't copy to clipboard", exception, typeof(Main)); + return false; + } + } + } +} diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/JsonSettingsListHelper.cs b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/JsonSettingsListHelper.cs new file mode 100644 index 00000000000..0ec818589ed --- /dev/null +++ b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/JsonSettingsListHelper.cs @@ -0,0 +1,62 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text.Json; +using System.Text.Json.Serialization; +using Wox.Plugin.Logger; + +namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper +{ + /// + /// Helper class to easier work with the JSON file that contains all Windows settings + /// + internal static class JsonSettingsListHelper + { + /// + /// The name of the file that contains all settings for the query + /// + private const string _settingsFile = "WindowsSettings.json"; + + /// + /// Read all possible Windows settings. + /// + /// A list with all possible windows settings. + internal static IEnumerable ReadAllPossibleSettings() + { + var assembly = Assembly.GetExecutingAssembly(); + var type = assembly.GetTypes().FirstOrDefault(x => x.Name == nameof(Main)); + + IEnumerable? settingsList = null; + + try + { + var resourceName = $"{type?.Namespace}.{_settingsFile}"; + using var stream = assembly.GetManifestResourceStream(resourceName); + if (stream is null) + { + throw new Exception("stream is null"); + } + + var options = new JsonSerializerOptions(); + options.Converters.Add(new JsonStringEnumConverter()); + + using var reader = new StreamReader(stream); + var text = reader.ReadToEnd(); + + settingsList = JsonSerializer.Deserialize>(text, options); + } + catch (Exception exception) + { + Log.Exception("Error loading settings JSON file", exception, typeof(Main)); + } + + return settingsList ?? Enumerable.Empty(); + } + } +} diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/ResultHelper.cs b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/ResultHelper.cs new file mode 100644 index 00000000000..fbea9bab1ba --- /dev/null +++ b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/ResultHelper.cs @@ -0,0 +1,188 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using Microsoft.PowerToys.Run.Plugin.WindowsSettings.Properties; +using Wox.Plugin; +using Wox.Plugin.Logger; + +namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper +{ + /// + /// Helper class to easier work with results + /// + internal static class ResultHelper + { + /// + /// Return a list with s, based on the given list. + /// + /// The original result list to convert. + /// The path to the icon of each entry. + /// A list with . + internal static List GetResultList( + in IEnumerable list, + string query, + in string iconPath) + { + var resultList = new List(list.Count()); + + foreach (var entry in list) + { + var result = new Result + { + Action = (_) => DoOpenSettingsAction(entry), + IcoPath = iconPath, + SubTitle = $"{Resources.Area} \"{entry.Area}\" {Resources.SubtitlePreposition} {entry.Type}", + Title = entry.Name, + ContextData = entry, + }; + + AddOptionalToolTip(entry, result); + + resultList.Add(result); + } + + SetScores(resultList, query); + + return resultList; + } + + /// + /// Add a tool-tip to the given , based o the given . + /// + /// The that contain informations for the tool-tip. + /// The that need a tool-tip. + private static void AddOptionalToolTip(WindowsSetting entry, Result result) + { + var toolTipText = new StringBuilder(); + + toolTipText.AppendLine($"{Resources.Application}: {entry.Type}"); + toolTipText.AppendLine($"{Resources.Area}: {entry.Area}"); + + if (entry.AltNames != null && entry.AltNames.Any()) + { + var altList = entry.AltNames.Aggregate((current, next) => $"{current}, {next}"); + + toolTipText.AppendLine($"{Resources.AlternativeName}: {altList}"); + } + + toolTipText.Append($"{Resources.Command}: {entry.Command}"); + + if (!string.IsNullOrEmpty(entry.Note)) + { + toolTipText.AppendLine(string.Empty); + toolTipText.AppendLine(string.Empty); + toolTipText.Append($"{Resources.Note}: {entry.Note}"); + } + + result.ToolTipData = new ToolTipData(entry.Name, toolTipText.ToString()); + } + + /// + /// Open the settings page of the given . + /// + /// The that contain the information to open the setting on command level. + /// if the settings could be opened, otherwise . + private static bool DoOpenSettingsAction(WindowsSetting entry) + { + ProcessStartInfo processStartInfo; + + var command = entry.Command; + + if (command.Contains("%windir%", StringComparison.InvariantCultureIgnoreCase)) + { + var windowsFolder = Environment.GetFolderPath(Environment.SpecialFolder.Windows); + command = command.Replace("%windir%", windowsFolder, StringComparison.InvariantCultureIgnoreCase); + } + + if (command.Contains(' ')) + { + var commandSplit = command.Split(' '); + var file = commandSplit.FirstOrDefault(); + var arguments = command[file.Length..].TrimStart(); + + processStartInfo = new ProcessStartInfo(file, arguments) + { + UseShellExecute = false, + }; + } + else + { + processStartInfo = new ProcessStartInfo(command) + { + UseShellExecute = true, + }; + } + + try + { + Process.Start(processStartInfo); + return true; + } + catch (Exception exception) + { + Log.Exception("can't open settings", exception, typeof(ResultHelper)); + return false; + } + } + + /// + /// Set the score (known as order number or ranking number) + /// for all in the given list, based on the given query. + /// + /// A list with s that need scores. + /// The query to calculated the score for the s. + private static void SetScores(IEnumerable resultList, string query) + { + var lowScore = 1_000; + var mediumScore = 5_000; + var highScore = 10_000; + + foreach (var result in resultList) + { + if (!(result.ContextData is WindowsSetting windowsSetting)) + { + continue; + } + + if (windowsSetting.Name.StartsWith(query, StringComparison.CurrentCultureIgnoreCase)) + { + result.Score = highScore--; + continue; + } + + // If query starts with second or next word of name, set score. + if (windowsSetting.Name.Contains($" {query}", StringComparison.CurrentCultureIgnoreCase)) + { + result.Score = mediumScore--; + continue; + } + + if (windowsSetting.Area.StartsWith(query, StringComparison.CurrentCultureIgnoreCase)) + { + result.Score = lowScore--; + continue; + } + + if (windowsSetting.AltNames is null) + { + result.Score = lowScore--; + continue; + } + + if (windowsSetting.AltNames.Any(x => x.StartsWith(query, StringComparison.CurrentCultureIgnoreCase))) + { + result.Score = mediumScore--; + continue; + } + + result.Score = lowScore--; + } + } + } +} diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/TranslationHelper.cs b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/TranslationHelper.cs new file mode 100644 index 00000000000..ee3d92c36a7 --- /dev/null +++ b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/TranslationHelper.cs @@ -0,0 +1,90 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using Microsoft.PowerToys.Run.Plugin.WindowsSettings.Properties; +using Wox.Plugin.Logger; + +namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper +{ + /// + /// Helper class to easier work with translations. + /// + internal static class TranslationHelper + { + /// + /// Translate all settings of the given list with . + /// + /// The list that contains to translate. + internal static void TranslateAllSettings(in IEnumerable? settingsList) + { + if (settingsList is null) + { + return; + } + + foreach (var settings in settingsList) + { + var area = Resources.ResourceManager.GetString($"Area{settings.Area}"); + var name = Resources.ResourceManager.GetString(settings.Name); + var type = Resources.ResourceManager.GetString(settings.Type); + + if (string.IsNullOrEmpty(area)) + { + Log.Warn($"Resource string for [Area{settings.Area}] not found", typeof(Main)); + } + + if (string.IsNullOrEmpty(name)) + { + Log.Warn($"Resource string for [{settings.Name}] not found", typeof(Main)); + } + + if (string.IsNullOrEmpty(type)) + { + Log.Warn($"Resource string for [{settings.Name}] not found", typeof(Main)); + } + + settings.Area = area ?? settings.Area ?? string.Empty; + settings.Name = name ?? settings.Name ?? string.Empty; + settings.Type = type ?? settings.Type ?? string.Empty; + + if (!string.IsNullOrEmpty(settings.Note)) + { + var note = Resources.ResourceManager.GetString(settings.Note); + if (string.IsNullOrEmpty(note)) + { + Log.Warn($"Resource string for [{settings.Note}] not found", typeof(Main)); + } + + settings.Note = note ?? settings.Note ?? string.Empty; + } + + if (!(settings.AltNames is null) && settings.AltNames.Any()) + { + var translatedAltNames = new Collection(); + + foreach (var altName in settings.AltNames) + { + if (string.IsNullOrWhiteSpace(altName)) + { + continue; + } + + var translatedAltName = Resources.ResourceManager.GetString(altName); + if (string.IsNullOrEmpty(translatedAltName)) + { + Log.Warn($"Resource string for [{altName}] not found", typeof(Main)); + } + + translatedAltNames.Add(translatedAltName ?? altName); + } + + settings.AltNames = translatedAltNames; + } + } + } + } +} diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/UnsupportedSettingsHelper.cs b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/UnsupportedSettingsHelper.cs new file mode 100644 index 00000000000..d455067f463 --- /dev/null +++ b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/UnsupportedSettingsHelper.cs @@ -0,0 +1,89 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Linq; +using Wox.Plugin.Logger; + +namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper +{ + /// + /// Helper class to easier work with the version of the Windows OS + /// + internal static class UnsupportedSettingsHelper + { + private const string _keyPath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"; + private const string _keyNameBuild = "CurrentBuild"; + private const string _keyNameBuildNumber = "CurrentBuildNumber"; + + /// + /// Remove all of the given list that are not present on the current used Windows build. + /// + /// The list with to filter. + /// A new list with that only contain present Windows settings for this OS. + internal static IEnumerable FilterByBuild(in IEnumerable? settingsList) + { + if (settingsList is null) + { + return Enumerable.Empty(); + } + + var currentBuild = GetNumericRegistryValue(_keyPath, _keyNameBuild); + var currentBuildNumber = GetNumericRegistryValue(_keyPath, _keyNameBuildNumber); + + if (currentBuild != currentBuildNumber) + { + var usedValueName = currentBuild != uint.MinValue ? _keyNameBuild : _keyNameBuildNumber; + var warningMessage = + $"Detecting the Windows version in registry ({_keyPath}) leads to an inconclusive" + + $" result ({_keyNameBuild}={currentBuild}, {_keyNameBuildNumber}={currentBuildNumber})!" + + $" For resolving the conflict we use the value of '{usedValueName}'."; + + Log.Warn(warningMessage, typeof(UnsupportedSettingsHelper)); + } + + var currentWindowsBuild = currentBuild != uint.MinValue + ? currentBuild + : currentBuildNumber; + + var filteredSettingsList = settingsList.Where(found + => (found.DeprecatedInBuild == null || currentWindowsBuild < found.DeprecatedInBuild) + && (found.IntroducedInBuild == null || currentWindowsBuild >= found.IntroducedInBuild)); + + filteredSettingsList = filteredSettingsList.OrderBy(found => found.Name); + + return filteredSettingsList; + } + + /// + /// Return a unsigned numeric value from given registry value name inside the given registry key. + /// + /// The registry key. + /// The name of the registry value. + /// A registry value or on error. + private static uint GetNumericRegistryValue(in string registryKey, in string valueName) + { + object registryValueData; + + try + { + registryValueData = Win32.Registry.GetValue(registryKey, valueName, uint.MinValue); + } + catch (Exception exception) + { + Log.Exception( + $"Can't get registry value for '{valueName}'", + exception, + typeof(UnsupportedSettingsHelper)); + + return uint.MinValue; + } + + return uint.TryParse(registryValueData as string, out var buildNumber) + ? buildNumber + : uint.MinValue; + } + } +} diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Images/WindowsSettings.dark.png b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Images/WindowsSettings.dark.png new file mode 100644 index 0000000000000000000000000000000000000000..b45708305fa713735a7d9eb4068286994c2b73dc GIT binary patch literal 2882 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 a@94Vcq*`;28gyPjE6SG#4=j9a<9`6(f!QGd literal 0 HcmV?d00001 diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Main.cs b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Main.cs new file mode 100644 index 00000000000..dfc9b229648 --- /dev/null +++ b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Main.cs @@ -0,0 +1,217 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using ManagedCommon; +using Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper; +using Microsoft.PowerToys.Run.Plugin.WindowsSettings.Properties; +using Wox.Plugin; + +namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings +{ + /// + /// Main class of this plugin that implement all used interfaces. + /// + public class Main : IPlugin, IContextMenu, IPluginI18n, IDisposable + { + /// + /// The path to the symbol for a light theme. + /// + private const string _lightSymbol = "Images/WindowsSettings.light.png"; + + /// + /// The path to the symbol for a dark theme. + /// + private const string _darkSymbol = "Images/WindowsSettings.dark.png"; + + /// + /// The name of this assembly. + /// + private readonly string _assemblyName; + + /// + /// The initial context for this plugin (contains API and meta-data). + /// + private PluginInitContext? _context; + + /// + /// The path to the icon for each result. + /// + private string _defaultIconPath; + + /// + /// Indicate that the plugin is disposed. + /// + private bool _disposed; + + /// + /// List that contain all settings. + /// + private IEnumerable? _settingsList; + + /// + /// Initializes a new instance of the class. + /// + public Main() + { + _assemblyName = Assembly.GetExecutingAssembly().GetName().Name ?? Name; + _defaultIconPath = _lightSymbol; + } + + /// + /// Gets the localized name. + /// + public string Name => Resources.PluginTitle; + + /// + /// Gets the localized description. + /// + public string Description => Resources.PluginDescription; + + /// + /// Initialize the plugin with the given . + /// + /// The for this plugin. + public void Init(PluginInitContext context) + { + _context = context ?? throw new ArgumentNullException(nameof(context)); + _context.API.ThemeChanged += OnThemeChanged; + UpdateIconPath(_context.API.GetCurrentTheme()); + + _settingsList = JsonSettingsListHelper.ReadAllPossibleSettings(); + _settingsList = UnsupportedSettingsHelper.FilterByBuild(_settingsList); + + TranslationHelper.TranslateAllSettings(_settingsList); + } + + /// + /// Return a filtered list, based on the given query. + /// + /// The query to filter the list. + /// A filtered list, can be empty when nothing was found. + public List Query(Query query) + { + if (_settingsList is null) + { + return new List(0); + } + + var filteredList = _settingsList + .Where(Predicate) + .OrderBy(found => found.Name); + + var newList = ResultHelper.GetResultList(filteredList, query.Search, _defaultIconPath); + return newList; + + bool Predicate(WindowsSetting found) + { + if (found.Name.Contains(query.Search, StringComparison.CurrentCultureIgnoreCase)) + { + return true; + } + + // Search for Area only by key char + if (found.Area.Contains(query.Search.Replace(":", string.Empty), StringComparison.CurrentCultureIgnoreCase) + && query.Search.EndsWith(":")) + { + return true; + } + + if (found.Area.Contains(query.Search, StringComparison.CurrentCultureIgnoreCase)) + { + return true; + } + + if (!(found.AltNames is null)) + { + foreach (var altName in found.AltNames) + { + if (altName.Contains(query.Search, StringComparison.CurrentCultureIgnoreCase)) + { + return true; + } + } + } + + return false; + } + } + + /// + /// Return a list context menu entries for a given (shown at the right side of the result). + /// + /// The for the list with context menu entries. + /// A list context menu entries. + public List LoadContextMenus(Result selectedResult) + { + return ContextMenuHelper.GetContextMenu(selectedResult, _assemblyName); + } + + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Wrapper method for that dispose additional objects and events form the plugin itself. + /// + /// Indicate that the plugin is disposed. + protected virtual void Dispose(bool disposing) + { + if (_disposed || !disposing) + { + return; + } + + if (!(_context is null)) + { + _context.API.ThemeChanged -= OnThemeChanged; + } + + _disposed = true; + } + + /// + /// Gets the localized name. + /// + public string GetTranslatedPluginTitle() + { + return Name; + } + + /// + /// Gets the localized description. + /// + public string GetTranslatedPluginDescription() + { + return Description; + } + + /// + /// Change all theme-based elements (typical called when the plugin theme has changed). + /// + /// The old . + /// The new . + private void OnThemeChanged(Theme oldtheme, Theme newTheme) + { + UpdateIconPath(newTheme); + } + + /// + /// Update all icons (typical called when the plugin theme has changed). + /// + /// The new for the icons. + private void UpdateIconPath(Theme theme) + { + _defaultIconPath = theme == Theme.Light || theme == Theme.HighContrastWhite + ? _lightSymbol + : _darkSymbol; + } + } +} diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Microsoft.PowerToys.Run.Plugin.WindowsSettings.csproj b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Microsoft.PowerToys.Run.Plugin.WindowsSettings.csproj new file mode 100644 index 00000000000..4b7cf12b224 --- /dev/null +++ b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Microsoft.PowerToys.Run.Plugin.WindowsSettings.csproj @@ -0,0 +1,111 @@ + + + + + netcoreapp3.1 + {5043CECE-E6A7-4867-9CBE-02D27D83747A} + Properties + Microsoft.PowerToys.Run.Plugin.WindowsSettings + Microsoft.PowerToys.Run.Plugin.WindowsSettings + $(Version).0 + false + false + x64 + prompt + true + en-US + enable + + + + ..\..\..\..\..\x64\Debug\modules\launcher\Plugins\Microsoft.PowerToys.Run.Plugin.WindowsSettings\ + DEBUG;TRACE + false + full + true + 8.0 + x64 + MinimumRecommendedRules.ruleset + 4 + true + + + + ..\..\..\..\..\x64\Release\modules\launcher\Plugins\Microsoft.PowerToys.Run.Plugin.WindowsSettings\ + TRACE + true + pdbonly + 8.0 + x64 + MinimumRecommendedRules.ruleset + 4 + true + + + + + + + + + false + + + false + + + + + + PreserveNewest + + + + + + GlobalSuppressions.cs + + + StyleCop.json + + + + + + Never + + + + + + 1.1.118 + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + + PreserveNewest + + + PreserveNewest + + + + \ No newline at end of file diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Properties/Resources.Designer.cs b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Properties/Resources.Designer.cs new file mode 100644 index 00000000000..37a3d1e4271 --- /dev/null +++ b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Properties/Resources.Designer.cs @@ -0,0 +1,3951 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.PowerToys.Run.Plugin.WindowsSettings.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to About. + /// + internal static string About { + get { + return ResourceManager.GetString("About", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to access.cpl. + /// + internal static string access_cpl { + get { + return ResourceManager.GetString("access.cpl", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Accessibility Options. + /// + internal static string AccessibilityOptions { + get { + return ResourceManager.GetString("AccessibilityOptions", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Accessory apps. + /// + internal static string AccessoryApps { + get { + return ResourceManager.GetString("AccessoryApps", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Access work or school. + /// + internal static string AccessWorkOrSchool { + get { + return ResourceManager.GetString("AccessWorkOrSchool", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Account info. + /// + internal static string AccountInfo { + get { + return ResourceManager.GetString("AccountInfo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Accounts. + /// + internal static string Accounts { + get { + return ResourceManager.GetString("Accounts", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Action Center. + /// + internal static string ActionCenter { + get { + return ResourceManager.GetString("ActionCenter", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Activation. + /// + internal static string Activation { + get { + return ResourceManager.GetString("Activation", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Activity history. + /// + internal static string ActivityHistory { + get { + return ResourceManager.GetString("ActivityHistory", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Add Hardware. + /// + internal static string AddHardware { + get { + return ResourceManager.GetString("AddHardware", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Add/Remove Programs. + /// + internal static string AddRemovePrograms { + get { + return ResourceManager.GetString("AddRemovePrograms", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Add your phone. + /// + internal static string AddYourPhone { + get { + return ResourceManager.GetString("AddYourPhone", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Administrative Tools. + /// + internal static string AdministrativeTools { + get { + return ResourceManager.GetString("AdministrativeTools", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Advanced display settings. + /// + internal static string AdvancedDisplaySettings { + get { + return ResourceManager.GetString("AdvancedDisplaySettings", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Advanced graphics. + /// + internal static string AdvancedGraphics { + get { + return ResourceManager.GetString("AdvancedGraphics", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Advertising ID. + /// + internal static string AdvertisingId { + get { + return ResourceManager.GetString("AdvertisingId", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Airplane mode. + /// + internal static string AirplaneMode { + get { + return ResourceManager.GetString("AirplaneMode", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Alt+Tab. + /// + internal static string AltAndTab { + get { + return ResourceManager.GetString("AltAndTab", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Alternative names. + /// + internal static string AlternativeName { + get { + return ResourceManager.GetString("AlternativeName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Animations. + /// + internal static string Animations { + get { + return ResourceManager.GetString("Animations", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to App color. + /// + internal static string AppColor { + get { + return ResourceManager.GetString("AppColor", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to App diagnostics. + /// + internal static string AppDiagnostics { + get { + return ResourceManager.GetString("AppDiagnostics", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to App features. + /// + internal static string AppFeatures { + get { + return ResourceManager.GetString("AppFeatures", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to App. + /// + internal static string Application { + get { + return ResourceManager.GetString("Application", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Apps and Features. + /// + internal static string AppsAndFeatures { + get { + return ResourceManager.GetString("AppsAndFeatures", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to System settings. + /// + internal static string AppSettingsApp { + get { + return ResourceManager.GetString("AppSettingsApp", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Apps for websites. + /// + internal static string AppsForWebsites { + get { + return ResourceManager.GetString("AppsForWebsites", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to App volume and device preferences. + /// + internal static string AppVolumeAndDevicePreferences { + get { + return ResourceManager.GetString("AppVolumeAndDevicePreferences", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to appwiz.cpl. + /// + internal static string appwiz_cpl { + get { + return ResourceManager.GetString("appwiz.cpl", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Area. + /// + internal static string Area { + get { + return ResourceManager.GetString("Area", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Accounts. + /// + internal static string AreaAccounts { + get { + return ResourceManager.GetString("AreaAccounts", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Administrative Tools. + /// + internal static string AreaAdministrativeTools { + get { + return ResourceManager.GetString("AreaAdministrativeTools", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Appearance and Personalization. + /// + internal static string AreaAppearanceAndPersonalization { + get { + return ResourceManager.GetString("AreaAppearanceAndPersonalization", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Apps. + /// + internal static string AreaApps { + get { + return ResourceManager.GetString("AreaApps", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Clock and Region. + /// + internal static string AreaClockAndRegion { + get { + return ResourceManager.GetString("AreaClockAndRegion", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Control Panel. + /// + internal static string AreaControlPanel { + get { + return ResourceManager.GetString("AreaControlPanel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Cortana. + /// + internal static string AreaCortana { + get { + return ResourceManager.GetString("AreaCortana", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Devices. + /// + internal static string AreaDevices { + get { + return ResourceManager.GetString("AreaDevices", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Ease of access. + /// + internal static string AreaEaseOfAccess { + get { + return ResourceManager.GetString("AreaEaseOfAccess", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Extras. + /// + internal static string AreaExtras { + get { + return ResourceManager.GetString("AreaExtras", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Gaming. + /// + internal static string AreaGaming { + get { + return ResourceManager.GetString("AreaGaming", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Hardware and Sound. + /// + internal static string AreaHardwareAndSound { + get { + return ResourceManager.GetString("AreaHardwareAndSound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Home page. + /// + internal static string AreaHomePage { + get { + return ResourceManager.GetString("AreaHomePage", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Mixed reality. + /// + internal static string AreaMixedReality { + get { + return ResourceManager.GetString("AreaMixedReality", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Network and Internet. + /// + internal static string AreaNetworkAndInternet { + get { + return ResourceManager.GetString("AreaNetworkAndInternet", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Personalization. + /// + internal static string AreaPersonalization { + get { + return ResourceManager.GetString("AreaPersonalization", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Phone. + /// + internal static string AreaPhone { + get { + return ResourceManager.GetString("AreaPhone", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Privacy. + /// + internal static string AreaPrivacy { + get { + return ResourceManager.GetString("AreaPrivacy", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Programs. + /// + internal static string AreaPrograms { + get { + return ResourceManager.GetString("AreaPrograms", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to SurfaceHub. + /// + internal static string AreaSurfaceHub { + get { + return ResourceManager.GetString("AreaSurfaceHub", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to System. + /// + internal static string AreaSystem { + get { + return ResourceManager.GetString("AreaSystem", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to System and Security. + /// + internal static string AreaSystemAndSecurity { + get { + return ResourceManager.GetString("AreaSystemAndSecurity", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Time and language. + /// + internal static string AreaTimeAndLanguage { + get { + return ResourceManager.GetString("AreaTimeAndLanguage", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Update and security. + /// + internal static string AreaUpdateAndSecurity { + get { + return ResourceManager.GetString("AreaUpdateAndSecurity", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to User accounts. + /// + internal static string AreaUserAccounts { + get { + return ResourceManager.GetString("AreaUserAccounts", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Assigned access. + /// + internal static string AssignedAccess { + get { + return ResourceManager.GetString("AssignedAccess", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Audio. + /// + internal static string Audio { + get { + return ResourceManager.GetString("Audio", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Audio alerts. + /// + internal static string AudioAlerts { + get { + return ResourceManager.GetString("AudioAlerts", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Audio and speech. + /// + internal static string AudioAndSpeech { + get { + return ResourceManager.GetString("AudioAndSpeech", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Automatic file downloads. + /// + internal static string AutomaticFileDownloads { + get { + return ResourceManager.GetString("AutomaticFileDownloads", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to AutoPlay. + /// + internal static string AutoPlay { + get { + return ResourceManager.GetString("AutoPlay", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Background. + /// + internal static string Background { + get { + return ResourceManager.GetString("Background", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Background Apps. + /// + internal static string BackgroundApps { + get { + return ResourceManager.GetString("BackgroundApps", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Backup. + /// + internal static string Backup { + get { + return ResourceManager.GetString("Backup", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Backup and Restore. + /// + internal static string BackupAndRestore { + get { + return ResourceManager.GetString("BackupAndRestore", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Battery Saver. + /// + internal static string BatterySaver { + get { + return ResourceManager.GetString("BatterySaver", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Battery Saver settings. + /// + internal static string BatterySaverSettings { + get { + return ResourceManager.GetString("BatterySaverSettings", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Battery saver usage details. + /// + internal static string BatterySaverUsageDetails { + get { + return ResourceManager.GetString("BatterySaverUsageDetails", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Battery use. + /// + internal static string BatteryUse { + get { + return ResourceManager.GetString("BatteryUse", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Biometric Devices. + /// + internal static string BiometricDevices { + get { + return ResourceManager.GetString("BiometricDevices", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to BitLocker Drive Encryption. + /// + internal static string BitLockerDriveEncryption { + get { + return ResourceManager.GetString("BitLockerDriveEncryption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Blue light. + /// + internal static string BlueLight { + get { + return ResourceManager.GetString("BlueLight", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Bluetooth. + /// + internal static string Bluetooth { + get { + return ResourceManager.GetString("Bluetooth", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Bluetooth devices. + /// + internal static string BluetoothDevices { + get { + return ResourceManager.GetString("BluetoothDevices", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Blue-yellow. + /// + internal static string BlueYellow { + get { + return ResourceManager.GetString("BlueYellow", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Bopomofo IME. + /// + internal static string BopomofoIme { + get { + return ResourceManager.GetString("BopomofoIme", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to bpmf. + /// + internal static string bpmf { + get { + return ResourceManager.GetString("bpmf", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Broadcasting. + /// + internal static string Broadcasting { + get { + return ResourceManager.GetString("Broadcasting", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Calendar. + /// + internal static string Calendar { + get { + return ResourceManager.GetString("Calendar", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Call history. + /// + internal static string CallHistory { + get { + return ResourceManager.GetString("CallHistory", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to calling. + /// + internal static string calling { + get { + return ResourceManager.GetString("calling", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Camera. + /// + internal static string Camera { + get { + return ResourceManager.GetString("Camera", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Cangjie IME. + /// + internal static string CangjieIme { + get { + return ResourceManager.GetString("CangjieIme", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Caps Lock. + /// + internal static string CapsLock { + get { + return ResourceManager.GetString("CapsLock", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Cellular and SIM. + /// + internal static string CellularAndSim { + get { + return ResourceManager.GetString("CellularAndSim", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Choose which folders appear on Start. + /// + internal static string ChooseWhichFoldersAppearOnStart { + get { + return ResourceManager.GetString("ChooseWhichFoldersAppearOnStart", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Client service for NetWare. + /// + internal static string ClientServiceForNetWare { + get { + return ResourceManager.GetString("ClientServiceForNetWare", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Clipboard. + /// + internal static string Clipboard { + get { + return ResourceManager.GetString("Clipboard", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Closed captions. + /// + internal static string ClosedCaptions { + get { + return ResourceManager.GetString("ClosedCaptions", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Color filters. + /// + internal static string ColorFilters { + get { + return ResourceManager.GetString("ColorFilters", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Color management. + /// + internal static string ColorManagement { + get { + return ResourceManager.GetString("ColorManagement", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Colors. + /// + internal static string Colors { + get { + return ResourceManager.GetString("Colors", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Command. + /// + internal static string Command { + get { + return ResourceManager.GetString("Command", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Connected Devices. + /// + internal static string ConnectedDevices { + get { + return ResourceManager.GetString("ConnectedDevices", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Contacts. + /// + internal static string Contacts { + get { + return ResourceManager.GetString("Contacts", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Control Panel. + /// + internal static string ControlPanel { + get { + return ResourceManager.GetString("ControlPanel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Copy command. + /// + internal static string CopyCommand { + get { + return ResourceManager.GetString("CopyCommand", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Core Isolation. + /// + internal static string CoreIsolation { + get { + return ResourceManager.GetString("CoreIsolation", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Cortana. + /// + internal static string Cortana { + get { + return ResourceManager.GetString("Cortana", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Cortana across my devices. + /// + internal static string CortanaAcrossMyDevices { + get { + return ResourceManager.GetString("CortanaAcrossMyDevices", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Cortana - Language. + /// + internal static string CortanaLanguage { + get { + return ResourceManager.GetString("CortanaLanguage", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Credential manager. + /// + internal static string CredentialManager { + get { + return ResourceManager.GetString("CredentialManager", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Crossdevice. + /// + internal static string Crossdevice { + get { + return ResourceManager.GetString("Crossdevice", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Custom devices. + /// + internal static string CustomDevices { + get { + return ResourceManager.GetString("CustomDevices", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Dark color. + /// + internal static string DarkColor { + get { + return ResourceManager.GetString("DarkColor", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Dark mode. + /// + internal static string DarkMode { + get { + return ResourceManager.GetString("DarkMode", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Data usage. + /// + internal static string DataUsage { + get { + return ResourceManager.GetString("DataUsage", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Date and time. + /// + internal static string DateAndTime { + get { + return ResourceManager.GetString("DateAndTime", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Default apps. + /// + internal static string DefaultApps { + get { + return ResourceManager.GetString("DefaultApps", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Default camera. + /// + internal static string DefaultCamera { + get { + return ResourceManager.GetString("DefaultCamera", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Default location. + /// + internal static string DefaultLocation { + get { + return ResourceManager.GetString("DefaultLocation", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Default programs. + /// + internal static string DefaultPrograms { + get { + return ResourceManager.GetString("DefaultPrograms", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Default Save Locations. + /// + internal static string DefaultSaveLocations { + get { + return ResourceManager.GetString("DefaultSaveLocations", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Delivery Optimization. + /// + internal static string DeliveryOptimization { + get { + return ResourceManager.GetString("DeliveryOptimization", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to desk.cpl. + /// + internal static string desk_cpl { + get { + return ResourceManager.GetString("desk.cpl", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Desktop themes. + /// + internal static string DesktopThemes { + get { + return ResourceManager.GetString("DesktopThemes", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to deuteranopia. + /// + internal static string deuteranopia { + get { + return ResourceManager.GetString("deuteranopia", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Device manager. + /// + internal static string DeviceManager { + get { + return ResourceManager.GetString("DeviceManager", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Devices and printers. + /// + internal static string DevicesAndPrinters { + get { + return ResourceManager.GetString("DevicesAndPrinters", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to DHCP. + /// + internal static string Dhcp { + get { + return ResourceManager.GetString("Dhcp", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Dial-up. + /// + internal static string DialUp { + get { + return ResourceManager.GetString("DialUp", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Direct access. + /// + internal static string DirectAccess { + get { + return ResourceManager.GetString("DirectAccess", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Direct open your phone. + /// + internal static string DirectOpenYourPhone { + get { + return ResourceManager.GetString("DirectOpenYourPhone", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Display. + /// + internal static string Display { + get { + return ResourceManager.GetString("Display", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Display properties. + /// + internal static string DisplayProperties { + get { + return ResourceManager.GetString("DisplayProperties", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to DNS. + /// + internal static string DNS { + get { + return ResourceManager.GetString("DNS", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Documents. + /// + internal static string Documents { + get { + return ResourceManager.GetString("Documents", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Duplicating my display. + /// + internal static string DuplicatingMyDisplay { + get { + return ResourceManager.GetString("DuplicatingMyDisplay", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to During these hours. + /// + internal static string DuringTheseHours { + get { + return ResourceManager.GetString("DuringTheseHours", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Ease of access center. + /// + internal static string EaseOfAccessCenter { + get { + return ResourceManager.GetString("EaseOfAccessCenter", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Edition. + /// + internal static string Edition { + get { + return ResourceManager.GetString("Edition", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Email. + /// + internal static string Email { + get { + return ResourceManager.GetString("Email", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Email and app accounts. + /// + internal static string EmailAndAppAccounts { + get { + return ResourceManager.GetString("EmailAndAppAccounts", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Encryption. + /// + internal static string Encryption { + get { + return ResourceManager.GetString("Encryption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Environment. + /// + internal static string Environment { + get { + return ResourceManager.GetString("Environment", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Ethernet. + /// + internal static string Ethernet { + get { + return ResourceManager.GetString("Ethernet", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Exploit Protection. + /// + internal static string ExploitProtection { + get { + return ResourceManager.GetString("ExploitProtection", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Extras. + /// + internal static string Extras { + get { + return ResourceManager.GetString("Extras", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Eye control. + /// + internal static string EyeControl { + get { + return ResourceManager.GetString("EyeControl", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Eye tracker. + /// + internal static string EyeTracker { + get { + return ResourceManager.GetString("EyeTracker", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Family and other people. + /// + internal static string FamilyAndOtherPeople { + get { + return ResourceManager.GetString("FamilyAndOtherPeople", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Feedback and diagnostics. + /// + internal static string FeedbackAndDiagnostics { + get { + return ResourceManager.GetString("FeedbackAndDiagnostics", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to File system. + /// + internal static string FileSystem { + get { + return ResourceManager.GetString("FileSystem", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to FindFast. + /// + internal static string FindFast { + get { + return ResourceManager.GetString("FindFast", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to findfast.cpl. + /// + internal static string findfast_cpl { + get { + return ResourceManager.GetString("findfast.cpl", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Find My Device. + /// + internal static string FindMyDevice { + get { + return ResourceManager.GetString("FindMyDevice", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Firewall. + /// + internal static string Firewall { + get { + return ResourceManager.GetString("Firewall", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Focus assist - Quiet hours. + /// + internal static string FocusAssistQuietHours { + get { + return ResourceManager.GetString("FocusAssistQuietHours", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Focus assist - Quiet moments. + /// + internal static string FocusAssistQuietMoments { + get { + return ResourceManager.GetString("FocusAssistQuietMoments", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Folder options. + /// + internal static string FolderOptions { + get { + return ResourceManager.GetString("FolderOptions", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Fonts. + /// + internal static string Fonts { + get { + return ResourceManager.GetString("Fonts", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to For developers. + /// + internal static string ForDevelopers { + get { + return ResourceManager.GetString("ForDevelopers", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Game bar. + /// + internal static string GameBar { + get { + return ResourceManager.GetString("GameBar", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Game controllers. + /// + internal static string GameControllers { + get { + return ResourceManager.GetString("GameControllers", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Game DVR. + /// + internal static string GameDvr { + get { + return ResourceManager.GetString("GameDvr", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Game Mode. + /// + internal static string GameMode { + get { + return ResourceManager.GetString("GameMode", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Gateway. + /// + internal static string Gateway { + get { + return ResourceManager.GetString("Gateway", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to General. + /// + internal static string General { + get { + return ResourceManager.GetString("General", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Get programs. + /// + internal static string GetPrograms { + get { + return ResourceManager.GetString("GetPrograms", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Getting started. + /// + internal static string GettingStarted { + get { + return ResourceManager.GetString("GettingStarted", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Glance. + /// + internal static string Glance { + get { + return ResourceManager.GetString("Glance", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Graphics settings. + /// + internal static string GraphicsSettings { + get { + return ResourceManager.GetString("GraphicsSettings", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Grayscale. + /// + internal static string Grayscale { + get { + return ResourceManager.GetString("Grayscale", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Green week. + /// + internal static string GreenWeek { + get { + return ResourceManager.GetString("GreenWeek", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Headset display. + /// + internal static string HeadsetDisplay { + get { + return ResourceManager.GetString("HeadsetDisplay", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to High contrast. + /// + internal static string HighContrast { + get { + return ResourceManager.GetString("HighContrast", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Holographic audio. + /// + internal static string HolographicAudio { + get { + return ResourceManager.GetString("HolographicAudio", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Holographic Environment. + /// + internal static string HolographicEnvironment { + get { + return ResourceManager.GetString("HolographicEnvironment", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Holographic Headset. + /// + internal static string HolographicHeadset { + get { + return ResourceManager.GetString("HolographicHeadset", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Holographic Management. + /// + internal static string HolographicManagement { + get { + return ResourceManager.GetString("HolographicManagement", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Home group. + /// + internal static string HomeGroup { + get { + return ResourceManager.GetString("HomeGroup", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ID. + /// + internal static string Id { + get { + return ResourceManager.GetString("Id", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Image. + /// + internal static string Image { + get { + return ResourceManager.GetString("Image", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Indexing options. + /// + internal static string IndexingOptions { + get { + return ResourceManager.GetString("IndexingOptions", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to inetcpl.cpl. + /// + internal static string inetcpl_cpl { + get { + return ResourceManager.GetString("inetcpl.cpl", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Infrared. + /// + internal static string Infrared { + get { + return ResourceManager.GetString("Infrared", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Inking and typing. + /// + internal static string InkingAndTyping { + get { + return ResourceManager.GetString("InkingAndTyping", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Internet options. + /// + internal static string InternetOptions { + get { + return ResourceManager.GetString("InternetOptions", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to intl.cpl. + /// + internal static string intl_cpl { + get { + return ResourceManager.GetString("intl.cpl", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Inverted colors. + /// + internal static string InvertedColors { + get { + return ResourceManager.GetString("InvertedColors", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to IP. + /// + internal static string Ip { + get { + return ResourceManager.GetString("Ip", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Isolated Browsing. + /// + internal static string IsolatedBrowsing { + get { + return ResourceManager.GetString("IsolatedBrowsing", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Japan IME settings. + /// + internal static string JapanImeSettings { + get { + return ResourceManager.GetString("JapanImeSettings", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to joy.cpl. + /// + internal static string joy_cpl { + get { + return ResourceManager.GetString("joy.cpl", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Joystick properties. + /// + internal static string JoystickProperties { + get { + return ResourceManager.GetString("JoystickProperties", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to jpnime. + /// + internal static string jpnime { + get { + return ResourceManager.GetString("jpnime", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Keyboard. + /// + internal static string Keyboard { + get { + return ResourceManager.GetString("Keyboard", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Keypad. + /// + internal static string Keypad { + get { + return ResourceManager.GetString("Keypad", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Keys. + /// + internal static string Keys { + get { + return ResourceManager.GetString("Keys", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Language. + /// + internal static string Language { + get { + return ResourceManager.GetString("Language", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Light color. + /// + internal static string LightColor { + get { + return ResourceManager.GetString("LightColor", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Light mode. + /// + internal static string LightMode { + get { + return ResourceManager.GetString("LightMode", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Location. + /// + internal static string Location { + get { + return ResourceManager.GetString("Location", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Lock screen. + /// + internal static string LockScreen { + get { + return ResourceManager.GetString("LockScreen", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Magnifier. + /// + internal static string Magnifier { + get { + return ResourceManager.GetString("Magnifier", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Mail - Microsoft Exchange or Windows Messaging. + /// + internal static string MailMicrosoftExchangeOrWindowsMessaging { + get { + return ResourceManager.GetString("MailMicrosoftExchangeOrWindowsMessaging", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to main.cpl. + /// + internal static string main_cpl { + get { + return ResourceManager.GetString("main.cpl", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Manage known networks. + /// + internal static string ManageKnownNetworks { + get { + return ResourceManager.GetString("ManageKnownNetworks", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Manage optional features. + /// + internal static string ManageOptionalFeatures { + get { + return ResourceManager.GetString("ManageOptionalFeatures", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Messaging. + /// + internal static string Messaging { + get { + return ResourceManager.GetString("Messaging", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Metered connection. + /// + internal static string MeteredConnection { + get { + return ResourceManager.GetString("MeteredConnection", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Microphone. + /// + internal static string Microphone { + get { + return ResourceManager.GetString("Microphone", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Microsoft Mail Post Office. + /// + internal static string MicrosoftMailPostOffice { + get { + return ResourceManager.GetString("MicrosoftMailPostOffice", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to mlcfg32.cpl. + /// + internal static string mlcfg32_cpl { + get { + return ResourceManager.GetString("mlcfg32.cpl", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to mmsys.cpl. + /// + internal static string mmsys_cpl { + get { + return ResourceManager.GetString("mmsys.cpl", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Mobile devices. + /// + internal static string MobileDevices { + get { + return ResourceManager.GetString("MobileDevices", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Mobile hotspot. + /// + internal static string MobileHotspot { + get { + return ResourceManager.GetString("MobileHotspot", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to modem.cpl. + /// + internal static string modem_cpl { + get { + return ResourceManager.GetString("modem.cpl", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Mono. + /// + internal static string Mono { + get { + return ResourceManager.GetString("Mono", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to More details. + /// + internal static string MoreDetails { + get { + return ResourceManager.GetString("MoreDetails", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Motion. + /// + internal static string Motion { + get { + return ResourceManager.GetString("Motion", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Mouse. + /// + internal static string Mouse { + get { + return ResourceManager.GetString("Mouse", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Mouse and touchpad. + /// + internal static string MouseAndTouchpad { + get { + return ResourceManager.GetString("MouseAndTouchpad", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Mouse, Fonts, Keyboard, and Printers properties. + /// + internal static string MouseFontsKeyboardAndPrintersProperties { + get { + return ResourceManager.GetString("MouseFontsKeyboardAndPrintersProperties", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Mouse pointer. + /// + internal static string MousePointer { + get { + return ResourceManager.GetString("MousePointer", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Multimedia properties. + /// + internal static string MultimediaProperties { + get { + return ResourceManager.GetString("MultimediaProperties", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Multitasking. + /// + internal static string Multitasking { + get { + return ResourceManager.GetString("Multitasking", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Narrator. + /// + internal static string Narrator { + get { + return ResourceManager.GetString("Narrator", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Navigation bar. + /// + internal static string NavigationBar { + get { + return ResourceManager.GetString("NavigationBar", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to netcpl.cpl. + /// + internal static string netcpl_cpl { + get { + return ResourceManager.GetString("netcpl.cpl", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to netsetup.cpl. + /// + internal static string netsetup_cpl { + get { + return ResourceManager.GetString("netsetup.cpl", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Network. + /// + internal static string Network { + get { + return ResourceManager.GetString("Network", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Network and sharing center. + /// + internal static string NetworkAndSharingCenter { + get { + return ResourceManager.GetString("NetworkAndSharingCenter", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Network connection. + /// + internal static string NetworkConnection { + get { + return ResourceManager.GetString("NetworkConnection", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Network properties. + /// + internal static string NetworkProperties { + get { + return ResourceManager.GetString("NetworkProperties", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Network Setup Wizard. + /// + internal static string NetworkSetupWizard { + get { + return ResourceManager.GetString("NetworkSetupWizard", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Network status. + /// + internal static string NetworkStatus { + get { + return ResourceManager.GetString("NetworkStatus", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to NFC. + /// + internal static string NFC { + get { + return ResourceManager.GetString("NFC", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to NFC Transactions. + /// + internal static string NFCTransactions { + get { + return ResourceManager.GetString("NFCTransactions", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Night light. + /// + internal static string NightLight { + get { + return ResourceManager.GetString("NightLight", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Night light settings. + /// + internal static string NightLightSettings { + get { + return ResourceManager.GetString("NightLightSettings", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Note. + /// + internal static string Note { + get { + return ResourceManager.GetString("Note", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Only available when you have connected a mobile device to your device.. + /// + internal static string NoteAddYourPhone { + get { + return ResourceManager.GetString("NoteAddYourPhone", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Only available on devices that support advanced graphics options.. + /// + internal static string NoteAdvancedGraphics { + get { + return ResourceManager.GetString("NoteAdvancedGraphics", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Only available on devices that have a battery, such as a tablet.. + /// + internal static string NoteBattery { + get { + return ResourceManager.GetString("NoteBattery", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Deprecated in Windows 10, version 1809 (build 17763) and later.. + /// + internal static string NoteDeprecated17763 { + get { + return ResourceManager.GetString("NoteDeprecated17763", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Only available if Dial is paired.. + /// + internal static string NoteDialPaired { + get { + return ResourceManager.GetString("NoteDialPaired", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Only available if DirectAccess is enabled.. + /// + internal static string NoteDirectAccess { + get { + return ResourceManager.GetString("NoteDirectAccess", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Only available on devices that support advanced display options.. + /// + internal static string NoteDisplayGraphics { + get { + return ResourceManager.GetString("NoteDisplayGraphics", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Only present if user is enrolled in WIP.. + /// + internal static string NoteEnrolledWIP { + get { + return ResourceManager.GetString("NoteEnrolledWIP", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Requires eyetracker hardware.. + /// + internal static string NoteEyetrackerHardware { + get { + return ResourceManager.GetString("NoteEyetrackerHardware", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Available if the Microsoft Japan input method editor is installed.. + /// + internal static string NoteImeJapan { + get { + return ResourceManager.GetString("NoteImeJapan", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Available if the Microsoft Pinyin input method editor is installed.. + /// + internal static string NoteImePinyin { + get { + return ResourceManager.GetString("NoteImePinyin", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Available if the Microsoft Wubi input method editor is installed.. + /// + internal static string NoteImeWubi { + get { + return ResourceManager.GetString("NoteImeWubi", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Only available if the Mixed Reality Portal app is installed.. + /// + internal static string NoteMixedReality { + get { + return ResourceManager.GetString("NoteMixedReality", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Only available on mobile and if the enterprise has deployed a provisioning package.. + /// + internal static string NoteMobileProvisioning { + get { + return ResourceManager.GetString("NoteMobileProvisioning", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Added in Windows 10, version 1903 (build 18362).. + /// + internal static string NoteSince18362 { + get { + return ResourceManager.GetString("NoteSince18362", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Added in Windows 10, version 2004 (build 19041).. + /// + internal static string NoteSince19041 { + get { + return ResourceManager.GetString("NoteSince19041", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Only available if "settings apps" are installed, for example, by a 3rd party.. + /// + internal static string NoteThirdParty { + get { + return ResourceManager.GetString("NoteThirdParty", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Only available if touchpad hardware is present.. + /// + internal static string NoteTouchpad { + get { + return ResourceManager.GetString("NoteTouchpad", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Only available if the device has a Wi-Fi adapter.. + /// + internal static string NoteWiFiAdapter { + get { + return ResourceManager.GetString("NoteWiFiAdapter", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Device must be Windows Anywhere-capable.. + /// + internal static string NoteWindowsAnywhere { + get { + return ResourceManager.GetString("NoteWindowsAnywhere", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Only available if enterprise has deployed a provisioning package.. + /// + internal static string NoteWorkplaceProvisioning { + get { + return ResourceManager.GetString("NoteWorkplaceProvisioning", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Notifications. + /// + internal static string Notifications { + get { + return ResourceManager.GetString("Notifications", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Notifications and actions. + /// + internal static string NotificationsAndActions { + get { + return ResourceManager.GetString("NotificationsAndActions", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Num Lock. + /// + internal static string NumLock { + get { + return ResourceManager.GetString("NumLock", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to nwc.cpl. + /// + internal static string nwc_cpl { + get { + return ResourceManager.GetString("nwc.cpl", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to odbccp32.cpl. + /// + internal static string odbccp32_cpl { + get { + return ResourceManager.GetString("odbccp32.cpl", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ODBC Data Source Administrator (32-bit). + /// + internal static string OdbcDataSourceAdministrator32Bit { + get { + return ResourceManager.GetString("OdbcDataSourceAdministrator32Bit", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ODBC Data Source Administrator (64-bit). + /// + internal static string OdbcDataSourceAdministrator64Bit { + get { + return ResourceManager.GetString("OdbcDataSourceAdministrator64Bit", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Offline files. + /// + internal static string OfflineFiles { + get { + return ResourceManager.GetString("OfflineFiles", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Offline Maps. + /// + internal static string OfflineMaps { + get { + return ResourceManager.GetString("OfflineMaps", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Offline Maps - Download maps. + /// + internal static string OfflineMapsDownloadMaps { + get { + return ResourceManager.GetString("OfflineMapsDownloadMaps", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to On-Screen. + /// + internal static string OnScreen { + get { + return ResourceManager.GetString("OnScreen", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to OS. + /// + internal static string Os { + get { + return ResourceManager.GetString("Os", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Other devices. + /// + internal static string OtherDevices { + get { + return ResourceManager.GetString("OtherDevices", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Other options. + /// + internal static string OtherOptions { + get { + return ResourceManager.GetString("OtherOptions", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Other users. + /// + internal static string OtherUsers { + get { + return ResourceManager.GetString("OtherUsers", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Parental controls. + /// + internal static string ParentalControls { + get { + return ResourceManager.GetString("ParentalControls", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Password. + /// + internal static string Password { + get { + return ResourceManager.GetString("Password", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to password.cpl. + /// + internal static string password_cpl { + get { + return ResourceManager.GetString("password.cpl", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Password properties. + /// + internal static string PasswordProperties { + get { + return ResourceManager.GetString("PasswordProperties", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Pen and input devices. + /// + internal static string PenAndInputDevices { + get { + return ResourceManager.GetString("PenAndInputDevices", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Pen and touch. + /// + internal static string PenAndTouch { + get { + return ResourceManager.GetString("PenAndTouch", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Pen and Windows Ink. + /// + internal static string PenAndWindowsInk { + get { + return ResourceManager.GetString("PenAndWindowsInk", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to People Near Me. + /// + internal static string PeopleNearMe { + get { + return ResourceManager.GetString("PeopleNearMe", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Performance information and tools. + /// + internal static string PerformanceInformationAndTools { + get { + return ResourceManager.GetString("PerformanceInformationAndTools", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Permissions and history. + /// + internal static string PermissionsAndHistory { + get { + return ResourceManager.GetString("PermissionsAndHistory", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Personalization (category). + /// + internal static string PersonalizationCategory { + get { + return ResourceManager.GetString("PersonalizationCategory", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Phone. + /// + internal static string Phone { + get { + return ResourceManager.GetString("Phone", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Phone and modem. + /// + internal static string PhoneAndModem { + get { + return ResourceManager.GetString("PhoneAndModem", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Phone and modem - Options. + /// + internal static string PhoneAndModemOptions { + get { + return ResourceManager.GetString("PhoneAndModemOptions", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Phone calls. + /// + internal static string PhoneCalls { + get { + return ResourceManager.GetString("PhoneCalls", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Phone - Default apps. + /// + internal static string PhoneDefaultApps { + get { + return ResourceManager.GetString("PhoneDefaultApps", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Picture. + /// + internal static string Picture { + get { + return ResourceManager.GetString("Picture", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Pictures. + /// + internal static string Pictures { + get { + return ResourceManager.GetString("Pictures", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Pinyin IME settings. + /// + internal static string PinyinImeSettings { + get { + return ResourceManager.GetString("PinyinImeSettings", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Pinyin IME settings - domain lexicon. + /// + internal static string PinyinImeSettingsDomainLexicon { + get { + return ResourceManager.GetString("PinyinImeSettingsDomainLexicon", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Pinyin IME settings - Key configuration. + /// + internal static string PinyinImeSettingsKeyConfiguration { + get { + return ResourceManager.GetString("PinyinImeSettingsKeyConfiguration", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Pinyin IME settings - UDP. + /// + internal static string PinyinImeSettingsUdp { + get { + return ResourceManager.GetString("PinyinImeSettingsUdp", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Playing a game full screen. + /// + internal static string PlayingGameFullScreen { + get { + return ResourceManager.GetString("PlayingGameFullScreen", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Plugin to search for Windows settings. + /// + internal static string PluginDescription { + get { + return ResourceManager.GetString("PluginDescription", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Windows settings. + /// + internal static string PluginTitle { + get { + return ResourceManager.GetString("PluginTitle", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Power and sleep. + /// + internal static string PowerAndSleep { + get { + return ResourceManager.GetString("PowerAndSleep", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to powercfg.cpl. + /// + internal static string powercfg_cpl { + get { + return ResourceManager.GetString("powercfg.cpl", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Power options. + /// + internal static string PowerOptions { + get { + return ResourceManager.GetString("PowerOptions", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Presentation. + /// + internal static string Presentation { + get { + return ResourceManager.GetString("Presentation", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Printers. + /// + internal static string Printers { + get { + return ResourceManager.GetString("Printers", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Printers and scanners. + /// + internal static string PrintersAndScanners { + get { + return ResourceManager.GetString("PrintersAndScanners", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Print screen. + /// + internal static string PrintScreen { + get { + return ResourceManager.GetString("PrintScreen", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Problem reports and solutions. + /// + internal static string ProblemReportsAndSolutions { + get { + return ResourceManager.GetString("ProblemReportsAndSolutions", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Processor. + /// + internal static string Processor { + get { + return ResourceManager.GetString("Processor", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Programs and features. + /// + internal static string ProgramsAndFeatures { + get { + return ResourceManager.GetString("ProgramsAndFeatures", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Projecting to this PC. + /// + internal static string ProjectingToThisPc { + get { + return ResourceManager.GetString("ProjectingToThisPc", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to protanopia. + /// + internal static string protanopia { + get { + return ResourceManager.GetString("protanopia", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Provisioning. + /// + internal static string Provisioning { + get { + return ResourceManager.GetString("Provisioning", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Proximity. + /// + internal static string Proximity { + get { + return ResourceManager.GetString("Proximity", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Proxy. + /// + internal static string Proxy { + get { + return ResourceManager.GetString("Proxy", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Quickime. + /// + internal static string Quickime { + get { + return ResourceManager.GetString("Quickime", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Quiet moments game. + /// + internal static string QuietMomentsGame { + get { + return ResourceManager.GetString("QuietMomentsGame", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Radios. + /// + internal static string Radios { + get { + return ResourceManager.GetString("Radios", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to RAM. + /// + internal static string Ram { + get { + return ResourceManager.GetString("Ram", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Recognition. + /// + internal static string Recognition { + get { + return ResourceManager.GetString("Recognition", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Recovery. + /// + internal static string Recovery { + get { + return ResourceManager.GetString("Recovery", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Red eye. + /// + internal static string RedEye { + get { + return ResourceManager.GetString("RedEye", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Red-green. + /// + internal static string RedGreen { + get { + return ResourceManager.GetString("RedGreen", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Red week. + /// + internal static string RedWeek { + get { + return ResourceManager.GetString("RedWeek", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Region. + /// + internal static string Region { + get { + return ResourceManager.GetString("Region", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Regional language. + /// + internal static string RegionalLanguage { + get { + return ResourceManager.GetString("RegionalLanguage", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Regional settings properties. + /// + internal static string RegionalSettingsProperties { + get { + return ResourceManager.GetString("RegionalSettingsProperties", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Region and language. + /// + internal static string RegionAndLanguage { + get { + return ResourceManager.GetString("RegionAndLanguage", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Region formatting. + /// + internal static string RegionFormatting { + get { + return ResourceManager.GetString("RegionFormatting", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to RemoteApp and desktop connections. + /// + internal static string RemoteAppAndDesktopConnections { + get { + return ResourceManager.GetString("RemoteAppAndDesktopConnections", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Remote Desktop. + /// + internal static string RemoteDesktop { + get { + return ResourceManager.GetString("RemoteDesktop", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Scanners and cameras. + /// + internal static string ScannersAndCameras { + get { + return ResourceManager.GetString("ScannersAndCameras", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to schedtasks. + /// + internal static string schedtasks { + get { + return ResourceManager.GetString("schedtasks", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Scheduled. + /// + internal static string Scheduled { + get { + return ResourceManager.GetString("Scheduled", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Scheduled tasks. + /// + internal static string ScheduledTasks { + get { + return ResourceManager.GetString("ScheduledTasks", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Screen rotation. + /// + internal static string ScreenRotation { + get { + return ResourceManager.GetString("ScreenRotation", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Scroll bars. + /// + internal static string ScrollBars { + get { + return ResourceManager.GetString("ScrollBars", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Scroll Lock. + /// + internal static string ScrollLock { + get { + return ResourceManager.GetString("ScrollLock", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to SDNS. + /// + internal static string Sdns { + get { + return ResourceManager.GetString("Sdns", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Searching Windows. + /// + internal static string SearchingWindows { + get { + return ResourceManager.GetString("SearchingWindows", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to SecureDNS. + /// + internal static string SecureDNS { + get { + return ResourceManager.GetString("SecureDNS", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Security Center. + /// + internal static string SecurityCenter { + get { + return ResourceManager.GetString("SecurityCenter", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Security Processor. + /// + internal static string SecurityProcessor { + get { + return ResourceManager.GetString("SecurityProcessor", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Session cleanup. + /// + internal static string SessionCleanup { + get { + return ResourceManager.GetString("SessionCleanup", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Settings home page. + /// + internal static string SettingsHomePage { + get { + return ResourceManager.GetString("SettingsHomePage", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Set up a kiosk. + /// + internal static string SetUpKiosk { + get { + return ResourceManager.GetString("SetUpKiosk", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Shared experiences. + /// + internal static string SharedExperiences { + get { + return ResourceManager.GetString("SharedExperiences", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Shortcuts. + /// + internal static string Shortcuts { + get { + return ResourceManager.GetString("Shortcuts", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to wifi. + /// + internal static string ShortNameWiFi { + get { + return ResourceManager.GetString("ShortNameWiFi", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Sign-in options. + /// + internal static string SignInOptions { + get { + return ResourceManager.GetString("SignInOptions", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Sign-in options - Dynamic lock. + /// + internal static string SignInOptionsDynamicLock { + get { + return ResourceManager.GetString("SignInOptionsDynamicLock", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Size. + /// + internal static string Size { + get { + return ResourceManager.GetString("Size", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Sound. + /// + internal static string Sound { + get { + return ResourceManager.GetString("Sound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Speech. + /// + internal static string Speech { + get { + return ResourceManager.GetString("Speech", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Speech recognition. + /// + internal static string SpeechRecognition { + get { + return ResourceManager.GetString("SpeechRecognition", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Speech typing. + /// + internal static string SpeechTyping { + get { + return ResourceManager.GetString("SpeechTyping", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Start. + /// + internal static string Start { + get { + return ResourceManager.GetString("Start", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Start places. + /// + internal static string StartPlaces { + get { + return ResourceManager.GetString("StartPlaces", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Startup apps. + /// + internal static string StartupApps { + get { + return ResourceManager.GetString("StartupApps", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to sticpl.cpl. + /// + internal static string sticpl_cpl { + get { + return ResourceManager.GetString("sticpl.cpl", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Storage. + /// + internal static string Storage { + get { + return ResourceManager.GetString("Storage", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Storage policies. + /// + internal static string StoragePolicies { + get { + return ResourceManager.GetString("StoragePolicies", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Storage Sense. + /// + internal static string StorageSense { + get { + return ResourceManager.GetString("StorageSense", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to in. + /// + internal static string SubtitlePreposition { + get { + return ResourceManager.GetString("SubtitlePreposition", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Sync center. + /// + internal static string SyncCenter { + get { + return ResourceManager.GetString("SyncCenter", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Sync your settings. + /// + internal static string SyncYourSettings { + get { + return ResourceManager.GetString("SyncYourSettings", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to sysdm.cpl. + /// + internal static string sysdm_cpl { + get { + return ResourceManager.GetString("sysdm.cpl", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to System. + /// + internal static string System { + get { + return ResourceManager.GetString("System", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to System properties and Add New Hardware wizard. + /// + internal static string SystemPropertiesAndAddNewHardwareWizard { + get { + return ResourceManager.GetString("SystemPropertiesAndAddNewHardwareWizard", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Tab. + /// + internal static string Tab { + get { + return ResourceManager.GetString("Tab", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Tablet mode. + /// + internal static string TabletMode { + get { + return ResourceManager.GetString("TabletMode", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Tablet PC settings. + /// + internal static string TabletPcSettings { + get { + return ResourceManager.GetString("TabletPcSettings", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Talk. + /// + internal static string Talk { + get { + return ResourceManager.GetString("Talk", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Talk to Cortana. + /// + internal static string TalkToCortana { + get { + return ResourceManager.GetString("TalkToCortana", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Taskbar. + /// + internal static string Taskbar { + get { + return ResourceManager.GetString("Taskbar", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Taskbar color. + /// + internal static string TaskbarColor { + get { + return ResourceManager.GetString("TaskbarColor", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Tasks. + /// + internal static string Tasks { + get { + return ResourceManager.GetString("Tasks", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Team Conferencing. + /// + internal static string TeamConferencing { + get { + return ResourceManager.GetString("TeamConferencing", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Team device management. + /// + internal static string TeamDeviceManagement { + get { + return ResourceManager.GetString("TeamDeviceManagement", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Text to speech. + /// + internal static string TextToSpeech { + get { + return ResourceManager.GetString("TextToSpeech", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Themes. + /// + internal static string Themes { + get { + return ResourceManager.GetString("Themes", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to themes.cpl. + /// + internal static string themes_cpl { + get { + return ResourceManager.GetString("themes.cpl", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to timedate.cpl. + /// + internal static string timedate_cpl { + get { + return ResourceManager.GetString("timedate.cpl", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Timeline. + /// + internal static string Timeline { + get { + return ResourceManager.GetString("Timeline", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Touch. + /// + internal static string Touch { + get { + return ResourceManager.GetString("Touch", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Touch feedback. + /// + internal static string TouchFeedback { + get { + return ResourceManager.GetString("TouchFeedback", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Touchpad. + /// + internal static string Touchpad { + get { + return ResourceManager.GetString("Touchpad", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Transparency. + /// + internal static string Transparency { + get { + return ResourceManager.GetString("Transparency", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to tritanopia. + /// + internal static string tritanopia { + get { + return ResourceManager.GetString("tritanopia", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Troubleshoot. + /// + internal static string Troubleshoot { + get { + return ResourceManager.GetString("Troubleshoot", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to TruePlay. + /// + internal static string TruePlay { + get { + return ResourceManager.GetString("TruePlay", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Typing. + /// + internal static string Typing { + get { + return ResourceManager.GetString("Typing", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Uninstall. + /// + internal static string Uninstall { + get { + return ResourceManager.GetString("Uninstall", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to USB. + /// + internal static string Usb { + get { + return ResourceManager.GetString("Usb", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to User accounts. + /// + internal static string UserAccounts { + get { + return ResourceManager.GetString("UserAccounts", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Version. + /// + internal static string Version { + get { + return ResourceManager.GetString("Version", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Video playback. + /// + internal static string VideoPlayback { + get { + return ResourceManager.GetString("VideoPlayback", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Videos. + /// + internal static string Videos { + get { + return ResourceManager.GetString("Videos", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Virtual Desktops. + /// + internal static string VirtualDesktops { + get { + return ResourceManager.GetString("VirtualDesktops", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Virus. + /// + internal static string Virus { + get { + return ResourceManager.GetString("Virus", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Voice activation. + /// + internal static string VoiceActivation { + get { + return ResourceManager.GetString("VoiceActivation", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Volume. + /// + internal static string Volume { + get { + return ResourceManager.GetString("Volume", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to VPN. + /// + internal static string Vpn { + get { + return ResourceManager.GetString("Vpn", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Wallpaper. + /// + internal static string Wallpaper { + get { + return ResourceManager.GetString("Wallpaper", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Warmer color. + /// + internal static string WarmerColor { + get { + return ResourceManager.GetString("WarmerColor", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Welcome center. + /// + internal static string WelcomeCenter { + get { + return ResourceManager.GetString("WelcomeCenter", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Welcome screen. + /// + internal static string WelcomeScreen { + get { + return ResourceManager.GetString("WelcomeScreen", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to wgpocpl.cpl. + /// + internal static string wgpocpl_cpl { + get { + return ResourceManager.GetString("wgpocpl.cpl", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Wheel. + /// + internal static string Wheel { + get { + return ResourceManager.GetString("Wheel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Wi-Fi. + /// + internal static string WiFi { + get { + return ResourceManager.GetString("WiFi", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Wi-Fi Calling. + /// + internal static string WiFiCalling { + get { + return ResourceManager.GetString("WiFiCalling", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Wi-Fi settings. + /// + internal static string WiFiSettings { + get { + return ResourceManager.GetString("WiFiSettings", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Window border. + /// + internal static string WindowBorder { + get { + return ResourceManager.GetString("WindowBorder", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Windows Anytime Upgrade. + /// + internal static string WindowsAnytimeUpgrade { + get { + return ResourceManager.GetString("WindowsAnytimeUpgrade", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Windows Anywhere. + /// + internal static string WindowsAnywhere { + get { + return ResourceManager.GetString("WindowsAnywhere", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Windows CardSpace. + /// + internal static string WindowsCardSpace { + get { + return ResourceManager.GetString("WindowsCardSpace", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Windows Defender. + /// + internal static string WindowsDefender { + get { + return ResourceManager.GetString("WindowsDefender", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Windows Firewall. + /// + internal static string WindowsFirewall { + get { + return ResourceManager.GetString("WindowsFirewall", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Windows Hello setup - Face. + /// + internal static string WindowsHelloSetupFace { + get { + return ResourceManager.GetString("WindowsHelloSetupFace", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Windows Hello setup - Fingerprint. + /// + internal static string WindowsHelloSetupFingerprint { + get { + return ResourceManager.GetString("WindowsHelloSetupFingerprint", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Windows Insider Program. + /// + internal static string WindowsInsiderProgram { + get { + return ResourceManager.GetString("WindowsInsiderProgram", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Windows Mobility Center. + /// + internal static string WindowsMobilityCenter { + get { + return ResourceManager.GetString("WindowsMobilityCenter", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Windows search. + /// + internal static string WindowsSearch { + get { + return ResourceManager.GetString("WindowsSearch", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Windows Security. + /// + internal static string WindowsSecurity { + get { + return ResourceManager.GetString("WindowsSecurity", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Windows Update. + /// + internal static string WindowsUpdate { + get { + return ResourceManager.GetString("WindowsUpdate", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Windows Update - Advanced options. + /// + internal static string WindowsUpdateAdvancedOptions { + get { + return ResourceManager.GetString("WindowsUpdateAdvancedOptions", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Windows Update - Check for updates. + /// + internal static string WindowsUpdateCheckForUpdates { + get { + return ResourceManager.GetString("WindowsUpdateCheckForUpdates", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Windows Update - Restart options. + /// + internal static string WindowsUpdateRestartOptions { + get { + return ResourceManager.GetString("WindowsUpdateRestartOptions", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Windows Update - View optional updates. + /// + internal static string WindowsUpdateViewOptionalUpdates { + get { + return ResourceManager.GetString("WindowsUpdateViewOptionalUpdates", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Windows Update - View update history. + /// + internal static string WindowsUpdateViewUpdateHistory { + get { + return ResourceManager.GetString("WindowsUpdateViewUpdateHistory", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Wireless. + /// + internal static string Wireless { + get { + return ResourceManager.GetString("Wireless", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Workplace. + /// + internal static string Workplace { + get { + return ResourceManager.GetString("Workplace", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Workplace provisioning. + /// + internal static string WorkplaceProvisioning { + get { + return ResourceManager.GetString("WorkplaceProvisioning", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Wubi IME settings. + /// + internal static string WubiImeSettings { + get { + return ResourceManager.GetString("WubiImeSettings", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Wubi IME settings - UDP. + /// + internal static string WubiImeSettingsUdp { + get { + return ResourceManager.GetString("WubiImeSettingsUdp", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Xbox Networking. + /// + internal static string XboxNetworking { + get { + return ResourceManager.GetString("XboxNetworking", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Your info. + /// + internal static string YourInfo { + get { + return ResourceManager.GetString("YourInfo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Zoom. + /// + internal static string Zoom { + get { + return ResourceManager.GetString("Zoom", resourceCulture); + } + } + } +} diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Properties/Resources.resx b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Properties/Resources.resx new file mode 100644 index 00000000000..6bb283e7b9a --- /dev/null +++ b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Properties/Resources.resx @@ -0,0 +1,1739 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + About + Area System + + + access.cpl + File name, Should not translated + + + Accessibility Options + Area Control Panel (legacy settings) + + + Accessory apps + Area Privacy + + + Access work or school + Area UserAccounts + + + Account info + Area Privacy + + + Accounts + Area SurfaceHub + + + Action Center + Area Control Panel (legacy settings) + + + Activation + Area UpdateAndSecurity + + + Activity history + Area Privacy + + + Add Hardware + Area Control Panel (legacy settings) + + + Add/Remove Programs + Area Control Panel (legacy settings) + + + Add your phone + Area Phone + + + Administrative Tools + Area System + + + Advanced display settings + Area System, only available on devices that support advanced display options + + + Advanced graphics + + + Advertising ID + Area Privacy, Deprecated in Windows 10, version 1809 and later + + + Airplane mode + Area NetworkAndInternet + + + Alt+Tab + Means the key combination "Tabulator+Alt" on the keyboard + + + Alternative names + + + Animations + + + App color + + + App diagnostics + Area Privacy + + + App features + Area Apps + + + App + Short/modern name for application + + + Apps and Features + Area Apps + + + System settings + Type of the setting is a "Modern Windows settings". We use the same term as used in start menu search at the moment. + + + Apps for websites + Area Apps + + + App volume and device preferences + Area System, Added in Windows 10, version 1903 + + + appwiz.cpl + File name, Should not translated + + + Area + Mean the settings area or settings category + + + Accounts + + + Administrative Tools + Area Control Panel (legacy settings) + + + Appearance and Personalization + + + Apps + + + Clock and Region + + + Control Panel + + + Cortana + + + Devices + + + Ease of access + + + Extras + + + Gaming + + + Hardware and Sound + + + Home page + + + Mixed reality + + + Network and Internet + + + Personalization + + + Phone + + + Privacy + + + Programs + + + SurfaceHub + + + System + + + System and Security + + + Time and language + + + Update and security + + + User accounts + + + Assigned access + + + Audio + Area EaseOfAccess + + + Audio alerts + + + Audio and speech + Area MixedReality, only available if the Mixed Reality Portal app is installed. + + + Automatic file downloads + Area Privacy + + + AutoPlay + Area Device + + + Background + Area Personalization + + + Background Apps + Area Privacy + + + Backup + Area UpdateAndSecurity + + + Backup and Restore + Area Control Panel (legacy settings) + + + Battery Saver + Area System, only available on devices that have a battery, such as a tablet + + + Battery Saver settings + Area System, only available on devices that have a battery, such as a tablet + + + Battery saver usage details + + + Battery use + Area System, only available on devices that have a battery, such as a tablet + + + Biometric Devices + Area Control Panel (legacy settings) + + + BitLocker Drive Encryption + Area Control Panel (legacy settings) + + + Blue light + + + Bluetooth + Area Device + + + Bluetooth devices + Area Control Panel (legacy settings) + + + Blue-yellow + + + Bopomofo IME + Area TimeAndLanguage + + + bpmf + Should not translated + + + Broadcasting + Area Gaming + + + Calendar + Area Privacy + + + Call history + Area Privacy + + + calling + + + Camera + Area Privacy + + + Cangjie IME + Area TimeAndLanguage + + + Caps Lock + Mean the "Caps Lock" key + + + Cellular and SIM + Area NetworkAndInternet + + + Choose which folders appear on Start + Area Personalization + + + Client service for NetWare + Area Control Panel (legacy settings) + + + Clipboard + Area System + + + Closed captions + Area EaseOfAccess + + + Color filters + Area EaseOfAccess + + + Color management + Area Control Panel (legacy settings) + + + Colors + Area Personalization + + + Command + The command to direct start a setting + + + Connected Devices + Area Device + + + Contacts + Area Privacy + + + Control Panel + Type of the setting is a "(legacy) Control Panel setting" + + + Copy command + + + Core Isolation + Means the protection of the system core + + + Cortana + Area Cortana + + + Cortana across my devices + Area Cortana + + + Cortana - Language + Area Cortana + + + Credential manager + Area Control Panel (legacy settings) + + + Crossdevice + + + Custom devices + + + Dark color + + + Dark mode + + + Data usage + Area NetworkAndInternet + + + Date and time + Area TimeAndLanguage + + + Default apps + Area Apps + + + Default camera + Area Device + + + Default location + Area Control Panel (legacy settings) + + + Default programs + Area Control Panel (legacy settings) + + + Default Save Locations + Area System + + + Delivery Optimization + Area UpdateAndSecurity + + + desk.cpl + File name, Should not translated + + + Desktop themes + Area Control Panel (legacy settings) + + + deuteranopia + Medical: Mean you don't can see red colors + + + Device manager + Area Control Panel (legacy settings) + + + Devices and printers + Area Control Panel (legacy settings) + + + DHCP + Should not translated + + + Dial-up + Area NetworkAndInternet + + + Direct access + Area NetworkAndInternet, only available if DirectAccess is enabled + + + Direct open your phone + Area EaseOfAccess + + + Display + Area EaseOfAccess + + + Display properties + Area Control Panel (legacy settings) + + + DNS + Should not translated + + + Documents + Area Privacy + + + Duplicating my display + Area System + + + During these hours + Area System + + + Ease of access center + Area Control Panel (legacy settings) + + + Edition + Means the "Windows Edition" + + + Email + Area Privacy + + + Email and app accounts + Area UserAccounts + + + Encryption + Area System + + + Environment + Area MixedReality, only available if the Mixed Reality Portal app is installed. + + + Ethernet + Area NetworkAndInternet + + + Exploit Protection + + + Extras + Area Extra, , only used for setting of 3rd-Party tools + + + Eye control + Area EaseOfAccess + + + Eye tracker + Area Privacy, requires eyetracker hardware + + + Family and other people + Area UserAccounts + + + Feedback and diagnostics + Area Privacy + + + File system + Area Privacy + + + FindFast + Area Control Panel (legacy settings) + + + findfast.cpl + File name, Should not translated + + + Find My Device + Area UpdateAndSecurity + + + Firewall + + + Focus assist - Quiet hours + Area System + + + Focus assist - Quiet moments + Area System + + + Folder options + Area Control Panel (legacy settings) + + + Fonts + Area EaseOfAccess + + + For developers + Area UpdateAndSecurity + + + Game bar + Area Gaming + + + Game controllers + Area Control Panel (legacy settings) + + + Game DVR + Area Gaming + + + Game Mode + Area Gaming + + + Gateway + Should not translated + + + General + Area Privacy + + + Get programs + Area Control Panel (legacy settings) + + + Getting started + Area Control Panel (legacy settings) + + + Glance + Area Personalization, Deprecated in Windows 10, version 1809 and later + + + Graphics settings + Area System + + + Grayscale + + + Green week + Mean you don't can see green colors + + + Headset display + Area MixedReality, only available if the Mixed Reality Portal app is installed. + + + High contrast + Area EaseOfAccess + + + Holographic audio + + + Holographic Environment + + + Holographic Headset + + + Holographic Management + + + Home group + Area Control Panel (legacy settings) + + + ID + MEans The "Windows Identifier" + + + Image + + + Indexing options + Area Control Panel (legacy settings) + + + inetcpl.cpl + File name, Should not translated + + + Infrared + Area Control Panel (legacy settings) + + + Inking and typing + Area Privacy + + + Internet options + Area Control Panel (legacy settings) + + + intl.cpl + File name, Should not translated + + + Inverted colors + + + IP + Should not translated + + + Isolated Browsing + + + Japan IME settings + Area TimeAndLanguage, available if the Microsoft Japan input method editor is installed + + + joy.cpl + File name, Should not translated + + + Joystick properties + Area Control Panel (legacy settings) + + + jpnime + Should not translated + + + Keyboard + Area EaseOfAccess + + + Keypad + + + Keys + + + Language + Area TimeAndLanguage + + + Light color + + + Light mode + + + Location + Area Privacy + + + Lock screen + Area Personalization + + + Magnifier + Area EaseOfAccess + + + Mail - Microsoft Exchange or Windows Messaging + Area Control Panel (legacy settings) + + + main.cpl + File name, Should not translated + + + Manage known networks + Area NetworkAndInternet + + + Manage optional features + Area Apps + + + Messaging + Area Privacy + + + Metered connection + + + Microphone + Area Privacy + + + Microsoft Mail Post Office + Area Control Panel (legacy settings) + + + mlcfg32.cpl + File name, Should not translated + + + mmsys.cpl + File name, Should not translated + + + Mobile devices + + + Mobile hotspot + Area NetworkAndInternet + + + modem.cpl + File name, Should not translated + + + Mono + + + More details + Area Cortana + + + Motion + Area Privacy + + + Mouse + Area EaseOfAccess + + + Mouse and touchpad + Area Device + + + Mouse, Fonts, Keyboard, and Printers properties + Area Control Panel (legacy settings) + + + Mouse pointer + Area EaseOfAccess + + + Multimedia properties + Area Control Panel (legacy settings) + + + Multitasking + Area System + + + Narrator + Area EaseOfAccess + + + Navigation bar + Area Personalization + + + netcpl.cpl + File name, Should not translated + + + netsetup.cpl + File name, Should not translated + + + Network + Area NetworkAndInternet + + + Network and sharing center + Area Control Panel (legacy settings) + + + Network connection + Area Control Panel (legacy settings) + + + Network properties + Area Control Panel (legacy settings) + + + Network Setup Wizard + Area Control Panel (legacy settings) + + + Network status + Area NetworkAndInternet + + + NFC + Area NetworkAndInternet + + + NFC Transactions + "NFC should not translated" + + + Night light + + + Night light settings + Area System + + + Note + + + Only available when you have connected a mobile device to your device. + + + Only available on devices that support advanced graphics options. + + + Only available on devices that have a battery, such as a tablet. + + + Deprecated in Windows 10, version 1809 (build 17763) and later. + + + Only available if Dial is paired. + + + Only available if DirectAccess is enabled. + + + Only available on devices that support advanced display options. + + + Only present if user is enrolled in WIP. + + + Requires eyetracker hardware. + + + Available if the Microsoft Japan input method editor is installed. + + + Available if the Microsoft Pinyin input method editor is installed. + + + Available if the Microsoft Wubi input method editor is installed. + + + Only available if the Mixed Reality Portal app is installed. + + + Only available on mobile and if the enterprise has deployed a provisioning package. + + + Added in Windows 10, version 1903 (build 18362). + + + Added in Windows 10, version 2004 (build 19041). + + + Only available if "settings apps" are installed, for example, by a 3rd party. + + + Only available if touchpad hardware is present. + + + Only available if the device has a Wi-Fi adapter. + + + Device must be Windows Anywhere-capable. + + + Only available if enterprise has deployed a provisioning package. + + + Notifications + Area Privacy + + + Notifications and actions + Area System + + + Num Lock + Mean the "Num Lock" key + + + nwc.cpl + File name, Should not translated + + + odbccp32.cpl + File name, Should not translated + + + ODBC Data Source Administrator (32-bit) + Area Control Panel (legacy settings) + + + ODBC Data Source Administrator (64-bit) + Area Control Panel (legacy settings) + + + Offline files + Area Control Panel (legacy settings) + + + Offline Maps + Area Apps + + + Offline Maps - Download maps + Area Apps + + + On-Screen + + + OS + Means the "Operating System" + + + Other devices + Area Privacy + + + Other options + Area EaseOfAccess + + + Other users + + + Parental controls + Area Control Panel (legacy settings) + + + Password + + + password.cpl + File name, Should not translated + + + Password properties + Area Control Panel (legacy settings) + + + Pen and input devices + Area Control Panel (legacy settings) + + + Pen and touch + Area Control Panel (legacy settings) + + + Pen and Windows Ink + Area Device + + + People Near Me + Area Control Panel (legacy settings) + + + Performance information and tools + Area Control Panel (legacy settings) + + + Permissions and history + Area Cortana + + + Personalization (category) + Area Personalization + + + Phone + Area Phone + + + Phone and modem + Area Control Panel (legacy settings) + + + Phone and modem - Options + Area Control Panel (legacy settings) + + + Phone calls + Area Privacy + + + Phone - Default apps + Area System + + + Picture + + + Pictures + Area Privacy + + + Pinyin IME settings + Area TimeAndLanguage, available if the Microsoft Pinyin input method editor is installed + + + Pinyin IME settings - domain lexicon + Area TimeAndLanguage + + + Pinyin IME settings - Key configuration + Area TimeAndLanguage + + + Pinyin IME settings - UDP + Area TimeAndLanguage + + + Playing a game full screen + Area Gaming + + + Plugin to search for Windows settings + + + Windows settings + + + Power and sleep + Area System + + + powercfg.cpl + File name, Should not translated + + + Power options + Area Control Panel (legacy settings) + + + Presentation + + + Printers + Area Control Panel (legacy settings) + + + Printers and scanners + Area Device + + + Print screen + Mean the "Print screen" key + + + Problem reports and solutions + Area Control Panel (legacy settings) + + + Processor + + + Programs and features + Area Control Panel (legacy settings) + + + Projecting to this PC + Area System + + + protanopia + Medical: Mean you don't can see green colors + + + Provisioning + Area UserAccounts, only available if enterprise has deployed a provisioning package + + + Proximity + Area NetworkAndInternet + + + Proxy + Area NetworkAndInternet + + + Quickime + Area TimeAndLanguage + + + Quiet moments game + + + Radios + Area Privacy + + + RAM + Means the Read-Access-Memory (typical the used to inform about the size) + + + Recognition + + + Recovery + Area UpdateAndSecurity + + + Red eye + Mean red eye effect by over-the-night flights + + + Red-green + Mean the weakness you can't differ between red and green colors + + + Red week + Mean you don't can see red colors + + + Region + Area TimeAndLanguage + + + Regional language + Area TimeAndLanguage + + + Regional settings properties + Area Control Panel (legacy settings) + + + Region and language + Area Control Panel (legacy settings) + + + Region formatting + + + RemoteApp and desktop connections + Area Control Panel (legacy settings) + + + Remote Desktop + Area System + + + Scanners and cameras + Area Control Panel (legacy settings) + + + schedtasks + File name, Should not translated + + + Scheduled + + + Scheduled tasks + Area Control Panel (legacy settings) + + + Screen rotation + Area System + + + Scroll bars + + + Scroll Lock + Mean the "Scroll Lock" key + + + SDNS + Should not translated + + + Searching Windows + Area Cortana + + + SecureDNS + Should not translated + + + Security Center + Area Control Panel (legacy settings) + + + Security Processor + + + Session cleanup + Area SurfaceHub + + + Settings home page + Area Home, Overview-page for all areas of settings + + + Set up a kiosk + Area UserAccounts + + + Shared experiences + Area System + + + Shortcuts + + + wifi + dont translate this, is a short term to find entries + + + Sign-in options + Area UserAccounts + + + Sign-in options - Dynamic lock + Area UserAccounts + + + Size + Size for text and symbols + + + Sound + Area System + + + Speech + Area EaseOfAccess + + + Speech recognition + Area Control Panel (legacy settings) + + + Speech typing + + + Start + Area Personalization + + + Start places + + + Startup apps + Area Apps + + + sticpl.cpl + File name, Should not translated + + + Storage + Area System + + + Storage policies + Area System + + + Storage Sense + Area System + + + in + Example: Area "System" in System settings + + + Sync center + Area Control Panel (legacy settings) + + + Sync your settings + Area UserAccounts + + + sysdm.cpl + File name, Should not translated + + + System + Area Control Panel (legacy settings) + + + System properties and Add New Hardware wizard + Area Control Panel (legacy settings) + + + Tab + Means the key "Tabulator" on the keyboard + + + Tablet mode + Area System + + + Tablet PC settings + Area Control Panel (legacy settings) + + + Talk + + + Talk to Cortana + Area Cortana + + + Taskbar + Area Personalization + + + Taskbar color + + + Tasks + Area Privacy + + + Team Conferencing + Area SurfaceHub + + + Team device management + Area SurfaceHub + + + Text to speech + Area Control Panel (legacy settings) + + + Themes + Area Personalization + + + themes.cpl + File name, Should not translated + + + timedate.cpl + File name, Should not translated + + + Timeline + + + Touch + + + Touch feedback + + + Touchpad + Area Device + + + Transparency + + + tritanopia + Medical: Mean you don't can see yellow and blue colors + + + Troubleshoot + Area UpdateAndSecurity + + + TruePlay + Area Gaming + + + Typing + Area Device + + + Uninstall + Area MixedReality, only available if the Mixed Reality Portal app is installed. + + + USB + Area Device + + + User accounts + Area Control Panel (legacy settings) + + + Version + Means The "Windows Version" + + + Video playback + Area Apps + + + Videos + Area Privacy + + + Virtual Desktops + + + Virus + Means the virus in computers and software + + + Voice activation + Area Privacy + + + Volume + + + VPN + Area NetworkAndInternet + + + Wallpaper + + + Warmer color + + + Welcome center + Area Control Panel (legacy settings) + + + Welcome screen + Area SurfaceHub + + + wgpocpl.cpl + File name, Should not translated + + + Wheel + Area Device + + + Wi-Fi + Area NetworkAndInternet, only available if Wi-Fi calling is enabled + + + Wi-Fi Calling + Area NetworkAndInternet, only available if Wi-Fi calling is enabled + + + Wi-Fi settings + "Wi-Fi" should not translated + + + Window border + + + Windows Anytime Upgrade + Area Control Panel (legacy settings) + + + Windows Anywhere + Area UserAccounts, device must be Windows Anywhere-capable + + + Windows CardSpace + Area Control Panel (legacy settings) + + + Windows Defender + Area Control Panel (legacy settings) + + + Windows Firewall + Area Control Panel (legacy settings) + + + Windows Hello setup - Face + Area UserAccounts + + + Windows Hello setup - Fingerprint + Area UserAccounts + + + Windows Insider Program + Area UpdateAndSecurity + + + Windows Mobility Center + Area Control Panel (legacy settings) + + + Windows search + Area Cortana + + + Windows Security + Area UpdateAndSecurity + + + Windows Update + Area UpdateAndSecurity + + + Windows Update - Advanced options + Area UpdateAndSecurity + + + Windows Update - Check for updates + Area UpdateAndSecurity + + + Windows Update - Restart options + Area UpdateAndSecurity + + + Windows Update - View optional updates + Area UpdateAndSecurity + + + Windows Update - View update history + Area UpdateAndSecurity + + + Wireless + + + Workplace + + + Workplace provisioning + Area UserAccounts + + + Wubi IME settings + Area TimeAndLanguage, available if the Microsoft Wubi input method editor is installed + + + Wubi IME settings - UDP + Area TimeAndLanguage + + + Xbox Networking + Area Gaming + + + Your info + Area UserAccounts + + + Zoom + Mean zooming of things via a magnifier + + \ No newline at end of file diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/WindowsSettings.json b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/WindowsSettings.json new file mode 100644 index 00000000000..82c8d8f14fa --- /dev/null +++ b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/WindowsSettings.json @@ -0,0 +1,1739 @@ +[ + { + "Name": "AccessWorkOrSchool", + "Area": "Accounts", + "Type": "AppSettingsApp", + "AltNames": [ "Workplace" ], + "Command": "ms-settings:workplace" + }, + { + "Name": "EmailAndAppAccounts", + "Area": "Accounts", + "Type": "AppSettingsApp", + "Command": "ms-settings:emailandaccounts" + }, + { + "Name": "FamilyAndOtherPeople", + "Area": "Accounts", + "Type": "AppSettingsApp", + "AltNames": [ "OtherUsers" ], + "Command": "ms-settings:otherusers" + }, + { + "Name": "SetUpKiosk", + "Area": "Accounts", + "Type": "AppSettingsApp", + "AltNames": [ "AssignedAccess" ], + "Command": "ms-settings:assignedaccess" + }, + { + "Name": "SignInOptions", + "Area": "Accounts", + "Type": "AppSettingsApp", + "Command": "ms-settings:signinoptions" + }, + { + "Name": "SignInOptionsDynamicLock", + "Area": "Accounts", + "Type": "AppSettingsApp", + "Command": "ms-settings:signinoptions-dynamiclock" + }, + { + "Name": "SyncYourSettings", + "Area": "Accounts", + "Type": "AppSettingsApp", + "Command": "ms-settings:sync" + }, + { + "Name": "WindowsHelloSetupFace", + "Area": "Accounts", + "Type": "AppSettingsApp", + "Command": "ms-settings:signinoptions-launchfaceenrollment" + }, + { + "Name": "WindowsHelloSetupFingerprint", + "Area": "Accounts", + "Type": "AppSettingsApp", + "Command": "ms-settings:signinoptions-launchfingerprintenrollment" + }, + { + "Name": "YourInfo", + "Area": "Accounts", + "Type": "AppSettingsApp", + "Command": "ms-settings:yourinfo" + }, + { + "Name": "AppsAndFeatures", + "Area": "Apps", + "Type": "AppSettingsApp", + "Command": "ms-settings:appsfeatures" + }, + { + "Name": "AppFeatures", + "Area": "Apps", + "Type": "AppSettingsApp", + "Command": "ms-settings:appsfeatures-app" + }, + { + "Name": "AppsForWebsites", + "Area": "Apps", + "Type": "AppSettingsApp", + "Command": "ms-settings:appsforwebsites" + }, + { + "Name": "DefaultApps", + "Area": "Apps", + "Type": "AppSettingsApp", + "Command": "ms-settings:defaultapps" + }, + { + "Name": "ManageOptionalFeatures", + "Area": "Apps", + "Type": "AppSettingsApp", + "Command": "ms-settings:optionalfeatures" + }, + { + "Name": "OfflineMaps", + "Area": "Apps", + "Type": "AppSettingsApp", + "Command": "ms-settings:maps" + }, + { + "Name": "OfflineMapsDownloadMaps", + "Area": "Apps", + "Type": "AppSettingsApp", + "Command": "ms-settings:maps-downloadmaps" + }, + { + "Name": "StartupApps", + "Area": "Apps", + "Type": "AppSettingsApp", + "Command": "ms-settings:startupapps" + }, + { + "Name": "VideoPlayback", + "Area": "Apps", + "Type": "AppSettingsApp", + "Command": "ms-settings:videoplayback" + }, + { + "Name": "Notifications", + "Area": "Cortana", + "Type": "AppSettingsApp", + "Command": "ms-settings:cortana-notifications" + }, + { + "Name": "MoreDetails", + "Area": "Cortana", + "Type": "AppSettingsApp", + "Command": "ms-settings:cortana-moredetails" + }, + { + "Name": "PermissionsAndHistory", + "Area": "Cortana", + "Type": "AppSettingsApp", + "Command": "ms-settings:cortana-permissions" + }, + { + "Name": "WindowsSearch", + "Area": "Cortana", + "Type": "AppSettingsApp", + "Command": "ms-settings:cortana-windowssearch" + }, + { + "Name": "CortanaLanguage", + "Area": "Cortana", + "Type": "AppSettingsApp", + "AltNames": [ "Talk" ], + "Command": "ms-settings:cortana-language" + }, + { + "Name": "Cortana", + "Area": "Cortana", + "Type": "AppSettingsApp", + "Command": "ms-settings:cortana" + }, + { + "Name": "TalkToCortana", + "Area": "Cortana", + "Type": "AppSettingsApp", + "Command": "ms-settings:cortana-talktocortana" + }, + { + "Name": "AutoPlay", + "Area": "Devices", + "Type": "AppSettingsApp", + "Command": "ms-settings:autoplay" + }, + { + "Name": "Bluetooth", + "Area": "Devices", + "Type": "AppSettingsApp", + "Command": "ms-settings:bluetooth" + }, + { + "Name": "ConnectedDevices", + "Area": "Devices", + "Type": "AppSettingsApp", + "Command": "ms-settings:connecteddevices" + }, + { + "Name": "DefaultCamera", + "Area": "Devices", + "Type": "AppSettingsApp", + "DeprecatedInBuild": 17763, + "Note": "NoteDeprecated17763", + "Command": "ms-settings:camera" + }, + { + "Name": "MouseAndTouchpad", + "Area": "Devices", + "Type": "AppSettingsApp", + "Note": "NoteTouchpad", + "Command": "ms-settings:mousetouchpad" + }, + { + "Name": "PenAndWindowsInk", + "Area": "Devices", + "Type": "AppSettingsApp", + "Command": "ms-settings:pen" + }, + { + "Name": "PrintersAndScanners", + "Area": "Devices", + "Type": "AppSettingsApp", + "Command": "ms-settings:printers" + }, + { + "Name": "Touchpad", + "Area": "Devices", + "Type": "AppSettingsApp", + "Note": "NoteTouchpad", + "Command": "ms-settings:devices-touchpad" + }, + { + "Name": "Typing", + "Area": "Devices", + "Type": "AppSettingsApp", + "Command": "ms-settings:typing" + }, + { + "Name": "Usb", + "Area": "Devices", + "Type": "AppSettingsApp", + "Command": "ms-settings:usb" + }, + { + "Name": "Wheel", + "Area": "Devices", + "Type": "AppSettingsApp", + "Note": "NoteDialPaired", + "Command": "ms-settings:wheel" + }, + { + "Name": "Phone", + "Area": "Phone", + "Type": "AppSettingsApp", + "AltNames": [ "MobileDevices" ], + "Command": "ms-settings:mobile-devices" + }, + { + "Name": "Audio", + "Area": "EaseOfAccess", + "Type": "AppSettingsApp", + "AltNames": [ "Mono", "Volume", "AudioAlerts" ], + "Command": "ms-settings:easeofaccess-audio" + }, + { + "Name": "ClosedCaptions", + "Area": "EaseOfAccess", + "Type": "AppSettingsApp", + "Command": "ms-settings:easeofaccess-closedcaptioning" + }, + { + "Name": "ColorFilters", + "Area": "EaseOfAccess", + "Type": "AppSettingsApp", + "AltNames": [ "InvertedColors", "Grayscale", "RedGreen", "BlueYellow", "GreenWeek", "RedWeek", "deuteranopia", "protanopia", "tritanopia" ], + "Command": "ms-settings:easeofaccess-colorfilter" + }, + { + "Name": "MousePointer", + "Area": "EaseOfAccess", + "Type": "AppSettingsApp", + "AltNames": [ "TouchFeedback" ], + "Command": "ms-settings:easeofaccess-MousePointer" + }, + { + "Name": "Display", + "Area": "EaseOfAccess", + "Type": "AppSettingsApp", + "AltNames": [ "Transparency", "Animations", "ScrollBars", "Size" ], + "Command": "ms-settings:easeofaccess-display" + }, + { + "Name": "EyeControl", + "Area": "EaseOfAccess", + "Type": "AppSettingsApp", + "Command": "ms-settings:easeofaccess-eyecontrol" + }, + { + "Name": "Fonts", + "Area": "EaseOfAccess", + "Type": "AppSettingsApp", + "DeprecatedInBuild": 17763, + "Note": "NoteDeprecated17763", + "Command": "ms-settings:fonts" + }, + { + "Name": "HighContrast", + "Area": "EaseOfAccess", + "Type": "AppSettingsApp", + "Command": "ms-settings:easeofaccess-highcontrast" + }, + { + "Name": "Keyboard", + "Area": "EaseOfAccess", + "Type": "AppSettingsApp", + "AltNames": [ "PrintScreen", "Shortcuts", "OnScreen", "Keys", "ScrollLock", "CapsLock", "NumLock" ], + "Command": "ms-settings:easeofaccess-keyboard" + }, + { + "Name": "Magnifier", + "Area": "EaseOfAccess", + "Type": "AppSettingsApp", + "AltNames": [ "Zoom" ], + "Command": "ms-settings:easeofaccess-magnifier" + }, + { + "Name": "Mouse", + "Area": "EaseOfAccess", + "Type": "AppSettingsApp", + "AltNames": [ "Keypad", "Touch" ], + "Command": "ms-settings:easeofaccess-mouse" + }, + { + "Name": "Narrator", + "Area": "EaseOfAccess", + "Type": "AppSettingsApp", + "Command": "ms-settings:easeofaccess-narrator" + }, + { + "Name": "OtherOptions", + "Area": "EaseOfAccess", + "Type": "AppSettingsApp", + "DeprecatedInBuild": 17763, + "Note": "NoteDeprecated17763", + "Command": "ms-settings:easeofaccess-otheroptions" + }, + { + "Name": "Speech", + "Area": "EaseOfAccess", + "Type": "AppSettingsApp", + "AltNames": [ "Recognition", "Talk" ], + "Command": "ms-settings:easeofaccess-speechrecognition" + }, + { + "Name": "Extras", + "Area": "Extras", + "Type": "AppSettingsApp", + "Note": "NoteThirdParty", + "Command": "ms-settings:extras" + }, + { + "Name": "Broadcasting", + "Area": "Gaming", + "Type": "AppSettingsApp", + "Command": "ms-settings:gaming-broadcasting" + }, + { + "Name": "GameBar", + "Area": "Gaming", + "Type": "AppSettingsApp", + "Command": "ms-settings:gaming-gamebar" + }, + { + "Name": "GameDvr", + "Area": "Gaming", + "Type": "AppSettingsApp", + "Command": "ms-settings:gaming-gamedvr" + }, + { + "Name": "GameMode", + "Area": "Gaming", + "Type": "AppSettingsApp", + "Command": "ms-settings:gaming-gamemode" + }, + { + "Name": "PlayingGameFullScreen", + "Area": "Gaming", + "Type": "AppSettingsApp", + "AltNames": [ "QuietMomentsGame" ], + "Command": "ms-settings:quietmomentsgame" + }, + { + "Name": "TruePlay", + "Area": "Gaming", + "Type": "AppSettingsApp", + "DeprecatedInBuild": 17763, + "Note": "NoteDeprecated17763", + "Command": "ms-settings:gaming-trueplay" + }, + { + "Name": "XboxNetworking", + "Area": "Gaming", + "Type": "AppSettingsApp", + "Command": "ms-settings:gaming-xboxnetworking" + }, + { + "Name": "SettingsHomePage", + "Area": "HomePage", + "Type": "AppSettingsApp", + "Command": "ms-settings:" + }, + { + "Name": "AudioAndSpeech", + "Area": "MixedReality", + "Type": "AppSettingsApp", + "AltNames": [ "HolographicAudio" ], + "Note": "NoteMixedReality", + "Command": "ms-settings:holographic-audio" + }, + { + "Name": "Environment", + "Area": "MixedReality", + "Type": "AppSettingsApp", + "AltNames": [ "HolographicEnvironment" ], + "Note": "NoteMixedReality", + "Command": "ms-settings:privacy-holographic-environment" + }, + { + "Name": "HeadsetDisplay", + "Area": "MixedReality", + "Type": "AppSettingsApp", + "AltNames": [ "HolographicHeadset" ], + "Note": "NoteMixedReality", + "Command": "ms-settings:holographic-headset" + }, + { + "Name": "Uninstall", + "Area": "MixedReality", + "Type": "AppSettingsApp", + "AltNames": [ "HolographicManagement" ], + "Note": "NoteMixedReality", + "Command": "ms-settings:holographic-management" + }, + { + "Name": "AirplaneMode", + "Area": "NetworkAndInternet", + "Type": "AppSettingsApp", + "Command": "ms-settings:network-airplanemode" + }, + { + "Name": "Proximity", + "Area": "NetworkAndInternet", + "Type": "AppSettingsApp", + "Command": "ms-settings:proximity" + }, + { + "Name": "CellularAndSim", + "Area": "NetworkAndInternet", + "Type": "AppSettingsApp", + "Command": "ms-settings:network-cellular" + }, + { + "Name": "DataUsage", + "Area": "NetworkAndInternet", + "Type": "AppSettingsApp", + "Command": "ms-settings:datausage" + }, + { + "Name": "DialUp", + "Area": "NetworkAndInternet", + "Type": "AppSettingsApp", + "Command": "ms-settings:network-dialup" + }, + { + "Name": "DirectAccess", + "Area": "NetworkAndInternet", + "Type": "AppSettingsApp", + "Note": "NoteDirectAccess", + "Command": "ms-settings:network-directaccess" + }, + { + "Name": "Ethernet", + "Area": "NetworkAndInternet", + "Type": "AppSettingsApp", + "AltNames": [ "DNS", "Sdns", "SecureDNS", "Gateway", "Dhcp", "Ip" ], + "Command": "ms-settings:network-ethernet" + }, + { + "Name": "ManageKnownNetworks", + "Area": "NetworkAndInternet", + "Type": "AppSettingsApp", + "AltNames": [ "WiFiSettings", "ShortNameWiFi" ], + "Note": "NoteWiFiAdapter", + "Command": "ms-settings:network-wifisettings" + }, + { + "Name": "MobileHotspot", + "Area": "NetworkAndInternet", + "Type": "AppSettingsApp", + "Command": "ms-settings:network-mobilehotspot" + }, + { + "Name": "NFC", + "Area": "NetworkAndInternet", + "Type": "AppSettingsApp", + "AltNames": [ "NFCTransactions" ], + "Command": "ms-settings:nfctransactions" + }, + { + "Name": "Proxy", + "Area": "NetworkAndInternet", + "Type": "AppSettingsApp", + "Command": "ms-settings:network-proxy" + }, + { + "Name": "NetworkStatus", + "Area": "NetworkAndInternet", + "Type": "AppSettingsApp", + "Command": "ms-settings:network-status" + }, + { + "Name": "Network", + "Area": "NetworkAndInternet", + "Type": "AppSettingsApp", + "AltNames": [ "DNS", "Sdns", "SecureDNS", "Gateway", "Dhcp", "Ip" ], + "Command": "ms-settings:network" + }, + { + "Name": "Vpn", + "Area": "NetworkAndInternet", + "Type": "AppSettingsApp", + "Command": "ms-settings:network-vpn" + }, + { + "Name": "WiFi", + "Area": "NetworkAndInternet", + "Type": "AppSettingsApp", + "AltNames": [ "Wireless", "MeteredConnection", "ShortNameWiFi" ], + "Note": "NoteWiFiAdapter", + "Command": "ms-settings:network-wifi" + }, + { + "Name": "WiFiCalling", + "Area": "NetworkAndInternet", + "Type": "AppSettingsApp", + "AltNames": [ "ShortNameWiFi" ], + "Note": "NoteWiFiAdapter", + "Command": "ms-settings:network-wificalling" + }, + { + "Name": "Background", + "Area": "Personalization", + "Type": "AppSettingsApp", + "AltNames": [ "Wallpaper", "Picture", "Image" ], + "Command": "ms-settings:personalization-background" + }, + { + "Name": "ChooseWhichFoldersAppearOnStart", + "Area": "Personalization", + "Type": "AppSettingsApp", + "AltNames": [ "StartPlaces" ], + "Command": "ms-settings:personalization-start-places" + }, + { + "Name": "Colors", + "Area": "Personalization", + "Type": "AppSettingsApp", + "AltNames": [ "DarkMode", "LightMode", "DarkColor", "LightColor", "AppColor", "TaskbarColor", "WindowBorder" ], + "Command": "ms-settings:colors" + }, + { + "Name": "Glance", + "Area": "Personalization", + "Type": "AppSettingsApp", + "DeprecatedInBuild": 17763, + "Note": "NoteDeprecated17763", + "Command": "ms-settings:personalization-glance" + }, + { + "Name": "LockScreen", + "Area": "Personalization", + "Type": "AppSettingsApp", + "AltNames": [ "Image", "Picture" ], + "Command": "ms-settings:lockscreen" + }, + { + "Name": "NavigationBar", + "Area": "Personalization", + "Type": "AppSettingsApp", + "DeprecatedInBuild": 17763, + "Note": "NoteDeprecated17763", + "Command": "ms-settings:personalization-navbar" + }, + { + "Name": "PersonalizationCategory", + "Area": "Personalization", + "Type": "AppSettingsApp", + "Command": "ms-settings:personalization" + }, + { + "Name": "Start", + "Area": "Personalization", + "Type": "AppSettingsApp", + "Command": "ms-settings:personalization-start" + }, + { + "Name": "Taskbar", + "Area": "Personalization", + "Type": "AppSettingsApp", + "Command": "ms-settings:taskbar" + }, + { + "Name": "Themes", + "Area": "Personalization", + "Type": "AppSettingsApp", + "Command": "ms-settings:themes" + }, + { + "Name": "AddYourPhone", + "Area": "Phone", + "Type": "AppSettingsApp", + "Command": "ms-settings:mobile-devices-addphone", + "Note": "NoteAddYourPhone" + }, + { + "Name": "DirectOpenYourPhone", + "Area": "Phone", + "Type": "AppSettingsApp", + "Command": "ms-settings:mobile-devices-addphone-direct", + "Note": "NoteAddYourPhone" + }, + { + "Name": "AccessoryApps", + "Area": "Privacy", + "Type": "AppSettingsApp", + "DeprecatedInBuild": 17763, + "Note": "NoteDeprecated17763", + "Command": "ms-settings:privacy-accessoryapps" + }, + { + "Name": "AccountInfo", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-accountinfo" + }, + { + "Name": "ActivityHistory", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-activityhistory" + }, + { + "Name": "AdvertisingId", + "Area": "Privacy", + "Type": "AppSettingsApp", + "DeprecatedInBuild": 17763, + "Note": "NoteDeprecated17763", + "Command": "ms-settings:privacy-advertisingid" + }, + { + "Name": "AppDiagnostics", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-appdiagnostics" + }, + { + "Name": "AutomaticFileDownloads", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-automaticfiledownloads" + }, + { + "Name": "BackgroundApps", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-backgroundapps" + }, + { + "Name": "Calendar", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-calendar" + }, + { + "Name": "CallHistory", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-callhistory" + }, + { + "Name": "Camera", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-webcam" + }, + { + "Name": "Contacts", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-contacts" + }, + { + "Name": "Documents", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-documents" + }, + { + "Name": "Email", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-email" + }, + { + "Name": "EyeTracker", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Note": "NoteEyetrackerHardware", + "Command": "ms-settings:privacy-eyetracker" + }, + { + "Name": "FeedbackAndDiagnostics", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-feedback" + }, + { + "Name": "FileSystem", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-broadfilesystemaccess" + }, + { + "Name": "General", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy or privacy-general" + }, + { + "Name": "InkingAndTyping", + "Area": "Privacy", + "Type": "AppSettingsApp", + "AltNames": [ "SpeechTyping" ], + "Command": "ms-settings:privacy-speechtyping" + }, + { + "Name": "Location", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-location" + }, + { + "Name": "Messaging", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-messaging" + }, + { + "Name": "Microphone", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-microphone" + }, + { + "Name": "Motion", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-motion" + }, + { + "Name": "Notifications", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-notifications" + }, + { + "Name": "OtherDevices", + "Area": "Privacy", + "Type": "AppSettingsApp", + "AltNames": [ "CustomDevices" ], + "Command": "ms-settings:privacy-customdevices" + }, + { + "Name": "PhoneCalls", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-phonecalls" + }, + { + "Name": "Pictures", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-pictures" + }, + { + "Name": "Radios", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-radios" + }, + { + "Name": "Speech", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-speech" + }, + { + "Name": "Tasks", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-tasks" + }, + { + "Name": "Videos", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-videos" + }, + { + "Name": "VoiceActivation", + "Area": "Privacy", + "Type": "AppSettingsApp", + "Command": "ms-settings:privacy-voiceactivation" + }, + { + "Name": "Accounts", + "Area": "SurfaceHub", + "Type": "AppSettingsApp", + "Command": "ms-settings:surfacehub-accounts" + }, + { + "Name": "SessionCleanup", + "Area": "SurfaceHub", + "Type": "AppSettingsApp", + "Command": "ms-settings:surfacehub-sessioncleanup" + }, + { + "Name": "TeamConferencing", + "Area": "SurfaceHub", + "Type": "AppSettingsApp", + "AltNames": [ "calling" ], + "Command": "ms-settings:surfacehub-calling" + }, + { + "Name": "TeamDeviceManagement", + "Area": "SurfaceHub", + "Type": "AppSettingsApp", + "Command": "ms-settings:surfacehub-devicemanagenent" + }, + { + "Name": "WelcomeScreen", + "Area": "SurfaceHub", + "Type": "AppSettingsApp", + "Command": "ms-settings:surfacehub-welcome" + }, + { + "Name": "About", + "Area": "System", + "Type": "AppSettingsApp", + "AltNames": [ "Ram", "Processor", "Os", "Id", "Edition", "Version" ], + "Command": "ms-settings:about" + }, + { + "Name": "AdvancedDisplaySettings", + "Area": "System", + "Type": "AppSettingsApp", + "Note": "NoteDisplayGraphics", + "Command": "ms-settings:display-advanced" + }, + { + "Name": "AppVolumeAndDevicePreferences", + "Area": "System", + "Type": "AppSettingsApp", + "IntroducedInBuild": 18362, + "Note": "NoteSince18362", + "Command": "ms-settings:apps-volume" + }, + { + "Name": "BatterySaver", + "Area": "System", + "Type": "AppSettingsApp", + "Note": "NoteBattery", + "Command": "ms-settings:batterysaver" + }, + { + "Name": "BatterySaverSettings", + "Area": "System", + "Type": "AppSettingsApp", + "Note": "NoteBattery", + "Command": "ms-settings:batterysaver-settings" + }, + { + "Name": "BatteryUse", + "Area": "System", + "Type": "AppSettingsApp", + "AltNames": [ "BatterySaverUsageDetails" ], + "Note": "NoteBattery", + "Command": "ms-settings:batterysaver-usagedetails" + }, + { + "Name": "Clipboard", + "Area": "System", + "Type": "AppSettingsApp", + "Command": "ms-settings:clipboard" + }, + { + "Name": "Display", + "Area": "System", + "Type": "AppSettingsApp", + "AltNames": [ "NightLight", "BlueLight", "WarmerColor", "RedEye" ], + "Command": "ms-settings:display" + }, + { + "Name": "DefaultSaveLocations", + "Area": "System", + "Type": "AppSettingsApp", + "Command": "ms-settings:savelocations" + }, + { + "Name": "ScreenRotation", + "Area": "System", + "Type": "AppSettingsApp", + "Command": "ms-settings:screenrotation" + }, + { + "Name": "DuplicatingMyDisplay", + "Area": "System", + "Type": "AppSettingsApp", + "AltNames": [ "Presentation" ], + "Command": "ms-settings:quietmomentspresentation" + }, + { + "Name": "DuringTheseHours", + "Area": "System", + "Type": "AppSettingsApp", + "AltNames": [ "Scheduled" ], + "Command": "ms-settings:quietmomentsscheduled" + }, + { + "Name": "Encryption", + "Area": "System", + "Type": "AppSettingsApp", + "Command": "ms-settings:deviceencryption" + }, + { + "Name": "FocusAssistQuietHours", + "Area": "System", + "Type": "AppSettingsApp", + "Command": "ms-settings:quiethours" + }, + { + "Name": "FocusAssistQuietMoments", + "Area": "System", + "Type": "AppSettingsApp", + "Command": "ms-settings:quietmomentshome" + }, + { + "Name": "GraphicsSettings", + "Area": "System", + "Type": "AppSettingsApp", + "AltNames": [ "AdvancedGraphics" ], + "Note": "NoteAdvancedGraphics", + "Command": "ms-settings:display-advancedgraphics" + }, + { + "Name": "Messaging", + "Area": "System", + "Type": "AppSettingsApp", + "Command": "ms-settings:messaging" + }, + { + "Name": "Multitasking", + "Area": "System", + "Type": "AppSettingsApp", + "AltNames": [ "Timeline", "Tab", "AltAndTab", "VirtualDesktops" ], + "Command": "ms-settings:multitasking" + }, + { + "Name": "NightLightSettings", + "Area": "System", + "Type": "AppSettingsApp", + "Command": "ms-settings:nightlight" + }, + { + "Name": "PhoneDefaultApps", + "Area": "System", + "Type": "AppSettingsApp", + "Command": "ms-settings:phone-defaultapps" + }, + { + "Name": "ProjectingToThisPc", + "Area": "System", + "Type": "AppSettingsApp", + "Command": "ms-settings:project" + }, + { + "Name": "SharedExperiences", + "Area": "System", + "Type": "AppSettingsApp", + "AltNames": [ "Crossdevice" ], + "Command": "ms-settings:crossdevice" + }, + { + "Name": "TabletMode", + "Area": "System", + "Type": "AppSettingsApp", + "Command": "ms-settings:tabletmode" + }, + { + "Name": "Taskbar", + "Area": "System", + "Type": "AppSettingsApp", + "Command": "ms-settings:taskbar" + }, + { + "Name": "NotificationsAndActions", + "Area": "System", + "Type": "AppSettingsApp", + "Command": "ms-settings:notifications" + }, + { + "Name": "RemoteDesktop", + "Area": "System", + "Type": "AppSettingsApp", + "Command": "ms-settings:remotedesktop" + }, + { + "Name": "Phone", + "Area": "System", + "Type": "AppSettingsApp", + "DeprecatedInBuild": 17763, + "Note": "NoteDeprecated17763", + "Command": "ms-settings:phone" + }, + { + "Name": "PowerAndSleep", + "Area": "System", + "Type": "AppSettingsApp", + "Command": "ms-settings:powersleep" + }, + { + "Name": "Sound", + "Area": "System", + "Type": "AppSettingsApp", + "Command": "ms-settings:sound" + }, + { + "Name": "StorageSense", + "Area": "System", + "Type": "AppSettingsApp", + "Command": "ms-settings:storagesense" + }, + { + "Name": "StoragePolicies", + "Area": "System", + "Type": "AppSettingsApp", + "Command": "ms-settings:storagepolicies" + }, + { + "Name": "DateAndTime", + "Area": "TimeAndLanguage", + "Type": "AppSettingsApp", + "Command": "ms-settings:dateandtime" + }, + { + "Name": "JapanImeSettings", + "Area": "TimeAndLanguage", + "Type": "AppSettingsApp", + "AltNames": [ "jpnime" ], + "Note": "NoteImeJapan", + "Command": "ms-settings:regionlanguage-jpnime" + }, + { + "Name": "Region", + "Area": "TimeAndLanguage", + "Type": "AppSettingsApp", + "AltNames": [ "RegionFormatting" ], + "Command": "ms-settings:regionformatting" + }, + { + "Name": "Keyboard", + "Area": "TimeAndLanguage", + "Type": "AppSettingsApp", + "Command": "ms-settings:keyboard" + }, + { + "Name": "RegionalLanguage", + "Area": "TimeAndLanguage", + "Type": "AppSettingsApp", + "Command": "ms-settings:regionlanguage" + }, + { + "Name": "BopomofoIme", + "Area": "TimeAndLanguage", + "Type": "AppSettingsApp", + "AltNames": [ "bpmf" ], + "Command": "ms-settings:regionlanguage-bpmfime" + }, + { + "Name": "CangjieIme", + "Area": "TimeAndLanguage", + "Type": "AppSettingsApp", + "Command": "ms-settings:regionlanguage-cangjieime" + }, + { + "Name": "PinyinImeSettingsDomainLexicon", + "Area": "TimeAndLanguage", + "Type": "AppSettingsApp", + "Command": "ms-settings:regionlanguage-chsime-pinyin-domainlexicon" + }, + { + "Name": "PinyinImeSettingsKeyConfiguration", + "Area": "TimeAndLanguage", + "Type": "AppSettingsApp", + "Command": "ms-settings:regionlanguage-chsime-pinyin-keyconfig" + }, + { + "Name": "PinyinImeSettingsUdp", + "Area": "TimeAndLanguage", + "Type": "AppSettingsApp", + "Command": "ms-settings:regionlanguage-chsime-pinyin-udp" + }, + { + "Name": "WubiImeSettingsUdp", + "Area": "TimeAndLanguage", + "Type": "AppSettingsApp", + "Command": "ms-settings:regionlanguage-chsime-wubi-udp" + }, + { + "Name": "Quickime", + "Area": "TimeAndLanguage", + "Type": "AppSettingsApp", + "Command": "ms-settings:regionlanguage-quickime" + }, + { + "Name": "PinyinImeSettings", + "Area": "TimeAndLanguage", + "Type": "AppSettingsApp", + "Note": "NoteImePinyin", + "Command": "ms-settings:regionlanguage-chsime-pinyin" + }, + { + "Name": "Speech", + "Area": "TimeAndLanguage", + "Type": "AppSettingsApp", + "Command": "ms-settings:speech" + }, + { + "Name": "WubiImeSettings", + "Area": "TimeAndLanguage", + "Type": "AppSettingsApp", + "Note": "NoteImeWubi", + "Command": "ms-settings:regionlanguage-chsime-wubi" + }, + { + "Name": "Activation", + "Area": "UpdateAndSecurity", + "Type": "AppSettingsApp", + "Command": "ms-settings:activation" + }, + { + "Name": "Backup", + "Area": "UpdateAndSecurity", + "Type": "AppSettingsApp", + "Command": "ms-settings:backup" + }, + { + "Name": "DeliveryOptimization", + "Area": "UpdateAndSecurity", + "Type": "AppSettingsApp", + "Command": "ms-settings:delivery-optimization" + }, + { + "Name": "FindMyDevice", + "Area": "UpdateAndSecurity", + "Type": "AppSettingsApp", + "Command": "ms-settings:findmydevice" + }, + { + "Name": "ForDevelopers", + "Area": "UpdateAndSecurity", + "Type": "AppSettingsApp", + "Command": "ms-settings:developers" + }, + { + "Name": "Recovery", + "Area": "UpdateAndSecurity", + "Type": "AppSettingsApp", + "Command": "ms-settings:recovery" + }, + { + "Name": "Troubleshoot", + "Area": "UpdateAndSecurity", + "Type": "AppSettingsApp", + "Command": "ms-settings:troubleshoot" + }, + { + "Name": "WindowsSecurity", + "Area": "UpdateAndSecurity", + "Type": "AppSettingsApp", + "AltNames": [ "WindowsDefender", "Firewall", "Virus", "CoreIsolation", "SecurityProcessor", "IsolatedBrowsing", "ExploitProtection" ], + "Command": "ms-settings:windowsdefender" + }, + { + "Name": "WindowsInsiderProgram", + "Area": "UpdateAndSecurity", + "Type": "AppSettingsApp", + "Note": "NoteEnrolledWIP", + "Command": "ms-settings:windowsinsider" + }, + { + "Name": "WindowsUpdate", + "Area": "UpdateAndSecurity", + "Type": "AppSettingsApp", + "Command": "ms-settings:windowsupdate" + }, + { + "Name": "WindowsUpdateCheckForUpdates", + "Area": "UpdateAndSecurity", + "Type": "AppSettingsApp", + "Command": "ms-settings:windowsupdate-action" + }, + { + "Name": "WindowsUpdateAdvancedOptions", + "Area": "UpdateAndSecurity", + "Type": "AppSettingsApp", + "Command": "ms-settings:windowsupdate-options" + }, + { + "Name": "WindowsUpdateRestartOptions", + "Area": "UpdateAndSecurity", + "Type": "AppSettingsApp", + "Command": "ms-settings:windowsupdate-restartoptions" + }, + { + "Name": "WindowsUpdateViewUpdateHistory", + "Area": "UpdateAndSecurity", + "Type": "AppSettingsApp", + "Command": "ms-settings:windowsupdate-history" + }, + { + "Name": "WindowsUpdateViewOptionalUpdates", + "Area": "UpdateAndSecurity", + "Type": "AppSettingsApp", + "IntroducedInBuild": 19041, + "Note": "NoteSince19041", + "Command": "ms-settings:windowsupdate-optionalupdates" + }, + { + "Name": "WorkplaceProvisioning", + "Area": "UserAccounts", + "Type": "AppSettingsApp", + "Note": "NoteWorkplaceProvisioning", + "Command": "ms-settings:workplace-provisioning" + }, + { + "Name": "Provisioning", + "Area": "UserAccounts", + "Type": "AppSettingsApp", + "Note": "NoteMobileProvisioning", + "Command": "ms-settings:provisioning" + }, + { + "Name": "WindowsAnywhere", + "Area": "UserAccounts", + "Type": "AppSettingsApp", + "Note": "NoteWindowsAnywhere", + "Command": "ms-settings:windowsanywhere" + }, + { + "Name": "AccessibilityOptions", + "Area": "EaseOfAccess", + "Type": "ControlPanel", + "AltNames": [ "access.cpl" ], + "Command": "control access.cpl" + }, + { + "Name": "ActionCenter", + "Area": "SystemAndSecurity", + "Type": "ControlPanel", + "Command": "control /name Microsoft.ActionCenter" + }, + { + "Name": "AddHardware", + "Area": "HardwareAndSound", + "Type": "ControlPanel", + "Command": "control /name Microsoft.AddHardware" + }, + { + "Name": "AddRemovePrograms", + "Area": "HardwareAndSound", + "Type": "ControlPanel", + "AltNames": [ "appwiz.cpl" ], + "Command": "control appwiz.cpl" + }, + { + "Name": "AdministrativeTools", + "Area": "SystemAndSecurity", + "Type": "ControlPanel", + "Command": "control /name Microsoft.AdministrativeTools" + }, + { + "Name": "AutoPlay", + "Area": "Programs", + "Type": "ControlPanel", + "Command": "control /name Microsoft.AutoPlay" + }, + { + "Name": "BackupAndRestore", + "Area": "SystemAndSecurity", + "Type": "ControlPanel", + "Command": "control /name Microsoft.BackupAndRestore" + }, + { + "Name": "BiometricDevices", + "Area": "HardwareAndSound", + "Type": "ControlPanel", + "Command": "control /name Microsoft.BiometricDevices" + }, + { + "Name": "BitLockerDriveEncryption", + "Area": "SystemAndSecurity", + "Type": "ControlPanel", + "Command": "control /name Microsoft.BitLockerDriveEncryption" + }, + { + "Name": "BluetoothDevices", + "Area": "HardwareAndSound", + "Type": "ControlPanel", + "Command": "control /name Microsoft.BluetoothDevices" + }, + { + "Name": "ColorManagement", + "Area": "AppearanceAndPersonalization", + "Type": "ControlPanel", + "Command": "control /name Microsoft.ColorManagement" + }, + { + "Name": "CredentialManager", + "Area": "UserAccounts", + "Type": "ControlPanel", + "AltNames": [ "Password" ], + "Command": "control /name Microsoft.CredentialManager" + }, + { + "Name": "ClientServiceForNetWare", + "Area": "Programs", + "Type": "ControlPanel", + "AltNames": [ "nwc.cpl" ], + "Command": "control nwc.cpl" + }, + { + "Name": "DateAndTime", + "Area": "ClockAndRegion", + "Type": "ControlPanel", + "AltNames": [ "timedate.cpl" ], + "Command": "control /name Microsoft.DateAndTime" + }, + { + "Name": "DefaultLocation", + "Area": "ClockAndRegion", + "Type": "ControlPanel", + "Command": "control /name Microsoft.DefaultLocation" + }, + { + "Name": "DefaultPrograms", + "Area": "Programs", + "Type": "ControlPanel", + "Command": "control /name Microsoft.DefaultPrograms" + }, + { + "Name": "DeviceManager", + "Area": "HardwareAndSound", + "Type": "ControlPanel", + "Command": "control /name Microsoft.DeviceManager" + }, + { + "Name": "DevicesAndPrinters", + "Area": "HardwareAndSound", + "Type": "ControlPanel", + "Command": "control /name Microsoft.DevicesAndPrinters" + }, + { + "Name": "EaseOfAccessCenter", + "Area": "EaseOfAccess", + "Type": "ControlPanel", + "Command": "control /name Microsoft.EaseOfAccessCenter" + }, + { + "Name": "FolderOptions", + "Area": "AppearanceAndPersonalization", + "Type": "ControlPanel", + "Command": "control /name Microsoft.FolderOptions" + }, + { + "Name": "Fonts", + "Area": "AppearanceAndPersonalization", + "Type": "ControlPanel", + "Command": "control /name Microsoft.Fonts" + }, + { + "Name": "GameControllers", + "Area": "HardwareAndSound", + "Type": "ControlPanel", + "Command": "control /name Microsoft.GameControllers" + }, + { + "Name": "GetPrograms", + "Area": "Programs", + "Type": "ControlPanel", + "Command": "control /name Microsoft.GetPrograms" + }, + { + "Name": "GettingStarted", + "Area": "ControlPanel", + "Type": "ControlPanel", + "Command": "control /name Microsoft.GettingStarted" + }, + { + "Name": "HomeGroup", + "Area": "NetworkAndInternet", + "Type": "ControlPanel", + "Command": "control /name Microsoft.HomeGroup" + }, + { + "Name": "IndexingOptions", + "Area": "SystemAndSecurity", + "Type": "ControlPanel", + "Command": "control /name Microsoft.IndexingOptions" + }, + { + "Name": "Infrared", + "Area": "HardwareAndSound", + "Type": "ControlPanel", + "Command": "control /name Microsoft.Infrared" + }, + { + "Name": "InternetOptions", + "Area": "NetworkAndInternet", + "Type": "ControlPanel", + "AltNames": [ "inetcpl.cpl" ], + "Command": "control /name Microsoft.InternetOptions" + }, + { + "Name": "MailMicrosoftExchangeOrWindowsMessaging", + "Area": "NetworkAndInternet", + "Type": "ControlPanel", + "AltNames": [ "mlcfg32.cpl" ], + "Command": "control mlcfg32.cpl" + }, + { + "Name": "Mouse", + "Area": "HardwareAndSound", + "Type": "ControlPanel", + "Command": "control /name Microsoft.Mouse" + }, + { + "Name": "NetworkAndSharingCenter", + "Area": "NetworkAndInternet", + "Type": "ControlPanel", + "Command": "control /name Microsoft.NetworkAndSharingCenter" + }, + { + "Name": "NetworkConnection", + "Area": "NetworkAndInternet", + "Type": "ControlPanel", + "Command": "control netconnections" + }, + { + "Name": "NetworkSetupWizard", + "Area": "NetworkAndInternet", + "Type": "ControlPanel", + "AltNames": [ "netsetup.cpl" ], + "Command": "control netsetup.cpl" + }, + { + "Name": "OdbcDataSourceAdministrator32Bit", + "Area": "AdministrativeTools", + "Type": "ControlPanel", + "AltNames": [ "odbccp32.cpl" ], + "Command": "%windir%/syswow64/odbcad32.exe" + }, + { + "Name": "OdbcDataSourceAdministrator64Bit", + "Area": "AdministrativeTools", + "Type": "ControlPanel", + "Command": "%windir%/system32/odbcad32.exe" + }, + { + "Name": "OfflineFiles", + "Area": "NetworkAndInternet", + "Type": "ControlPanel", + "Command": "control /name Microsoft.OfflineFiles" + }, + { + "Name": "ParentalControls", + "Area": "UserAccounts", + "Type": "ControlPanel", + "Command": "control /name Microsoft.ParentalControls" + }, + { + "Name": "PenAndInputDevices", + "Area": "HardwareAndSound", + "Type": "ControlPanel", + "Command": "control /name Microsoft.PenAndInputDevices" + }, + { + "Name": "PenAndTouch", + "Area": "HardwareAndSound", + "Type": "ControlPanel", + "Command": "control /name Microsoft.PenAndTouch" + }, + { + "Name": "PeopleNearMe", + "Area": "UserAccounts", + "Type": "ControlPanel", + "Command": "control /name Microsoft.PeopleNearMe" + }, + { + "Name": "PerformanceInformationAndTools", + "Area": "SystemAndSecurity", + "Type": "ControlPanel", + "Command": "control /name Microsoft.PerformanceInformationAndTools" + }, + { + "Name": "PhoneAndModemOptions", + "Area": "NetworkAndInternet", + "Type": "ControlPanel", + "Command": "control /name Microsoft.PhoneAndModemOptions" + }, + { + "Name": "PhoneAndModem", + "Area": "NetworkAndInternet", + "Type": "ControlPanel", + "AltNames": [ "modem.cpl" ], + "Command": "control /name Microsoft.PhoneAndModem" + }, + { + "Name": "PowerOptions", + "Area": "SystemAndSecurity", + "Type": "ControlPanel", + "AltNames": [ "powercfg.cpl" ], + "Command": "control /name Microsoft.PowerOptions" + }, + { + "Name": "Printers", + "Area": "HardwareAndSound", + "Type": "ControlPanel", + "Command": "control /name Microsoft.Printers" + }, + { + "Name": "ProblemReportsAndSolutions", + "Area": "SystemAndSecurity", + "Type": "ControlPanel", + "Command": "control /name Microsoft.ProblemReportsAndSolutions" + }, + { + "Name": "ProgramsAndFeatures", + "Area": "Programs", + "Type": "ControlPanel", + "Command": "control /name Microsoft.ProgramsAndFeatures" + }, + { + "Name": "Recovery", + "Area": "SystemAndSecurity", + "Type": "ControlPanel", + "Command": "control /name Microsoft.Recovery" + }, + { + "Name": "RegionAndLanguage", + "Area": "ClockAndRegion", + "Type": "ControlPanel", + "Command": "control /name Microsoft.RegionAndLanguage" + }, + { + "Name": "RemoteAppAndDesktopConnections", + "Area": "NetworkAndInternet", + "Type": "ControlPanel", + "Command": "control /name Microsoft.RemoteAppAndDesktopConnections" + }, + { + "Name": "ScannersAndCameras", + "Area": "HardwareAndSound", + "Type": "ControlPanel", + "AltNames": [ "sticpl.cpl" ], + "Command": "control /name Microsoft.ScannersAndCameras" + }, + { + "Name": "ScheduledTasks", + "Area": "SystemAndSecurity", + "Type": "ControlPanel", + "AltNames": [ "schedtasks" ], + "Command": "control schedtasks" + }, + { + "Name": "SecurityCenter", + "Area": "SystemAndSecurity", + "Type": "ControlPanel", + "Command": "control /name Microsoft.SecurityCenter" + }, + { + "Name": "Sound", + "Area": "HardwareAndSound", + "Type": "ControlPanel", + "Command": "control /name Microsoft.Sound" + }, + { + "Name": "SpeechRecognition", + "Area": "EaseOfAccess", + "Type": "ControlPanel", + "Command": "control /name Microsoft.SpeechRecognition" + }, + { + "Name": "SyncCenter", + "Area": "SystemAndSecurity", + "Type": "ControlPanel", + "Command": "control /name Microsoft.SyncCenter" + }, + { + "Name": "System", + "Area": "SystemAndSecurity", + "Type": "ControlPanel", + "AltNames": [ "sysdm.cpl" ], + "Command": "control sysdm.cpl" + }, + { + "Name": "TabletPcSettings", + "Area": "SystemAndSecurity", + "Type": "ControlPanel", + "Command": "control /name Microsoft.TabletPCSettings" + }, + { + "Name": "TextToSpeech", + "Area": "EaseOfAccess", + "Type": "ControlPanel", + "Command": "control /name Microsoft.TextToSpeech" + }, + { + "Name": "UserAccounts", + "Area": "UserAccounts", + "Type": "ControlPanel", + "Command": "control /name Microsoft.UserAccounts" + }, + { + "Name": "WelcomeCenter", + "Area": "SystemAndSecurity", + "Type": "ControlPanel", + "Command": "control /name Microsoft.WelcomeCenter" + }, + { + "Name": "WindowsAnytimeUpgrade", + "Area": "SystemAndSecurity", + "Type": "ControlPanel", + "Command": "control /name Microsoft.WindowsAnytimeUpgrade" + }, + { + "Name": "WindowsCardSpace", + "Area": "HardwareAndSound", + "Type": "ControlPanel", + "Command": "control /name Microsoft.CardSpace" + }, + { + "Name": "WindowsDefender", + "Area": "SystemAndSecurity", + "Type": "ControlPanel", + "Command": "control /name Microsoft.WindowsDefender" + }, + { + "Name": "WindowsFirewall", + "Area": "SystemAndSecurity", + "Type": "ControlPanel", + "Command": "control /name Microsoft.WindowsFirewall" + }, + { + "Name": "WindowsMobilityCenter", + "Area": "NetworkAndInternet", + "Type": "ControlPanel", + "Command": "control /name Microsoft.MobilityCenter" + }, + { + "Name": "DisplayProperties", + "Area": "HardwareAndSound", + "Type": "ControlPanel", + "AltNames": [ "desk.cpl" ], + "Command": "control Desk.cpl" + }, + { + "Name": "FindFast", + "Area": "SystemAndSecurity", + "Type": "ControlPanel", + "AltNames": [ "findfast.cpl" ], + "Command": "control FindFast.cpl" + }, + { + "Name": "RegionalSettingsProperties", + "Area": "EaseOfAccess", + "Type": "ControlPanel", + "AltNames": [ "intl.cpl" ], + "Command": "control Intl.cpl" + }, + { + "Name": "JoystickProperties", + "Area": "HardwareAndSound", + "Type": "ControlPanel", + "AltNames": [ "joy.cpl" ], + "Command": "control Joy.cpl" + }, + { + "Name": "MouseFontsKeyboardAndPrintersProperties", + "Area": "HardwareAndSound", + "Type": "ControlPanel", + "AltNames": [ "main.cpl" ], + "Command": "control Main.cpl" + }, + { + "Name": "MultimediaProperties", + "Area": "HardwareAndSound", + "Type": "ControlPanel", + "AltNames": [ "mmsys.cpl" ], + "Command": "control Mmsys.cpl" + }, + { + "Name": "NetworkProperties", + "Area": "NetworkAndInternet", + "Type": "ControlPanel", + "AltNames": [ "netcpl.cpl" ], + "Command": "control Netcpl.cpl" + }, + { + "Name": "PasswordProperties", + "Area": "UserAccounts", + "Type": "ControlPanel", + "AltNames": [ "password.cpl" ], + "Command": "control Password.cpl" + }, + { + "Name": "SystemPropertiesAndAddNewHardwareWizard", + "Area": "HardwareAndSound", + "Type": "ControlPanel", + "AltNames": [ "sysdm.cpl" ], + "Command": "control Sysdm.cpl" + }, + { + "Name": "DesktopThemes", + "Area": "AppearanceAndPersonalization", + "Type": "ControlPanel", + "AltNames": [ "themes.cpl" ], + "Command": "control Themes.cpl" + }, + { + "Name": "MicrosoftMailPostOffice", + "Area": "Programs", + "Type": "ControlPanel", + "AltNames": [ "wgpocpl.cpl" ], + "Command": "control Wgpocpl.cpl" + } +] diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/plugin.json b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/plugin.json new file mode 100644 index 00000000000..478a5d38b2b --- /dev/null +++ b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/plugin.json @@ -0,0 +1,13 @@ +{ + "ID": "5043CECEE6A748679CBE02D27D83747A", + "ActionKeyword": "$", + "IsGlobal": false, + "Name": "Windows Settings", + "Author": "TobiasSekan", + "Version": "1.0.0", + "Language": "csharp", + "Website": "https://aka.ms/powertoys", + "ExecuteFileName": "Microsoft.PowerToys.Run.Plugin.WindowsSettings.dll", + "IcoPathDark": "Images\\WindowsSettings.dark.png", + "IcoPathLight": "Images\\WindowsSettings.light.png" +} From 9836c19dd5c70e6be5e176e41d006fdb17615164 Mon Sep 17 00:00:00 2001 From: Mykhailo Pylyp Date: Fri, 18 Jun 2021 13:40:10 +0300 Subject: [PATCH 005/625] [Run-Plugin][Program] Fix null reference exception on Dispose (#11785) --- .../Microsoft.PowerToys.Run.Plugin.WindowsSettings/Main.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Main.cs b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Main.cs index dfc9b229648..9c6fabbf1d3 100644 --- a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Main.cs +++ b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Main.cs @@ -169,7 +169,7 @@ protected virtual void Dispose(bool disposing) return; } - if (!(_context is null)) + if (_context != null && _context.API != null) { _context.API.ThemeChanged -= OnThemeChanged; } From e223d13f24cbdf8e073e385ab7ac55b64c0881c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=BC=98=E9=9F=AC?= Date: Sun, 18 Jul 2021 22:42:58 +0800 Subject: [PATCH 006/625] Initial Refactor --- .gitignore | 367 ++++++++++++++++++ .../Classes => Classes}/WindowsSetting.cs | 0 .../Helper => Helper}/ContextMenuHelper.cs | 0 .../JsonSettingsListHelper.cs | 0 .../Helper => Helper}/ResultHelper.cs | 0 .../Helper => Helper}/TranslationHelper.cs | 0 .../UnsupportedSettingsHelper.cs | 0 .../WindowsSettings.dark.png | Bin .../WindowsSettings.light.png | Bin .../Main.cs => Main.cs | 0 ...owerToys.Run.Plugin.WindowsSettings.csproj | 0 .../Resources.Designer.cs | 0 .../Properties => Properties}/Resources.resx | 0 ...ndowsSettings.json => WindowsSettings.json | 0 .../plugin.json => plugin.json | 0 15 files changed, 367 insertions(+) create mode 100644 .gitignore rename {src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Classes => Classes}/WindowsSetting.cs (100%) rename {src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper => Helper}/ContextMenuHelper.cs (100%) rename {src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper => Helper}/JsonSettingsListHelper.cs (100%) rename {src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper => Helper}/ResultHelper.cs (100%) rename {src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper => Helper}/TranslationHelper.cs (100%) rename {src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper => Helper}/UnsupportedSettingsHelper.cs (100%) rename {src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Images => Images}/WindowsSettings.dark.png (100%) rename {src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Images => Images}/WindowsSettings.light.png (100%) rename src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Main.cs => Main.cs (100%) rename src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Microsoft.PowerToys.Run.Plugin.WindowsSettings.csproj => Microsoft.PowerToys.Run.Plugin.WindowsSettings.csproj (100%) rename {src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Properties => Properties}/Resources.Designer.cs (100%) rename {src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Properties => Properties}/Resources.resx (100%) rename src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/WindowsSettings.json => WindowsSettings.json (100%) rename src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/plugin.json => plugin.json (100%) diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000000..5f38a9aa6f7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,367 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Rider ignored files +/contentModel.xml +/projectSettingsUpdater.xml +/.idea.Microsoft.PowerToys.Run.Plugin.WindowsSettings.iml +/modules.xml +/.idea +# Datasource local storage ignored files +/../../../../../../../:\文档\RiderProject\Flow.Plugin.WindowsSettings\.idea\.idea.Microsoft.PowerToys.Run.Plugin.WindowsSettings.dir\.idea/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ \ No newline at end of file diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Classes/WindowsSetting.cs b/Classes/WindowsSetting.cs similarity index 100% rename from src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Classes/WindowsSetting.cs rename to Classes/WindowsSetting.cs diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/ContextMenuHelper.cs b/Helper/ContextMenuHelper.cs similarity index 100% rename from src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/ContextMenuHelper.cs rename to Helper/ContextMenuHelper.cs diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/JsonSettingsListHelper.cs b/Helper/JsonSettingsListHelper.cs similarity index 100% rename from src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/JsonSettingsListHelper.cs rename to Helper/JsonSettingsListHelper.cs diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/ResultHelper.cs b/Helper/ResultHelper.cs similarity index 100% rename from src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/ResultHelper.cs rename to Helper/ResultHelper.cs diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/TranslationHelper.cs b/Helper/TranslationHelper.cs similarity index 100% rename from src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/TranslationHelper.cs rename to Helper/TranslationHelper.cs diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/UnsupportedSettingsHelper.cs b/Helper/UnsupportedSettingsHelper.cs similarity index 100% rename from src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Helper/UnsupportedSettingsHelper.cs rename to Helper/UnsupportedSettingsHelper.cs diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Images/WindowsSettings.dark.png b/Images/WindowsSettings.dark.png similarity index 100% rename from src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Images/WindowsSettings.dark.png rename to Images/WindowsSettings.dark.png diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Images/WindowsSettings.light.png b/Images/WindowsSettings.light.png similarity index 100% rename from src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Images/WindowsSettings.light.png rename to Images/WindowsSettings.light.png diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Main.cs b/Main.cs similarity index 100% rename from src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Main.cs rename to Main.cs diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Microsoft.PowerToys.Run.Plugin.WindowsSettings.csproj b/Microsoft.PowerToys.Run.Plugin.WindowsSettings.csproj similarity index 100% rename from src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Microsoft.PowerToys.Run.Plugin.WindowsSettings.csproj rename to Microsoft.PowerToys.Run.Plugin.WindowsSettings.csproj diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs similarity index 100% rename from src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Properties/Resources.Designer.cs rename to Properties/Resources.Designer.cs diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Properties/Resources.resx b/Properties/Resources.resx similarity index 100% rename from src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Properties/Resources.resx rename to Properties/Resources.resx diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/WindowsSettings.json b/WindowsSettings.json similarity index 100% rename from src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/WindowsSettings.json rename to WindowsSettings.json diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/plugin.json b/plugin.json similarity index 100% rename from src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/plugin.json rename to plugin.json From 89ef3a97bf580f9b26a6aad1722de013a862f83f Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Mon, 19 Jul 2021 16:32:57 +0800 Subject: [PATCH 007/625] Porting to Flow --- Helper/ContextMenuHelper.cs | 19 +++----- Helper/JsonSettingsListHelper.cs | 1 - Helper/ResultHelper.cs | 5 +-- Helper/TranslationHelper.cs | 1 - Helper/UnsupportedSettingsHelper.cs | 1 - Log.cs | 24 ++++++++++ Main.cs | 39 +++------------- ...owerToys.Run.Plugin.WindowsSettings.csproj | 44 ++++--------------- 8 files changed, 46 insertions(+), 88 deletions(-) create mode 100644 Log.cs diff --git a/Helper/ContextMenuHelper.cs b/Helper/ContextMenuHelper.cs index b5cbe173c7e..15b9f0d3e09 100644 --- a/Helper/ContextMenuHelper.cs +++ b/Helper/ContextMenuHelper.cs @@ -5,10 +5,8 @@ using System; using System.Collections.Generic; using System.Windows; -using System.Windows.Input; +using Flow.Launcher.Plugin; using Microsoft.PowerToys.Run.Plugin.WindowsSettings.Properties; -using Wox.Plugin; -using Wox.Plugin.Logger; namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper { @@ -24,23 +22,18 @@ internal static class ContextMenuHelper /// The result for the context menu entires /// The name of the this assembly /// A list with context menu entries - internal static List GetContextMenu(in Result result, in string assemblyName) + internal static List GetContextMenu(in Result result, in string assemblyName) { - if (!(result?.ContextData is WindowsSetting entry)) + if (result?.ContextData is not WindowsSetting entry) { - return new List(0); + return new List(0); } - var list = new List(1) + var list = new List(1) { - new ContextMenuResult + new() { - AcceleratorKey = Key.C, - AcceleratorModifiers = ModifierKeys.Control, Action = _ => TryToCopyToClipBoard(entry.Command), - FontFamily = "Segoe MDL2 Assets", - Glyph = "\xE8C8", // E8C8 => Symbol: Copy - PluginName = assemblyName, Title = $"{Resources.CopyCommand} (Ctrl+C)", }, }; diff --git a/Helper/JsonSettingsListHelper.cs b/Helper/JsonSettingsListHelper.cs index 0ec818589ed..bff04186457 100644 --- a/Helper/JsonSettingsListHelper.cs +++ b/Helper/JsonSettingsListHelper.cs @@ -9,7 +9,6 @@ using System.Reflection; using System.Text.Json; using System.Text.Json.Serialization; -using Wox.Plugin.Logger; namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper { diff --git a/Helper/ResultHelper.cs b/Helper/ResultHelper.cs index fbea9bab1ba..4fd27f9d3b7 100644 --- a/Helper/ResultHelper.cs +++ b/Helper/ResultHelper.cs @@ -7,9 +7,8 @@ using System.Diagnostics; using System.Linq; using System.Text; +using Flow.Launcher.Plugin; using Microsoft.PowerToys.Run.Plugin.WindowsSettings.Properties; -using Wox.Plugin; -using Wox.Plugin.Logger; namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper { @@ -80,7 +79,7 @@ private static void AddOptionalToolTip(WindowsSetting entry, Result result) toolTipText.Append($"{Resources.Note}: {entry.Note}"); } - result.ToolTipData = new ToolTipData(entry.Name, toolTipText.ToString()); + result.TitleToolTip = toolTipText.ToString(); } /// diff --git a/Helper/TranslationHelper.cs b/Helper/TranslationHelper.cs index ee3d92c36a7..4e8fa40ed70 100644 --- a/Helper/TranslationHelper.cs +++ b/Helper/TranslationHelper.cs @@ -6,7 +6,6 @@ using System.Collections.ObjectModel; using System.Linq; using Microsoft.PowerToys.Run.Plugin.WindowsSettings.Properties; -using Wox.Plugin.Logger; namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper { diff --git a/Helper/UnsupportedSettingsHelper.cs b/Helper/UnsupportedSettingsHelper.cs index d455067f463..30f28a1db47 100644 --- a/Helper/UnsupportedSettingsHelper.cs +++ b/Helper/UnsupportedSettingsHelper.cs @@ -5,7 +5,6 @@ using System; using System.Collections.Generic; using System.Linq; -using Wox.Plugin.Logger; namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper { diff --git a/Log.cs b/Log.cs new file mode 100644 index 00000000000..090c9a7372d --- /dev/null +++ b/Log.cs @@ -0,0 +1,24 @@ +using System; +using System.Runtime.CompilerServices; +using Flow.Launcher.Plugin; + +namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings +{ + public static class Log + { + private static IPublicAPI _api; + + public static void Init(IPublicAPI api) + { + _api = api; + } + public static void Exception(string message, Exception exception, Type type, [CallerMemberName] string methodName = "") + { + _api.LogException(type.FullName, message, exception, methodName); + } + public static void Warn(string message, Type type, [CallerMemberName] string methodName = "") + { + _api.LogWarn(type.FullName, message, methodName); + } + } +} diff --git a/Main.cs b/Main.cs index 9c6fabbf1d3..4961266df70 100644 --- a/Main.cs +++ b/Main.cs @@ -6,17 +6,16 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; -using ManagedCommon; +using Flow.Launcher.Plugin; using Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper; using Microsoft.PowerToys.Run.Plugin.WindowsSettings.Properties; -using Wox.Plugin; namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings { /// /// Main class of this plugin that implement all used interfaces. /// - public class Main : IPlugin, IContextMenu, IPluginI18n, IDisposable + public sealed class Main : IPlugin, IContextMenu, IPluginI18n, IDisposable { /// /// The path to the symbol for a light theme. @@ -79,8 +78,6 @@ public Main() public void Init(PluginInitContext context) { _context = context ?? throw new ArgumentNullException(nameof(context)); - _context.API.ThemeChanged += OnThemeChanged; - UpdateIconPath(_context.API.GetCurrentTheme()); _settingsList = JsonSettingsListHelper.ReadAllPossibleSettings(); _settingsList = UnsupportedSettingsHelper.FilterByBuild(_settingsList); @@ -126,7 +123,7 @@ bool Predicate(WindowsSetting found) return true; } - if (!(found.AltNames is null)) + if (found.AltNames is not null) { foreach (var altName in found.AltNames) { @@ -146,7 +143,7 @@ bool Predicate(WindowsSetting found) /// /// The for the list with context menu entries. /// A list context menu entries. - public List LoadContextMenus(Result selectedResult) + public List LoadContextMenus(Result selectedResult) { return ContextMenuHelper.GetContextMenu(selectedResult, _assemblyName); } @@ -162,18 +159,13 @@ public void Dispose() /// Wrapper method for that dispose additional objects and events form the plugin itself. /// /// Indicate that the plugin is disposed. - protected virtual void Dispose(bool disposing) + private void Dispose(bool disposing) { if (_disposed || !disposing) { return; } - if (_context != null && _context.API != null) - { - _context.API.ThemeChanged -= OnThemeChanged; - } - _disposed = true; } @@ -192,26 +184,5 @@ public string GetTranslatedPluginDescription() { return Description; } - - /// - /// Change all theme-based elements (typical called when the plugin theme has changed). - /// - /// The old . - /// The new . - private void OnThemeChanged(Theme oldtheme, Theme newTheme) - { - UpdateIconPath(newTheme); - } - - /// - /// Update all icons (typical called when the plugin theme has changed). - /// - /// The new for the icons. - private void UpdateIconPath(Theme theme) - { - _defaultIconPath = theme == Theme.Light || theme == Theme.HighContrastWhite - ? _lightSymbol - : _darkSymbol; - } } } diff --git a/Microsoft.PowerToys.Run.Plugin.WindowsSettings.csproj b/Microsoft.PowerToys.Run.Plugin.WindowsSettings.csproj index 4b7cf12b224..51656745ed3 100644 --- a/Microsoft.PowerToys.Run.Plugin.WindowsSettings.csproj +++ b/Microsoft.PowerToys.Run.Plugin.WindowsSettings.csproj @@ -1,13 +1,10 @@  - - - netcoreapp3.1 + net5.0-windows {5043CECE-E6A7-4867-9CBE-02D27D83747A} Properties Microsoft.PowerToys.Run.Plugin.WindowsSettings Microsoft.PowerToys.Run.Plugin.WindowsSettings - $(Version).0 false false x64 @@ -18,12 +15,11 @@ - ..\..\..\..\..\x64\Debug\modules\launcher\Plugins\Microsoft.PowerToys.Run.Plugin.WindowsSettings\ + Debug\WindowsSettings\ DEBUG;TRACE false - full + portable true - 8.0 x64 MinimumRecommendedRules.ruleset 4 @@ -31,11 +27,10 @@ - ..\..\..\..\..\x64\Release\modules\launcher\Plugins\Microsoft.PowerToys.Run.Plugin.WindowsSettings\ + Release\WindowsSettings\ TRACE true - pdbonly - 8.0 + portable x64 MinimumRecommendedRules.ruleset 4 @@ -46,29 +41,12 @@ - - - false - - - false - - - PreserveNewest - - - GlobalSuppressions.cs - - - StyleCop.json - - @@ -76,14 +54,6 @@ - - - 1.1.118 - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - True @@ -108,4 +78,8 @@ + + + + \ No newline at end of file From 9e9820bce9168d6aad2d46141a285911919e38aa Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Mon, 19 Jul 2021 17:16:48 +0800 Subject: [PATCH 008/625] fix JsonFormat --- plugin.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plugin.json b/plugin.json index 478a5d38b2b..0c3fcdbad2b 100644 --- a/plugin.json +++ b/plugin.json @@ -1,13 +1,12 @@ { "ID": "5043CECEE6A748679CBE02D27D83747A", "ActionKeyword": "$", - "IsGlobal": false, + "Description": "Windows Settings Query Functionality", "Name": "Windows Settings", "Author": "TobiasSekan", "Version": "1.0.0", "Language": "csharp", "Website": "https://aka.ms/powertoys", "ExecuteFileName": "Microsoft.PowerToys.Run.Plugin.WindowsSettings.dll", - "IcoPathDark": "Images\\WindowsSettings.dark.png", "IcoPathLight": "Images\\WindowsSettings.light.png" } From 2c45ec61f57e708e34658a74f011ee517ca5fc0a Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Mon, 19 Jul 2021 17:17:09 +0800 Subject: [PATCH 009/625] Use Flow API to search --- Helper/ResultHelper.cs | 59 +++++++++++++++++++++++------ Helper/UnsupportedSettingsHelper.cs | 2 +- Log.cs | 6 +-- Main.cs | 41 +++----------------- 4 files changed, 57 insertions(+), 51 deletions(-) diff --git a/Helper/ResultHelper.cs b/Helper/ResultHelper.cs index 4fd27f9d3b7..724962b5c6e 100644 --- a/Helper/ResultHelper.cs +++ b/Helper/ResultHelper.cs @@ -8,6 +8,7 @@ using System.Linq; using System.Text; using Flow.Launcher.Plugin; +using Flow.Launcher.Plugin.SharedModels; using Microsoft.PowerToys.Run.Plugin.WindowsSettings.Properties; namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper @@ -17,6 +18,10 @@ namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper /// internal static class ResultHelper { + private static IPublicAPI? _api; + + public static void Init(IPublicAPI api) => _api = api; + /// /// Return a list with s, based on the given list. /// @@ -25,32 +30,64 @@ internal static class ResultHelper /// A list with . internal static List GetResultList( in IEnumerable list, - string query, - in string iconPath) + Query query, + string iconPath) { - var resultList = new List(list.Count()); - + var resultList = new List(); foreach (var entry in list) { - var result = new Result + var result = Predicate(); + if (result is null) + continue; + + AddOptionalToolTip(entry, result); + + resultList.Add(result); + + Result NewSettingResult(int score) => new Result() { - Action = (_) => DoOpenSettingsAction(entry), + Action = _ => DoOpenSettingsAction(entry), IcoPath = iconPath, SubTitle = $"{Resources.Area} \"{entry.Area}\" {Resources.SubtitlePreposition} {entry.Type}", Title = entry.Name, ContextData = entry, + Score = score }; - AddOptionalToolTip(entry, result); + Result? Predicate() + { + Debug.Assert(_api != null, nameof(_api) + " != null"); + + var nameMatch = _api.FuzzySearch(query.Search, entry.Name); + + if (nameMatch.IsSearchPrecisionScoreMet()) + { + var settingResult = NewSettingResult(nameMatch.Score); + settingResult.TitleHighlightData = nameMatch.MatchData; + return settingResult; + } + + var areaMatch = _api.FuzzySearch(query.Search, entry.Area); + if (areaMatch.IsSearchPrecisionScoreMet()) + { + var settingResult = NewSettingResult(areaMatch.Score); + return settingResult; + } + + return entry.AltNames? + .Select(altName => _api.FuzzySearch(query.Search, altName)) + .Where(match => match.IsSearchPrecisionScoreMet()) + .Select(altNameMatch => NewSettingResult(altNameMatch.Score)) + .FirstOrDefault(); - resultList.Add(result); + } } - SetScores(resultList, query); - return resultList; } + + /// /// Add a tool-tip to the given , based o the given . /// @@ -102,7 +139,7 @@ private static bool DoOpenSettingsAction(WindowsSetting entry) if (command.Contains(' ')) { var commandSplit = command.Split(' '); - var file = commandSplit.FirstOrDefault(); + var file = commandSplit.First(); var arguments = command[file.Length..].TrimStart(); processStartInfo = new ProcessStartInfo(file, arguments) diff --git a/Helper/UnsupportedSettingsHelper.cs b/Helper/UnsupportedSettingsHelper.cs index 30f28a1db47..a323f476d0b 100644 --- a/Helper/UnsupportedSettingsHelper.cs +++ b/Helper/UnsupportedSettingsHelper.cs @@ -64,7 +64,7 @@ internal static IEnumerable FilterByBuild(in IEnumerableA registry value or on error. private static uint GetNumericRegistryValue(in string registryKey, in string valueName) { - object registryValueData; + object? registryValueData; try { diff --git a/Log.cs b/Log.cs index 090c9a7372d..7991f5a55d2 100644 --- a/Log.cs +++ b/Log.cs @@ -6,7 +6,7 @@ namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings { public static class Log { - private static IPublicAPI _api; + private static IPublicAPI? _api; public static void Init(IPublicAPI api) { @@ -14,11 +14,11 @@ public static void Init(IPublicAPI api) } public static void Exception(string message, Exception exception, Type type, [CallerMemberName] string methodName = "") { - _api.LogException(type.FullName, message, exception, methodName); + _api?.LogException(type.FullName, message, exception, methodName); } public static void Warn(string message, Type type, [CallerMemberName] string methodName = "") { - _api.LogWarn(type.FullName, message, methodName); + _api?.LogWarn(type.FullName, message, methodName); } } } diff --git a/Main.cs b/Main.cs index 4961266df70..00fe2367eb8 100644 --- a/Main.cs +++ b/Main.cs @@ -82,6 +82,9 @@ public void Init(PluginInitContext context) _settingsList = JsonSettingsListHelper.ReadAllPossibleSettings(); _settingsList = UnsupportedSettingsHelper.FilterByBuild(_settingsList); + Log.Init(_context.API); + ResultHelper.Init(_context.API); + TranslationHelper.TranslateAllSettings(_settingsList); } @@ -97,45 +100,11 @@ public List Query(Query query) return new List(0); } - var filteredList = _settingsList - .Where(Predicate) - .OrderBy(found => found.Name); - var newList = ResultHelper.GetResultList(filteredList, query.Search, _defaultIconPath); + var newList = ResultHelper.GetResultList(_settingsList, query, _defaultIconPath); return newList; - bool Predicate(WindowsSetting found) - { - if (found.Name.Contains(query.Search, StringComparison.CurrentCultureIgnoreCase)) - { - return true; - } - - // Search for Area only by key char - if (found.Area.Contains(query.Search.Replace(":", string.Empty), StringComparison.CurrentCultureIgnoreCase) - && query.Search.EndsWith(":")) - { - return true; - } - - if (found.Area.Contains(query.Search, StringComparison.CurrentCultureIgnoreCase)) - { - return true; - } - - if (found.AltNames is not null) - { - foreach (var altName in found.AltNames) - { - if (altName.Contains(query.Search, StringComparison.CurrentCultureIgnoreCase)) - { - return true; - } - } - } - - return false; - } + } /// From 4f0e679596a60b1c8a7f5d7328444e5a6ce68ea2 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Mon, 19 Jul 2021 17:21:43 +0800 Subject: [PATCH 010/625] fix json --- plugin.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin.json b/plugin.json index 0c3fcdbad2b..575250dc2df 100644 --- a/plugin.json +++ b/plugin.json @@ -8,5 +8,5 @@ "Language": "csharp", "Website": "https://aka.ms/powertoys", "ExecuteFileName": "Microsoft.PowerToys.Run.Plugin.WindowsSettings.dll", - "IcoPathLight": "Images\\WindowsSettings.light.png" + "IcoPath": "Images\\WindowsSettings.light.png" } From bac446d40da981a3e186b33607176f7585a40c62 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Mon, 19 Jul 2021 17:24:13 +0800 Subject: [PATCH 011/625] subtitle highlight --- Helper/ResultHelper.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Helper/ResultHelper.cs b/Helper/ResultHelper.cs index 724962b5c6e..759cae7eee5 100644 --- a/Helper/ResultHelper.cs +++ b/Helper/ResultHelper.cs @@ -71,6 +71,7 @@ internal static List GetResultList( if (areaMatch.IsSearchPrecisionScoreMet()) { var settingResult = NewSettingResult(areaMatch.Score); + settingResult.SubTitleHighlightData = areaMatch.MatchData.Select(x => x + 6).ToList(); return settingResult; } From dd31f1a34a5034dfbf85a53a71b02034f63ce0ae Mon Sep 17 00:00:00 2001 From: Kevin Zhang <45326534+taooceros@users.noreply.github.com> Date: Mon, 19 Jul 2021 17:28:41 +0800 Subject: [PATCH 012/625] Create README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000000..b697214d973 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# Flow.Plugin.WindowsSettings +Port from PowerToy WindowsSettings plugin From 228bbe2c37daae54deb8f08c6aeaa3dad17e4dab Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Tue, 20 Jul 2021 10:59:05 +0800 Subject: [PATCH 013/625] Change NameSpace Name --- Classes/WindowsSetting.cs | 2 +- ...Settings.csproj => Flow.Plugin.WindowsSettings.csproj | 4 ++-- Helper/ContextMenuHelper.cs | 5 +++-- Helper/JsonSettingsListHelper.cs | 3 ++- Helper/ResultHelper.cs | 6 +++--- Helper/TranslationHelper.cs | 5 +++-- Helper/UnsupportedSettingsHelper.cs | 5 +++-- Log.cs | 2 +- Main.cs | 8 ++++---- Properties/Resources.Designer.cs | 9 ++++----- 10 files changed, 26 insertions(+), 23 deletions(-) rename Microsoft.PowerToys.Run.Plugin.WindowsSettings.csproj => Flow.Plugin.WindowsSettings.csproj (94%) diff --git a/Classes/WindowsSetting.cs b/Classes/WindowsSetting.cs index 5c5d2654ada..0a598d12216 100644 --- a/Classes/WindowsSetting.cs +++ b/Classes/WindowsSetting.cs @@ -4,7 +4,7 @@ using System.Collections.Generic; -namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings +namespace Flow.Plugin.WindowsSettings.Classes { /// /// A windows setting diff --git a/Microsoft.PowerToys.Run.Plugin.WindowsSettings.csproj b/Flow.Plugin.WindowsSettings.csproj similarity index 94% rename from Microsoft.PowerToys.Run.Plugin.WindowsSettings.csproj rename to Flow.Plugin.WindowsSettings.csproj index 51656745ed3..90a627db864 100644 --- a/Microsoft.PowerToys.Run.Plugin.WindowsSettings.csproj +++ b/Flow.Plugin.WindowsSettings.csproj @@ -3,8 +3,8 @@ net5.0-windows {5043CECE-E6A7-4867-9CBE-02D27D83747A} Properties - Microsoft.PowerToys.Run.Plugin.WindowsSettings - Microsoft.PowerToys.Run.Plugin.WindowsSettings + Flow.Plugin.WindowsSettings + Flow.Plugin.WindowsSettings false false x64 diff --git a/Helper/ContextMenuHelper.cs b/Helper/ContextMenuHelper.cs index 15b9f0d3e09..c8adc57c4a5 100644 --- a/Helper/ContextMenuHelper.cs +++ b/Helper/ContextMenuHelper.cs @@ -6,9 +6,10 @@ using System.Collections.Generic; using System.Windows; using Flow.Launcher.Plugin; -using Microsoft.PowerToys.Run.Plugin.WindowsSettings.Properties; +using Flow.Plugin.WindowsSettings.Classes; +using Flow.Plugin.WindowsSettings.Properties; -namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper +namespace Flow.Plugin.WindowsSettings.Helper { /// /// Helper class to easier work with context menu entries diff --git a/Helper/JsonSettingsListHelper.cs b/Helper/JsonSettingsListHelper.cs index bff04186457..1a6d35fa576 100644 --- a/Helper/JsonSettingsListHelper.cs +++ b/Helper/JsonSettingsListHelper.cs @@ -9,8 +9,9 @@ using System.Reflection; using System.Text.Json; using System.Text.Json.Serialization; +using Flow.Plugin.WindowsSettings.Classes; -namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper +namespace Flow.Plugin.WindowsSettings.Helper { /// /// Helper class to easier work with the JSON file that contains all Windows settings diff --git a/Helper/ResultHelper.cs b/Helper/ResultHelper.cs index 759cae7eee5..dcda4c07329 100644 --- a/Helper/ResultHelper.cs +++ b/Helper/ResultHelper.cs @@ -8,10 +8,10 @@ using System.Linq; using System.Text; using Flow.Launcher.Plugin; -using Flow.Launcher.Plugin.SharedModels; -using Microsoft.PowerToys.Run.Plugin.WindowsSettings.Properties; +using Flow.Plugin.WindowsSettings.Classes; +using Flow.Plugin.WindowsSettings.Properties; -namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper +namespace Flow.Plugin.WindowsSettings.Helper { /// /// Helper class to easier work with results diff --git a/Helper/TranslationHelper.cs b/Helper/TranslationHelper.cs index 4e8fa40ed70..0e7b950e84e 100644 --- a/Helper/TranslationHelper.cs +++ b/Helper/TranslationHelper.cs @@ -5,9 +5,10 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; -using Microsoft.PowerToys.Run.Plugin.WindowsSettings.Properties; +using Flow.Plugin.WindowsSettings.Classes; +using Flow.Plugin.WindowsSettings.Properties; -namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper +namespace Flow.Plugin.WindowsSettings.Helper { /// /// Helper class to easier work with translations. diff --git a/Helper/UnsupportedSettingsHelper.cs b/Helper/UnsupportedSettingsHelper.cs index a323f476d0b..b056ee0460e 100644 --- a/Helper/UnsupportedSettingsHelper.cs +++ b/Helper/UnsupportedSettingsHelper.cs @@ -5,8 +5,9 @@ using System; using System.Collections.Generic; using System.Linq; +using Flow.Plugin.WindowsSettings.Classes; -namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper +namespace Flow.Plugin.WindowsSettings.Helper { /// /// Helper class to easier work with the version of the Windows OS @@ -68,7 +69,7 @@ private static uint GetNumericRegistryValue(in string registryKey, in string val try { - registryValueData = Win32.Registry.GetValue(registryKey, valueName, uint.MinValue); + registryValueData = Microsoft.Win32.Registry.GetValue(registryKey, valueName, uint.MinValue); } catch (Exception exception) { diff --git a/Log.cs b/Log.cs index 7991f5a55d2..f45256173c3 100644 --- a/Log.cs +++ b/Log.cs @@ -2,7 +2,7 @@ using System.Runtime.CompilerServices; using Flow.Launcher.Plugin; -namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings +namespace Flow.Plugin.WindowsSettings { public static class Log { diff --git a/Main.cs b/Main.cs index 00fe2367eb8..f66d99ad8ce 100644 --- a/Main.cs +++ b/Main.cs @@ -4,13 +4,13 @@ using System; using System.Collections.Generic; -using System.Linq; using System.Reflection; using Flow.Launcher.Plugin; -using Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper; -using Microsoft.PowerToys.Run.Plugin.WindowsSettings.Properties; +using Flow.Plugin.WindowsSettings.Classes; +using Flow.Plugin.WindowsSettings.Helper; +using Flow.Plugin.WindowsSettings.Properties; -namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings +namespace Flow.Plugin.WindowsSettings { /// /// Main class of this plugin that implement all used interfaces. diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs index 37a3d1e4271..1c5ca3c9668 100644 --- a/Properties/Resources.Designer.cs +++ b/Properties/Resources.Designer.cs @@ -8,10 +8,9 @@ // //------------------------------------------------------------------------------ -namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings.Properties { - using System; - - +namespace Flow.Plugin.WindowsSettings.Properties { + + /// /// A strongly-typed resource class, for looking up localized strings, etc. /// @@ -39,7 +38,7 @@ internal Resources() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.PowerToys.Run.Plugin.WindowsSettings.Properties.Resources", typeof(Resources).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Flow.Plugin.WindowsSettings.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; From 1e673d9cf769278104b552ab6c96e76b13e1f155 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Tue, 20 Jul 2021 11:11:36 +0800 Subject: [PATCH 014/625] Adjust Scoring --- Helper/ResultHelper.cs | 120 +++++++++++++---------------------------- 1 file changed, 36 insertions(+), 84 deletions(-) diff --git a/Helper/ResultHelper.cs b/Helper/ResultHelper.cs index dcda4c07329..76d05089d05 100644 --- a/Helper/ResultHelper.cs +++ b/Helper/ResultHelper.cs @@ -26,6 +26,7 @@ internal static class ResultHelper /// Return a list with s, based on the given list. /// /// The original result list to convert. + /// Query for specific result List /// The path to the icon of each entry. /// A list with . internal static List GetResultList( @@ -36,7 +37,39 @@ internal static List GetResultList( var resultList = new List(); foreach (var entry in list) { - var result = Predicate(); + const int highScore = 20; + const int midScore = 10; + + Result? result; + Debug.Assert(_api != null, nameof(_api) + " != null"); + + var nameMatch = _api.FuzzySearch(query.Search, entry.Name); + + if (nameMatch.IsSearchPrecisionScoreMet()) + { + var settingResult = NewSettingResult(nameMatch.Score + highScore); + settingResult.TitleHighlightData = nameMatch.MatchData; + result = settingResult; + } + else + { + var areaMatch = _api.FuzzySearch(query.Search, entry.Area); + if (areaMatch.IsSearchPrecisionScoreMet()) + { + var settingResult = NewSettingResult(areaMatch.Score + midScore); + settingResult.SubTitleHighlightData = areaMatch.MatchData.Select(x => x + 6).ToList(); + result = settingResult; + } + else + { + result = entry.AltNames? + .Select(altName => _api.FuzzySearch(query.Search, altName)) + .Where(match => match.IsSearchPrecisionScoreMet()) + .Select(altNameMatch => NewSettingResult(altNameMatch.Score + midScore)) + .FirstOrDefault(); + } + + } if (result is null) continue; @@ -44,7 +77,7 @@ internal static List GetResultList( resultList.Add(result); - Result NewSettingResult(int score) => new Result() + Result NewSettingResult(int score) => new() { Action = _ => DoOpenSettingsAction(entry), IcoPath = iconPath, @@ -54,36 +87,9 @@ internal static List GetResultList( Score = score }; - Result? Predicate() - { - Debug.Assert(_api != null, nameof(_api) + " != null"); - - var nameMatch = _api.FuzzySearch(query.Search, entry.Name); - - if (nameMatch.IsSearchPrecisionScoreMet()) - { - var settingResult = NewSettingResult(nameMatch.Score); - settingResult.TitleHighlightData = nameMatch.MatchData; - return settingResult; - } - - var areaMatch = _api.FuzzySearch(query.Search, entry.Area); - if (areaMatch.IsSearchPrecisionScoreMet()) - { - var settingResult = NewSettingResult(areaMatch.Score); - settingResult.SubTitleHighlightData = areaMatch.MatchData.Select(x => x + 6).ToList(); - return settingResult; - } - - return entry.AltNames? - .Select(altName => _api.FuzzySearch(query.Search, altName)) - .Where(match => match.IsSearchPrecisionScoreMet()) - .Select(altNameMatch => NewSettingResult(altNameMatch.Score)) - .FirstOrDefault(); - - } } + return resultList; } @@ -167,59 +173,5 @@ private static bool DoOpenSettingsAction(WindowsSetting entry) return false; } } - - /// - /// Set the score (known as order number or ranking number) - /// for all in the given list, based on the given query. - /// - /// A list with s that need scores. - /// The query to calculated the score for the s. - private static void SetScores(IEnumerable resultList, string query) - { - var lowScore = 1_000; - var mediumScore = 5_000; - var highScore = 10_000; - - foreach (var result in resultList) - { - if (!(result.ContextData is WindowsSetting windowsSetting)) - { - continue; - } - - if (windowsSetting.Name.StartsWith(query, StringComparison.CurrentCultureIgnoreCase)) - { - result.Score = highScore--; - continue; - } - - // If query starts with second or next word of name, set score. - if (windowsSetting.Name.Contains($" {query}", StringComparison.CurrentCultureIgnoreCase)) - { - result.Score = mediumScore--; - continue; - } - - if (windowsSetting.Area.StartsWith(query, StringComparison.CurrentCultureIgnoreCase)) - { - result.Score = lowScore--; - continue; - } - - if (windowsSetting.AltNames is null) - { - result.Score = lowScore--; - continue; - } - - if (windowsSetting.AltNames.Any(x => x.StartsWith(query, StringComparison.CurrentCultureIgnoreCase))) - { - result.Score = mediumScore--; - continue; - } - - result.Score = lowScore--; - } - } } } From 9b1ee61f3797fd8b44ef45d16067971bd2b29c9c Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Tue, 20 Jul 2021 11:12:46 +0800 Subject: [PATCH 015/625] Make SubTitleToolTip the same as TitleToolTip --- Helper/ResultHelper.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Helper/ResultHelper.cs b/Helper/ResultHelper.cs index 76d05089d05..29fcc0038f7 100644 --- a/Helper/ResultHelper.cs +++ b/Helper/ResultHelper.cs @@ -124,6 +124,7 @@ private static void AddOptionalToolTip(WindowsSetting entry, Result result) } result.TitleToolTip = toolTipText.ToString(); + result.SubTitleToolTip = result.TitleToolTip; } /// From 75346f1ed8870cb9f5e6bf1313b2c27d9901c4a9 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Wed, 21 Jul 2021 15:51:57 +0800 Subject: [PATCH 016/625] Change ExecuteFileName --- plugin.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin.json b/plugin.json index 575250dc2df..b21e6d7809b 100644 --- a/plugin.json +++ b/plugin.json @@ -7,6 +7,6 @@ "Version": "1.0.0", "Language": "csharp", "Website": "https://aka.ms/powertoys", - "ExecuteFileName": "Microsoft.PowerToys.Run.Plugin.WindowsSettings.dll", + "ExecuteFileName": "Flow.Plugin.WindowsSettings.dll", "IcoPath": "Images\\WindowsSettings.light.png" } From 6308a67fc9e7d348465cd706955f27637b123480 Mon Sep 17 00:00:00 2001 From: pc223 <10551242+pc223@users.noreply.github.com> Date: Thu, 22 Jul 2021 02:51:10 +0700 Subject: [PATCH 017/625] Add some icons glyph --- WindowsSettings.json | 551 ++++++++++++++++++++++++++++++++----------- 1 file changed, 410 insertions(+), 141 deletions(-) diff --git a/WindowsSettings.json b/WindowsSettings.json index 82c8d8f14fa..dec149c6b00 100644 --- a/WindowsSettings.json +++ b/WindowsSettings.json @@ -3,34 +3,44 @@ "Name": "AccessWorkOrSchool", "Area": "Accounts", "Type": "AppSettingsApp", - "AltNames": [ "Workplace" ], - "Command": "ms-settings:workplace" + "AltNames": [ + "Workplace" + ], + "Command": "ms-settings:workplace", + "glyph": "\ue821" }, { "Name": "EmailAndAppAccounts", "Area": "Accounts", "Type": "AppSettingsApp", - "Command": "ms-settings:emailandaccounts" + "Command": "ms-settings:emailandaccounts", + "glyph": "\ue715" }, { "Name": "FamilyAndOtherPeople", "Area": "Accounts", "Type": "AppSettingsApp", - "AltNames": [ "OtherUsers" ], - "Command": "ms-settings:otherusers" + "AltNames": [ + "OtherUsers" + ], + "Command": "ms-settings:otherusers", + "glyph": "\ue8fa" }, { "Name": "SetUpKiosk", "Area": "Accounts", "Type": "AppSettingsApp", - "AltNames": [ "AssignedAccess" ], + "AltNames": [ + "AssignedAccess" + ], "Command": "ms-settings:assignedaccess" }, { "Name": "SignInOptions", "Area": "Accounts", "Type": "AppSettingsApp", - "Command": "ms-settings:signinoptions" + "Command": "ms-settings:signinoptions", + "glyph": "\ue8d7" }, { "Name": "SignInOptionsDynamicLock", @@ -42,7 +52,8 @@ "Name": "SyncYourSettings", "Area": "Accounts", "Type": "AppSettingsApp", - "Command": "ms-settings:sync" + "Command": "ms-settings:sync", + "glyph": "\ue895" }, { "Name": "WindowsHelloSetupFace", @@ -60,13 +71,15 @@ "Name": "YourInfo", "Area": "Accounts", "Type": "AppSettingsApp", - "Command": "ms-settings:yourinfo" + "Command": "ms-settings:yourinfo", + "glyph": "\ue779" }, { "Name": "AppsAndFeatures", "Area": "Apps", "Type": "AppSettingsApp", - "Command": "ms-settings:appsfeatures" + "Command": "ms-settings:appsfeatures", + "glyph": null }, { "Name": "AppFeatures", @@ -78,13 +91,15 @@ "Name": "AppsForWebsites", "Area": "Apps", "Type": "AppSettingsApp", - "Command": "ms-settings:appsforwebsites" + "Command": "ms-settings:appsforwebsites", + "glyph": "\ue78b" }, { "Name": "DefaultApps", "Area": "Apps", "Type": "AppSettingsApp", - "Command": "ms-settings:defaultapps" + "Command": "ms-settings:defaultapps", + "glyph": "\ue7ac" }, { "Name": "ManageOptionalFeatures", @@ -96,7 +111,8 @@ "Name": "OfflineMaps", "Area": "Apps", "Type": "AppSettingsApp", - "Command": "ms-settings:maps" + "Command": "ms-settings:maps", + "glyph": "\ue826" }, { "Name": "OfflineMapsDownloadMaps", @@ -108,13 +124,15 @@ "Name": "StartupApps", "Area": "Apps", "Type": "AppSettingsApp", - "Command": "ms-settings:startupapps" + "Command": "ms-settings:startupapps", + "glyph": "\ue7b5" }, { "Name": "VideoPlayback", "Area": "Apps", "Type": "AppSettingsApp", - "Command": "ms-settings:videoplayback" + "Command": "ms-settings:videoplayback", + "glyph": "\ue714" }, { "Name": "Notifications", @@ -144,7 +162,9 @@ "Name": "CortanaLanguage", "Area": "Cortana", "Type": "AppSettingsApp", - "AltNames": [ "Talk" ], + "AltNames": [ + "Talk" + ], "Command": "ms-settings:cortana-language" }, { @@ -163,7 +183,8 @@ "Name": "AutoPlay", "Area": "Devices", "Type": "AppSettingsApp", - "Command": "ms-settings:autoplay" + "Command": "ms-settings:autoplay", + "glyph": "\uec57" }, { "Name": "Bluetooth", @@ -190,58 +211,72 @@ "Area": "Devices", "Type": "AppSettingsApp", "Note": "NoteTouchpad", - "Command": "ms-settings:mousetouchpad" + "Command": "ms-settings:mousetouchpad", + "glyph": "\ue962" }, { "Name": "PenAndWindowsInk", "Area": "Devices", "Type": "AppSettingsApp", - "Command": "ms-settings:pen" + "Command": "ms-settings:pen", + "glyph": "\uedc6" }, { "Name": "PrintersAndScanners", "Area": "Devices", "Type": "AppSettingsApp", - "Command": "ms-settings:printers" + "Command": "ms-settings:printers", + "glyph": "\ue749" }, { "Name": "Touchpad", "Area": "Devices", "Type": "AppSettingsApp", "Note": "NoteTouchpad", - "Command": "ms-settings:devices-touchpad" + "Command": "ms-settings:devices-touchpad", + "glyph": "\uefa5" }, { "Name": "Typing", "Area": "Devices", "Type": "AppSettingsApp", - "Command": "ms-settings:typing" + "Command": "ms-settings:typing", + "glyph": "\ue765" }, { "Name": "Usb", "Area": "Devices", "Type": "AppSettingsApp", - "Command": "ms-settings:usb" + "Command": "ms-settings:usb", + "glyph": "\ue88e" }, { "Name": "Wheel", "Area": "Devices", "Type": "AppSettingsApp", "Note": "NoteDialPaired", - "Command": "ms-settings:wheel" + "Command": "ms-settings:wheel", + "glyph": "\uee94" }, { "Name": "Phone", "Area": "Phone", "Type": "AppSettingsApp", - "AltNames": [ "MobileDevices" ], - "Command": "ms-settings:mobile-devices" + "AltNames": [ + "MobileDevices" + ], + "Command": "ms-settings:mobile-devices", + "glyph": "\ue8ea" }, { "Name": "Audio", "Area": "EaseOfAccess", "Type": "AppSettingsApp", - "AltNames": [ "Mono", "Volume", "AudioAlerts" ], + "AltNames": [ + "Mono", + "Volume", + "AudioAlerts" + ], "Command": "ms-settings:easeofaccess-audio" }, { @@ -254,21 +289,38 @@ "Name": "ColorFilters", "Area": "EaseOfAccess", "Type": "AppSettingsApp", - "AltNames": [ "InvertedColors", "Grayscale", "RedGreen", "BlueYellow", "GreenWeek", "RedWeek", "deuteranopia", "protanopia", "tritanopia" ], + "AltNames": [ + "InvertedColors", + "Grayscale", + "RedGreen", + "BlueYellow", + "GreenWeek", + "RedWeek", + "deuteranopia", + "protanopia", + "tritanopia" + ], "Command": "ms-settings:easeofaccess-colorfilter" }, { "Name": "MousePointer", "Area": "EaseOfAccess", "Type": "AppSettingsApp", - "AltNames": [ "TouchFeedback" ], + "AltNames": [ + "TouchFeedback" + ], "Command": "ms-settings:easeofaccess-MousePointer" }, { "Name": "Display", "Area": "EaseOfAccess", "Type": "AppSettingsApp", - "AltNames": [ "Transparency", "Animations", "ScrollBars", "Size" ], + "AltNames": [ + "Transparency", + "Animations", + "ScrollBars", + "Size" + ], "Command": "ms-settings:easeofaccess-display" }, { @@ -283,7 +335,8 @@ "Type": "AppSettingsApp", "DeprecatedInBuild": 17763, "Note": "NoteDeprecated17763", - "Command": "ms-settings:fonts" + "Command": "ms-settings:fonts", + "glyph": "\ue8d2" }, { "Name": "HighContrast", @@ -295,21 +348,34 @@ "Name": "Keyboard", "Area": "EaseOfAccess", "Type": "AppSettingsApp", - "AltNames": [ "PrintScreen", "Shortcuts", "OnScreen", "Keys", "ScrollLock", "CapsLock", "NumLock" ], + "AltNames": [ + "PrintScreen", + "Shortcuts", + "OnScreen", + "Keys", + "ScrollLock", + "CapsLock", + "NumLock" + ], "Command": "ms-settings:easeofaccess-keyboard" }, { "Name": "Magnifier", "Area": "EaseOfAccess", "Type": "AppSettingsApp", - "AltNames": [ "Zoom" ], + "AltNames": [ + "Zoom" + ], "Command": "ms-settings:easeofaccess-magnifier" }, { "Name": "Mouse", "Area": "EaseOfAccess", "Type": "AppSettingsApp", - "AltNames": [ "Keypad", "Touch" ], + "AltNames": [ + "Keypad", + "Touch" + ], "Command": "ms-settings:easeofaccess-mouse" }, { @@ -330,7 +396,10 @@ "Name": "Speech", "Area": "EaseOfAccess", "Type": "AppSettingsApp", - "AltNames": [ "Recognition", "Talk" ], + "AltNames": [ + "Recognition", + "Talk" + ], "Command": "ms-settings:easeofaccess-speechrecognition" }, { @@ -350,25 +419,30 @@ "Name": "GameBar", "Area": "Gaming", "Type": "AppSettingsApp", - "Command": "ms-settings:gaming-gamebar" + "Command": "ms-settings:gaming-gamebar", + "glyph": "\uf192" }, { "Name": "GameDvr", "Area": "Gaming", "Type": "AppSettingsApp", - "Command": "ms-settings:gaming-gamedvr" + "Command": "ms-settings:gaming-gamedvr", + "glyph": "\ued36" }, { "Name": "GameMode", "Area": "Gaming", "Type": "AppSettingsApp", - "Command": "ms-settings:gaming-gamemode" + "Command": "ms-settings:gaming-gamemode", + "glyph": "\uec4a" }, { "Name": "PlayingGameFullScreen", "Area": "Gaming", "Type": "AppSettingsApp", - "AltNames": [ "QuietMomentsGame" ], + "AltNames": [ + "QuietMomentsGame" + ], "Command": "ms-settings:quietmomentsgame" }, { @@ -383,7 +457,8 @@ "Name": "XboxNetworking", "Area": "Gaming", "Type": "AppSettingsApp", - "Command": "ms-settings:gaming-xboxnetworking" + "Command": "ms-settings:gaming-xboxnetworking", + "glyph": "\uf20b" }, { "Name": "SettingsHomePage", @@ -395,7 +470,9 @@ "Name": "AudioAndSpeech", "Area": "MixedReality", "Type": "AppSettingsApp", - "AltNames": [ "HolographicAudio" ], + "AltNames": [ + "HolographicAudio" + ], "Note": "NoteMixedReality", "Command": "ms-settings:holographic-audio" }, @@ -403,7 +480,9 @@ "Name": "Environment", "Area": "MixedReality", "Type": "AppSettingsApp", - "AltNames": [ "HolographicEnvironment" ], + "AltNames": [ + "HolographicEnvironment" + ], "Note": "NoteMixedReality", "Command": "ms-settings:privacy-holographic-environment" }, @@ -411,7 +490,9 @@ "Name": "HeadsetDisplay", "Area": "MixedReality", "Type": "AppSettingsApp", - "AltNames": [ "HolographicHeadset" ], + "AltNames": [ + "HolographicHeadset" + ], "Note": "NoteMixedReality", "Command": "ms-settings:holographic-headset" }, @@ -419,7 +500,9 @@ "Name": "Uninstall", "Area": "MixedReality", "Type": "AppSettingsApp", - "AltNames": [ "HolographicManagement" ], + "AltNames": [ + "HolographicManagement" + ], "Note": "NoteMixedReality", "Command": "ms-settings:holographic-management" }, @@ -427,7 +510,8 @@ "Name": "AirplaneMode", "Area": "NetworkAndInternet", "Type": "AppSettingsApp", - "Command": "ms-settings:network-airplanemode" + "Command": "ms-settings:network-airplanemode", + "glyph": "\ue709" }, { "Name": "Proximity", @@ -445,33 +529,47 @@ "Name": "DataUsage", "Area": "NetworkAndInternet", "Type": "AppSettingsApp", - "Command": "ms-settings:datausage" + "Command": "ms-settings:datausage", + "glyph": "\ueb05" }, { "Name": "DialUp", "Area": "NetworkAndInternet", "Type": "AppSettingsApp", - "Command": "ms-settings:network-dialup" + "Command": "ms-settings:network-dialup", + "glyph": "\ue83c" }, { "Name": "DirectAccess", "Area": "NetworkAndInternet", "Type": "AppSettingsApp", "Note": "NoteDirectAccess", - "Command": "ms-settings:network-directaccess" + "Command": "ms-settings:network-directaccess", + "glyph": "\ue83b" }, { "Name": "Ethernet", "Area": "NetworkAndInternet", "Type": "AppSettingsApp", - "AltNames": [ "DNS", "Sdns", "SecureDNS", "Gateway", "Dhcp", "Ip" ], - "Command": "ms-settings:network-ethernet" + "AltNames": [ + "DNS", + "Sdns", + "SecureDNS", + "Gateway", + "Dhcp", + "Ip" + ], + "Command": "ms-settings:network-ethernet", + "glyph": "\ue839" }, { "Name": "ManageKnownNetworks", "Area": "NetworkAndInternet", "Type": "AppSettingsApp", - "AltNames": [ "WiFiSettings", "ShortNameWiFi" ], + "AltNames": [ + "WiFiSettings", + "ShortNameWiFi" + ], "Note": "NoteWiFiAdapter", "Command": "ms-settings:network-wifisettings" }, @@ -479,53 +577,74 @@ "Name": "MobileHotspot", "Area": "NetworkAndInternet", "Type": "AppSettingsApp", - "Command": "ms-settings:network-mobilehotspot" + "Command": "ms-settings:network-mobilehotspot", + "glyph": "\ue704" }, { "Name": "NFC", "Area": "NetworkAndInternet", "Type": "AppSettingsApp", - "AltNames": [ "NFCTransactions" ], + "AltNames": [ + "NFCTransactions" + ], "Command": "ms-settings:nfctransactions" }, { "Name": "Proxy", "Area": "NetworkAndInternet", "Type": "AppSettingsApp", - "Command": "ms-settings:network-proxy" + "Command": "ms-settings:network-proxy", + "glyph": "\ue774" }, { "Name": "NetworkStatus", "Area": "NetworkAndInternet", "Type": "AppSettingsApp", - "Command": "ms-settings:network-status" + "Command": "ms-settings:network-status", + "glyph": "\uec27" }, { "Name": "Network", "Area": "NetworkAndInternet", "Type": "AppSettingsApp", - "AltNames": [ "DNS", "Sdns", "SecureDNS", "Gateway", "Dhcp", "Ip" ], - "Command": "ms-settings:network" + "AltNames": [ + "DNS", + "Sdns", + "SecureDNS", + "Gateway", + "Dhcp", + "Ip" + ], + "Command": "ms-settings:network", + "glyph": "\uec27" }, { "Name": "Vpn", "Area": "NetworkAndInternet", "Type": "AppSettingsApp", - "Command": "ms-settings:network-vpn" + "Command": "ms-settings:network-vpn", + "glyph": "\ue705" }, { "Name": "WiFi", "Area": "NetworkAndInternet", "Type": "AppSettingsApp", - "AltNames": [ "Wireless", "MeteredConnection", "ShortNameWiFi" ], + "AltNames": [ + "Wireless", + "MeteredConnection", + "ShortNameWiFi" + ], "Note": "NoteWiFiAdapter", - "Command": "ms-settings:network-wifi" + "Command": "ms-settings:network-wifi", + "glyph": "\ue701" }, { "Name": "WiFiCalling", "Area": "NetworkAndInternet", "Type": "AppSettingsApp", - "AltNames": [ "ShortNameWiFi" ], + "AltNames": [ + "ShortNameWiFi" + ], "Note": "NoteWiFiAdapter", "Command": "ms-settings:network-wificalling" }, @@ -533,22 +652,38 @@ "Name": "Background", "Area": "Personalization", "Type": "AppSettingsApp", - "AltNames": [ "Wallpaper", "Picture", "Image" ], - "Command": "ms-settings:personalization-background" + "AltNames": [ + "Wallpaper", + "Picture", + "Image" + ], + "Command": "ms-settings:personalization-background", + "glyph": "\ueb9f" }, { "Name": "ChooseWhichFoldersAppearOnStart", "Area": "Personalization", "Type": "AppSettingsApp", - "AltNames": [ "StartPlaces" ], + "AltNames": [ + "StartPlaces" + ], "Command": "ms-settings:personalization-start-places" }, { "Name": "Colors", "Area": "Personalization", "Type": "AppSettingsApp", - "AltNames": [ "DarkMode", "LightMode", "DarkColor", "LightColor", "AppColor", "TaskbarColor", "WindowBorder" ], - "Command": "ms-settings:colors" + "AltNames": [ + "DarkMode", + "LightMode", + "DarkColor", + "LightColor", + "AppColor", + "TaskbarColor", + "WindowBorder" + ], + "Command": "ms-settings:colors", + "glyph": "\ue2b1" }, { "Name": "Glance", @@ -562,8 +697,12 @@ "Name": "LockScreen", "Area": "Personalization", "Type": "AppSettingsApp", - "AltNames": [ "Image", "Picture" ], - "Command": "ms-settings:lockscreen" + "AltNames": [ + "Image", + "Picture" + ], + "Command": "ms-settings:lockscreen", + "glyph": "\uee3f" }, { "Name": "NavigationBar", @@ -583,19 +722,22 @@ "Name": "Start", "Area": "Personalization", "Type": "AppSettingsApp", - "Command": "ms-settings:personalization-start" + "Command": "ms-settings:personalization-start", + "glyph": "\ueca5" }, { "Name": "Taskbar", "Area": "Personalization", "Type": "AppSettingsApp", - "Command": "ms-settings:taskbar" + "Command": "ms-settings:taskbar", + "glyph": "\ue90e" }, { "Name": "Themes", "Area": "Personalization", "Type": "AppSettingsApp", - "Command": "ms-settings:themes" + "Command": "ms-settings:themes", + "glyph": "\ue771" }, { "Name": "AddYourPhone", @@ -722,7 +864,9 @@ "Name": "InkingAndTyping", "Area": "Privacy", "Type": "AppSettingsApp", - "AltNames": [ "SpeechTyping" ], + "AltNames": [ + "SpeechTyping" + ], "Command": "ms-settings:privacy-speechtyping" }, { @@ -759,7 +903,9 @@ "Name": "OtherDevices", "Area": "Privacy", "Type": "AppSettingsApp", - "AltNames": [ "CustomDevices" ], + "AltNames": [ + "CustomDevices" + ], "Command": "ms-settings:privacy-customdevices" }, { @@ -820,7 +966,9 @@ "Name": "TeamConferencing", "Area": "SurfaceHub", "Type": "AppSettingsApp", - "AltNames": [ "calling" ], + "AltNames": [ + "calling" + ], "Command": "ms-settings:surfacehub-calling" }, { @@ -839,8 +987,16 @@ "Name": "About", "Area": "System", "Type": "AppSettingsApp", - "AltNames": [ "Ram", "Processor", "Os", "Id", "Edition", "Version" ], - "Command": "ms-settings:about" + "AltNames": [ + "Ram", + "Processor", + "Os", + "Id", + "Edition", + "Version" + ], + "Command": "ms-settings:about", + "glyph": "\ue946" }, { "Name": "AdvancedDisplaySettings", @@ -855,7 +1011,8 @@ "Type": "AppSettingsApp", "IntroducedInBuild": 18362, "Note": "NoteSince18362", - "Command": "ms-settings:apps-volume" + "Command": "ms-settings:apps-volume", + "glyph": "\ue767" }, { "Name": "BatterySaver", @@ -875,7 +1032,9 @@ "Name": "BatteryUse", "Area": "System", "Type": "AppSettingsApp", - "AltNames": [ "BatterySaverUsageDetails" ], + "AltNames": [ + "BatterySaverUsageDetails" + ], "Note": "NoteBattery", "Command": "ms-settings:batterysaver-usagedetails" }, @@ -883,20 +1042,28 @@ "Name": "Clipboard", "Area": "System", "Type": "AppSettingsApp", - "Command": "ms-settings:clipboard" + "Command": "ms-settings:clipboard", + "glyph": "\ue77f" }, { "Name": "Display", "Area": "System", "Type": "AppSettingsApp", - "AltNames": [ "NightLight", "BlueLight", "WarmerColor", "RedEye" ], - "Command": "ms-settings:display" + "AltNames": [ + "NightLight", + "BlueLight", + "WarmerColor", + "RedEye" + ], + "Command": "ms-settings:display", + "glyph": "\ue7f4" }, { "Name": "DefaultSaveLocations", "Area": "System", "Type": "AppSettingsApp", - "Command": "ms-settings:savelocations" + "Command": "ms-settings:savelocations", + "glyph": "\ueda2" }, { "Name": "ScreenRotation", @@ -908,14 +1075,18 @@ "Name": "DuplicatingMyDisplay", "Area": "System", "Type": "AppSettingsApp", - "AltNames": [ "Presentation" ], + "AltNames": [ + "Presentation" + ], "Command": "ms-settings:quietmomentspresentation" }, { "Name": "DuringTheseHours", "Area": "System", "Type": "AppSettingsApp", - "AltNames": [ "Scheduled" ], + "AltNames": [ + "Scheduled" + ], "Command": "ms-settings:quietmomentsscheduled" }, { @@ -928,7 +1099,8 @@ "Name": "FocusAssistQuietHours", "Area": "System", "Type": "AppSettingsApp", - "Command": "ms-settings:quiethours" + "Command": "ms-settings:quiethours", + "glyph": "\ue708" }, { "Name": "FocusAssistQuietMoments", @@ -940,9 +1112,12 @@ "Name": "GraphicsSettings", "Area": "System", "Type": "AppSettingsApp", - "AltNames": [ "AdvancedGraphics" ], + "AltNames": [ + "AdvancedGraphics" + ], "Note": "NoteAdvancedGraphics", - "Command": "ms-settings:display-advancedgraphics" + "Command": "ms-settings:display-advancedgraphics", + "glyph": "\ue7f4" }, { "Name": "Messaging", @@ -954,8 +1129,14 @@ "Name": "Multitasking", "Area": "System", "Type": "AppSettingsApp", - "AltNames": [ "Timeline", "Tab", "AltAndTab", "VirtualDesktops" ], - "Command": "ms-settings:multitasking" + "AltNames": [ + "Timeline", + "Tab", + "AltAndTab", + "VirtualDesktops" + ], + "Command": "ms-settings:multitasking", + "glyph": "\uee40" }, { "Name": "NightLightSettings", @@ -973,38 +1154,45 @@ "Name": "ProjectingToThisPc", "Area": "System", "Type": "AppSettingsApp", - "Command": "ms-settings:project" + "Command": "ms-settings:project", + "glyph": "\uebc6" }, { "Name": "SharedExperiences", "Area": "System", "Type": "AppSettingsApp", - "AltNames": [ "Crossdevice" ], + "AltNames": [ + "Crossdevice" + ], "Command": "ms-settings:crossdevice" }, { "Name": "TabletMode", "Area": "System", "Type": "AppSettingsApp", - "Command": "ms-settings:tabletmode" + "Command": "ms-settings:tabletmode", + "glyph": "\uebfc" }, { "Name": "Taskbar", "Area": "System", "Type": "AppSettingsApp", - "Command": "ms-settings:taskbar" + "Command": "ms-settings:taskbar", + "glyph": "\ue90e" }, { "Name": "NotificationsAndActions", "Area": "System", "Type": "AppSettingsApp", - "Command": "ms-settings:notifications" + "Command": "ms-settings:notifications", + "glyph": "\ue91c" }, { "Name": "RemoteDesktop", "Area": "System", "Type": "AppSettingsApp", - "Command": "ms-settings:remotedesktop" + "Command": "ms-settings:remotedesktop", + "glyph": "\ue8af" }, { "Name": "Phone", @@ -1018,37 +1206,44 @@ "Name": "PowerAndSleep", "Area": "System", "Type": "AppSettingsApp", - "Command": "ms-settings:powersleep" + "Command": "ms-settings:powersleep", + "glyph": "\ue7e8" }, { "Name": "Sound", "Area": "System", "Type": "AppSettingsApp", - "Command": "ms-settings:sound" + "Command": "ms-settings:sound", + "glyph": "\ue767" }, { "Name": "StorageSense", "Area": "System", "Type": "AppSettingsApp", - "Command": "ms-settings:storagesense" + "Command": "ms-settings:storagesense", + "glyph": "\ueda2" }, { "Name": "StoragePolicies", "Area": "System", "Type": "AppSettingsApp", - "Command": "ms-settings:storagepolicies" + "Command": "ms-settings:storagepolicies", + "glyph": "\ueda2" }, { "Name": "DateAndTime", "Area": "TimeAndLanguage", "Type": "AppSettingsApp", - "Command": "ms-settings:dateandtime" + "Command": "ms-settings:dateandtime", + "glyph": "\uec92" }, { "Name": "JapanImeSettings", "Area": "TimeAndLanguage", "Type": "AppSettingsApp", - "AltNames": [ "jpnime" ], + "AltNames": [ + "jpnime" + ], "Note": "NoteImeJapan", "Command": "ms-settings:regionlanguage-jpnime" }, @@ -1056,7 +1251,9 @@ "Name": "Region", "Area": "TimeAndLanguage", "Type": "AppSettingsApp", - "AltNames": [ "RegionFormatting" ], + "AltNames": [ + "RegionFormatting" + ], "Command": "ms-settings:regionformatting" }, { @@ -1069,13 +1266,16 @@ "Name": "RegionalLanguage", "Area": "TimeAndLanguage", "Type": "AppSettingsApp", - "Command": "ms-settings:regionlanguage" + "Command": "ms-settings:regionlanguage", + "glyph": "\ue8c1" }, { "Name": "BopomofoIme", "Area": "TimeAndLanguage", "Type": "AppSettingsApp", - "AltNames": [ "bpmf" ], + "AltNames": [ + "bpmf" + ], "Command": "ms-settings:regionlanguage-bpmfime" }, { @@ -1125,7 +1325,8 @@ "Name": "Speech", "Area": "TimeAndLanguage", "Type": "AppSettingsApp", - "Command": "ms-settings:speech" + "Command": "ms-settings:speech", + "glyph": "\ue720" }, { "Name": "WubiImeSettings", @@ -1138,57 +1339,74 @@ "Name": "Activation", "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", - "Command": "ms-settings:activation" + "Command": "ms-settings:activation", + "glyph": "\ue930" }, { "Name": "Backup", "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", - "Command": "ms-settings:backup" + "Command": "ms-settings:backup", + "glyph": "\ue11c" }, { "Name": "DeliveryOptimization", "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", - "Command": "ms-settings:delivery-optimization" + "Command": "ms-settings:delivery-optimization", + "glyph": "\uf785" }, { "Name": "FindMyDevice", "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", - "Command": "ms-settings:findmydevice" + "Command": "ms-settings:findmydevice", + "glyph": "\ue707" }, { "Name": "ForDevelopers", "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", - "Command": "ms-settings:developers" + "Command": "ms-settings:developers", + "glyph": "\uec7a" }, { "Name": "Recovery", "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", - "Command": "ms-settings:recovery" + "Command": "ms-settings:recovery", + "glyph": "\uebc4" }, { "Name": "Troubleshoot", "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", - "Command": "ms-settings:troubleshoot" + "Command": "ms-settings:troubleshoot", + "glyph": "\ue15e" }, { "Name": "WindowsSecurity", "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", - "AltNames": [ "WindowsDefender", "Firewall", "Virus", "CoreIsolation", "SecurityProcessor", "IsolatedBrowsing", "ExploitProtection" ], - "Command": "ms-settings:windowsdefender" + "AltNames": [ + "WindowsDefender", + "Firewall", + "Virus", + "CoreIsolation", + "SecurityProcessor", + "IsolatedBrowsing", + "ExploitProtection" + ], + "Command": "ms-settings:windowsdefender", + "glyph": "\ue83d" }, { "Name": "WindowsInsiderProgram", "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", "Note": "NoteEnrolledWIP", - "Command": "ms-settings:windowsinsider" + "Command": "ms-settings:windowsinsider", + "glyph": "\uf1ad" }, { "Name": "WindowsUpdate", @@ -1200,7 +1418,8 @@ "Name": "WindowsUpdateCheckForUpdates", "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", - "Command": "ms-settings:windowsupdate-action" + "Command": "ms-settings:windowsupdate-action", + "glyph": "\ue895" }, { "Name": "WindowsUpdateAdvancedOptions", @@ -1253,7 +1472,9 @@ "Name": "AccessibilityOptions", "Area": "EaseOfAccess", "Type": "ControlPanel", - "AltNames": [ "access.cpl" ], + "AltNames": [ + "access.cpl" + ], "Command": "control access.cpl" }, { @@ -1272,7 +1493,9 @@ "Name": "AddRemovePrograms", "Area": "HardwareAndSound", "Type": "ControlPanel", - "AltNames": [ "appwiz.cpl" ], + "AltNames": [ + "appwiz.cpl" + ], "Command": "control appwiz.cpl" }, { @@ -1321,21 +1544,27 @@ "Name": "CredentialManager", "Area": "UserAccounts", "Type": "ControlPanel", - "AltNames": [ "Password" ], + "AltNames": [ + "Password" + ], "Command": "control /name Microsoft.CredentialManager" }, { "Name": "ClientServiceForNetWare", "Area": "Programs", "Type": "ControlPanel", - "AltNames": [ "nwc.cpl" ], + "AltNames": [ + "nwc.cpl" + ], "Command": "control nwc.cpl" }, { "Name": "DateAndTime", "Area": "ClockAndRegion", "Type": "ControlPanel", - "AltNames": [ "timedate.cpl" ], + "AltNames": [ + "timedate.cpl" + ], "Command": "control /name Microsoft.DateAndTime" }, { @@ -1420,14 +1649,18 @@ "Name": "InternetOptions", "Area": "NetworkAndInternet", "Type": "ControlPanel", - "AltNames": [ "inetcpl.cpl" ], + "AltNames": [ + "inetcpl.cpl" + ], "Command": "control /name Microsoft.InternetOptions" }, { "Name": "MailMicrosoftExchangeOrWindowsMessaging", "Area": "NetworkAndInternet", "Type": "ControlPanel", - "AltNames": [ "mlcfg32.cpl" ], + "AltNames": [ + "mlcfg32.cpl" + ], "Command": "control mlcfg32.cpl" }, { @@ -1452,14 +1685,18 @@ "Name": "NetworkSetupWizard", "Area": "NetworkAndInternet", "Type": "ControlPanel", - "AltNames": [ "netsetup.cpl" ], + "AltNames": [ + "netsetup.cpl" + ], "Command": "control netsetup.cpl" }, { "Name": "OdbcDataSourceAdministrator32Bit", "Area": "AdministrativeTools", "Type": "ControlPanel", - "AltNames": [ "odbccp32.cpl" ], + "AltNames": [ + "odbccp32.cpl" + ], "Command": "%windir%/syswow64/odbcad32.exe" }, { @@ -1514,14 +1751,18 @@ "Name": "PhoneAndModem", "Area": "NetworkAndInternet", "Type": "ControlPanel", - "AltNames": [ "modem.cpl" ], + "AltNames": [ + "modem.cpl" + ], "Command": "control /name Microsoft.PhoneAndModem" }, { "Name": "PowerOptions", "Area": "SystemAndSecurity", "Type": "ControlPanel", - "AltNames": [ "powercfg.cpl" ], + "AltNames": [ + "powercfg.cpl" + ], "Command": "control /name Microsoft.PowerOptions" }, { @@ -1564,14 +1805,18 @@ "Name": "ScannersAndCameras", "Area": "HardwareAndSound", "Type": "ControlPanel", - "AltNames": [ "sticpl.cpl" ], + "AltNames": [ + "sticpl.cpl" + ], "Command": "control /name Microsoft.ScannersAndCameras" }, { "Name": "ScheduledTasks", "Area": "SystemAndSecurity", "Type": "ControlPanel", - "AltNames": [ "schedtasks" ], + "AltNames": [ + "schedtasks" + ], "Command": "control schedtasks" }, { @@ -1602,7 +1847,9 @@ "Name": "System", "Area": "SystemAndSecurity", "Type": "ControlPanel", - "AltNames": [ "sysdm.cpl" ], + "AltNames": [ + "sysdm.cpl" + ], "Command": "control sysdm.cpl" }, { @@ -1663,77 +1910,99 @@ "Name": "DisplayProperties", "Area": "HardwareAndSound", "Type": "ControlPanel", - "AltNames": [ "desk.cpl" ], + "AltNames": [ + "desk.cpl" + ], "Command": "control Desk.cpl" }, { "Name": "FindFast", "Area": "SystemAndSecurity", "Type": "ControlPanel", - "AltNames": [ "findfast.cpl" ], + "AltNames": [ + "findfast.cpl" + ], "Command": "control FindFast.cpl" }, { "Name": "RegionalSettingsProperties", "Area": "EaseOfAccess", "Type": "ControlPanel", - "AltNames": [ "intl.cpl" ], + "AltNames": [ + "intl.cpl" + ], "Command": "control Intl.cpl" }, { "Name": "JoystickProperties", "Area": "HardwareAndSound", "Type": "ControlPanel", - "AltNames": [ "joy.cpl" ], + "AltNames": [ + "joy.cpl" + ], "Command": "control Joy.cpl" }, { "Name": "MouseFontsKeyboardAndPrintersProperties", "Area": "HardwareAndSound", "Type": "ControlPanel", - "AltNames": [ "main.cpl" ], + "AltNames": [ + "main.cpl" + ], "Command": "control Main.cpl" }, { "Name": "MultimediaProperties", "Area": "HardwareAndSound", "Type": "ControlPanel", - "AltNames": [ "mmsys.cpl" ], + "AltNames": [ + "mmsys.cpl" + ], "Command": "control Mmsys.cpl" }, { "Name": "NetworkProperties", "Area": "NetworkAndInternet", "Type": "ControlPanel", - "AltNames": [ "netcpl.cpl" ], + "AltNames": [ + "netcpl.cpl" + ], "Command": "control Netcpl.cpl" }, { "Name": "PasswordProperties", "Area": "UserAccounts", "Type": "ControlPanel", - "AltNames": [ "password.cpl" ], + "AltNames": [ + "password.cpl" + ], "Command": "control Password.cpl" }, { "Name": "SystemPropertiesAndAddNewHardwareWizard", "Area": "HardwareAndSound", "Type": "ControlPanel", - "AltNames": [ "sysdm.cpl" ], + "AltNames": [ + "sysdm.cpl" + ], "Command": "control Sysdm.cpl" }, { "Name": "DesktopThemes", "Area": "AppearanceAndPersonalization", "Type": "ControlPanel", - "AltNames": [ "themes.cpl" ], + "AltNames": [ + "themes.cpl" + ], "Command": "control Themes.cpl" }, { "Name": "MicrosoftMailPostOffice", "Area": "Programs", "Type": "ControlPanel", - "AltNames": [ "wgpocpl.cpl" ], + "AltNames": [ + "wgpocpl.cpl" + ], "Command": "control Wgpocpl.cpl" } ] From 7f5b9b7ccdac5bfef321da7d069d7d007e9fd4f5 Mon Sep 17 00:00:00 2001 From: pc223 <10551242+pc223@users.noreply.github.com> Date: Sat, 24 Jul 2021 18:46:27 +0700 Subject: [PATCH 018/625] Add task links --- WindowsSettings.json | 12262 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 12262 insertions(+) diff --git a/WindowsSettings.json b/WindowsSettings.json index 82c8d8f14fa..ce4f57a957c 100644 --- a/WindowsSettings.json +++ b/WindowsSettings.json @@ -1735,5 +1735,12267 @@ "Type": "ControlPanel", "AltNames": [ "wgpocpl.cpl" ], "Command": "control Wgpocpl.cpl" + }, + { + "Name": "Accommodate learning abilities", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.EaseOfAccessCenter /page pageQuestionsCognitive", + "Keywords": [ + [ + "accomidate", + "accomodates", + "accomodating", + "adjust", + "for" + ], + [ + "can", + "not", + "cannot", + "can't", + "difficult", + "to", + "difficulty", + "does", + "doesn't", + "hard", + "not", + "will", + "willnot", + "won't" + ], + [ + "disabled", + "handicap", + "handicapped", + "disabilities", + "disability", + "empaired", + "impaired", + "imparied", + "trouble" + ], + [ + "cognitive", + "learning" + ] + ] + }, + { + "Name": "Accommodate low vision", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.EaseOfAccessCenter /page pageEasierToSee", + "Keywords": [ + [ + "accomidate", + "accomodates", + "accomodating", + "adjust", + "for" + ], + [ + "site", + "blindness", + "blurred", + "blurry", + "half", + "legally", + "low", + "vision", + "poor", + "seeing", + "seems", + "sight", + "weak", + "bad", + "eyesight", + "eye-sight" + ], + [ + "disabled", + "handicap", + "handicapped", + "disabilities", + "disability", + "empaired", + "impaired", + "imparied", + "trouble" + ], + [ + "best", + "better", + "easier", + "easy", + "enhance", + "improvement", + "make", + "more", + "most", + "optimal", + "optimise", + "optimize" + ] + ] + }, + { + "Name": "Change how your keyboard works", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.EaseOfAccessCenter /page pageKeyboardEasierToUse", + "Keywords": [ + [ + "switch", + "filterkeys", + "keys", + "stickykeys", + "togglekeys", + "sticky-keys", + "toggle-keys", + "repeat", + "delay", + "hold", + "down", + "rate" + ], + [ + "accessibility", + "acessibility", + "ease", + "of" + ], + [ + "best", + "better", + "easier", + "easy", + "enhance", + "improvement", + "make", + "more", + "most", + "optimal", + "optimise", + "optimize" + ], + [ + "board", + "bord", + "keyboards", + "keyborads", + "keybord" + ] + ] + }, + { + "Name": "Change how your mouse works", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.EaseOfAccessCenter /page pageEasierToClick", + "Keywords": [ + [ + "accessibility", + "acessibility", + "ease", + "of" + ], + [ + "butons", + "buttons" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "lock", + "clicking", + "doubleclick", + "double-click", + "single-click" + ], + [ + "best", + "better", + "easier", + "easy", + "enhance", + "improvement", + "make", + "more", + "most", + "optimal", + "optimise", + "optimize" + ], + [ + "move", + "moving", + "shadow", + "speed", + "tails" + ], + [ + "mice", + "mouses", + "pointer" + ] + ] + }, + { + "Name": "Use screen reader", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.EaseOfAccessCenter /page pageNoVisual", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "screan", + "readers", + "screenreader", + "windows", + "narrator" + ] + ] + }, + { + "Name": "Change the Narrator\u2019s voice", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\narrator.exe", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "sound", + "voices" + ], + [ + "screan", + "readers", + "screenreader", + "windows", + "narrator" + ] + ] + }, + { + "Name": "Control the computer without the mouse or keyboard", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.EaseOfAccessCenter /page pageNoMouseOrKeyboard", + "Keywords": [ + [ + "laptop", + "compuer", + "machine", + "my", + "computer", + "pc", + "personal", + "system" + ], + [ + "board", + "bord", + "keyboards", + "keyborads", + "keybord" + ], + [ + "mice", + "mouses", + "pointer" + ], + [ + "recognise", + "activated", + "commanding", + "dictate", + "dictation", + "recogination", + "recognition", + "recognize", + "recongition", + "reconition", + "speaking", + "speechrecognition", + "speech-recognition", + "talk", + "to", + "understand", + "voice" + ] + ] + }, + { + "Name": "Hear a tone when keys are pressed", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.EaseOfAccessCenter /page pageFilterKeysSettings", + "Keywords": [ + [ + "def", + "hearing", + "deaf", + "deafness", + "hard", + "of", + "problem", + "impaired", + "imparied" + ], + [ + "audio", + "beeps", + "music", + "noises", + "schemes", + "sounds", + "tones", + "wav", + "sound", + "beep", + "noise" + ], + [ + "customise", + "soundsentry", + "sentry", + "settings", + "customize", + "captions", + "showsounds" + ] + ] + }, + { + "Name": "Hear text read aloud with Narrator", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.EaseOfAccessCenter", + "Keywords": [ + [ + "read", + "reads", + "reading" + ], + [ + "screan", + "readers", + "screenreader", + "windows", + "narrator" + ] + ] + }, + { + "Name": "Ignore repeated keystrokes using FilterKeys", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.EaseOfAccessCenter /page pageFilterKeysSettings", + "Keywords": [ + [ + "keys", + "filterkeys" + ] + ] + }, + { + "Name": "Let Windows suggest Ease of Access settings", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.EaseOfAccessCenter /page pageQuestionsEyesight", + "Keywords": [ + [ + "accessibility", + "acessibility", + "ease", + "of" + ], + [ + "laptop", + "compuer", + "machine", + "my", + "computer", + "pc", + "personal", + "system" + ], + [ + "best", + "better", + "easier", + "easy", + "enhance", + "improvement", + "make", + "more", + "most", + "optimal", + "optimise", + "optimize" + ], + [ + "questionaire", + "questionnaire", + "survey" + ], + [ + "wizard", + "wizzard" + ] + ] + }, + { + "Name": "Magnify portions of the screen using Magnifier", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.EaseOfAccessCenter /page pageEasierToSee", + "Keywords": [ + [ + "site", + "blindness", + "blurred", + "blurry", + "half", + "legally", + "low", + "vision", + "poor", + "seeing", + "seems", + "sight", + "weak", + "bad", + "eyesight", + "eye-sight" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "magnification", + "magnified", + "magnifying", + "make", + "bigger", + "larger", + "zoom", + "in" + ], + [ + "crt", + "displays", + "monitors", + "screeens", + "screens" + ] + ] + }, + { + "Name": "Move the pointer with the keypad using MouseKeys", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.EaseOfAccessCenter /page pageKeyboardEasierToUse", + "Keywords": [ + [ + "arrows", + "cursors", + "mouse", + "pointers" + ], + [ + "mice", + "mouses", + "pointer" + ], + [ + "keys", + "mousekeys" + ] + ] + }, + { + "Name": "Optimise for blindness", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.EaseOfAccessCenter /page pageNoVisual", + "Keywords": [ + [ + "site", + "blindness", + "blurred", + "blurry", + "half", + "legally", + "low", + "vision", + "poor", + "seeing", + "seems", + "sight", + "weak", + "bad", + "eyesight", + "eye-sight" + ], + [ + "can", + "not", + "cannot", + "can't", + "difficult", + "to", + "difficulty", + "does", + "doesn't", + "hard", + "not", + "will", + "willnot", + "won't" + ], + [ + "customising", + "customisation", + "customises", + "customization", + "customizes", + "customizing", + "personalisation", + "personalise", + "personalization", + "personalize" + ], + [ + "dimmed", + "dimed", + "low", + "dimming", + "diming", + "dimmer", + "dimer", + "display", + "fade", + "brightness" + ], + [ + "disabled", + "handicap", + "handicapped", + "disabilities", + "disability", + "empaired", + "impaired", + "imparied", + "trouble" + ], + [ + "best", + "better", + "easier", + "easy", + "enhance", + "improvement", + "make", + "more", + "most", + "optimal", + "optimise", + "optimize" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Optimise visual display", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.EaseOfAccessCenter /page pageEasierToSee", + "Keywords": [ + [ + "switch", + "filterkeys", + "keys", + "stickykeys", + "togglekeys", + "sticky-keys", + "toggle-keys", + "repeat", + "delay", + "hold", + "down", + "rate" + ], + [ + "appearance", + "out", + "layout", + "of", + "looks", + "way", + "displayed" + ], + [ + "site", + "blindness", + "blurred", + "blurry", + "half", + "legally", + "low", + "vision", + "poor", + "seeing", + "seems", + "sight", + "weak", + "bad", + "eyesight", + "eye-sight" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "customising", + "customisation", + "customises", + "customization", + "customizes", + "customizing", + "personalisation", + "personalise", + "personalization", + "personalize" + ], + [ + "best", + "better", + "easier", + "easy", + "enhance", + "improvement", + "make", + "more", + "most", + "optimal", + "optimise", + "optimize" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Press key combinations one at a time", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.EaseOfAccessCenter /page pageKeyboardEasierToUse", + "Keywords": [ + [ + "board", + "bord", + "keyboards", + "keyborads", + "keybord" + ], + [ + "keys", + "stickykeys" + ] + ] + }, + { + "Name": "Replace sounds with visual cues", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.EaseOfAccessCenter /page pageEasierWithSounds", + "Keywords": [ + [ + "can", + "not", + "cannot", + "can't", + "difficult", + "to", + "difficulty", + "does", + "doesn't", + "hard", + "not", + "will", + "willnot", + "won't" + ], + [ + "def", + "hearing", + "deaf", + "deafness", + "hard", + "of", + "problem", + "impaired", + "imparied" + ], + [ + "disabled", + "handicap", + "handicapped", + "disabilities", + "disability", + "empaired", + "impaired", + "imparied", + "trouble" + ], + [ + "cards", + "soundcards" + ], + [ + "audio", + "beeps", + "music", + "noises", + "schemes", + "sounds", + "tones", + "wav", + "sound", + "beep", + "noise" + ], + [ + "customise", + "soundsentry", + "sentry", + "settings", + "customize", + "captions", + "showsounds" + ] + ] + }, + { + "Name": "Turn High Contrast on or off", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2", + "Keywords": [ + [ + "brightness", + "contrast", + "hi-contrast", + "high-contrast" + ], + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "monitors", + "screens" + ], + [ + "deactivate", + "cancel", + "deactivates", + "delete", + "deleting", + "disable", + "disallow", + "exit", + "get", + "rid", + "of", + "prevent", + "remove", + "removing", + "shut", + "down", + "off", + "stop", + "turn", + "turnoff" + ], + [ + "crt", + "displays", + "monitors", + "screeens", + "screens" + ] + ] + }, + { + "Name": "Turn Magnifier on or off", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.EaseOfAccessCenter", + "Keywords": [ + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "magnification", + "magnified", + "magnifying", + "make", + "bigger", + "larger", + "zoom", + "in" + ] + ] + }, + { + "Name": "Turn off background images", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.EaseOfAccessCenter /page pageEasierToSee", + "Keywords": [ + [ + "ground", + "background" + ], + [ + "image", + "photograph", + "picture" + ], + [ + "deactivate", + "cancel", + "deactivates", + "delete", + "deleting", + "disable", + "disallow", + "exit", + "get", + "rid", + "of", + "prevent", + "remove", + "removing", + "shut", + "down", + "off", + "stop", + "turn", + "turnoff" + ] + ] + }, + { + "Name": "Turn off unnecessary animations", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.EaseOfAccessCenter /page pageEasierToSee", + "Keywords": [ + [ + "animations", + "cartoons" + ], + [ + "deactivate", + "cancel", + "deactivates", + "delete", + "deleting", + "disable", + "disallow", + "exit", + "get", + "rid", + "of", + "prevent", + "remove", + "removing", + "shut", + "down", + "off", + "stop", + "turn", + "turnoff" + ] + ] + }, + { + "Name": "Turn On-Screen keyboard on or off", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.EaseOfAccessCenter", + "Keywords": [ + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "board", + "bord", + "keyboards", + "keyborads", + "keybord" + ], + [ + "screen", + "keyboard", + "onscreen", + "on-screen", + "osk" + ] + ] + }, + { + "Name": "Turn on easy access keys", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.EaseOfAccessCenter /page pageKeyboardEasierToUse", + "Keywords": [ + [ + "board", + "bord", + "keyboards", + "keyborads", + "keybord" + ] + ] + }, + { + "Name": "Use audio description for video", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.EaseOfAccessCenter /page pageEasierToSee", + "Keywords": [ + [ + "text", + "to", + "speech", + "tts", + "voice", + "narrator" + ], + [ + "videoes", + "videos" + ] + ] + }, + { + "Name": "View current accessibility settings", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.EaseOfAccessCenter", + "Keywords": [ + [ + "accessibility", + "acessibility", + "ease", + "of" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ], + [ + "check", + "list", + "see", + "show", + "viewing" + ] + ] + }, + { + "Name": "Turn off automatic window arrangement", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.EaseOfAccessCenter /page pageEasierToClick", + "Keywords": [ + [ + "mice", + "mouses", + "pointer" + ], + [ + "management", + "managment" + ], + [ + "movement", + "movment", + "movemnet", + "motion" + ], + [ + "maximise", + "minimise", + "snapping", + "shake", + "shaking", + "dock", + "drag", + "edge", + "sides", + "top", + "screen", + "size", + "resize", + "maximize", + "restore", + "minimize" + ] + ] + }, + { + "Name": "Create and format hard disk partitions", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\mmc.exe %windir%\\system32\\diskmgmt.msc", + "Keywords": [ + [ + "clean-up", + "check", + "disk", + "dsk", + "chkdsk", + "cleandisk", + "cleaner", + "cleanup", + "up" + ], + [ + "add", + "create", + "make", + "new" + ], + [ + "disc", + "disks", + "drive" + ], + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "fdisc", + "fdisk" + ], + [ + "formated", + "formating", + "formatted", + "formatting" + ], + [ + "disk", + "drive", + "harddisk", + "hard-disk", + "harddrive", + "hard-drive" + ], + [ + "boot", + "disc", + "extended", + "format", + "disk", + "drive", + "harddisk", + "harddrive", + "ntfs", + "fat", + "partitian", + "partitioning", + "primary", + "reformat", + "sector", + "unpartition", + "volume" + ], + [ + "check", + "list", + "see", + "show", + "viewing" + ], + [ + "management", + "managment" + ] + ] + }, + { + "Name": "Defragment and optimise your drives", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\dfrgui.exe", + "Keywords": [ + [ + "clean-up", + "check", + "disk", + "dsk", + "chkdsk", + "cleandisk", + "cleaner", + "cleanup", + "up" + ], + [ + "defragment", + "free", + "up", + "space" + ], + [ + "disc", + "disks", + "drive" + ], + [ + "disk", + "drive", + "harddisk", + "hard-disk", + "harddrive", + "hard-drive" + ], + [ + "disc", + "disk", + "scandisc", + "scandisk", + "scandsk" + ], + [ + "check", + "list", + "see", + "show", + "viewing" + ] + ] + }, + { + "Name": "Diagnose your computer's memory problems", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\mdsched.exe", + "Keywords": [ + [ + "diagnose", + "diagnostics", + "diagnosis", + "find", + "problems", + "analyse", + "analyze", + "analysis", + "troubleshooter", + "errors" + ], + [ + "gigabytes", + "gigs", + "megabytes", + "megs", + "memory", + "ram" + ] + ] + }, + { + "Name": "Edit group policy", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\mmc.exe %windir%\\system32\\gpedit.msc", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "grouping" + ], + [ + "policies", + "policys" + ] + ] + }, + { + "Name": "Clear disk space by deleting unnecessary files", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\cleanmgr.exe", + "Keywords": [ + [ + "clean-up", + "check", + "disk", + "dsk", + "chkdsk", + "cleandisk", + "cleaner", + "cleanup", + "up" + ], + [ + "clean-up", + "check", + "up", + "cleanup", + "free", + "space", + "room", + "release", + "available" + ], + [ + "disk", + "drive", + "harddisk", + "hard-disk", + "harddrive", + "hard-drive" + ], + [ + "deactivate", + "cancel", + "deactivates", + "delete", + "deleting", + "disable", + "disallow", + "exit", + "get", + "rid", + "of", + "prevent", + "remove", + "removing", + "shut", + "down", + "off", + "stop", + "turn", + "turnoff" + ], + [ + "temp", + "cached", + "files", + "history", + "local", + "temorary", + "temporary", + "temperary", + "tmp", + "unnecessary", + "unneeded", + "useless", + "web" + ] + ] + }, + { + "Name": "Generate a system health report", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\perfmon.exe /report", + "Keywords": [ + [ + "laptop", + "compuer", + "machine", + "my", + "computer", + "pc", + "personal", + "system" + ], + [ + "healthy" + ], + [ + "optimise", + "crawl", + "degrade", + "faster", + "frozen", + "hanging", + "hung", + "improve", + "inactive", + "optimize", + "performance", + "quicker", + "sluggish", + "speed", + "thrashing", + "too", + "slow", + "unresponsive" + ], + [ + "diagnose", + "diagnostics", + "diagnosis", + "find", + "problems", + "analyse", + "analyze", + "analysis", + "troubleshooter", + "errors" + ] + ] + }, + { + "Name": "Schedule tasks", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\mmc.exe %windir%\\system32\\taskschd.msc", + "Keywords": [ + [ + "automated", + "automatically" + ], + [ + "scheduled", + "scheduling" + ] + ] + }, + { + "Name": "Set up ODBC data sources", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\odbcad32.exe", + "Keywords": [ + [ + "datum", + "odbc", + "data-base", + "database" + ], + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ] + ] + }, + { + "Name": "Set up ODBC data sources (32-bit)", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\syswow64\\odbcad32.exe", + "Keywords": [ + [ + "datum", + "odbc", + "data-base", + "database" + ], + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ] + ] + }, + { + "Name": "Set up ODBC data sources (64-bit)", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\odbcad32.exe", + "Keywords": [ + [ + "datum", + "odbc", + "data-base", + "database" + ], + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ] + ] + }, + { + "Name": "Set up ODBC data sources", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\odbcad32.exe", + "Keywords": [ + [ + "datum", + "odbc", + "data-base", + "database" + ], + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ] + ] + }, + { + "Name": "Set up iSCSI initiator", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\iscsicpl.exe", + "Keywords": [ + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "devices", + "divises", + "divicse", + "divices" + ], + [ + "iscsi", + "scsi" + ], + [ + "storage" + ] + ] + }, + { + "Name": "View event logs", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\mmc.exe %windir%\\system32\\eventvwr.msc", + "Keywords": [ + [ + "viewer", + "events", + "tracker", + "eventviewer" + ], + [ + "check", + "list", + "see", + "show", + "viewing" + ] + ] + }, + { + "Name": "View event logs", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\mmc.exe %windir%\\system32\\eventvwr.msc", + "Keywords": [ + [ + "viewer", + "events", + "tracker", + "eventviewer" + ], + [ + "check", + "list", + "see", + "show", + "viewing" + ] + ] + }, + { + "Name": "View local services", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\mmc.exe %windir%\\system32\\services.msc", + "Keywords": [ + [ + "disable", + "stop" + ], + [ + "services" + ], + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ] + ] + }, + { + "Name": "Manage computer certificates", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\mmc.exe %windir%\\system32\\certlm.msc", + "Keywords": [ + [ + "certificate", + "key" + ] + ] + }, + { + "Name": "Uninstall a program", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.ProgramsAndFeatures", + "Keywords": [ + [ + "file", + "applets", + "applications", + "apps", + "aps", + "files", + "programmes", + "programs", + "softare", + "softwares", + "sofware", + "sotfware", + "windos", + "windows" + ], + [ + "browsers", + "ie", + "microsoft", + "windows" + ], + [ + "deactivate", + "cancel", + "deactivates", + "delete", + "deleting", + "disable", + "disallow", + "exit", + "get", + "rid", + "of", + "prevent", + "remove", + "removing", + "shut", + "down", + "off", + "stop", + "turn", + "turnoff" + ], + [ + "deinstall", + "uninstalled", + "uninstalling", + "uninstalls", + "unistall" + ] + ] + }, + { + "Name": "Add or remove programs", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.ProgramsAndFeatures", + "Keywords": [ + [ + "add", + "or", + "remove", + "programs", + "and", + "arp" + ] + ] + }, + { + "Name": "View installed updates", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.ProgramsAndFeatures /page ::{D450A8A1-9568-45C7-9C0E-B4F9FB4537BD}", + "Keywords": [ + [ + "previous", + "old", + "installed", + "already", + "previously" + ], + [ + "atuo", + "automatically", + "automaticupdates", + "autoupdate", + "fixes", + "bugfixes", + "bugs", + "download", + "live", + "microsoft", + "patches", + "scan", + "security", + "service", + "packs", + "dater", + "dates", + "dating", + "updater", + "up-dater", + "updater.exe", + "updates", + "up-dates", + "up-dating", + "windows", + "windowsupdate.com", + "wizard", + "wupdater" + ], + [ + "notifications", + "notifying", + "notified" + ] + ] + }, + { + "Name": "Turn Windows features on or off", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\OptionalFeatures.exe", + "Keywords": [ + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "accessories", + "accessory", + "components", + "feature", + "features", + "programs", + "tools", + "utilities", + "utility" + ] + ] + }, + { + "Name": "Turn Windows features on or off", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\ServerManager.exe -arw", + "Keywords": [ + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "accessories", + "accessory", + "components", + "feature", + "features", + "programs", + "tools", + "utilities", + "utility" + ] + ] + }, + { + "Name": "Show which programs are installed on your computer", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.ProgramsAndFeatures", + "Keywords": [ + [ + "laptop", + "compuer", + "machine", + "my", + "computer", + "pc", + "personal", + "system" + ], + [ + "file", + "applets", + "applications", + "apps", + "aps", + "files", + "programmes", + "programs", + "softare", + "softwares", + "sofware", + "sotfware", + "windos", + "windows" + ], + [ + "automatically", + "autoshow", + "auto-show", + "make", + "visible", + "see", + "show", + "unlock", + "view" + ] + ] + }, + { + "Name": "How to install a program", + "Area": null, + "Type": "TaskLink", + "Command": "mshelp://windows/?id=fe7ea80e-52a2-48d6-947a-05e02e78bc37", + "Keywords": [ + [ + "added", + "adding", + "addon", + "add-on", + "adds" + ], + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "file", + "applets", + "applications", + "apps", + "aps", + "files", + "programmes", + "programs", + "softare", + "softwares", + "sofware", + "sotfware", + "windos", + "windows" + ], + [ + "browsers", + "ie", + "microsoft", + "windows" + ] + ] + }, + { + "Name": "Install a program from the network", + "Area": null, + "Type": "TaskLink", + "Command": "shell:::{26EE0668-A00A-44D7-9371-BEB064C98683}\\8\\::{15EAE92E-F17A-4431-9F28-805E482dAFD4}", + "Keywords": [ + [ + "add", + "or", + "remove", + "programs", + "and", + "arp" + ], + [ + "add", + "new", + "installed", + "installing" + ], + [ + "file", + "applets", + "applications", + "apps", + "aps", + "files", + "programmes", + "programs", + "softare", + "softwares", + "sofware", + "sotfware", + "windos", + "windows" + ] + ] + }, + { + "Name": "Change or remove a program", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.ProgramsAndFeatures", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "file", + "applets", + "applications", + "apps", + "aps", + "files", + "programmes", + "programs", + "softare", + "softwares", + "sofware", + "sotfware", + "windos", + "windows" + ], + [ + "browsers", + "ie", + "microsoft", + "windows" + ], + [ + "deactivate", + "cancel", + "deactivates", + "delete", + "deleting", + "disable", + "disallow", + "exit", + "get", + "rid", + "of", + "prevent", + "remove", + "removing", + "shut", + "down", + "off", + "stop", + "turn", + "turnoff" + ], + [ + "deinstall", + "uninstalled", + "uninstalling", + "uninstalls", + "unistall" + ] + ] + }, + { + "Name": "16-Bit Application Support", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL ntvdmcpl.dll", + "Keywords": [ + [ + "file", + "applets", + "applications", + "apps", + "aps", + "files", + "programmes", + "programs", + "softare", + "softwares", + "sofware", + "sotfware", + "windos", + "windows" + ], + [ + "applications", + "apps", + "application", + "app" + ], + [ + "apcompat", + "appcompat", + "compatable", + "compatibility", + "compatible", + "still", + "use" + ], + [ + "16", + "bit", + "16-bit", + "legacy", + "old", + "dos", + "win31", + "emulation", + "ntvdm" + ] + ] + }, + { + "Name": "Run programs made for previous versions of Windows", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\msdt.exe -id PCWDiagnostic -ep ControlPanelSearch", + "Keywords": [ + [ + "applications", + "apps", + "application", + "app" + ], + [ + "apcompat", + "appcompat", + "compatable", + "compatibility", + "compatible", + "still", + "use" + ], + [ + "earlier", + "older" + ], + [ + "previous", + "old", + "installed", + "already", + "previously" + ], + [ + "browsers", + "ie", + "microsoft", + "windows" + ], + [ + "file", + "applets", + "applications", + "apps", + "aps", + "files", + "programmes", + "programs", + "softare", + "softwares", + "sofware", + "sotfware", + "windos", + "windows" + ] + ] + }, + { + "Name": "Make a file type always open in a specific program", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.DefaultPrograms /page pageFileAssoc", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "associate", + "association", + "associations", + "extensions", + "extentions", + "type", + "filetype", + "open", + "with" + ], + [ + "file", + "applets", + "applications", + "apps", + "aps", + "files", + "programmes", + "programs", + "softare", + "softwares", + "sofware", + "sotfware", + "windos", + "windows" + ] + ] + }, + { + "Name": "Set your default programs", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.DefaultPrograms /page pageDefaultProgram", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "by", + "defaults", + "defualt", + "standard" + ], + [ + "associate", + "association", + "associations", + "extensions", + "extentions", + "type", + "filetype", + "open", + "with" + ], + [ + "file", + "applets", + "applications", + "apps", + "aps", + "files", + "programmes", + "programs", + "softare", + "softwares", + "sofware", + "sotfware", + "windos", + "windows" + ], + [ + "protocols" + ] + ] + }, + { + "Name": "View devices and printers", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.DevicesAndPrinters", + "Keywords": [ + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "connections", + "go", + "online", + "intranet", + "lan", + "netowrk", + "networking", + "line", + "on-line", + "www" + ], + [ + "802.1x", + "wireless", + "wire-less" + ], + [ + "out", + "printers", + "printing", + "printner", + "printout", + "print-out", + "pritner" + ], + [ + "computer", + "top", + "laptop", + "mobile", + "pc", + "notebook", + "portable" + ], + [ + "devices", + "divises", + "divicse", + "divices" + ], + [ + "1394", + "controller", + "adapter", + "adaptor", + "audio", + "biometric", + "cable", + "modem", + "card", + "cd-dvd", + "drive", + "CRT", + "devise", + "digial", + "camera", + "dsl", + "dvd", + "ethernet", + "flat", + "panel", + "game", + "handheld", + "scanner", + "ware", + "hardware", + "hardwear", + "infrared", + "ink-jet", + "input", + "IrDA", + "stick", + "joystick", + "keyboard", + "laser", + "printer", + "lcd", + "Mass", + "Storage", + "midi", + "mixer", + "mobile", + "monitor", + "motherboard", + "mouse", + "mp3", + "player", + "mpeg", + "music", + "player", + "network", + "optical", + "wheel", + "mouse", + "output", + "pen", + "plasma", + "monitor", + "portable", + "media", + "player", + "printer", + "raid", + "recording", + "scanner", + "card", + "reader", + "smartcard", + "sound", + "tape", + "drive", + "pad", + "touchpad", + "ball", + "trackball", + "tuner", + "tv", + "USB", + "video", + "capture", + "cards", + "view", + "USB", + "hub", + "camera", + "webcam", + "wheel", + "mouse", + "wireless", + "wlan" + ], + [ + "added", + "adding", + "addon", + "add-on", + "adds" + ], + [ + "scaners", + "scanners", + "scanning" + ], + [ + "camaras", + "cameras", + "camras" + ], + [ + "maneger", + "manager", + "devicemanager", + "dma", + "managar", + "management", + "managing", + "managment" + ], + [ + "drivers" + ], + [ + "audio", + "blank", + "ray", + "blue-ray", + "blu-ray", + "cd-rom", + "cds", + "dvd", + "enhanced", + "HD", + "media", + "super", + "video" + ], + [ + "tooth", + "bluetooth", + "blutooth" + ], + [ + "cards", + "videocards", + "videos" + ], + [ + "storage" + ], + [ + "ware", + "hardware-general" + ] + ] + }, + { + "Name": "Add a device", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\DevicePairingWizard.exe", + "Keywords": [ + [ + "devices", + "divises", + "divicse", + "divices" + ], + [ + "mice", + "mouses", + "pointer" + ], + [ + "board", + "bord", + "keyboards", + "keyborads", + "keybord" + ], + [ + "out", + "printers", + "printing", + "printner", + "printout", + "print-out", + "pritner" + ], + [ + "added", + "adding", + "addon", + "add-on", + "adds" + ], + [ + "add", + "new", + "installed", + "installing" + ], + [ + "mobile", + "handset", + "handsets", + "phone", + "cellphone", + "cell", + "speakers", + "headset", + "headsets" + ], + [ + "TV", + "television" + ], + [ + "DLNA", + "media", + "player", + "storage", + "NAS" + ], + [ + "network", + "networking", + "networks" + ], + [ + "link", + "pair", + "pairs", + "associate", + "associates", + "add", + "adds", + "connects", + "connect", + "setup", + "playto", + "play" + ] + ] + }, + { + "Name": "Advanced printer setup", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe printui.dll,PrintUIEntryDPIAware /il", + "Keywords": [ + [ + "out", + "printers", + "printing", + "printner", + "printout", + "print-out", + "pritner" + ], + [ + "added", + "adding", + "addon", + "add-on", + "adds" + ], + [ + "add", + "new", + "installed", + "installing" + ], + [ + "finding", + "locate", + "locating", + "search", + "for", + "is", + "where's", + "the" + ], + [ + "gets", + "getting", + "get-verb" + ], + [ + "network", + "networking", + "networks" + ], + [ + "link", + "pair", + "pairs", + "associate", + "associates", + "add", + "adds", + "connects", + "connect", + "setup", + "playto", + "play" + ] + ] + }, + { + "Name": "Add a Bluetooth device", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\DevicePairingWizard.exe /bluetooth", + "Keywords": [ + [ + "tooth", + "bluetooth", + "blutooth" + ], + [ + "devices", + "divises", + "divicse", + "divices" + ], + [ + "802.1x", + "wireless", + "wire-less" + ], + [ + "link", + "pair", + "pairs", + "associate", + "associates", + "add", + "adds", + "connects", + "connect", + "setup", + "playto", + "play" + ], + [ + "add", + "new", + "installed", + "installing" + ] + ] + }, + { + "Name": "Device Manager", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.DeviceManager", + "Keywords": [ + [ + "maneger", + "manager", + "devicemanager", + "dma", + "managar", + "management", + "managing", + "managment" + ], + [ + "devices", + "divises", + "divicse", + "divices" + ], + [ + "drivers" + ], + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "1394", + "controller", + "adapter", + "adaptor", + "audio", + "biometric", + "cable", + "modem", + "card", + "cd-dvd", + "drive", + "CRT", + "devise", + "digial", + "camera", + "dsl", + "dvd", + "ethernet", + "flat", + "panel", + "game", + "handheld", + "scanner", + "ware", + "hardware", + "hardwear", + "infrared", + "ink-jet", + "input", + "IrDA", + "stick", + "joystick", + "keyboard", + "laser", + "printer", + "lcd", + "Mass", + "Storage", + "midi", + "mixer", + "mobile", + "monitor", + "motherboard", + "mouse", + "mp3", + "player", + "mpeg", + "music", + "player", + "network", + "optical", + "wheel", + "mouse", + "output", + "pen", + "plasma", + "monitor", + "portable", + "media", + "player", + "printer", + "raid", + "recording", + "scanner", + "card", + "reader", + "smartcard", + "sound", + "tape", + "drive", + "pad", + "touchpad", + "ball", + "trackball", + "tuner", + "tv", + "USB", + "video", + "capture", + "cards", + "view", + "USB", + "hub", + "camera", + "webcam", + "wheel", + "mouse", + "wireless", + "wlan" + ], + [ + "mine", + "my" + ] + ] + }, + { + "Name": "Change Windows To Go start-up options", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe pwlauncher.dll,ShowPortableWorkspaceLauncherConfigurationUX", + "Keywords": [] + }, + { + "Name": "Change default printer", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.DevicesAndPrinters", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "by", + "defaults", + "defualt", + "standard" + ], + [ + "finding", + "locate", + "locating", + "search", + "for", + "is", + "where's", + "the" + ], + [ + "gets", + "getting", + "get-verb" + ], + [ + "out", + "printers", + "printing", + "printner", + "printout", + "print-out", + "pritner" + ] + ] + }, + { + "Name": "View scanners and cameras", + "Area": null, + "Type": "TaskLink", + "Command": "%ProgramFiles%\\Windows Photo Viewer\\ImagingDevices.exe", + "Keywords": [ + [ + "camaras", + "cameras", + "camras" + ], + [ + "automatically", + "autoshow", + "auto-show", + "make", + "visible", + "see", + "show", + "unlock", + "view" + ], + [ + "check", + "list", + "see", + "show", + "viewing" + ] + ] + }, + { + "Name": "Change Bluetooth settings", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL bthprops.cpl,,1", + "Keywords": [ + [ + "tooth", + "bluetooth", + "blutooth" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "devices", + "divises", + "divicse", + "divices" + ], + [ + "802.1x", + "wireless", + "wire-less" + ] + ] + }, + { + "Name": "Scan a document or picture", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\wfs.exe", + "Keywords": [ + [ + "scaners", + "scanners", + "scanning" + ], + [ + "add", + "create", + "make", + "new" + ] + ] + }, + { + "Name": "Set up USB game controllers", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL %windir%\\system32\\joy.cpl", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "controlers", + "controllers", + "stick", + "joystick" + ], + [ + "devices", + "divises", + "divicse", + "divices" + ], + [ + "games" + ] + ] + }, + { + "Name": "Change device installation settings", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe newdev.dll,DeviceInternetSettingUi 5", + "Keywords": [ + [ + "change", + "changing", + "devices", + "installation", + "installing", + "settings", + "hardware", + "drivers", + "windows", + "in", + "out", + "optin", + "opt-in", + "optout", + "opt-out", + "metadata", + "data", + "icons", + "stage", + "downloads", + "downloading", + "online", + "fixing", + "working", + "my", + "searching", + "finding", + "getting", + "doesn't", + "not", + "for", + "newer" + ], + [ + "notifications", + "notifying", + "notified" + ] + ] + }, + { + "Name": "Change settings for content received using Tap and send", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.AutoPlay", + "Keywords": [ + [ + "nfp", + "near", + "field", + "feild", + "proximity", + "prosimity", + "proxymity", + "tap and send" + ] + ] + }, + { + "Name": "Change advanced colour management settings for displays, scanners and printers", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\colorcpl.exe", + "Keywords": [ + [ + "calibrate", + "calibration" + ], + [ + "24", + "bit", + "24-bit", + "256", + "bit", + "32-bit", + "colors", + "colours", + "depth", + "num", + "number", + "of" + ], + [ + "absolute", + "colorimetric", + "gamut", + "mapping", + "graphics", + "images", + "perceptual", + "proofing", + "relative", + "rendering", + "rgb", + "sRGB" + ], + [ + "management", + "managment" + ], + [ + "out", + "printers", + "printing", + "printner", + "printout", + "print-out", + "pritner" + ], + [ + "scaners", + "scanners", + "scanning" + ], + [ + "crt", + "displays", + "monitors", + "screeens", + "screens" + ] + ] + }, + { + "Name": "Add clocks for different time zones", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,1", + "Keywords": [ + [ + "additional", + "another", + "create", + "many", + "more", + "mutliple" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "days", + "calendar", + "clock", + "times", + "time", + "day" + ], + [ + "time zones", + "timezone", + "time-zone", + "zones" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Automatically adjust for daylight saving time", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL timedate.cpl", + "Keywords": [ + [ + "automated", + "automatically" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "days", + "calendar", + "clock", + "times", + "time", + "day" + ], + [ + "light", + "daylight", + "daylite", + "lite", + "savings", + "savins", + "standard" + ], + [ + "ddmmyyyy", + "hour", + "12-hour", + "24-hour", + "clock", + "date", + "day", + "dd", + "display", + "formating", + "formatting", + "four", + "digit", + "long", + "mmddyyyy", + "month", + "properties", + "short", + "time", + "two", + "year", + "yyyy" + ] + ] + }, + { + "Name": "Change the time zone", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL timedate.cpl", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "time zones", + "timezone", + "time-zone", + "zones" + ] + ] + }, + { + "Name": "Set the time and date", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL timedate.cpl", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "days", + "calendar", + "clock", + "times", + "time", + "day" + ], + [ + "ddmmyyyy", + "hour", + "12-hour", + "24-hour", + "clock", + "date", + "day", + "dd", + "display", + "formating", + "formatting", + "four", + "digit", + "long", + "mmddyyyy", + "month", + "properties", + "short", + "time", + "two", + "year", + "yyyy" + ] + ] + }, + { + "Name": "Set the time and date", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL timedate.cpl", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "days", + "calendar", + "clock", + "times", + "time", + "day" + ], + [ + "ddmmyyyy", + "hour", + "12-hour", + "24-hour", + "clock", + "date", + "day", + "dd", + "display", + "formating", + "formatting", + "four", + "digit", + "long", + "mmddyyyy", + "month", + "properties", + "short", + "time", + "two", + "year", + "yyyy" + ] + ] + }, + { + "Name": "Change default settings for media or devices", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.AutoPlay", + "Keywords": [ + [ + "play", + "run", + "start", + "autoplay", + "auto-play", + "autorun", + "auto-run", + "autostart", + "auto-start" + ], + [ + "audio", + "blank", + "ray", + "blue-ray", + "blu-ray", + "cd-rom", + "cds", + "dvd", + "enhanced", + "HD", + "media", + "super", + "video" + ], + [ + "import", + "photo", + "connection", + "camera", + "flash", + "removable", + "storage", + "stage" + ] + ] + }, + { + "Name": "Play CDs or other media automatically", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.AutoPlay", + "Keywords": [ + [ + "automated", + "automatically" + ], + [ + "play", + "run", + "start", + "autoplay", + "auto-play", + "autorun", + "auto-run", + "autostart", + "auto-start" + ], + [ + "disc", + "disks", + "drive" + ], + [ + "audio", + "blank", + "ray", + "blue-ray", + "blu-ray", + "cd-rom", + "cds", + "dvd", + "enhanced", + "HD", + "media", + "super", + "video" + ] + ] + }, + { + "Name": "Start or stop using AutoPlay for all media and devices", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.AutoPlay", + "Keywords": [ + [ + "play", + "run", + "start", + "autoplay", + "auto-play", + "autorun", + "auto-run", + "autostart", + "auto-start" + ], + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "deactivate", + "cancel", + "deactivates", + "delete", + "deleting", + "disable", + "disallow", + "exit", + "get", + "rid", + "of", + "prevent", + "remove", + "removing", + "shut", + "down", + "off", + "stop", + "turn", + "turnoff" + ] + ] + }, + { + "Name": "Change search options for files and folders", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Options_RunDLL 2", + "Keywords": [ + [ + "folders", + "subfolders" + ], + [ + "behaviour", + "search", + "behavior" + ], + [ + "search", + "options" + ], + [ + "finder", + "indexing", + "reindex", + "re-index", + "searches", + "searching" + ] + ] + }, + { + "Name": "Change the file type associated with a file extension", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.DefaultPrograms /page pageFileAssoc", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "associate", + "association", + "associations", + "extensions", + "extentions", + "type", + "filetype", + "open", + "with" + ], + [ + "file", + "applets", + "applications", + "apps", + "aps", + "files", + "programmes", + "programs", + "softare", + "softwares", + "sofware", + "sotfware", + "windos", + "windows" + ] + ] + }, + { + "Name": "Show hidden files and folders", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Options_RunDLL 7", + "Keywords": [ + [ + "folders", + "subfolders" + ], + [ + "automatically", + "autoshow", + "auto-show", + "make", + "visible", + "see", + "show", + "unlock", + "view" + ] + ] + }, + { + "Name": "Show or hide file extensions", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Options_RunDLL 7", + "Keywords": [ + [ + "associate", + "association", + "associations", + "extensions", + "extentions", + "type", + "filetype", + "open", + "with" + ], + [ + "autohide", + "auto-hide", + "automatically", + "hide", + "make", + "invisible" + ], + [ + "automatically", + "autoshow", + "auto-show", + "make", + "visible", + "see", + "show", + "unlock", + "view" + ] + ] + }, + { + "Name": "Specify single- or double-click to open", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.FolderOptions", + "Keywords": [ + [ + "choice", + "chooses", + "choosing", + "chose", + "picked", + "picks", + "selected", + "selects" + ], + [ + "lock", + "clicking", + "doubleclick", + "double-click", + "single-click" + ] + ] + }, + { + "Name": "Preview, delete, show or hide fonts", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Fonts", + "Keywords": [ + [ + "faunt", + "fonts", + "type", + "truetype", + "type", + "opentype", + "fount" + ], + [ + "added", + "adding", + "addon", + "add-on", + "adds" + ], + [ + "add", + "new", + "installed", + "installing" + ], + [ + "deactivate", + "cancel", + "deactivates", + "delete", + "deleting", + "disable", + "disallow", + "exit", + "get", + "rid", + "of", + "prevent", + "remove", + "removing", + "shut", + "down", + "off", + "stop", + "turn", + "turnoff" + ], + [ + "deinstall", + "uninstalled", + "uninstalling", + "uninstalls", + "unistall" + ] + ] + }, + { + "Name": "Change Font Settings", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Fonts /page ::{93412589-74D4-4E4E-AD0E-E0CB621440FD}", + "Keywords": [ + [ + "faunt", + "fonts", + "type", + "truetype", + "type", + "opentype", + "fount" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ], + [ + "autohide", + "auto-hide", + "automatically", + "hide", + "make", + "invisible" + ], + [ + "automatically", + "autoshow", + "auto-show", + "make", + "visible", + "see", + "show", + "unlock", + "view" + ] + ] + }, + { + "Name": "View installed fonts", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Fonts", + "Keywords": [ + [ + "faunt", + "fonts", + "type", + "truetype", + "type", + "opentype", + "fount" + ], + [ + "add", + "new", + "installed", + "installing" + ], + [ + "check", + "list", + "see", + "show", + "viewing" + ] + ] + }, + { + "Name": "Private Character Editor", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\eudcedit.exe", + "Keywords": [ + [ + "eudcedit.exe", + "private", + "character", + "editor" + ] + ] + }, + { + "Name": "Adjust commonly used mobility settings", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\mblctr.exe /open", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "computer", + "top", + "laptop", + "mobile", + "pc", + "notebook", + "portable" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Adjust settings before giving a presentation", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\presentationsettings.exe", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "pixels", + "reslution", + "resoltion", + "resolution", + "resolutoin", + "rezolution", + "size" + ], + [ + "crt", + "displays", + "monitors", + "screeens", + "screens" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Block or allow pop-ups", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,2", + "Keywords": [ + [ + "banned", + "blocker", + "filter", + "nanny", + "prevent", + "restrict", + "stopper" + ], + [ + "from", + "the", + "web", + "inet", + "internet", + "intrnet", + "net", + "online", + "on-line", + "sites", + "pages", + "webpages", + "websites", + "world", + "wide", + "www" + ], + [ + "ads", + "advertising", + "advertizing", + "adverts", + "adware", + "adwear", + "malware", + "ups", + "popupblocker", + "pop-upblocker", + "popups", + "pop-ups", + "popupstopper", + "spyware", + "spywear", + "unwanted", + "windows" + ], + [ + "private", + "privacy", + "secrecy" + ], + [ + "restricted", + "safety", + "secure", + "securing", + "security", + "sites", + "trusted", + "trusting" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Block or allow third-party cookies", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,2", + "Keywords": [ + [ + "allowed", + "let", + "through", + "permitted" + ], + [ + "banned", + "blocker", + "filter", + "nanny", + "prevent", + "restrict", + "stopper" + ], + [ + "3rd", + "party", + "cookies", + "cooky", + "from", + "others", + "third-party", + "unwanted" + ], + [ + "from", + "the", + "web", + "inet", + "internet", + "intrnet", + "net", + "online", + "on-line", + "sites", + "pages", + "webpages", + "websites", + "world", + "wide", + "www" + ], + [ + "restricted", + "safety", + "secure", + "securing", + "security", + "sites", + "trusted", + "trusting" + ] + ] + }, + { + "Name": "Change how web pages are displayed in tabs", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,0", + "Keywords": [ + [ + "browsers", + "browsing", + "web" + ], + [ + "ie", + "internet", + "explorer" + ], + [ + "from", + "the", + "web", + "inet", + "internet", + "intrnet", + "net", + "online", + "on-line", + "sites", + "pages", + "webpages", + "websites", + "world", + "wide", + "www" + ], + [ + "tabs", + "tabbed", + "browsing", + "quick" + ] + ] + }, + { + "Name": "Change security settings", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,1", + "Keywords": [ + [ + "allowed", + "let", + "through", + "permitted" + ], + [ + "banned", + "blocker", + "filter", + "nanny", + "prevent", + "restrict", + "stopper" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "from", + "the", + "web", + "inet", + "internet", + "intrnet", + "net", + "online", + "on-line", + "sites", + "pages", + "webpages", + "websites", + "world", + "wide", + "www" + ], + [ + "restricted", + "safety", + "secure", + "securing", + "security", + "sites", + "trusted", + "trusting" + ] + ] + }, + { + "Name": "Change temporary Internet file settings", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,0", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "3rd", + "party", + "cookies", + "cooky", + "from", + "others", + "third-party", + "unwanted" + ], + [ + "from", + "the", + "web", + "inet", + "internet", + "intrnet", + "net", + "online", + "on-line", + "sites", + "pages", + "webpages", + "websites", + "world", + "wide", + "www" + ], + [ + "deactivate", + "cancel", + "deactivates", + "delete", + "deleting", + "disable", + "disallow", + "exit", + "get", + "rid", + "of", + "prevent", + "remove", + "removing", + "shut", + "down", + "off", + "stop", + "turn", + "turnoff" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ], + [ + "temp", + "cached", + "files", + "history", + "local", + "temorary", + "temporary", + "temperary", + "tmp", + "unnecessary", + "unneeded", + "useless", + "web" + ] + ] + }, + { + "Name": "Change the search provider in Internet Explorer", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,0", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "by", + "defaults", + "defualt", + "standard" + ], + [ + "provider", + "engine", + "searching" + ] + ] + }, + { + "Name": "Change your homepage", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,0", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "page", + "homepage" + ], + [ + "from", + "the", + "web", + "inet", + "internet", + "intrnet", + "net", + "online", + "on-line", + "sites", + "pages", + "webpages", + "websites", + "world", + "wide", + "www" + ] + ] + }, + { + "Name": "Configure proxy server", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,4", + "Keywords": [ + [ + "server", + "web", + "winsock", + "socks", + "socket", + "dns", + "sas", + "winproxy", + "rpoxy", + "client", + "hosts", + "tmproxy", + "proxycfg" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Connect to the Internet", + "Area": null, + "Type": "TaskLink", + "Command": "ms-availablenetworks:", + "Keywords": [ + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "from", + "the", + "web", + "inet", + "internet", + "intrnet", + "net", + "online", + "on-line", + "sites", + "pages", + "webpages", + "websites", + "world", + "wide", + "www" + ], + [ + "connections", + "go", + "online", + "intranet", + "lan", + "netowrk", + "networking", + "line", + "on-line", + "www" + ], + [ + "wizard", + "wizzard" + ] + ] + }, + { + "Name": "Delete browsing history", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,0", + "Keywords": [ + [ + "browsers", + "browsing", + "web" + ], + [ + "autohide", + "auto-hide", + "automatically", + "hide", + "make", + "invisible" + ], + [ + "ie", + "internet", + "explorer" + ], + [ + "from", + "the", + "web", + "inet", + "internet", + "intrnet", + "net", + "online", + "on-line", + "sites", + "pages", + "webpages", + "websites", + "world", + "wide", + "www" + ], + [ + "deactivate", + "cancel", + "deactivates", + "delete", + "deleting", + "disable", + "disallow", + "exit", + "get", + "rid", + "of", + "prevent", + "remove", + "removing", + "shut", + "down", + "off", + "stop", + "turn", + "turnoff" + ], + [ + "temp", + "cached", + "files", + "history", + "local", + "temorary", + "temporary", + "temperary", + "tmp", + "unnecessary", + "unneeded", + "useless", + "web" + ] + ] + }, + { + "Name": "Delete cookies or temporary files", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,0", + "Keywords": [ + [ + "3rd", + "party", + "cookies", + "cooky", + "from", + "others", + "third-party", + "unwanted" + ], + [ + "deactivate", + "cancel", + "deactivates", + "delete", + "deleting", + "disable", + "disallow", + "exit", + "get", + "rid", + "of", + "prevent", + "remove", + "removing", + "shut", + "down", + "off", + "stop", + "turn", + "turnoff" + ], + [ + "temp", + "cached", + "files", + "history", + "local", + "temorary", + "temporary", + "temperary", + "tmp", + "unnecessary", + "unneeded", + "useless", + "web" + ] + ] + }, + { + "Name": "Enable or disable session cookies", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,2", + "Keywords": [ + [ + "3rd", + "party", + "cookies", + "cooky", + "from", + "others", + "third-party", + "unwanted" + ], + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "from", + "the", + "web", + "inet", + "internet", + "intrnet", + "net", + "online", + "on-line", + "sites", + "pages", + "webpages", + "websites", + "world", + "wide", + "www" + ], + [ + "deactivate", + "cancel", + "deactivates", + "delete", + "deleting", + "disable", + "disallow", + "exit", + "get", + "rid", + "of", + "prevent", + "remove", + "removing", + "shut", + "down", + "off", + "stop", + "turn", + "turnoff" + ], + [ + "restricted", + "safety", + "secure", + "securing", + "security", + "sites", + "trusted", + "trusting" + ] + ] + }, + { + "Name": "Manage browser add-ons", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,5", + "Keywords": [ + [ + "activex", + "ons", + "add-ons", + "extension" + ], + [ + "browsers", + "browsing", + "web" + ], + [ + "add", + "new", + "installed", + "installing" + ], + [ + "administer", + "configure", + "managed", + "manages", + "managing", + "up", + "setup" + ], + [ + "deactivate", + "cancel", + "deactivates", + "delete", + "deleting", + "disable", + "disallow", + "exit", + "get", + "rid", + "of", + "prevent", + "remove", + "removing", + "shut", + "down", + "off", + "stop", + "turn", + "turnoff" + ], + [ + "deinstall", + "uninstalled", + "uninstalling", + "uninstalls", + "unistall" + ] + ] + }, + { + "Name": "Tell if an RSS feed is available on a website", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,3", + "Keywords": [ + [ + "from", + "the", + "web", + "inet", + "internet", + "intrnet", + "net", + "online", + "on-line", + "sites", + "pages", + "webpages", + "websites", + "world", + "wide", + "www" + ], + [ + "rss", + "feed", + "aggregator", + "csrss" + ] + ] + }, + { + "Name": "Turn autocomplete in Internet Explorer on or off", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,3", + "Keywords": [ + [ + "autocomplete", + "complete", + "completion", + "finish", + "autofinish", + "fill", + "autofill" + ], + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "deactivate", + "cancel", + "deactivates", + "delete", + "deleting", + "disable", + "disallow", + "exit", + "get", + "rid", + "of", + "prevent", + "remove", + "removing", + "shut", + "down", + "off", + "stop", + "turn", + "turnoff" + ] + ] + }, + { + "Name": "Choose how you open links", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,5", + "Keywords": [ + [ + "desktops", + "dekstops" + ], + [ + "lanch", + "launches" + ], + [ + "ie", + "internet", + "explorer" + ], + [ + "browsers", + "browsing", + "web" + ], + [ + "opens", + "opening", + "opened" + ], + [ + "links" + ], + [ + "tiles" + ], + [ + "always", + "in" + ], + [ + "let", + "decide" + ] + ] + }, + { + "Name": "Change cursor blink rate", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Keyboard", + "Keywords": [ + [ + "blinking", + "blinkrate", + "flashing", + "rate" + ], + [ + "arrows", + "cursors", + "mouse", + "pointers" + ], + [ + "board", + "bord", + "keyboards", + "keyborads", + "keybord" + ] + ] + }, + { + "Name": "Check keyboard status", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Keyboard /page 1", + "Keywords": [ + [ + "board", + "bord", + "keyboards", + "keyborads", + "keybord" + ] + ] + }, + { + "Name": "Change mouse settings", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Mouse", + "Keywords": [ + [ + "butons", + "buttons" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "lock", + "clicking", + "doubleclick", + "double-click", + "single-click" + ], + [ + "mice", + "mouses", + "pointer" + ], + [ + "flip", + "handed", + "hander", + "left-handed", + "left-hander", + "lefty", + "reverse", + "handed", + "right-handed", + "switch" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Change how the mouse pointer looks", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Mouse /page 1", + "Keywords": [ + [ + "appearance", + "out", + "layout", + "of", + "looks", + "way", + "displayed" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "arrows", + "cursors", + "mouse", + "pointers" + ], + [ + "mice", + "mouses", + "pointer" + ] + ] + }, + { + "Name": "Change how the mouse pointer looks when it\u2019s moving", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Mouse /page 2", + "Keywords": [ + [ + "appearance", + "out", + "layout", + "of", + "looks", + "way", + "displayed" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "arrows", + "cursors", + "mouse", + "pointers" + ], + [ + "move", + "moving", + "shadow", + "speed", + "tails" + ], + [ + "mice", + "mouses", + "pointer" + ] + ] + }, + { + "Name": "Change mouse click settings", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Mouse", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "lock", + "clicking", + "doubleclick", + "double-click", + "single-click" + ], + [ + "mice", + "mouses", + "pointer" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Change mouse click settings", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Mouse", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "lock", + "clicking", + "doubleclick", + "double-click", + "single-click" + ], + [ + "mice", + "mouses", + "pointer" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Change mouse wheel settings", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Mouse /page 3", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "mice", + "mouses", + "pointer" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ], + [ + "wheel", + "scrolling", + "scrollwheel", + "mousewheel" + ] + ] + }, + { + "Name": "Change the mouse pointer display or speed", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Mouse /page 2", + "Keywords": [ + [ + "appearance", + "out", + "layout", + "of", + "looks", + "way", + "displayed" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "arrows", + "cursors", + "mouse", + "pointers" + ], + [ + "move", + "moving", + "shadow", + "speed", + "tails" + ], + [ + "mice", + "mouses", + "pointer" + ] + ] + }, + { + "Name": "Customise the mouse buttons", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Mouse", + "Keywords": [ + [ + "butons", + "buttons" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "customising", + "customisation", + "customises", + "customization", + "customizes", + "customizing", + "personalisation", + "personalise", + "personalization", + "personalize" + ], + [ + "mice", + "mouses", + "pointer" + ], + [ + "flip", + "handed", + "hander", + "left-handed", + "left-hander", + "lefty", + "reverse", + "handed", + "right-handed", + "switch" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Make it easier to see the mouse pointer", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Mouse /page 2", + "Keywords": [ + [ + "arrows", + "cursors", + "mouse", + "pointers" + ], + [ + "finding", + "locate", + "locating", + "search", + "for", + "is", + "where's", + "the" + ], + [ + "cannot", + "cant", + "find", + "can't", + "see", + "gone", + "hidden", + "invisible", + "missing", + "vanished", + "where", + "is" + ], + [ + "mice", + "mouses", + "pointer" + ] + ] + }, + { + "Name": "Get more features with a new edition of Windows", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\system32\\WindowsAnytimeUpgradeUI.exe", + "Keywords": [ + [ + "compare", + "comparison", + "side-by-side" + ], + [ + "features", + "get", + "more", + "next", + "version", + "vista", + "home", + "business", + "premium", + "ultimate", + "starter" + ], + [ + "vista", + "windows", + "windw", + "7" + ], + [ + "release", + "version", + "edition" + ], + [ + "centre", + "features", + "windows", + "anytime", + "upgrade", + "media", + "center", + "play", + "dvd", + "watch", + "tv", + "television", + "record" + ] + ] + }, + { + "Name": "Set up dialling rules", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.PhoneAndModemOptions", + "Keywords": [ + [ + "calling", + "calls" + ], + [ + "area", + "code", + "carrier", + "city", + "up", + "dialing", + "dialling", + "dialup", + "dial-up", + "pulse", + "tone", + "touchtone", + "touch-tone" + ], + [ + "modem" + ], + [ + "phone", + "line", + "telephone" + ], + [ + "rules" + ] + ] + }, + { + "Name": "Change battery settings", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.PowerOptions", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "batteries", + "battery", + "life", + "conserve", + "energy", + "last", + "longer", + "management", + "plugged", + "in", + "supply", + "powersaver", + "preserve", + "save", + "mode", + "saving", + "unplugged", + "ups" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Change power-saving settings", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.PowerOptions", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "customising", + "customisation", + "customises", + "customization", + "customizes", + "customizing", + "personalisation", + "personalise", + "personalization", + "personalize" + ], + [ + "batteries", + "battery", + "life", + "conserve", + "energy", + "last", + "longer", + "management", + "plugged", + "in", + "supply", + "powersaver", + "preserve", + "save", + "mode", + "saving", + "unplugged", + "ups" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Change what closing the lid does", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.PowerOptions /page pageGlobalSettings", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "close", + "closing" + ], + [ + "def", + "hearing", + "deaf", + "deafness", + "hard", + "of", + "problem", + "impaired", + "imparied" + ], + [ + "cover", + "lid", + "top" + ], + [ + "batteries", + "battery", + "life", + "conserve", + "energy", + "last", + "longer", + "management", + "plugged", + "in", + "supply", + "powersaver", + "preserve", + "save", + "mode", + "saving", + "unplugged", + "ups" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Change what the power buttons do", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.PowerOptions /page pageGlobalSettings", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "on-off", + "switch" + ], + [ + "turn", + "hibernate", + "button", + "down", + "power-button", + "shutdown", + "shut-down", + "shuts", + "by", + "standby", + "stand-by", + "switches", + "turns", + "off" + ], + [ + "batteries", + "battery", + "life", + "conserve", + "energy", + "last", + "longer", + "management", + "plugged", + "in", + "supply", + "powersaver", + "preserve", + "save", + "mode", + "saving", + "unplugged", + "ups" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Change when the computer sleeps", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.PowerOptions /page pagePlanSettings", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "batteries", + "battery", + "life", + "conserve", + "energy", + "last", + "longer", + "management", + "plugged", + "in", + "supply", + "powersaver", + "preserve", + "save", + "mode", + "saving", + "unplugged", + "ups" + ], + [ + "deactivate", + "cancel", + "deactivates", + "delete", + "deleting", + "disable", + "disallow", + "exit", + "get", + "rid", + "of", + "prevent", + "remove", + "removing", + "shut", + "down", + "off", + "stop", + "turn", + "turnoff" + ], + [ + "asleep", + "autowake", + "awaken", + "come", + "back", + "from", + "hibernates", + "hibernating", + "hibernation", + "restarts", + "resumes", + "sleeping", + "standby", + "up", + "wakeup", + "wake-up", + "waking" + ] + ] + }, + { + "Name": "Choose when to turn off display", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.PowerOptions /page pagePlanSettings", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "turn", + "hibernate", + "button", + "down", + "power-button", + "shutdown", + "shut-down", + "shuts", + "by", + "standby", + "stand-by", + "switches", + "turns", + "off" + ], + [ + "crt", + "displays", + "monitors", + "screeens", + "screens" + ] + ] + }, + { + "Name": "Choose a power plan", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.PowerOptions", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "plans", + "choose", + "select", + "power", + "scheme", + "balanced", + "saver", + "change" + ], + [ + "crt", + "displays", + "monitors", + "screeens", + "screens" + ] + ] + }, + { + "Name": "Edit power plan", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.PowerOptions /page pagePlanSettings", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "plans", + "choose", + "select", + "power", + "scheme", + "balanced", + "saver", + "change" + ], + [ + "crt", + "displays", + "monitors", + "screeens", + "screens" + ] + ] + }, + { + "Name": "Change screen saver", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL desk.cpl,screensaver,@screensaver", + "Keywords": [ + [ + "savers", + "screan", + "screansavers", + "screeen", + "screeensavers", + "screen", + "screen-saver", + "screensavers", + "scren", + "screne", + "screnesavers", + "scrensavers", + "scrren", + "scrrensavers" + ] + ] + }, + { + "Name": "Turn screen saver on or off", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL desk.cpl,screensaver,@screensaver", + "Keywords": [ + [ + "deactivate", + "cancel", + "deactivates", + "delete", + "deleting", + "disable", + "disallow", + "exit", + "get", + "rid", + "of", + "prevent", + "remove", + "removing", + "shut", + "down", + "off", + "stop", + "turn", + "turnoff" + ], + [ + "savers", + "screan", + "screansavers", + "screeen", + "screeensavers", + "screen", + "screen-saver", + "screensavers", + "scren", + "screne", + "screnesavers", + "scrensavers", + "scrren", + "scrrensavers" + ] + ] + }, + { + "Name": "Change date, time or number formats", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL intl.cpl", + "Keywords": [ + [ + "appearance", + "out", + "layout", + "of", + "looks", + "way", + "displayed" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "sterling", + "pence", + "cents", + "currency", + "dollars", + "euros", + "money", + "pounds", + "sign", + "symbol", + "won", + "yen", + "yuan" + ], + [ + "show", + "displayed" + ], + [ + "formated", + "formating", + "formatted", + "formatting" + ], + [ + "m", + "centimeters", + "centimetres", + "cm", + "feet", + "foot", + "inches", + "kilometers", + "kilometres", + "kilos", + "km", + "lbs", + "measurements", + "meters", + "metres", + "miles", + "numbers", + "ounces", + "oz", + "pounds", + "weight", + "width" + ], + [ + "countries", + "country", + "dev", + "region", + "language", + "localisation", + "localised", + "locality", + "localization", + "localized", + "1", + "2", + "3", + "code", + "regional", + "regions", + "locale" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ], + [ + "ddmmyyyy", + "hour", + "12-hour", + "24-hour", + "clock", + "date", + "day", + "dd", + "display", + "formating", + "formatting", + "four", + "digit", + "long", + "mmddyyyy", + "month", + "properties", + "short", + "time", + "two", + "year", + "yyyy" + ], + [ + "alphabetise", + "alphabetize", + "order", + "sorting" + ] + ] + }, + { + "Name": "Change the way currency is displayed", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL intl.cpl", + "Keywords": [ + [ + "appearance", + "out", + "layout", + "of", + "looks", + "way", + "displayed" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "sterling", + "pence", + "cents", + "currency", + "dollars", + "euros", + "money", + "pounds", + "sign", + "symbol", + "won", + "yen", + "yuan" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Change the way dates and lists are displayed", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL intl.cpl", + "Keywords": [ + [ + "appearance", + "out", + "layout", + "of", + "looks", + "way", + "displayed" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ], + [ + "ddmmyyyy", + "hour", + "12-hour", + "24-hour", + "clock", + "date", + "day", + "dd", + "display", + "formating", + "formatting", + "four", + "digit", + "long", + "mmddyyyy", + "month", + "properties", + "short", + "time", + "two", + "year", + "yyyy" + ] + ] + }, + { + "Name": "Change the way measurements are displayed", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL intl.cpl", + "Keywords": [ + [ + "appearance", + "out", + "layout", + "of", + "looks", + "way", + "displayed" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "m", + "centimeters", + "centimetres", + "cm", + "feet", + "foot", + "inches", + "kilometers", + "kilometres", + "kilos", + "km", + "lbs", + "measurements", + "meters", + "metres", + "miles", + "numbers", + "ounces", + "oz", + "pounds", + "weight", + "width" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Change the way time is displayed", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL intl.cpl", + "Keywords": [ + [ + "appearance", + "out", + "layout", + "of", + "looks", + "way", + "displayed" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ], + [ + "ddmmyyyy", + "hour", + "12-hour", + "24-hour", + "clock", + "date", + "day", + "dd", + "display", + "formating", + "formatting", + "four", + "digit", + "long", + "mmddyyyy", + "month", + "properties", + "short", + "time", + "two", + "year", + "yyyy" + ] + ] + }, + { + "Name": "Add a language", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Language", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "choice", + "chooses", + "choosing", + "chose", + "picked", + "picks", + "selected", + "selects" + ], + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "british", + "english", + "foreign", + "languages", + "french", + "german", + "hindi", + "international", + "japanese", + "korean", + "langpack", + "langs", + "languages", + "multilanguage", + "multi-language", + "pack", + "spanish", + "uk", + "usa" + ], + [ + "dialogues", + "text", + "words", + "menus", + "dialogs", + "buttons", + "labels", + "writing", + "ui", + "language" + ], + [ + "messages", + "mesages" + ] + ] + }, + { + "Name": "Change input methods", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Language", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "letter", + "characters", + "chinese", + "hangul", + "japanese", + "kanji", + "korean", + "writing" + ], + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "input", + "methods", + "imes" + ], + [ + "board", + "bord", + "keyboards", + "keyborads", + "keybord" + ], + [ + "british", + "english", + "foreign", + "languages", + "french", + "german", + "hindi", + "international", + "japanese", + "korean", + "langpack", + "langs", + "languages", + "multilanguage", + "multi-language", + "pack", + "spanish", + "uk", + "usa" + ], + [ + "layout", + "out" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Settings for Microsoft IME (Japanese)", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\ime\\imejp\\imjpset.exe", + "Keywords": [ + [ + "msime", + "ime", + "settings", + "japanese" + ] + ] + }, + { + "Name": "Microsoft Pinyin SimpleFast Options", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\ime\\imesc\\imscprop.exe /EXPRESS", + "Keywords": [ + [ + "msime", + "ime", + "settings", + "pinyin", + "mspy" + ] + ] + }, + { + "Name": "Microsoft Pinyin SimpleFast Options", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\ime\\imesc\\imscprop.exe /EXPRESS", + "Keywords": [ + [ + "msime", + "ime", + "settings", + "pinyin", + "mspy" + ] + ] + }, + { + "Name": "Microsoft New Phonetic Settings", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\ime\\imetc\\imtcprop.exe /NPH", + "Keywords": [ + [ + "msime", + "ime", + "settings", + "phonetic" + ] + ] + }, + { + "Name": "Microsoft New Phonetic Settings", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\ime\\imetc\\imtcprop.exe /NPH", + "Keywords": [ + [ + "msime", + "ime", + "settings", + "phonetic" + ] + ] + }, + { + "Name": "Microsoft New Phonetic Settings", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\ime\\imetc\\imtcprop.exe /NPH", + "Keywords": [ + [ + "msime", + "ime", + "settings", + "phonetic" + ] + ] + }, + { + "Name": "Microsoft ChangJie Settings", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\ime\\imetc\\imtcprop.exe /CJ", + "Keywords": [ + [ + "msime", + "ime", + "settings", + "changjie" + ] + ] + }, + { + "Name": "Microsoft ChangJie Settings", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\ime\\imetc\\imtcprop.exe /CJ", + "Keywords": [ + [ + "msime", + "ime", + "settings", + "changjie" + ] + ] + }, + { + "Name": "Microsoft ChangJie Settings", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\ime\\imetc\\imtcprop.exe /CJ", + "Keywords": [ + [ + "msime", + "ime", + "settings", + "changjie" + ] + ] + }, + { + "Name": "Microsoft Quick Settings", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\ime\\imetc\\imtcprop.exe /QK", + "Keywords": [ + [ + "msime", + "ime", + "settings", + "quick" + ] + ] + }, + { + "Name": "Microsoft Quick Settings", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\ime\\imetc\\imtcprop.exe /QK", + "Keywords": [ + [ + "msime", + "ime", + "settings", + "quick" + ] + ] + }, + { + "Name": "Microsoft Quick Settings", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\ime\\imetc\\imtcprop.exe /QK", + "Keywords": [ + [ + "msime", + "ime", + "settings", + "quick" + ] + ] + }, + { + "Name": "Microsoft IME Register Word (Japanese)", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\ime\\imejp\\imjpdct.exe", + "Keywords": [ + [ + "msime", + "ime", + "register", + "word", + "japanese" + ] + ] + }, + { + "Name": "Change how Windows searches", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.IndexingOptions /page 2", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "finder", + "indexing", + "reindex", + "re-index", + "searches", + "searching" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ], + [ + "vista", + "windows", + "windw", + "7" + ] + ] + }, + { + "Name": "View recent messages about your computer", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.ActionCenter", + "Keywords": [ + [ + "warning", + "report", + "alert", + "windows", + "crash", + "hang", + "balloon", + "reminder" + ], + [ + "messages", + "mesages" + ], + [ + "notifications", + "notifying", + "notified" + ] + ] + }, + { + "Name": "Review your computer's status and resolve issues", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.ActionCenter", + "Keywords": [ + [ + "healthy" + ], + [ + "checking", + "look", + "for", + "scanning", + "verify" + ], + [ + "restricted", + "safety", + "secure", + "securing", + "security", + "sites", + "trusted", + "trusting" + ], + [ + "condition", + "running", + "state", + "status" + ], + [ + "fix", + "repair", + "error", + "warning", + "alert", + "windows", + "crash", + "hang", + "troubleshoot", + "diagnose", + "reports", + "diagnostic", + "diagnosis", + "balloon", + "reminder", + "performance", + "maintenance", + "maintain", + "reinstall", + "recovery", + "restore", + "cpc", + "completepc", + "pc", + "system", + "antivirus", + "anti-virus", + "spyware", + "networking", + "connection", + "connectivity" + ], + [ + "messages", + "mesages" + ], + [ + "notifications", + "notifying", + "notified" + ], + [ + "download", + "view", + "drivers", + "get", + "instructions", + "recommendations", + "messages" + ] + ] + }, + { + "Name": "Change User Account Control settings", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\UserAccountControlSettings.exe", + "Keywords": [ + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "deactivate", + "cancel", + "deactivates", + "delete", + "deleting", + "disable", + "disallow", + "exit", + "get", + "rid", + "of", + "prevent", + "remove", + "removing", + "shut", + "down", + "off", + "stop", + "turn", + "turnoff" + ], + [ + "restricted", + "safety", + "secure", + "securing", + "security", + "sites", + "trusted", + "trusting" + ], + [ + "dialogues", + "credentials", + "elevations", + "LUA", + "prompts", + "prompting", + "security", + "warnings", + "UAC", + "administrator", + "rights", + "privileges", + "permissions", + "users", + "accounts", + "controls", + "administrater", + "dialogs", + "popups" + ] + ] + }, + { + "Name": "View reliability history", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.ActionCenter /page pageReliabilityView", + "Keywords": [ + [ + "repair", + "problem", + "error", + "crash", + "hang" + ], + [ + "reliability", + "monitor", + "problem", + "history", + "system", + "stability", + "index" + ] + ] + }, + { + "Name": "Fix problems with your computer", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.ActionCenter", + "Keywords": [ + [ + "fix", + "repair", + "crash", + "hang", + "performance", + "maintenance", + "maintain", + "problems", + "reports", + "and" + ], + [ + "re-instate", + "re-set", + "recovery", + "recover", + "reinstall", + "factory", + "re-image", + "reimage", + "re-install", + "repair", + "restore", + "reinstate", + "reset", + "wipe", + "rollback", + "fix", + "troubleshoot", + "pc", + "refresh", + "erase", + "format" + ], + [ + "messages", + "mesages" + ] + ] + }, + { + "Name": "View recommended actions to keep Windows running smoothly", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.ActionCenter", + "Keywords": [ + [ + "fix", + "repair", + "crash", + "hang", + "performance", + "maintenance", + "maintain", + "problems", + "reports", + "and" + ], + [ + "messages", + "mesages" + ] + ] + }, + { + "Name": "Check security status", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.ActionCenter", + "Keywords": [ + [ + "centre", + "security", + "center", + "firewall", + "malware", + "virus", + "warning", + "windows", + "crash", + "antivirus", + "anti-virus", + "spyware", + "worm", + "trojan" + ] + ] + }, + { + "Name": "View all problem reports", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.ActionCenter /page pageProblems", + "Keywords": [ + [ + "reports", + "tell", + "microsoft", + "send", + "sent", + "clear", + "problems", + "delete", + "history", + "and", + "erase", + "view", + "all" + ] + ] + }, + { + "Name": "Change Automatic Maintenance settings", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.ActionCenter /page MaintenanceSettings", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Adjust system volume", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\sndvol.exe", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "laptop", + "compuer", + "machine", + "my", + "computer", + "pc", + "personal", + "system" + ], + [ + "customising", + "customisation", + "customises", + "customization", + "customizes", + "customizing", + "personalisation", + "personalise", + "personalization", + "personalize" + ], + [ + "not", + "hear", + "can't", + "sound", + "volume", + "is", + "off", + "too", + "low" + ], + [ + "audio", + "beeps", + "music", + "noises", + "schemes", + "sounds", + "tones", + "wav", + "sound", + "beep", + "noise" + ], + [ + "audio", + "card", + "computer", + "external", + "internal", + "pc", + "speakers" + ], + [ + "sound", + "louder", + "mute", + "noise", + "quiet", + "quite", + "soft", + "volume" + ], + [ + "devices", + "divises", + "divicse", + "divices" + ] + ] + }, + { + "Name": "Change sound card settings", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Sound", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ], + [ + "cards", + "soundcards" + ], + [ + "audio", + "beeps", + "music", + "noises", + "schemes", + "sounds", + "tones", + "wav", + "sound", + "beep", + "noise" + ] + ] + }, + { + "Name": "Change system sounds", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Sound /page 2", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "laptop", + "compuer", + "machine", + "my", + "computer", + "pc", + "personal", + "system" + ], + [ + "not", + "hear", + "can't", + "sound", + "volume", + "is", + "off", + "too", + "low" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ], + [ + "audio", + "beeps", + "music", + "noises", + "schemes", + "sounds", + "tones", + "wav", + "sound", + "beep", + "noise" + ] + ] + }, + { + "Name": "Manage audio devices", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Sound", + "Keywords": [ + [ + "audio", + "balance", + "card", + "effect", + "encoding", + "jack", + "level", + "line", + "microphone", + "mono", + "multichannel", + "multi-channel", + "port", + "sound", + "speaker", + "stereo", + "subwoofer", + "surround" + ], + [ + "in", + "line-in" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "customising", + "customisation", + "customises", + "customization", + "customizes", + "customizing", + "personalisation", + "personalise", + "personalization", + "personalize" + ], + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "midi", + "musical", + "instrument", + "digital", + "interface" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ], + [ + "audio", + "beeps", + "music", + "noises", + "schemes", + "sounds", + "tones", + "wav", + "sound", + "beep", + "noise" + ], + [ + "used", + "using" + ], + [ + "devices", + "divises", + "divicse", + "divices" + ] + ] + }, + { + "Name": "Change text-to-speech settings", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL %windir%\\system32\\speech\\speechux\\sapi.cpl", + "Keywords": [ + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "text", + "to", + "speech", + "tts", + "voice", + "narrator" + ] + ] + }, + { + "Name": "Print the speech reference card", + "Area": null, + "Type": "TaskLink", + "Command": "http://go.microsoft.com/fwlink/?LinkId=619882", + "Keywords": [ + [ + "adapters", + "adaptor", + "cards" + ], + [ + "out", + "printers", + "printing", + "printner", + "printout", + "print-out", + "pritner" + ], + [ + "card", + "help", + "instructions", + "paper", + "reference", + "sheet" + ], + [ + "recognise", + "activated", + "commanding", + "dictate", + "dictation", + "recogination", + "recognition", + "recognize", + "recongition", + "reconition", + "speaking", + "speechrecognition", + "speech-recognition", + "talk", + "to", + "understand", + "voice" + ] + ] + }, + { + "Name": "Set up a microphone", + "Area": null, + "Type": "TaskLink", + "Command": "%WINDIR%\\system32\\msdt.exe /id SpeechDiagnosticCalibrate /ep ControlPanel /skip true", + "Keywords": [ + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "external", + "headset", + "internal", + "jack", + "phone", + "microphones", + "mics", + "mikes" + ], + [ + "recognise", + "activated", + "commanding", + "dictate", + "dictation", + "recogination", + "recognition", + "recognize", + "recongition", + "reconition", + "speaking", + "speechrecognition", + "speech-recognition", + "talk", + "to", + "understand", + "voice" + ], + [ + "used", + "using" + ] + ] + }, + { + "Name": "Start speech recognition", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\speech\\common\\sapisvr.exe -SpeechUX", + "Keywords": [ + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "recognise", + "activated", + "commanding", + "dictate", + "dictation", + "recogination", + "recognition", + "recognize", + "recongition", + "reconition", + "speaking", + "speechrecognition", + "speech-recognition", + "talk", + "to", + "understand", + "voice" + ] + ] + }, + { + "Name": "Take speech tutorials", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe %windir%\\system32\\speech\\speechux\\SpeechUX.dll,RunWizard Tutorial", + "Keywords": [ + [ + "recognise", + "activated", + "commanding", + "dictate", + "dictation", + "recogination", + "recognition", + "recognize", + "recongition", + "reconition", + "speaking", + "speechrecognition", + "speech-recognition", + "talk", + "to", + "understand", + "voice" + ], + [ + "teach", + "training", + "tutorial" + ], + [ + "learn", + "lessons", + "teach", + "tutorial", + "example", + "training", + "wizard", + "to", + "use", + "how" + ] + ] + }, + { + "Name": "Train the computer to recognise your voice", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe %windir%\\system32\\speech\\speechux\\SpeechUX.dll,RunWizard UserTraining", + "Keywords": [ + [ + "accuracy", + "accurately", + "precise", + "precision", + "correct", + "mistakes" + ], + [ + "laptop", + "compuer", + "machine", + "my", + "computer", + "pc", + "personal", + "system" + ], + [ + "customising", + "customisation", + "customises", + "customization", + "customizes", + "customizing", + "personalisation", + "personalise", + "personalization", + "personalize" + ], + [ + "best", + "better", + "easier", + "easy", + "enhance", + "improvement", + "make", + "more", + "most", + "optimal", + "optimise", + "optimize" + ], + [ + "recognise", + "activated", + "commanding", + "dictate", + "dictation", + "recogination", + "recognition", + "recognize", + "recongition", + "reconition", + "speaking", + "speechrecognition", + "speech-recognition", + "talk", + "to", + "understand", + "voice" + ], + [ + "teach", + "training", + "tutorial" + ] + ] + }, + { + "Name": "Manage offline files", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL %windir%\\system32\\cscui.dll", + "Keywords": [ + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ], + [ + "line", + "offline", + "off-line", + "ofline" + ] + ] + }, + { + "Name": "Encrypt your offline files", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL %windir%\\system32\\cscui.dll ,2", + "Keywords": [ + [ + "line", + "offline", + "off-line", + "ofline" + ], + [ + "guard", + "protect", + "secure", + "preserve" + ] + ] + }, + { + "Name": "Manage disk space used by your offline files", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL %windir%\\system32\\cscui.dll ,1", + "Keywords": [ + [ + "disc", + "disks", + "drive" + ], + [ + "line", + "offline", + "off-line", + "ofline" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ], + [ + "store", + "space", + "cache", + "room" + ] + ] + }, + { + "Name": "Adjust the appearance and performance of Windows", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\SystemPropertiesPerformance.exe", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "optimise", + "crawl", + "degrade", + "faster", + "frozen", + "hanging", + "hung", + "improve", + "inactive", + "optimize", + "performance", + "quicker", + "sluggish", + "speed", + "thrashing", + "too", + "slow", + "unresponsive" + ], + [ + "visuals", + "effects", + "drop", + "shadows", + "smooth", + "scrolling", + "slide", + "fade", + "sliding", + "fading" + ] + ] + }, + { + "Name": "Allow remote access to your computer", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\SystemPropertiesRemote.exe", + "Keywords": [ + [ + "allowed", + "let", + "through", + "permitted" + ], + [ + "laptop", + "compuer", + "machine", + "my", + "computer", + "pc", + "personal", + "system" + ], + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "access", + "control", + "RAS", + "acess", + "assistance", + "desktop", + "remotely", + "terminal", + "services", + "ts" + ], + [ + "top", + "remote", + "desktop" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Allow Remote Assistance invitations to be sent from this computer", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\SystemPropertiesRemote.exe", + "Keywords": [ + [ + "allowed", + "let", + "through", + "permitted" + ], + [ + "invitations", + "invite", + "inviting", + "send" + ], + [ + "access", + "control", + "RAS", + "acess", + "assistance", + "desktop", + "remotely", + "terminal", + "services", + "ts" + ], + [ + "deactivate", + "cancel", + "deactivates", + "delete", + "deleting", + "disable", + "disallow", + "exit", + "get", + "rid", + "of", + "prevent", + "remove", + "removing", + "shut", + "down", + "off", + "stop", + "turn", + "turnoff" + ] + ] + }, + { + "Name": "Invite someone to connect to your PC and help you, or offer to help someone else", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\system32\\msra.exe", + "Keywords": [ + [ + "access", + "control", + "RAS", + "acess", + "assistance", + "desktop", + "remotely", + "terminal", + "services", + "ts" + ], + [ + "invitations", + "invite", + "inviting", + "send" + ] + ] + }, + { + "Name": "Change workgroup name", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\SystemPropertiesComputerName.exe", + "Keywords": [ + [ + "connect", + "to", + "enter", + "join", + "plug", + "into" + ], + [ + "names", + "rename", + "renaming" + ], + [ + "group", + "workgroup" + ] + ] + }, + { + "Name": "Check processor speed", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.System", + "Keywords": [ + [ + "checking", + "look", + "for", + "scanning", + "verify" + ], + [ + "laptop", + "compuer", + "machine", + "my", + "computer", + "pc", + "personal", + "system" + ], + [ + "486", + "agp", + "amd", + "bus", + "chip", + "clock", + "cpu", + "fast", + "intel", + "overclock", + "pentium", + "performance", + "processing", + "processor", + "ram", + "up", + "speedup" + ] + ] + }, + { + "Name": "Configure advanced user profile properties", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe sysdm.cpl,EditUserProfiles", + "Keywords": [ + [ + "accounts", + "alias", + "login", + "useraccount", + "useracount", + "users" + ], + [ + "administer", + "configure", + "managed", + "manages", + "managing", + "up", + "setup" + ] + ] + }, + { + "Name": "Create a restore point", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\SystemPropertiesProtection.exe", + "Keywords": [ + [ + "add", + "create", + "make", + "new" + ], + [ + "data", + "recovering", + "recovers", + "recovery" + ], + [ + "points", + "wizard", + "system", + "protection", + "restores", + "systemrestores" + ] + ] + }, + { + "Name": "Edit environment variables for your account", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe sysdm.cpl,EditEnvironmentVariables", + "Keywords": [ + [ + "environment", + "variables", + "path", + "envvar" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ] + ] + }, + { + "Name": "Edit the system environment variables", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\SystemPropertiesAdvanced.exe", + "Keywords": [ + [ + "environment", + "variables", + "path", + "envvar" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ] + ] + }, + { + "Name": "How to change the size of virtual memory", + "Area": null, + "Type": "TaskLink", + "Command": "mshelp://windows/?id=89ca317f-649d-40a6-8934-e5707ee5c4b8", + "Keywords": [ + [ + "bigger", + "decrease", + "enlarge", + "increase", + "larger", + "resize", + "shape", + "short", + "shrink", + "size", + "skinny", + "smaller", + "taller", + "thin", + "too", + "wider", + "width" + ], + [ + "memory", + "virtualmemory", + "pagefile", + "file" + ] + ] + }, + { + "Name": "Join a domain", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\SystemPropertiesComputerName.exe", + "Keywords": [ + [ + "connect", + "to", + "enter", + "join", + "plug", + "into" + ], + [ + "domain", + "domian" + ], + [ + "server" + ] + ] + }, + { + "Name": "Rename this computer", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\SystemPropertiesComputerName.exe", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "laptop", + "compuer", + "machine", + "my", + "computer", + "pc", + "personal", + "system" + ], + [ + "names", + "rename", + "renaming" + ] + ] + }, + { + "Name": "Create a recovery drive", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\RecoveryDrive.exe", + "Keywords": [ + [ + "add", + "create", + "make", + "new" + ], + [ + "disk", + "drive", + "harddisk", + "hard-disk", + "harddrive", + "hard-drive" + ], + [ + "re-instate", + "re-set", + "recovery", + "recover", + "reinstall", + "factory", + "re-image", + "reimage", + "re-install", + "repair", + "restore", + "reinstate", + "reset", + "wipe", + "rollback", + "fix", + "troubleshoot", + "pc", + "refresh", + "erase", + "format" + ] + ] + }, + { + "Name": "See the name of this computer", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.System", + "Keywords": [ + [ + "names", + "rename", + "renaming" + ], + [ + "laptop", + "compuer", + "machine", + "my", + "computer", + "pc", + "personal", + "system" + ], + [ + "check", + "list", + "see", + "show", + "viewing" + ] + ] + }, + { + "Name": "Select users who can use remote desktop", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\SystemPropertiesRemote.exe", + "Keywords": [ + [ + "accounts", + "alias", + "login", + "useraccount", + "useracount", + "users" + ], + [ + "allowed", + "let", + "through", + "permitted" + ], + [ + "access", + "permissions", + "priveleges", + "priviledges", + "privileges", + "rights" + ], + [ + "access", + "control", + "RAS", + "acess", + "assistance", + "desktop", + "remotely", + "terminal", + "services", + "ts" + ], + [ + "top", + "remote", + "desktop" + ] + ] + }, + { + "Name": "Show how much RAM is on this computer", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.System", + "Keywords": [ + [ + "laptop", + "compuer", + "machine", + "my", + "computer", + "pc", + "personal", + "system" + ], + [ + "amount", + "of", + "many", + "much", + "howmuch" + ], + [ + "gigabytes", + "gigs", + "megabytes", + "megs", + "memory", + "ram" + ], + [ + "automatically", + "autoshow", + "auto-show", + "make", + "visible", + "see", + "show", + "unlock", + "view" + ], + [ + "check", + "list", + "see", + "show", + "viewing" + ] + ] + }, + { + "Name": "Show which domain your computer is on", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.System", + "Keywords": [ + [ + "domain", + "domian" + ], + [ + "automatically", + "autoshow", + "auto-show", + "make", + "visible", + "see", + "show", + "unlock", + "view" + ], + [ + "check", + "list", + "see", + "show", + "viewing" + ] + ] + }, + { + "Name": "Show which operating system your computer is running", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.System", + "Keywords": [ + [ + "laptop", + "compuer", + "machine", + "my", + "computer", + "pc", + "personal", + "system" + ], + [ + "operating", + "system", + "os" + ], + [ + "release", + "version", + "edition" + ], + [ + "what", + "which" + ] + ] + }, + { + "Name": "Show which workgroup this computer is on", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.System", + "Keywords": [ + [ + "group", + "workgroup" + ], + [ + "automatically", + "autoshow", + "auto-show", + "make", + "visible", + "see", + "show", + "unlock", + "view" + ], + [ + "check", + "list", + "see", + "show", + "viewing" + ] + ] + }, + { + "Name": "View advanced system settings", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\SystemPropertiesAdvanced.exe", + "Keywords": [ + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ], + [ + "laptop", + "compuer", + "machine", + "my", + "computer", + "pc", + "personal", + "system" + ] + ] + }, + { + "Name": "View basic information about your computer", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.System", + "Keywords": [ + [ + "laptop", + "compuer", + "machine", + "my", + "computer", + "pc", + "personal", + "system" + ], + [ + "gigabytes", + "gigs", + "megabytes", + "megs", + "memory", + "ram" + ], + [ + "automatically", + "autoshow", + "auto-show", + "make", + "visible", + "see", + "show", + "unlock", + "view" + ], + [ + "check", + "list", + "see", + "show", + "viewing" + ] + ] + }, + { + "Name": "Task Manager", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\taskmgr.exe /6", + "Keywords": [ + [ + "proceses", + "processes" + ], + [ + "task manager", + "mgr", + "manager", + "taskmgr", + "view", + "task", + "application", + "taskman", + "end task", + "close" + ] + ] + }, + { + "Name": "View system resource usage in Task Manager", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\taskmgr.exe /6", + "Keywords": [ + [ + "disk", + "drive", + "harddisk", + "hard-disk", + "harddrive", + "hard-drive" + ], + [ + "network", + "connections", + "netwerk", + "conection" + ], + [ + "486", + "agp", + "amd", + "bus", + "chip", + "clock", + "cpu", + "fast", + "intel", + "overclock", + "pentium", + "performance", + "processing", + "processor", + "ram", + "up", + "speedup" + ], + [ + "memory", + "virtualmemory", + "pagefile", + "file" + ] + ] + }, + { + "Name": "See which processes start up automatically when you start Windows", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\taskmgr.exe /6 /Startup", + "Keywords": [ + [ + "start-up", + "items", + "up", + "startup", + "programs" + ] + ] + }, + { + "Name": "Auto-hide the taskbar", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Taskbar", + "Keywords": [ + [ + "flicks", + "gestures", + "flik", + "filcks", + "penflick" + ], + [ + "autohide", + "auto-hide", + "automatically", + "hide", + "make", + "invisible" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ], + [ + "automatically", + "autoshow", + "auto-show", + "make", + "visible", + "see", + "show", + "unlock", + "view" + ], + [ + "icons", + "area", + "sgtray.exe", + "start", + "tray", + "systemtray", + "systray", + "task", + "toolbar", + "tray", + "taskbar", + "task-bar", + "bars", + "toolbars" + ], + [ + "notifications", + "notifying", + "notified" + ] + ] + }, + { + "Name": "Navigation properties", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Options_RunDLL 8", + "Keywords": [ + [ + "customising", + "customisation", + "customises", + "customization", + "customizes", + "customizing", + "personalisation", + "personalise", + "personalization", + "personalize" + ], + [ + "sign-in", + "applications view", + "navigation", + "desktop", + "mouse", + "start", + "corner", + "corners", + "background", + "windows logo key", + "windows key", + "win", + "winkey", + "sign in", + "signin", + "apps view", + "boot", + "to", + "charm", + "charms", + "powershell", + "command prompt" + ] + ] + }, + { + "Name": "Customise the taskbar", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Taskbar", + "Keywords": [ + [ + "customising", + "customisation", + "customises", + "customization", + "customizes", + "customizing", + "personalisation", + "personalise", + "personalization", + "personalize" + ], + [ + "icons", + "area", + "sgtray.exe", + "start", + "tray", + "systemtray", + "systray", + "task", + "toolbar", + "tray", + "taskbar", + "task-bar", + "bars", + "toolbars" + ], + [ + "notifications", + "notifying", + "notified" + ] + ] + }, + { + "Name": "Group similar windows on the taskbar", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Taskbar", + "Keywords": [ + [ + "grouping" + ], + [ + "icons", + "area", + "sgtray.exe", + "start", + "tray", + "systemtray", + "systray", + "task", + "toolbar", + "tray", + "taskbar", + "task-bar", + "bars", + "toolbars" + ], + [ + "vista", + "windows", + "windw", + "7" + ], + [ + "notifications", + "notifying", + "notified" + ] + ] + }, + { + "Name": "Lock or unlock the taskbar", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Taskbar", + "Keywords": [ + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "deactivate", + "cancel", + "deactivates", + "delete", + "deleting", + "disable", + "disallow", + "exit", + "get", + "rid", + "of", + "prevent", + "remove", + "removing", + "shut", + "down", + "off", + "stop", + "turn", + "turnoff" + ], + [ + "icons", + "area", + "sgtray.exe", + "start", + "tray", + "systemtray", + "systray", + "task", + "toolbar", + "tray", + "taskbar", + "task-bar", + "bars", + "toolbars" + ], + [ + "release", + "version", + "edition" + ], + [ + "what", + "which" + ], + [ + "notifications", + "notifying", + "notified" + ] + ] + }, + { + "Name": "What's happened to the Quick Launch toolbar?", + "Area": null, + "Type": "TaskLink", + "Command": "mshelp://windows/?id=329cf1bc-0f32-41ba-b717-362880a7f6df", + "Keywords": [ + [ + "icons", + "area", + "sgtray.exe", + "start", + "tray", + "systemtray", + "systray", + "task", + "toolbar", + "tray", + "taskbar", + "task-bar", + "bars", + "toolbars" + ], + [ + "launch", + "quicklaunch", + "quiklaunch", + "tray", + "taskbar", + "task-bar", + "bars", + "toolbars", + "pin" + ], + [ + "notifications", + "notifying", + "notified" + ] + ] + }, + { + "Name": "Add or remove user accounts", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.UserAccounts /page pageAdminTasks", + "Keywords": [ + [ + "accounts", + "alias", + "login", + "useraccount", + "useracount", + "users" + ], + [ + "added", + "adding", + "addon", + "add-on", + "adds" + ], + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "deactivate", + "cancel", + "deactivates", + "delete", + "deleting", + "disable", + "disallow", + "exit", + "get", + "rid", + "of", + "prevent", + "remove", + "removing", + "shut", + "down", + "off", + "stop", + "turn", + "turnoff" + ], + [ + "users" + ] + ] + }, + { + "Name": "Change account type", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\netplwiz.exe", + "Keywords": [ + [ + "accounts", + "alias", + "login", + "useraccount", + "useracount", + "users" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "add", + "create", + "make", + "new" + ], + [ + "names", + "rename", + "renaming" + ], + [ + "users" + ] + ] + }, + { + "Name": "Change account type", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.UserAccounts /page pageAdminTasks", + "Keywords": [ + [ + "accounts", + "alias", + "login", + "useraccount", + "useracount", + "users" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "add", + "create", + "make", + "new" + ], + [ + "names", + "rename", + "renaming" + ], + [ + "users" + ] + ] + }, + { + "Name": "Create a password reset disk", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe keymgr.dll,PRShowSaveWizardExW", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "add", + "create", + "make", + "new" + ], + [ + "disc", + "disks", + "drive" + ], + [ + "can't", + "remember", + "don't", + "forget", + "forgotten", + "lost" + ], + [ + "word", + "pass-word", + "passwords", + "passwork", + "passwrod", + "pasword", + "paswrod" + ] + ] + }, + { + "Name": "Create an account", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.UserAccounts /page pageAdminTasks", + "Keywords": [ + [ + "accounts", + "alias", + "login", + "useraccount", + "useracount", + "users" + ], + [ + "add", + "create", + "make", + "new" + ] + ] + }, + { + "Name": "Create standard user account", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.UserAccounts /page pageAdminTasks", + "Keywords": [ + [ + "accounts", + "alias", + "login", + "useraccount", + "useracount", + "users" + ], + [ + "add", + "create", + "make", + "new" + ], + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ] + ] + }, + { + "Name": "Edit local users and groups", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\mmc.exe %windir%\\system32\\lusrmgr.msc", + "Keywords": [ + [ + "accounts", + "alias", + "login", + "useraccount", + "useracount", + "users" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ] + ] + }, + { + "Name": "Give administrative rights to a domain user", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\netplwiz.exe", + "Keywords": [ + [ + "accounts", + "alias", + "login", + "useraccount", + "useracount", + "users" + ], + [ + "administrator", + "admins" + ], + [ + "allowed", + "let", + "through", + "permitted" + ], + [ + "add", + "create", + "make", + "new" + ], + [ + "domain", + "domian" + ], + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "access", + "permissions", + "priveleges", + "priviledges", + "privileges", + "rights" + ] + ] + }, + { + "Name": "Give other users access to this computer", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\netplwiz.exe", + "Keywords": [ + [ + "accounts", + "alias", + "login", + "useraccount", + "useracount", + "users" + ], + [ + "laptop", + "compuer", + "machine", + "my", + "computer", + "pc", + "personal", + "system" + ], + [ + "add", + "create", + "make", + "new" + ], + [ + "access", + "permissions", + "priveleges", + "priviledges", + "privileges", + "rights" + ] + ] + }, + { + "Name": "How to change your Windows password", + "Area": null, + "Type": "TaskLink", + "Command": "mshelp://windows/?id=5c07e067-286d-4b8d-b342-431306e696aa", + "Keywords": [ + [ + "accounts", + "alias", + "login", + "useraccount", + "useracount", + "users" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "add", + "create", + "make", + "new" + ], + [ + "names", + "rename", + "renaming" + ], + [ + "word", + "pass-word", + "passwords", + "passwork", + "passwrod", + "pasword", + "paswrod" + ] + ] + }, + { + "Name": "Make changes to accounts", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.UserAccounts /page pageAdminTasks", + "Keywords": [ + [ + "accounts", + "alias", + "login", + "useraccount", + "useracount", + "users" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "access", + "permissions", + "priveleges", + "priviledges", + "privileges", + "rights" + ] + ] + }, + { + "Name": "Manage file encryption certificates", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rekeywiz.exe", + "Keywords": [ + [ + "certificates", + "keys", + "signatures", + "signed" + ], + [ + "guard", + "protect", + "secure", + "preserve" + ], + [ + "files" + ], + [ + "administer", + "configure", + "managed", + "manages", + "managing", + "up", + "setup" + ] + ] + }, + { + "Name": "Manage user certificates", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\mmc.exe %windir%\\system32\\certmgr.msc", + "Keywords": [ + [ + "certificate", + "key" + ] + ] + }, + { + "Name": "Manage network passwords", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.CredentialManager /page ?SelectedVault=CredmanVault", + "Keywords": [ + [ + "administer", + "configure", + "managed", + "manages", + "managing", + "up", + "setup" + ], + [ + "connections", + "go", + "online", + "intranet", + "lan", + "netowrk", + "networking", + "line", + "on-line", + "www" + ], + [ + "word", + "pass-word", + "passwords", + "passwork", + "passwrod", + "pasword", + "paswrod" + ], + [ + "restricted", + "safety", + "secure", + "securing", + "security", + "sites", + "trusted", + "trusting" + ] + ] + }, + { + "Name": "Reset Security Policies", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.UserAccounts", + "Keywords": [ + [ + "policies", + "policys" + ], + [ + "Reset", + "Security", + "Exchange", + "ActiveSync" + ] + ] + }, + { + "Name": "Allow an app through Windows Firewall", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.WindowsFirewall /page PageConfigureApps", + "Keywords": [ + [ + "allowed", + "let", + "through", + "permitted" + ], + [ + "ecxeption", + "exception", + "exeption" + ], + [ + "virus", + "builtin", + "built-in", + "fire-wall", + "firewalled", + "firwall", + "frewall", + "ifc", + "protection", + "walled" + ], + [ + "from", + "the", + "web", + "inet", + "internet", + "intrnet", + "net", + "online", + "on-line", + "sites", + "pages", + "webpages", + "websites", + "world", + "wide", + "www" + ], + [ + "file", + "applets", + "applications", + "apps", + "aps", + "files", + "programmes", + "programs", + "softare", + "softwares", + "sofware", + "sotfware", + "windos", + "windows" + ], + [ + "restricted", + "safety", + "secure", + "securing", + "security", + "sites", + "trusted", + "trusting" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Check firewall status", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.WindowsFirewall", + "Keywords": [ + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "virus", + "builtin", + "built-in", + "fire-wall", + "firewalled", + "firwall", + "frewall", + "ifc", + "protection", + "walled" + ], + [ + "from", + "the", + "web", + "inet", + "internet", + "intrnet", + "net", + "online", + "on-line", + "sites", + "pages", + "webpages", + "websites", + "world", + "wide", + "www" + ], + [ + "deactivate", + "cancel", + "deactivates", + "delete", + "deleting", + "disable", + "disallow", + "exit", + "get", + "rid", + "of", + "prevent", + "remove", + "removing", + "shut", + "down", + "off", + "stop", + "turn", + "turnoff" + ], + [ + "restricted", + "safety", + "secure", + "securing", + "security", + "sites", + "trusted", + "trusting" + ] + ] + }, + { + "Name": "Manage BitLocker", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.BitLockerDriveEncryption", + "Keywords": [ + [ + "laptop", + "compuer", + "machine", + "my", + "computer", + "pc", + "personal", + "system" + ], + [ + "disc", + "disks", + "drive" + ], + [ + "locker", + "bitlocker", + "cryptology", + "decrypt", + "encode", + "encryption", + "device encryption" + ], + [ + "disk", + "drive", + "harddisk", + "hard-disk", + "harddrive", + "hard-drive" + ], + [ + "guard", + "protect", + "secure", + "preserve" + ], + [ + "restricted", + "safety", + "secure", + "securing", + "security", + "sites", + "trusted", + "trusting" + ], + [ + "devices", + "divises", + "divicse", + "divices" + ] + ] + }, + { + "Name": "Back up your recovery key", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.BitLockerDriveEncryption", + "Keywords": [ + [ + "laptop", + "compuer", + "machine", + "my", + "computer", + "pc", + "personal", + "system" + ], + [ + "disc", + "disks", + "drive" + ], + [ + "locker", + "bitlocker", + "cryptology", + "decrypt", + "encode", + "encryption", + "device encryption" + ], + [ + "disk", + "drive", + "harddisk", + "hard-disk", + "harddrive", + "hard-drive" + ], + [ + "guard", + "protect", + "secure", + "preserve" + ], + [ + "restricted", + "safety", + "secure", + "securing", + "security", + "sites", + "trusted", + "trusting" + ], + [ + "devices", + "divises", + "divicse", + "divices" + ] + ] + }, + { + "Name": "Manage Storage Spaces", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.StorageSpaces", + "Keywords": [ + [ + "disk", + "drive", + "harddisk", + "hard-disk", + "harddrive", + "hard-drive" + ], + [ + "data", + "recovering", + "recovers", + "recovery" + ], + [ + "disc", + "disks", + "drive" + ], + [ + "storage" + ], + [ + "spaces", + "storage-spaces", + "mirror", + "mirror-space", + "resilient", + "resilient-space" + ] + ] + }, + { + "Name": "Manage Work Folders", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.WorkFolders", + "Keywords": [ + [ + "files" + ], + [ + "line", + "offline", + "off-line", + "ofline" + ], + [ + "folders", + "subfolders" + ], + [ + "sync-centre", + "synchronise", + "work", + "work-folders", + "work-files", + "company-folders", + "company-files", + "sync-center", + "synchronize" + ] + ] + }, + { + "Name": "Set flicks to perform certain tasks", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL TabletPC.cpl @0,flicks", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "devices", + "divises", + "divicse", + "divices" + ], + [ + "flicks", + "gestures", + "flik", + "filcks", + "penflick" + ], + [ + "hand-writing", + "handwriting", + "write", + "pen", + "stylus", + "handrighting", + "hand-righting", + "penmanship", + "calligraphy" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Change tablet pen settings", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL TabletPC.cpl @0,pen", + "Keywords": [ + [ + "devices", + "divises", + "divicse", + "divices" + ], + [ + "hand-writing", + "handwriting", + "write", + "pen", + "stylus", + "handrighting", + "hand-righting", + "penmanship", + "calligraphy" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Turn flicks on or off", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL TabletPC.cpl @0,flicks", + "Keywords": [ + [ + "devices", + "divises", + "divicse", + "divices" + ], + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "flicks", + "gestures", + "flik", + "filcks", + "penflick" + ], + [ + "hand-writing", + "handwriting", + "write", + "pen", + "stylus", + "handrighting", + "hand-righting", + "penmanship", + "calligraphy" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Change touch input settings", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL TabletPC.cpl @0,touch", + "Keywords": [ + [ + "devices", + "divises", + "divicse", + "divices" + ], + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "touch", + "pointer", + "finger", + "pointing", + "cursor", + "mouse" + ], + [ + "touch" + ] + ] + }, + { + "Name": "Change multi-touch gesture settings", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL TabletPC.cpl @0,touch", + "Keywords": [ + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "devices", + "divises", + "divicse", + "divices" + ], + [ + "touch", + "pointer", + "finger", + "pointing", + "cursor", + "mouse" + ], + [ + "touch" + ] + ] + }, + { + "Name": "Calibrate the screen for pen or touch input", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL TabletPC.cpl @1,general", + "Keywords": [ + [ + "accuracy", + "accurately", + "precise", + "precision", + "correct", + "mistakes" + ], + [ + "calibrate", + "calibration" + ], + [ + "monitors", + "screens" + ], + [ + "crt", + "displays", + "monitors", + "screeens", + "screens" + ], + [ + "pen" + ], + [ + "touch" + ] + ] + }, + { + "Name": "Choose the order of how your screen rotates", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL TabletPC.cpl @1,display", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "monitors", + "screens" + ], + [ + "angle", + "landscape", + "orientation", + "portrait", + "rotate", + "rotation" + ], + [ + "crt", + "displays", + "monitors", + "screeens", + "screens" + ] + ] + }, + { + "Name": "Set tablet buttons to perform certain tasks", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL TabletPC.cpl @1,buttons", + "Keywords": [ + [ + "butons", + "buttons" + ], + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "customising", + "customisation", + "customises", + "customization", + "customizes", + "customizing", + "personalisation", + "personalise", + "personalization", + "personalize" + ], + [ + "tablets", + "pc" + ] + ] + }, + { + "Name": "Specify which hand you write with", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL TabletPC.cpl @1,other", + "Keywords": [ + [ + "hand-writing", + "handwriting", + "write", + "pen", + "stylus", + "handrighting", + "hand-righting", + "penmanship", + "calligraphy" + ], + [ + "flip", + "handed", + "hander", + "left-handed", + "left-hander", + "lefty", + "reverse", + "handed", + "right-handed", + "switch" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Send or receive a file", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\rundll32.exe shell32.dll,Control_RunDLL irprops.cpl", + "Keywords": [ + [ + "infrared", + "infra-red", + "wireless" + ], + [ + "beam", + "send", + "transmit" + ] + ] + }, + { + "Name": "Change Windows SideShow-compatible device settings", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.WindowsSideShow /page pageChangeSettingsDeviceSelector", + "Keywords": [ + [ + "devices", + "divises", + "divicse", + "divices" + ], + [ + "ware", + "hardware-general" + ], + [ + "side-show", + "auxiliary", + "display", + "show", + "sideshow" + ], + [ + "change", + "settings" + ], + [ + "gadgets", + "widgets" + ] + ] + }, + { + "Name": "Change the order of Windows SideShow gadgets", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.WindowsSideShow /page pageReorderGadgetsDeviceSelector", + "Keywords": [ + [ + "devices", + "divises", + "divicse", + "divices" + ], + [ + "gadgets", + "widgets" + ], + [ + "organise", + "organising", + "arrange", + "arranging", + "ordering", + "organize", + "organizing", + "reorder" + ], + [ + "side-show", + "auxiliary", + "display", + "show", + "sideshow" + ], + [ + "alphabetise", + "alphabetize", + "order", + "sorting" + ] + ] + }, + { + "Name": "Change Windows SideShow settings", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.WindowsSideShow", + "Keywords": [ + [ + "devices", + "divises", + "divicse", + "divices" + ], + [ + "gadgets", + "widgets" + ], + [ + "deactivate", + "cancel", + "deactivates", + "delete", + "deleting", + "disable", + "disallow", + "exit", + "get", + "rid", + "of", + "prevent", + "remove", + "removing", + "shut", + "down", + "off", + "stop", + "turn", + "turnoff" + ], + [ + "side-show", + "auxiliary", + "display", + "show", + "sideshow" + ] + ] + }, + { + "Name": "Change PC wake-up settings", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.WindowsSideShow /page pageAutoWake", + "Keywords": [ + [ + "automated", + "automatically" + ], + [ + "laptop", + "compuer", + "machine", + "my", + "computer", + "pc", + "personal", + "system" + ], + [ + "side-show", + "auxiliary", + "display", + "show", + "sideshow" + ], + [ + "auto", + "out", + "period", + "timeout", + "timer", + "timing" + ], + [ + "asleep", + "autowake", + "awaken", + "come", + "back", + "from", + "hibernates", + "hibernating", + "hibernation", + "restarts", + "resumes", + "sleeping", + "standby", + "up", + "wakeup", + "wake-up", + "waking" + ] + ] + }, + { + "Name": "Calibrate display colour", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\dccw.exe", + "Keywords": [ + [ + "adjust", + "ajust", + "alter", + "change", + "edit", + "modify", + "replace", + "reset", + "set", + "switch" + ], + [ + "crt", + "displays", + "monitors", + "screeens", + "screens" + ], + [ + "adapters", + "adaptor", + "cards" + ], + [ + "calibrate", + "calibration" + ], + [ + "brightness", + "contrast", + "hi-contrast", + "high-contrast" + ], + [ + "troubleshooting", + "history", + "problem" + ] + ] + }, + { + "Name": "Adjust ClearType text", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\cttune.exe", + "Keywords": [ + [ + "faunt", + "fonts", + "type", + "truetype", + "type", + "opentype", + "fount" + ], + [ + "dots", + "per", + "inch", + "dpi", + "pixels", + "high" + ], + [ + "pixels", + "reslution", + "resoltion", + "resolution", + "resolutoin", + "rezolution", + "size" + ], + [ + "wizard", + "wizzard" + ], + [ + "personalise", + "personalisation", + "personalize", + "personalization" + ], + [ + "type", + "cleartype", + "tuning", + "tuner", + "settings", + "contrast", + "gamma", + "text", + "aliasing", + "anti-aliasing", + "filtering", + "blurry", + "fuzzy" + ], + [ + "typography", + "reading", + "readability", + "easier", + "to", + "easy", + "font", + "clarity", + "color", + "colour", + "enable", + "cleartype", + "tweak", + "typeface", + "text", + "size", + "ppi", + "legible", + "legibility" + ] + ] + }, + { + "Name": "Connect to a network", + "Area": null, + "Type": "TaskLink", + "Command": "ms-availablenetworks:", + "Keywords": [ + [ + "connect", + "to", + "enter", + "join", + "plug", + "into" + ], + [ + "from", + "the", + "web", + "inet", + "internet", + "intrnet", + "net", + "online", + "on-line", + "sites", + "pages", + "webpages", + "websites", + "world", + "wide", + "www" + ], + [ + "connections", + "go", + "online", + "intranet", + "lan", + "netowrk", + "networking", + "line", + "on-line", + "www" + ], + [ + "802.1x", + "wireless", + "wire-less" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ], + [ + "wireless", + "LAN", + "wifi", + "Wi-Fi", + "WLAN" + ], + [ + "aeroplane", + "all", + "wireless", + "on", + "off", + "plane", + "flight", + "radio", + "airplane", + "connection" + ], + [ + "DA", + "direct", + "access", + "directaccess" + ], + [ + "mobile phone", + "provider", + "mobile", + "broadband", + "2G", + "2.5G", + "3G", + "3.5G", + "4G", + "LTE", + "CDMA", + "GSM", + "wireless", + "cellphone", + "mbb", + "telco", + "carrier" + ] + ] + }, + { + "Name": "Set up a connection or network", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\xwizard.exe RunWizard {7071ECE0-663B-4bc1-A1FA-B97F3B917C55}", + "Keywords": [ + [ + "tooth", + "bluetooth", + "blutooth" + ], + [ + "connect", + "to", + "enter", + "join", + "plug", + "into" + ], + [ + "infrared", + "infra-red", + "wireless" + ], + [ + "connections", + "go", + "online", + "intranet", + "lan", + "netowrk", + "networking", + "line", + "on-line", + "www" + ], + [ + "802.1x", + "wireless", + "wire-less" + ] + ] + }, + { + "Name": "Identify and repair network problems", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\Rundll32.exe ndfapi,NdfRunDllDiagnoseIncident", + "Keywords": [ + [ + "broken", + "doesn't", + "not", + "working", + "problems", + "won't" + ], + [ + "diagnose", + "diagnostics", + "diagnosis", + "find", + "problems", + "analyse", + "analyze", + "analysis", + "troubleshooter", + "errors" + ], + [ + "from", + "the", + "web", + "inet", + "internet", + "intrnet", + "net", + "online", + "on-line", + "sites", + "pages", + "webpages", + "websites", + "world", + "wide", + "www" + ], + [ + "connections", + "go", + "online", + "intranet", + "lan", + "netowrk", + "networking", + "line", + "on-line", + "www" + ], + [ + "corrects", + "fixes", + "repairs" + ], + [ + "internet", + "wireless", + "ethernet", + "packet", + "dhcp", + "tcp/ip", + "protocol", + "nic", + "cable", + "certificate" + ], + [ + "wireless", + "LAN", + "wifi", + "Wi-Fi", + "WLAN" + ] + ] + }, + { + "Name": "Manage advanced sharing settings", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.NetworkAndSharingCenter /page Advanced", + "Keywords": [ + [ + "sharing", + "shared", + "files", + "network", + "folder", + "target" + ] + ] + }, + { + "Name": "Set up a dial-up connection", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\xwizard.exe RunWizard {7071EC71-663B-4bc1-A1FA-B97F3B917C55}", + "Keywords": [ + [ + "area", + "code", + "carrier", + "city", + "up", + "dialing", + "dialling", + "dialup", + "dial-up", + "pulse", + "tone", + "touchtone", + "touch-tone" + ], + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "modem" + ], + [ + "connections", + "go", + "online", + "intranet", + "lan", + "netowrk", + "networking", + "line", + "on-line", + "www" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "Set up a virtual private network (VPN) connection", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\xwizard.exe RunWizard {7071EC75-663B-4bc1-A1FA-B97F3B917C55}", + "Keywords": [ + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "connections", + "go", + "online", + "intranet", + "lan", + "netowrk", + "networking", + "line", + "on-line", + "www" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ], + [ + "virtual", + "private", + "network", + "vpn", + "workplace" + ] + ] + }, + { + "Name": "Set up a broadband connection", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\xwizard.exe RunWizard {C03E8585-781E-49a1-8190-CE902D0B2CE7}", + "Keywords": [ + [ + "pppoe", + "broadband" + ], + [ + "add", + "create", + "make", + "new" + ], + [ + "connections", + "go", + "online", + "intranet", + "lan", + "netowrk", + "networking", + "line", + "on-line", + "www" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ] + ] + }, + { + "Name": "View network computers and devices", + "Area": null, + "Type": "TaskLink", + "Command": "shell:::{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}", + "Keywords": [ + [ + "adapters", + "adaptor", + "cards" + ], + [ + "devices", + "divises", + "divicse", + "divices" + ], + [ + "connections", + "go", + "online", + "intranet", + "lan", + "netowrk", + "networking", + "line", + "on-line", + "www" + ], + [ + "check", + "list", + "see", + "show", + "viewing" + ] + ] + }, + { + "Name": "View network connections", + "Area": null, + "Type": "TaskLink", + "Command": "shell:::{26EE0668-A00A-44D7-9371-BEB064C98683}\\3\\::{7007ACC7-3202-11D1-AAD2-00805FC1270E}", + "Keywords": [ + [ + "adapters", + "adaptor", + "cards" + ], + [ + "internet", + "protocol", + "ip", + "addresses", + "v6", + "version", + "6", + "IP6", + "IPv6", + "tcp/ip", + "tcp\\ip", + "tcpip" + ], + [ + "connections", + "go", + "online", + "intranet", + "lan", + "netowrk", + "networking", + "line", + "on-line", + "www" + ], + [ + "check", + "list", + "see", + "show", + "viewing" + ], + [ + "internet", + "wireless", + "ethernet", + "packet", + "dhcp", + "tcp/ip", + "protocol", + "nic", + "cable", + "certificate" + ], + [ + "virtual", + "private", + "network", + "vpn", + "workplace" + ] + ] + }, + { + "Name": "View network status and tasks", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.NetworkAndSharingCenter", + "Keywords": [ + [ + "connections", + "go", + "online", + "intranet", + "lan", + "netowrk", + "networking", + "line", + "on-line", + "www" + ], + [ + "automatically", + "autoshow", + "auto-show", + "make", + "visible", + "see", + "show", + "unlock", + "view" + ], + [ + "condition", + "running", + "state", + "status" + ], + [ + "check", + "list", + "see", + "show", + "viewing" + ], + [ + "locations", + "networks" + ] + ] + }, + { + "Name": "Media streaming options", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.NetworkAndSharingCenter /page ShareMedia", + "Keywords": [ + [ + "devices", + "divises", + "divicse", + "divices" + ], + [ + "sharing", + "shared", + "files", + "network", + "folder", + "target" + ], + [ + "stream", + "media", + "library", + "options", + "with", + "to", + "mediasharing", + "mediastreaming", + "sharemedia", + "internetsharing" + ] + ] + }, + { + "Name": "Access RemoteApp and desktops", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\xwizard.exe RunWizard {7940ACF8-60BA-4213-A7C3-F3B400EE266D}", + "Keywords": [ + [ + "activate", + "add", + "begin", + "enable", + "intsall", + "invoke", + "make", + "up", + "setting", + "setup", + "start", + "on", + "turnon", + "unlock" + ], + [ + "set-up", + "confg", + "configuration", + "configure", + "define", + "management", + "options", + "personalise", + "personalize", + "up", + "settings", + "setup" + ], + [ + "RemoteApp", + "Desktop", + "RemoteDesktop", + "Connection", + "work" + ] + ] + }, + { + "Name": "Find and fix problems", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Troubleshooting", + "Keywords": [ + [ + "troubleshoot", + "shoot", + "troubleshooter", + "trubleshoot", + "help", + "solution" + ], + [ + "diagnose", + "diagnostics", + "diagnosis", + "find", + "problems", + "analyse", + "analyze", + "analysis", + "troubleshooter", + "errors" + ] + ] + }, + { + "Name": "Find and fix problems", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Troubleshooting", + "Keywords": [ + [ + "troubleshoot", + "shoot", + "troubleshooter", + "trubleshoot", + "help", + "solution" + ], + [ + "diagnose", + "diagnostics", + "diagnosis", + "find", + "problems", + "analyse", + "analyze", + "analysis", + "troubleshooter", + "errors" + ] + ] + }, + { + "Name": "Find and fix audio playback problems", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\msdt.exe -id AudioPlaybackDiagnostic -ep ControlPanelSearch", + "Keywords": [ + [ + "Playing", + "sound", + "volume", + "audible", + "speaker", + "headphone", + "stereo", + "listen", + "hear", + "output", + "MP3", + "player" + ] + ] + }, + { + "Name": "Find and fix audio recording problems", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\msdt.exe -id AudioRecordingDiagnostic -ep ControlPanelSearch", + "Keywords": [ + [ + "Capture", + "sample", + "mix", + "level", + "input", + "sound", + "audible", + "volume", + "stereo", + "tape", + "microphone", + "mike" + ] + ] + }, + { + "Name": "Perform recommended maintenance tasks automatically", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\msdt.exe -id MaintenanceDiagnostic -ep ControlPanelSearch", + "Keywords": [ + [ + "optimise", + "maintain", + "defrag", + "optimize", + "performance" + ], + [ + "operating", + "system", + "os" + ] + ] + }, + { + "Name": "Find and fix networking and connection problems", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\msdt.exe -id NetworkDiagnosticsWeb -ep ControlPanelSearch", + "Keywords": [ + [ + "sharing", + "shared", + "files", + "network", + "folder", + "target" + ], + [ + "internet", + "wireless", + "ethernet", + "packet", + "dhcp", + "tcp/ip", + "protocol", + "nic", + "cable", + "certificate" + ], + [ + "wireless", + "LAN", + "wifi", + "Wi-Fi", + "WLAN" + ] + ] + }, + { + "Name": "Find and fix printing problems", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\msdt.exe -id PrinterDiagnostic -ep ControlPanelSearch", + "Keywords": [ + [ + "print", + "paper", + "ink", + "toner", + "laser", + "bubble", + "jet", + "cartridge" + ], + [ + "out", + "printers", + "printing", + "printner", + "printout", + "print-out", + "pritner" + ] + ] + }, + { + "Name": "Troubleshooting History", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.Troubleshooting /page HistoryPage", + "Keywords": [ + [ + "troubleshooting", + "history", + "problem" + ] + ] + }, + { + "Name": "Find and fix problems with Windows Search", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\msdt.exe -id SearchDiagnostic -ep ControlPanelSearch", + "Keywords": [ + [ + "finder", + "indexing", + "reindex", + "re-index", + "searches", + "searching" + ] + ] + }, + { + "Name": "Record steps to reproduce a problem", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\psr.exe", + "Keywords": [ + [ + "recorder", + "screen", + "problem", + "capture", + "snipping", + "psr" + ], + [ + "reproduce" + ] + ] + }, + { + "Name": "Find and fix keyboard problems", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\msdt.exe -id KeyboardDiagnostic -ep ControlPanelSearch", + "Keywords": [ + [ + "input method editor", + "asian input", + "japanese input", + "ime", + "keyboard", + "input" + ] + ] + }, + { + "Name": "Find and fix bluescreen problems", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\msdt.exe -id BlueScreenDiagnostic -ep CortanaBluescreenSearch", + "Keywords": [ + [ + "blueScreen", + "bluescreen issues", + "bluescreen", + "bad driver", + "drivers", + "blue screen", + "bug check" + ] + ] + }, + { + "Name": "Find and fix windows update problems", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\msdt.exe -id windowsupdatediagnostic -ep CortanaWUSearch", + "Keywords": [ + [ + "Can't install update", + "Windows Update", + "Cannot update", + "issues with Windows Update", + "Windows Update Issues", + "WU", + "Update fails", + "Cant install update", + "Windows update error", + "WU error" + ] + ] + }, + { + "Name": "Change location settings", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.LocationSettings", + "Keywords": [ + [ + "private", + "privacy", + "secrecy" + ], + [ + "by", + "defaults", + "defualt", + "standard" + ], + [ + "devices", + "divises", + "divicse", + "divices" + ], + [ + "finding", + "locate", + "locating", + "search", + "for", + "is", + "where's", + "the" + ], + [ + "sensors", + "senser" + ], + [ + "gps", + "global", + "positioning", + "systems" + ], + [ + "ambient", + "lighting", + "changes" + ], + [ + "personal", + "information", + "persenal", + "private", + "informatien" + ], + [ + "place", + "position", + "positian", + "new" + ], + [ + "network", + "connections", + "netwerk", + "conection" + ], + [ + "sensor", + "definition", + "what", + "is", + "a" + ], + [ + "movement", + "movment", + "movemnet", + "motion" + ], + [ + "detection", + "detecting", + "changes" + ], + [ + "drop" + ], + [ + "locations", + "change", + "another" + ], + [ + "default", + "defualt", + "location" + ], + [ + "geographic", + "locations", + "geografic", + "geografic", + "geografik" + ], + [ + "latitude", + "laditude", + "longitude", + "longetude" + ], + [ + "address", + "adress" + ], + [ + "region", + "country", + "contry" + ], + [ + "city" + ], + [ + "orientation", + "orientatien", + "orientation", + "orientatian" + ], + [ + "state" + ] + ] + }, + { + "Name": "Manage Web Credentials", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.CredentialManager", + "Keywords": [ + [ + "administer", + "configure", + "managed", + "manages", + "managing", + "up", + "setup" + ], + [ + "connections", + "go", + "online", + "intranet", + "lan", + "netowrk", + "networking", + "line", + "on-line", + "www" + ], + [ + "word", + "pass-word", + "passwords", + "passwork", + "passwrod", + "pasword", + "paswrod" + ], + [ + "passwords", + "web", + "stored", + "automatic", + "logon", + "credentials", + "network" + ], + [ + "vault", + "locker" + ] + ] + }, + { + "Name": "Manage Windows Credentials", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.CredentialManager /page ?SelectedVault=CredmanVault", + "Keywords": [ + [ + "administer", + "configure", + "managed", + "manages", + "managing", + "up", + "setup" + ], + [ + "connections", + "go", + "online", + "intranet", + "lan", + "netowrk", + "networking", + "line", + "on-line", + "www" + ], + [ + "word", + "pass-word", + "passwords", + "passwork", + "passwrod", + "pasword", + "paswrod" + ], + [ + "passwords", + "web", + "stored", + "automatic", + "logon", + "credentials", + "network" + ], + [ + "vault", + "locker" + ] + ] + }, + { + "Name": "Back up and Restore (Windows 7)", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.BackupAndRestore", + "Keywords": [ + [ + "up", + "backing", + "backuo", + "back-up", + "backups", + "back-ups", + "data", + "storage", + "incramental", + "incremental", + "saver", + "shadow", + "copies", + "copy" + ], + [ + "data", + "recovering", + "recovers", + "recovery" + ], + [ + "bring", + "back", + "change", + "recover", + "restore", + "back", + "rollback" + ], + [ + "points", + "wizard", + "system", + "protection", + "restores", + "systemrestores" + ] + ] + }, + { + "Name": "Restore data, files or computer from backup (Windows 7)", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.BackupAndRestore", + "Keywords": [ + [ + "up", + "backing", + "backuo", + "back-up", + "backups", + "back-ups", + "data", + "storage", + "incramental", + "incremental", + "saver", + "shadow", + "copies", + "copy" + ], + [ + "data", + "recovering", + "recovers", + "recovery" + ], + [ + "bring", + "back", + "change", + "recover", + "restore", + "back", + "rollback" + ], + [ + "points", + "wizard", + "system", + "protection", + "restores", + "systemrestores" + ], + [ + "recover", + "deleted", + "files", + "restore", + "get", + "lost", + "missing", + "rescue", + "retrieve", + "return", + "past", + "previous", + "protected", + "time", + "back", + "version" + ] + ] + }, + { + "Name": "Save backup copies of your files with File History", + "Area": null, + "Type": "TaskLink", + "Command": "%SystemRoot%\\System32\\control.exe -name Microsoft.FileHistory", + "Keywords": [ + [ + "up", + "backing", + "backuo", + "back-up", + "backups", + "back-ups", + "data", + "storage", + "incramental", + "incremental", + "saver", + "shadow", + "copies", + "copy" + ], + [ + "bring", + "back", + "change", + "recover", + "restore", + "back", + "rollback" + ], + [ + "devices", + "divises", + "divicse", + "divices" + ], + [ + "disk", + "drive", + "harddisk", + "hard-disk", + "harddrive", + "hard-drive" + ], + [ + "guard", + "protect", + "secure", + "preserve" + ], + [ + "sharing", + "shared", + "files", + "network", + "folder", + "target" + ], + [ + "external", + "separate", + "seperate" + ], + [ + "re-instate", + "re-set", + "recovery", + "recover", + "reinstall", + "factory", + "re-image", + "reimage", + "re-install", + "repair", + "restore", + "reinstate", + "reset", + "wipe", + "rollback", + "fix", + "troubleshoot", + "pc", + "refresh", + "erase", + "format" + ], + [ + "archive", + "collection", + "files", + "keep", + "safe", + "personal", + "retain", + "save", + "library", + "history" + ], + [ + "associate", + "exclude", + "migrate", + "move", + "reconnect", + "recommend", + "retention", + "settings", + "store" + ] + ] + }, + { + "Name": "Restore your files with File History", + "Area": null, + "Type": "TaskLink", + "Command": "%windir%\\system32\\FileHistory.exe", + "Keywords": [ + [ + "up", + "backing", + "backuo", + "back-up", + "backups", + "back-ups", + "data", + "storage", + "incramental", + "incremental", + "saver", + "shadow", + "copies", + "copy" + ], + [ + "bring", + "back", + "change", + "recover", + "restore", + "back", + "rollback" + ], + [ + "recover", + "deleted", + "files", + "restore", + "get", + "lost", + "missing", + "rescue", + "retrieve", + "return", + "past", + "previous", + "protected", + "time", + "back", + "version" + ], + [ + "archive", + "collection", + "files", + "keep", + "safe", + "personal", + "retain", + "save", + "library", + "history" + ] + ] } ] From ccb01d85d62fd1ede065210b04ccc73661c8c9a5 Mon Sep 17 00:00:00 2001 From: pc223 <10551242+pc223@users.noreply.github.com> Date: Mon, 26 Jul 2021 13:50:46 +0700 Subject: [PATCH 019/625] Add some more glyphs --- WindowsSettings.json | 331 +++++++++++++++++++++++-------------------- 1 file changed, 179 insertions(+), 152 deletions(-) diff --git a/WindowsSettings.json b/WindowsSettings.json index dec149c6b00..72c32980e5f 100644 --- a/WindowsSettings.json +++ b/WindowsSettings.json @@ -7,14 +7,13 @@ "Workplace" ], "Command": "ms-settings:workplace", - "glyph": "\ue821" + "Glyph": "\ue821" }, { "Name": "EmailAndAppAccounts", "Area": "Accounts", "Type": "AppSettingsApp", - "Command": "ms-settings:emailandaccounts", - "glyph": "\ue715" + "Command": "ms-settings:emailandaccounts" }, { "Name": "FamilyAndOtherPeople", @@ -23,8 +22,7 @@ "AltNames": [ "OtherUsers" ], - "Command": "ms-settings:otherusers", - "glyph": "\ue8fa" + "Command": "ms-settings:otherusers" }, { "Name": "SetUpKiosk", @@ -33,14 +31,15 @@ "AltNames": [ "AssignedAccess" ], - "Command": "ms-settings:assignedaccess" + "Command": "ms-settings:assignedaccess", + "Glyph": null }, { "Name": "SignInOptions", "Area": "Accounts", "Type": "AppSettingsApp", "Command": "ms-settings:signinoptions", - "glyph": "\ue8d7" + "Glyph": "\ue8d7" }, { "Name": "SignInOptionsDynamicLock", @@ -53,7 +52,7 @@ "Area": "Accounts", "Type": "AppSettingsApp", "Command": "ms-settings:sync", - "glyph": "\ue895" + "Glyph": "\ue895" }, { "Name": "WindowsHelloSetupFace", @@ -72,14 +71,14 @@ "Area": "Accounts", "Type": "AppSettingsApp", "Command": "ms-settings:yourinfo", - "glyph": "\ue779" + "Glyph": "\ue779" }, { "Name": "AppsAndFeatures", "Area": "Apps", "Type": "AppSettingsApp", "Command": "ms-settings:appsfeatures", - "glyph": null + "Glyph": "\ue71d" }, { "Name": "AppFeatures", @@ -92,27 +91,28 @@ "Area": "Apps", "Type": "AppSettingsApp", "Command": "ms-settings:appsforwebsites", - "glyph": "\ue78b" + "Glyph": "\ue78b" }, { "Name": "DefaultApps", "Area": "Apps", "Type": "AppSettingsApp", "Command": "ms-settings:defaultapps", - "glyph": "\ue7ac" + "Glyph": "\ue7ac" }, { "Name": "ManageOptionalFeatures", "Area": "Apps", "Type": "AppSettingsApp", - "Command": "ms-settings:optionalfeatures" + "Command": "ms-settings:optionalfeatures", + "Glyph": "\ue71d" }, { "Name": "OfflineMaps", "Area": "Apps", "Type": "AppSettingsApp", "Command": "ms-settings:maps", - "glyph": "\ue826" + "Glyph": "\ue826" }, { "Name": "OfflineMapsDownloadMaps", @@ -125,20 +125,21 @@ "Area": "Apps", "Type": "AppSettingsApp", "Command": "ms-settings:startupapps", - "glyph": "\ue7b5" + "Glyph": "\ue7b5" }, { "Name": "VideoPlayback", "Area": "Apps", "Type": "AppSettingsApp", "Command": "ms-settings:videoplayback", - "glyph": "\ue714" + "Glyph": "\ue714" }, { "Name": "Notifications", "Area": "Cortana", "Type": "AppSettingsApp", - "Command": "ms-settings:cortana-notifications" + "Command": "ms-settings:cortana-notifications", + "Glyph": null }, { "Name": "MoreDetails", @@ -150,13 +151,15 @@ "Name": "PermissionsAndHistory", "Area": "Cortana", "Type": "AppSettingsApp", - "Command": "ms-settings:cortana-permissions" + "Command": "ms-settings:cortana-permissions", + "Glyph": "\ue7ef" }, { "Name": "WindowsSearch", "Area": "Cortana", "Type": "AppSettingsApp", - "Command": "ms-settings:cortana-windowssearch" + "Command": "ms-settings:cortana-windowssearch", + "Glyph": "\ue713" }, { "Name": "CortanaLanguage", @@ -171,7 +174,8 @@ "Name": "Cortana", "Area": "Cortana", "Type": "AppSettingsApp", - "Command": "ms-settings:cortana" + "Command": "ms-settings:cortana", + "Glyph": null }, { "Name": "TalkToCortana", @@ -184,13 +188,14 @@ "Area": "Devices", "Type": "AppSettingsApp", "Command": "ms-settings:autoplay", - "glyph": "\uec57" + "Glyph": "\uec57" }, { "Name": "Bluetooth", "Area": "Devices", "Type": "AppSettingsApp", - "Command": "ms-settings:bluetooth" + "Command": "ms-settings:bluetooth", + "Glyph": "\ue772" }, { "Name": "ConnectedDevices", @@ -211,52 +216,49 @@ "Area": "Devices", "Type": "AppSettingsApp", "Note": "NoteTouchpad", - "Command": "ms-settings:mousetouchpad", - "glyph": "\ue962" + "Command": "ms-settings:mousetouchpad" }, { "Name": "PenAndWindowsInk", "Area": "Devices", "Type": "AppSettingsApp", "Command": "ms-settings:pen", - "glyph": "\uedc6" + "Glyph": "\uedc6" }, { "Name": "PrintersAndScanners", "Area": "Devices", "Type": "AppSettingsApp", "Command": "ms-settings:printers", - "glyph": "\ue749" + "Glyph": "\ue749" }, { "Name": "Touchpad", "Area": "Devices", "Type": "AppSettingsApp", "Note": "NoteTouchpad", - "Command": "ms-settings:devices-touchpad", - "glyph": "\uefa5" + "Command": "ms-settings:devices-touchpad" }, { "Name": "Typing", "Area": "Devices", "Type": "AppSettingsApp", "Command": "ms-settings:typing", - "glyph": "\ue765" + "Glyph": "\ue765" }, { "Name": "Usb", "Area": "Devices", "Type": "AppSettingsApp", "Command": "ms-settings:usb", - "glyph": "\ue88e" + "Glyph": "\ue88e" }, { "Name": "Wheel", "Area": "Devices", "Type": "AppSettingsApp", "Note": "NoteDialPaired", - "Command": "ms-settings:wheel", - "glyph": "\uee94" + "Command": "ms-settings:wheel" }, { "Name": "Phone", @@ -265,8 +267,7 @@ "AltNames": [ "MobileDevices" ], - "Command": "ms-settings:mobile-devices", - "glyph": "\ue8ea" + "Command": "ms-settings:mobile-devices" }, { "Name": "Audio", @@ -283,7 +284,8 @@ "Name": "ClosedCaptions", "Area": "EaseOfAccess", "Type": "AppSettingsApp", - "Command": "ms-settings:easeofaccess-closedcaptioning" + "Command": "ms-settings:easeofaccess-closedcaptioning", + "Glyph": "\ue7f0" }, { "Name": "ColorFilters", @@ -327,7 +329,8 @@ "Name": "EyeControl", "Area": "EaseOfAccess", "Type": "AppSettingsApp", - "Command": "ms-settings:easeofaccess-eyecontrol" + "Command": "ms-settings:easeofaccess-eyecontrol", + "Glyph": "\uf19d" }, { "Name": "Fonts", @@ -336,13 +339,14 @@ "DeprecatedInBuild": 17763, "Note": "NoteDeprecated17763", "Command": "ms-settings:fonts", - "glyph": "\ue8d2" + "Glyph": "\ue8d2" }, { "Name": "HighContrast", "Area": "EaseOfAccess", "Type": "AppSettingsApp", - "Command": "ms-settings:easeofaccess-highcontrast" + "Command": "ms-settings:easeofaccess-highcontrast", + "Glyph": "\ue706" }, { "Name": "Keyboard", @@ -357,7 +361,8 @@ "CapsLock", "NumLock" ], - "Command": "ms-settings:easeofaccess-keyboard" + "Command": "ms-settings:easeofaccess-keyboard", + "Glyph": "\ued4d" }, { "Name": "Magnifier", @@ -366,7 +371,8 @@ "AltNames": [ "Zoom" ], - "Command": "ms-settings:easeofaccess-magnifier" + "Command": "ms-settings:easeofaccess-magnifier", + "Glyph": "\uf19d" }, { "Name": "Mouse", @@ -390,7 +396,8 @@ "Type": "AppSettingsApp", "DeprecatedInBuild": 17763, "Note": "NoteDeprecated17763", - "Command": "ms-settings:easeofaccess-otheroptions" + "Command": "ms-settings:easeofaccess-otheroptions", + "Glyph": null }, { "Name": "Speech", @@ -413,28 +420,29 @@ "Name": "Broadcasting", "Area": "Gaming", "Type": "AppSettingsApp", - "Command": "ms-settings:gaming-broadcasting" + "Command": "ms-settings:gaming-broadcasting", + "Glyph": null }, { "Name": "GameBar", "Area": "Gaming", "Type": "AppSettingsApp", "Command": "ms-settings:gaming-gamebar", - "glyph": "\uf192" + "Glyph": "\ue713" }, { "Name": "GameDvr", "Area": "Gaming", "Type": "AppSettingsApp", "Command": "ms-settings:gaming-gamedvr", - "glyph": "\ued36" + "Glyph": "\ue713" }, { "Name": "GameMode", "Area": "Gaming", "Type": "AppSettingsApp", "Command": "ms-settings:gaming-gamemode", - "glyph": "\uec4a" + "Glyph": "\uec4a" }, { "Name": "PlayingGameFullScreen", @@ -458,7 +466,7 @@ "Area": "Gaming", "Type": "AppSettingsApp", "Command": "ms-settings:gaming-xboxnetworking", - "glyph": "\uf20b" + "Glyph": "\ue713" }, { "Name": "SettingsHomePage", @@ -510,8 +518,7 @@ "Name": "AirplaneMode", "Area": "NetworkAndInternet", "Type": "AppSettingsApp", - "Command": "ms-settings:network-airplanemode", - "glyph": "\ue709" + "Command": "ms-settings:network-airplanemode" }, { "Name": "Proximity", @@ -530,22 +537,21 @@ "Area": "NetworkAndInternet", "Type": "AppSettingsApp", "Command": "ms-settings:datausage", - "glyph": "\ueb05" + "Glyph": "\uec27" }, { "Name": "DialUp", "Area": "NetworkAndInternet", "Type": "AppSettingsApp", "Command": "ms-settings:network-dialup", - "glyph": "\ue83c" + "Glyph": "\ue83c" }, { "Name": "DirectAccess", "Area": "NetworkAndInternet", "Type": "AppSettingsApp", "Note": "NoteDirectAccess", - "Command": "ms-settings:network-directaccess", - "glyph": "\ue83b" + "Command": "ms-settings:network-directaccess" }, { "Name": "Ethernet", @@ -560,7 +566,7 @@ "Ip" ], "Command": "ms-settings:network-ethernet", - "glyph": "\ue839" + "Glyph": "\ue839" }, { "Name": "ManageKnownNetworks", @@ -577,8 +583,7 @@ "Name": "MobileHotspot", "Area": "NetworkAndInternet", "Type": "AppSettingsApp", - "Command": "ms-settings:network-mobilehotspot", - "glyph": "\ue704" + "Command": "ms-settings:network-mobilehotspot" }, { "Name": "NFC", @@ -594,14 +599,14 @@ "Area": "NetworkAndInternet", "Type": "AppSettingsApp", "Command": "ms-settings:network-proxy", - "glyph": "\ue774" + "Glyph": "\ue774" }, { "Name": "NetworkStatus", "Area": "NetworkAndInternet", "Type": "AppSettingsApp", "Command": "ms-settings:network-status", - "glyph": "\uec27" + "Glyph": "\uec27" }, { "Name": "Network", @@ -615,15 +620,14 @@ "Dhcp", "Ip" ], - "Command": "ms-settings:network", - "glyph": "\uec27" + "Command": "ms-settings:network" }, { "Name": "Vpn", "Area": "NetworkAndInternet", "Type": "AppSettingsApp", "Command": "ms-settings:network-vpn", - "glyph": "\ue705" + "Glyph": "\ue705" }, { "Name": "WiFi", @@ -635,8 +639,7 @@ "ShortNameWiFi" ], "Note": "NoteWiFiAdapter", - "Command": "ms-settings:network-wifi", - "glyph": "\ue701" + "Command": "ms-settings:network-wifi" }, { "Name": "WiFiCalling", @@ -658,7 +661,7 @@ "Image" ], "Command": "ms-settings:personalization-background", - "glyph": "\ueb9f" + "Glyph": "\ueb9f" }, { "Name": "ChooseWhichFoldersAppearOnStart", @@ -667,7 +670,8 @@ "AltNames": [ "StartPlaces" ], - "Command": "ms-settings:personalization-start-places" + "Command": "ms-settings:personalization-start-places", + "Glyph": "\ueca5" }, { "Name": "Colors", @@ -683,7 +687,7 @@ "WindowBorder" ], "Command": "ms-settings:colors", - "glyph": "\ue2b1" + "Glyph": "\ue790" }, { "Name": "Glance", @@ -691,7 +695,8 @@ "Type": "AppSettingsApp", "DeprecatedInBuild": 17763, "Note": "NoteDeprecated17763", - "Command": "ms-settings:personalization-glance" + "Command": "ms-settings:personalization-glance", + "Glyph": null }, { "Name": "LockScreen", @@ -701,8 +706,7 @@ "Image", "Picture" ], - "Command": "ms-settings:lockscreen", - "glyph": "\uee3f" + "Command": "ms-settings:lockscreen" }, { "Name": "NavigationBar", @@ -722,22 +726,21 @@ "Name": "Start", "Area": "Personalization", "Type": "AppSettingsApp", - "Command": "ms-settings:personalization-start", - "glyph": "\ueca5" + "Command": "ms-settings:personalization-start" }, { "Name": "Taskbar", "Area": "Personalization", "Type": "AppSettingsApp", "Command": "ms-settings:taskbar", - "glyph": "\ue90e" + "Glyph": "\ue90e" }, { "Name": "Themes", "Area": "Personalization", "Type": "AppSettingsApp", "Command": "ms-settings:themes", - "glyph": "\ue771" + "Glyph": "\ue771" }, { "Name": "AddYourPhone", @@ -765,13 +768,15 @@ "Name": "AccountInfo", "Area": "Privacy", "Type": "AppSettingsApp", - "Command": "ms-settings:privacy-accountinfo" + "Command": "ms-settings:privacy-accountinfo", + "Glyph": "\ue779" }, { "Name": "ActivityHistory", "Area": "Privacy", "Type": "AppSettingsApp", - "Command": "ms-settings:privacy-activityhistory" + "Command": "ms-settings:privacy-activityhistory", + "Glyph": "\ue7c4" }, { "Name": "AdvertisingId", @@ -779,25 +784,29 @@ "Type": "AppSettingsApp", "DeprecatedInBuild": 17763, "Note": "NoteDeprecated17763", - "Command": "ms-settings:privacy-advertisingid" + "Command": "ms-settings:privacy-advertisingid", + "Glyph": "\ue72e" }, { "Name": "AppDiagnostics", "Area": "Privacy", "Type": "AppSettingsApp", - "Command": "ms-settings:privacy-appdiagnostics" + "Command": "ms-settings:privacy-appdiagnostics", + "Glyph": "\ue9d2" }, { "Name": "AutomaticFileDownloads", "Area": "Privacy", "Type": "AppSettingsApp", - "Command": "ms-settings:privacy-automaticfiledownloads" + "Command": "ms-settings:privacy-automaticfiledownloads", + "Glyph": "\ue753" }, { "Name": "BackgroundApps", "Area": "Privacy", "Type": "AppSettingsApp", - "Command": "ms-settings:privacy-backgroundapps" + "Command": "ms-settings:privacy-backgroundapps", + "Glyph": "\ue9d9" }, { "Name": "Calendar", @@ -809,25 +818,29 @@ "Name": "CallHistory", "Area": "Privacy", "Type": "AppSettingsApp", - "Command": "ms-settings:privacy-callhistory" + "Command": "ms-settings:privacy-callhistory", + "Glyph": "\uf738" }, { "Name": "Camera", "Area": "Privacy", "Type": "AppSettingsApp", - "Command": "ms-settings:privacy-webcam" + "Command": "ms-settings:privacy-webcam", + "Glyph": "\uf439" }, { "Name": "Contacts", "Area": "Privacy", "Type": "AppSettingsApp", - "Command": "ms-settings:privacy-contacts" + "Command": "ms-settings:privacy-contacts", + "Glyph": "\ue716" }, { "Name": "Documents", "Area": "Privacy", "Type": "AppSettingsApp", - "Command": "ms-settings:privacy-documents" + "Command": "ms-settings:privacy-documents", + "Glyph": "\ue7c3" }, { "Name": "Email", @@ -852,13 +865,15 @@ "Name": "FileSystem", "Area": "Privacy", "Type": "AppSettingsApp", - "Command": "ms-settings:privacy-broadfilesystemaccess" + "Command": "ms-settings:privacy-broadfilesystemaccess", + "Glyph": "\ue7c3" }, { "Name": "General", "Area": "Privacy", "Type": "AppSettingsApp", - "Command": "ms-settings:privacy or privacy-general" + "Command": "ms-settings:privacy or privacy-general", + "Glyph": "\uec20" }, { "Name": "InkingAndTyping", @@ -867,37 +882,43 @@ "AltNames": [ "SpeechTyping" ], - "Command": "ms-settings:privacy-speechtyping" + "Command": "ms-settings:privacy-speechtyping", + "Glyph": "\ueadf" }, { "Name": "Location", "Area": "Privacy", "Type": "AppSettingsApp", - "Command": "ms-settings:privacy-location" + "Command": "ms-settings:privacy-location", + "Glyph": "\ue707" }, { "Name": "Messaging", "Area": "Privacy", "Type": "AppSettingsApp", - "Command": "ms-settings:privacy-messaging" + "Command": "ms-settings:privacy-messaging", + "Glyph": "\uebdb" }, { "Name": "Microphone", "Area": "Privacy", "Type": "AppSettingsApp", - "Command": "ms-settings:privacy-microphone" + "Command": "ms-settings:privacy-microphone", + "Glyph": "\ue720" }, { "Name": "Motion", "Area": "Privacy", "Type": "AppSettingsApp", - "Command": "ms-settings:privacy-motion" + "Command": "ms-settings:privacy-motion", + "Glyph": null }, { "Name": "Notifications", "Area": "Privacy", "Type": "AppSettingsApp", - "Command": "ms-settings:privacy-notifications" + "Command": "ms-settings:privacy-notifications", + "Glyph": null }, { "Name": "OtherDevices", @@ -906,13 +927,15 @@ "AltNames": [ "CustomDevices" ], - "Command": "ms-settings:privacy-customdevices" + "Command": "ms-settings:privacy-customdevices", + "Glyph": "\ue772" }, { "Name": "PhoneCalls", "Area": "Privacy", "Type": "AppSettingsApp", - "Command": "ms-settings:privacy-phonecalls" + "Command": "ms-settings:privacy-phonecalls", + "Glyph": "\ue77e" }, { "Name": "Pictures", @@ -924,7 +947,8 @@ "Name": "Radios", "Area": "Privacy", "Type": "AppSettingsApp", - "Command": "ms-settings:privacy-radios" + "Command": "ms-settings:privacy-radios", + "Glyph": "\uec05" }, { "Name": "Speech", @@ -942,13 +966,15 @@ "Name": "Videos", "Area": "Privacy", "Type": "AppSettingsApp", - "Command": "ms-settings:privacy-videos" + "Command": "ms-settings:privacy-videos", + "Glyph": "\ue8b2" }, { "Name": "VoiceActivation", "Area": "Privacy", "Type": "AppSettingsApp", - "Command": "ms-settings:privacy-voiceactivation" + "Command": "ms-settings:privacy-voiceactivation", + "Glyph": "\uf12e" }, { "Name": "Accounts", @@ -981,7 +1007,8 @@ "Name": "WelcomeScreen", "Area": "SurfaceHub", "Type": "AppSettingsApp", - "Command": "ms-settings:surfacehub-welcome" + "Command": "ms-settings:surfacehub-welcome", + "Glyph": "\uee3f" }, { "Name": "About", @@ -996,14 +1023,15 @@ "Version" ], "Command": "ms-settings:about", - "glyph": "\ue946" + "Glyph": "\ue946" }, { "Name": "AdvancedDisplaySettings", "Area": "System", "Type": "AppSettingsApp", "Note": "NoteDisplayGraphics", - "Command": "ms-settings:display-advanced" + "Command": "ms-settings:display-advanced", + "Glyph": "\ue7f4" }, { "Name": "AppVolumeAndDevicePreferences", @@ -1011,8 +1039,7 @@ "Type": "AppSettingsApp", "IntroducedInBuild": 18362, "Note": "NoteSince18362", - "Command": "ms-settings:apps-volume", - "glyph": "\ue767" + "Command": "ms-settings:apps-volume" }, { "Name": "BatterySaver", @@ -1043,7 +1070,7 @@ "Area": "System", "Type": "AppSettingsApp", "Command": "ms-settings:clipboard", - "glyph": "\ue77f" + "Glyph": "\ue77f" }, { "Name": "Display", @@ -1055,21 +1082,21 @@ "WarmerColor", "RedEye" ], - "Command": "ms-settings:display", - "glyph": "\ue7f4" + "Command": "ms-settings:display" }, { "Name": "DefaultSaveLocations", "Area": "System", "Type": "AppSettingsApp", "Command": "ms-settings:savelocations", - "glyph": "\ueda2" + "Glyph": "\ueda2" }, { "Name": "ScreenRotation", "Area": "System", "Type": "AppSettingsApp", - "Command": "ms-settings:screenrotation" + "Command": "ms-settings:screenrotation", + "Glyph": "\ue7f4" }, { "Name": "DuplicatingMyDisplay", @@ -1099,8 +1126,7 @@ "Name": "FocusAssistQuietHours", "Area": "System", "Type": "AppSettingsApp", - "Command": "ms-settings:quiethours", - "glyph": "\ue708" + "Command": "ms-settings:quiethours" }, { "Name": "FocusAssistQuietMoments", @@ -1117,13 +1143,14 @@ ], "Note": "NoteAdvancedGraphics", "Command": "ms-settings:display-advancedgraphics", - "glyph": "\ue7f4" + "Glyph": null }, { "Name": "Messaging", "Area": "System", "Type": "AppSettingsApp", - "Command": "ms-settings:messaging" + "Command": "ms-settings:messaging", + "Glyph": "\uebdb" }, { "Name": "Multitasking", @@ -1136,13 +1163,14 @@ "VirtualDesktops" ], "Command": "ms-settings:multitasking", - "glyph": "\uee40" + "Glyph": "\ue7c4" }, { "Name": "NightLightSettings", "Area": "System", "Type": "AppSettingsApp", - "Command": "ms-settings:nightlight" + "Command": "ms-settings:nightlight", + "Glyph": null }, { "Name": "PhoneDefaultApps", @@ -1155,7 +1183,7 @@ "Area": "System", "Type": "AppSettingsApp", "Command": "ms-settings:project", - "glyph": "\uebc6" + "Glyph": "\uebc6" }, { "Name": "SharedExperiences", @@ -1164,35 +1192,35 @@ "AltNames": [ "Crossdevice" ], - "Command": "ms-settings:crossdevice" + "Command": "ms-settings:crossdevice", + "Glyph": "\uf22c" }, { "Name": "TabletMode", "Area": "System", "Type": "AppSettingsApp", "Command": "ms-settings:tabletmode", - "glyph": "\uebfc" + "Glyph": "\uebfc" }, { "Name": "Taskbar", "Area": "System", "Type": "AppSettingsApp", "Command": "ms-settings:taskbar", - "glyph": "\ue90e" + "Glyph": "\ue90e" }, { "Name": "NotificationsAndActions", "Area": "System", "Type": "AppSettingsApp", "Command": "ms-settings:notifications", - "glyph": "\ue91c" + "Glyph": null }, { "Name": "RemoteDesktop", "Area": "System", "Type": "AppSettingsApp", - "Command": "ms-settings:remotedesktop", - "glyph": "\ue8af" + "Command": "ms-settings:remotedesktop" }, { "Name": "Phone", @@ -1207,35 +1235,34 @@ "Area": "System", "Type": "AppSettingsApp", "Command": "ms-settings:powersleep", - "glyph": "\ue7e8" + "Glyph": "\uf83d" }, { "Name": "Sound", "Area": "System", "Type": "AppSettingsApp", "Command": "ms-settings:sound", - "glyph": "\ue767" + "Glyph": "\ue995" }, { "Name": "StorageSense", "Area": "System", "Type": "AppSettingsApp", "Command": "ms-settings:storagesense", - "glyph": "\ueda2" + "Glyph": "\ueda2" }, { "Name": "StoragePolicies", "Area": "System", "Type": "AppSettingsApp", - "Command": "ms-settings:storagepolicies", - "glyph": "\ueda2" + "Command": "ms-settings:storagepolicies" }, { "Name": "DateAndTime", "Area": "TimeAndLanguage", "Type": "AppSettingsApp", "Command": "ms-settings:dateandtime", - "glyph": "\uec92" + "Glyph": "\uec92" }, { "Name": "JapanImeSettings", @@ -1254,20 +1281,21 @@ "AltNames": [ "RegionFormatting" ], - "Command": "ms-settings:regionformatting" + "Command": "ms-settings:regionformatting", + "Glyph": "\uf49a" }, { "Name": "Keyboard", "Area": "TimeAndLanguage", "Type": "AppSettingsApp", - "Command": "ms-settings:keyboard" + "Command": "ms-settings:keyboard", + "Glyph": "\ued4d" }, { "Name": "RegionalLanguage", "Area": "TimeAndLanguage", "Type": "AppSettingsApp", - "Command": "ms-settings:regionlanguage", - "glyph": "\ue8c1" + "Command": "ms-settings:regionlanguage" }, { "Name": "BopomofoIme", @@ -1325,8 +1353,7 @@ "Name": "Speech", "Area": "TimeAndLanguage", "Type": "AppSettingsApp", - "Command": "ms-settings:speech", - "glyph": "\ue720" + "Command": "ms-settings:speech" }, { "Name": "WubiImeSettings", @@ -1340,49 +1367,46 @@ "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", "Command": "ms-settings:activation", - "glyph": "\ue930" + "Glyph": "\ue930" }, { "Name": "Backup", "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", - "Command": "ms-settings:backup", - "glyph": "\ue11c" + "Command": "ms-settings:backup" }, { "Name": "DeliveryOptimization", "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", "Command": "ms-settings:delivery-optimization", - "glyph": "\uf785" + "Glyph": "\uf785" }, { "Name": "FindMyDevice", "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", "Command": "ms-settings:findmydevice", - "glyph": "\ue707" + "Glyph": "\ue707" }, { "Name": "ForDevelopers", "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", - "Command": "ms-settings:developers", - "glyph": "\uec7a" + "Command": "ms-settings:developers" }, { "Name": "Recovery", "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", - "Command": "ms-settings:recovery", - "glyph": "\uebc4" + "Command": "ms-settings:recovery" }, { "Name": "Troubleshoot", "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", "Command": "ms-settings:troubleshoot", - "glyph": "\ue15e" + "Glyph": "\ue90f" }, { "Name": "WindowsSecurity", @@ -1397,29 +1421,27 @@ "IsolatedBrowsing", "ExploitProtection" ], - "Command": "ms-settings:windowsdefender", - "glyph": "\ue83d" + "Command": "ms-settings:windowsdefender" }, { "Name": "WindowsInsiderProgram", "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", "Note": "NoteEnrolledWIP", - "Command": "ms-settings:windowsinsider", - "glyph": "\uf1ad" + "Command": "ms-settings:windowsinsider" }, { "Name": "WindowsUpdate", "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", - "Command": "ms-settings:windowsupdate" + "Command": "ms-settings:windowsupdate", + "Glyph": "\ue895" }, { "Name": "WindowsUpdateCheckForUpdates", "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", - "Command": "ms-settings:windowsupdate-action", - "glyph": "\ue895" + "Command": "ms-settings:windowsupdate-action" }, { "Name": "WindowsUpdateAdvancedOptions", @@ -1459,7 +1481,8 @@ "Area": "UserAccounts", "Type": "AppSettingsApp", "Note": "NoteMobileProvisioning", - "Command": "ms-settings:provisioning" + "Command": "ms-settings:provisioning", + "Glyph": "\ue821" }, { "Name": "WindowsAnywhere", @@ -1508,7 +1531,8 @@ "Name": "AutoPlay", "Area": "Programs", "Type": "ControlPanel", - "Command": "control /name Microsoft.AutoPlay" + "Command": "control /name Microsoft.AutoPlay", + "Glyph": "\uec57" }, { "Name": "BackupAndRestore", @@ -1565,7 +1589,8 @@ "AltNames": [ "timedate.cpl" ], - "Command": "control /name Microsoft.DateAndTime" + "Command": "control /name Microsoft.DateAndTime", + "Glyph": "\uec92" }, { "Name": "DefaultLocation", @@ -1607,7 +1632,8 @@ "Name": "Fonts", "Area": "AppearanceAndPersonalization", "Type": "ControlPanel", - "Command": "control /name Microsoft.Fonts" + "Command": "control /name Microsoft.Fonts", + "Glyph": "\ue8d2" }, { "Name": "GameControllers", @@ -1829,7 +1855,8 @@ "Name": "Sound", "Area": "HardwareAndSound", "Type": "ControlPanel", - "Command": "control /name Microsoft.Sound" + "Command": "control /name Microsoft.Sound", + "Glyph": "\ue995" }, { "Name": "SpeechRecognition", From 6978b65d8eb99aca0f13669ed979f267936d65a3 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Fri, 30 Jul 2021 20:44:29 +1000 Subject: [PATCH 020/625] add Quick Access action keyword --- .../UserSettings/PluginSettings.cs | 23 ++++++++--- .../Languages/en.xaml | 2 + .../Search/SearchManager.cs | 38 +++++++++++-------- .../Flow.Launcher.Plugin.Explorer/Settings.cs | 14 ++++++- .../Views/ActionKeywordSetting.xaml.cs | 16 ++++++-- .../Views/ExplorerSettings.xaml.cs | 4 +- .../Flow.Launcher.Plugin.Explorer/plugin.json | 3 +- 7 files changed, 70 insertions(+), 30 deletions(-) diff --git a/Flow.Launcher.Infrastructure/UserSettings/PluginSettings.cs b/Flow.Launcher.Infrastructure/UserSettings/PluginSettings.cs index abce8b41ea7..bdf74517dbd 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/PluginSettings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/PluginSettings.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using Flow.Launcher.Plugin; namespace Flow.Launcher.Infrastructure.UserSettings @@ -15,13 +15,24 @@ public void UpdatePluginSettings(List metadatas) if (Plugins.ContainsKey(metadata.ID)) { var settings = Plugins[metadata.ID]; - - // TODO: Remove. This is backwards compatibility for 1.8.0 release. - // Introduced two new action keywords in Explorer, so need to update plugin setting in the UserData folder. + if (metadata.ID == "572be03c74c642baae319fc283e561a8" && metadata.ActionKeywords.Count != settings.ActionKeywords.Count) { - settings.ActionKeywords.Add(Query.GlobalPluginWildcardSign); // for index search - settings.ActionKeywords.Add(Query.GlobalPluginWildcardSign); // for path search + // TODO: Remove. This is backwards compatibility for Explorer 1.8.0 release. + // Introduced two new action keywords in Explorer, so need to update plugin setting in the UserData folder. + if (settings.Version.CompareTo("1.8.0") < 0) + { + settings.ActionKeywords.Add(Query.GlobalPluginWildcardSign); // for index search + settings.ActionKeywords.Add(Query.GlobalPluginWildcardSign); // for path search + settings.ActionKeywords.Add(Query.GlobalPluginWildcardSign); // for quick access action keyword + } + + // TODO: Remove. This is backwards compatibility for Explorer 1.9.0 release. + // Introduced a new action keywords in Explorer since 1.8.0, so need to update plugin setting in the UserData folder. + if (settings.Version.CompareTo("1.8.0") > 0) + { + settings.ActionKeywords.Add(Query.GlobalPluginWildcardSign); // for quick access action keyword + } } if (string.IsNullOrEmpty(settings.Version)) diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml index b23931fcf78..e2914d017d8 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml @@ -10,6 +10,7 @@ Deletion successful Successfully deleted the {0} Assigning the global action keyword could bring up too many results during search. Please choose a specific action keyword + Quick Access can not be set to the global action keyword when enabled. Please choose a specific action keyword The required service for Windows Index Search does not appear to be running To fix this, start the Windows Search service. Select here to remove this warning The warning message has been switched off. As an alternative for searching files and folders, would you like to install Everything plugin?{0}{0}Select 'Yes' to install Everything plugin, or 'No' to return @@ -27,6 +28,7 @@ Path Search: File Content Search: Index Search: + Quick Access: Current Action Keyword: Done Enabled diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs index 9995f45d380..05fd071f736 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs @@ -42,15 +42,28 @@ internal async Task> SearchAsync(Query query, CancellationToken tok { var querySearch = query.Search; + var results = new HashSet(PathEqualityComparator.Instance); + + // This allows the user to type the below action keywords and see/search the list of quick folder links + if (ActionKeywordMatch(query, Settings.ActionKeyword.SearchActionKeyword) + || ActionKeywordMatch(query, Settings.ActionKeyword.QuickAccessActionKeyword) + || ActionKeywordMatch(query, Settings.ActionKeyword.PathSearchActionKeyword)) + { + if (string.IsNullOrEmpty(query.Search)) + return QuickAccess.AccessLinkListAll(query, Settings.QuickAccessLinks); + + var quickaccessLinks = QuickAccess.AccessLinkListMatched(query, Settings.QuickAccessLinks); + + results.UnionWith(quickaccessLinks); + } + if (IsFileContentSearch(query.ActionKeyword)) return await WindowsIndexFileContentSearchAsync(query, querySearch, token).ConfigureAwait(false); - var result = new HashSet(PathEqualityComparator.Instance); - if (ActionKeywordMatch(query, Settings.ActionKeyword.PathSearchActionKeyword) || ActionKeywordMatch(query, Settings.ActionKeyword.SearchActionKeyword)) { - result.UnionWith(await PathSearchAsync(query, token).ConfigureAwait(false)); + results.UnionWith(await PathSearchAsync(query, token).ConfigureAwait(false)); } if ((ActionKeywordMatch(query, Settings.ActionKeyword.IndexSearchActionKeyword) || @@ -58,11 +71,11 @@ internal async Task> SearchAsync(Query query, CancellationToken tok querySearch.Length > 0 && !querySearch.IsLocationPathString()) { - result.UnionWith(await WindowsIndexFilesAndFoldersSearchAsync(query, querySearch, token) + results.UnionWith(await WindowsIndexFilesAndFoldersSearchAsync(query, querySearch, token) .ConfigureAwait(false)); } - return result.ToList(); + return results.ToList(); } private bool ActionKeywordMatch(Query query, Settings.ActionKeyword allowedActionKeyword) @@ -75,10 +88,11 @@ private bool ActionKeywordMatch(Query query, Settings.ActionKeyword allowedActio keyword == Settings.SearchActionKeyword, Settings.ActionKeyword.PathSearchActionKeyword => Settings.PathSearchKeywordEnabled && keyword == Settings.PathSearchActionKeyword, - Settings.ActionKeyword.FileContentSearchActionKeyword => keyword == - Settings.FileContentSearchActionKeyword, + Settings.ActionKeyword.FileContentSearchActionKeyword => keyword == Settings.FileContentSearchActionKeyword, Settings.ActionKeyword.IndexSearchActionKeyword => Settings.IndexOnlySearchKeywordEnabled && - keyword == Settings.IndexSearchActionKeyword + keyword == Settings.IndexSearchActionKeyword, + Settings.ActionKeyword.QuickAccessActionKeyword => Settings.QuickAccessKeywordEnabled && + keyword == Settings.QuickAccessActionKeyword }; } @@ -86,16 +100,8 @@ public async Task> PathSearchAsync(Query query, CancellationToken t { var querySearch = query.Search; - // This allows the user to type the assigned action keyword and only see the list of quick folder links - if (string.IsNullOrEmpty(query.Search)) - return QuickAccess.AccessLinkListAll(query, Settings.QuickAccessLinks); - var results = new HashSet(PathEqualityComparator.Instance); - var quickaccessLinks = QuickAccess.AccessLinkListMatched(query, Settings.QuickAccessLinks); - - results.UnionWith(quickaccessLinks); - var isEnvironmentVariable = EnvironmentVariables.IsEnvironmentVariableSearch(querySearch); if (isEnvironmentVariable) diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Settings.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Settings.cs index 88656a40172..e75d07cb012 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Settings.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Settings.cs @@ -21,6 +21,7 @@ public class Settings public List IndexSearchExcludedSubdirectoryPaths { get; set; } = new List(); public string SearchActionKeyword { get; set; } = Query.GlobalPluginWildcardSign; + public bool SearchActionKeywordEnabled { get; set; } = true; public string FileContentSearchActionKeyword { get; set; } = Constants.DefaultContentSearchActionKeyword; @@ -33,6 +34,10 @@ public class Settings public bool IndexOnlySearchKeywordEnabled { get; set; } + public string QuickAccessActionKeyword { get; set; } = Query.GlobalPluginWildcardSign; + + public bool QuickAccessKeywordEnabled { get; set; } + public bool WarnWindowsSearchServiceOff { get; set; } = true; internal enum ActionKeyword @@ -40,7 +45,8 @@ internal enum ActionKeyword SearchActionKeyword, PathSearchActionKeyword, FileContentSearchActionKeyword, - IndexSearchActionKeyword + IndexSearchActionKeyword, + QuickAccessActionKeyword } internal string GetActionKeyword(ActionKeyword actionKeyword) => actionKeyword switch @@ -48,7 +54,8 @@ internal enum ActionKeyword ActionKeyword.SearchActionKeyword => SearchActionKeyword, ActionKeyword.PathSearchActionKeyword => PathSearchActionKeyword, ActionKeyword.FileContentSearchActionKeyword => FileContentSearchActionKeyword, - ActionKeyword.IndexSearchActionKeyword => IndexSearchActionKeyword + ActionKeyword.IndexSearchActionKeyword => IndexSearchActionKeyword, + ActionKeyword.QuickAccessActionKeyword => QuickAccessActionKeyword }; internal void SetActionKeyword(ActionKeyword actionKeyword, string keyword) => _ = actionKeyword switch @@ -57,6 +64,7 @@ internal enum ActionKeyword ActionKeyword.PathSearchActionKeyword => PathSearchActionKeyword = keyword, ActionKeyword.FileContentSearchActionKeyword => FileContentSearchActionKeyword = keyword, ActionKeyword.IndexSearchActionKeyword => IndexSearchActionKeyword = keyword, + ActionKeyword.QuickAccessActionKeyword => QuickAccessActionKeyword = keyword, _ => throw new ArgumentOutOfRangeException(nameof(actionKeyword), actionKeyword, "Unexpected property") }; @@ -65,6 +73,7 @@ internal enum ActionKeyword ActionKeyword.SearchActionKeyword => SearchActionKeywordEnabled, ActionKeyword.PathSearchActionKeyword => PathSearchKeywordEnabled, ActionKeyword.IndexSearchActionKeyword => IndexOnlySearchKeywordEnabled, + ActionKeyword.QuickAccessActionKeyword => QuickAccessKeywordEnabled, _ => null }; @@ -73,6 +82,7 @@ internal enum ActionKeyword ActionKeyword.SearchActionKeyword => SearchActionKeywordEnabled = enable, ActionKeyword.PathSearchActionKeyword => PathSearchKeywordEnabled = enable, ActionKeyword.IndexSearchActionKeyword => IndexOnlySearchKeywordEnabled = enable, + ActionKeyword.QuickAccessActionKeyword => QuickAccessKeywordEnabled = enable, _ => throw new ArgumentOutOfRangeException(nameof(actionKeyword), actionKeyword, "Unexpected property") }; } diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Views/ActionKeywordSetting.xaml.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ActionKeywordSetting.xaml.cs index 18703e5eafd..14db6d4733f 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Views/ActionKeywordSetting.xaml.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ActionKeywordSetting.xaml.cs @@ -63,11 +63,19 @@ private void OnDoneButtonClick(object sender, RoutedEventArgs e) } - if (CurrentActionKeyword.KeywordProperty == Settings.ActionKeyword.FileContentSearchActionKeyword - && ActionKeyword == Query.GlobalPluginWildcardSign) + if (ActionKeyword == Query.GlobalPluginWildcardSign + && (CurrentActionKeyword.KeywordProperty == Settings.ActionKeyword.FileContentSearchActionKeyword + || CurrentActionKeyword.KeywordProperty == Settings.ActionKeyword.QuickAccessActionKeyword)) { - MessageBox.Show( - settingsViewModel.Context.API.GetTranslation("plugin_explorer_globalActionKeywordInvalid")); + switch (CurrentActionKeyword.KeywordProperty) + { + case Settings.ActionKeyword.FileContentSearchActionKeyword: + MessageBox.Show(settingsViewModel.Context.API.GetTranslation("plugin_explorer_globalActionKeywordInvalid")); + break; + case Settings.ActionKeyword.QuickAccessActionKeyword: + MessageBox.Show(settingsViewModel.Context.API.GetTranslation("plugin_explorer_quickaccess_globalActionKeywordInvalid")); + break; + } return; } diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml.cs index 0c3799cee03..5758b84b8c8 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml.cs @@ -42,7 +42,9 @@ public ExplorerSettings(SettingsViewModel viewModel) new(Settings.ActionKeyword.PathSearchActionKeyword, viewModel.Context.API.GetTranslation("plugin_explorer_actionkeywordview_pathsearch")), new(Settings.ActionKeyword.IndexSearchActionKeyword, - viewModel.Context.API.GetTranslation("plugin_explorer_actionkeywordview_indexsearch")) + viewModel.Context.API.GetTranslation("plugin_explorer_actionkeywordview_indexsearch")), + new(Settings.ActionKeyword.QuickAccessActionKeyword, + viewModel.Context.API.GetTranslation("plugin_explorer_actionkeywordview_quickaccess")) }; lbxActionKeywords.ItemsSource = actionKeywordsListView; diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json b/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json index 59a31ec139c..d47c68cd38c 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json @@ -4,12 +4,13 @@ "*", "doc:", "*", + "*", "*" ], "Name": "Explorer", "Description": "Search and manage files and folders. Explorer utilises Windows Index Search", "Author": "Jeremy Wu", - "Version": "1.8.2", + "Version": "1.9.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Explorer.dll", From fd39b60f7b5904dcee03c1772f87fd1e94f89aac Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sat, 31 Jul 2021 15:44:41 +0800 Subject: [PATCH 021/625] Add Glyph Support --- Flow.Launcher.Plugin/Result.cs | 10 +++++++++- Flow.Launcher/ResultListBox.xaml | 5 ++++- Flow.Launcher/ViewModel/ResultViewModel.cs | 11 ++++++++--- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/Flow.Launcher.Plugin/Result.cs b/Flow.Launcher.Plugin/Result.cs index ac9c10df05b..171b30c2675 100644 --- a/Flow.Launcher.Plugin/Result.cs +++ b/Flow.Launcher.Plugin/Result.cs @@ -47,7 +47,15 @@ public string IcoPath public delegate ImageSource IconDelegate(); - public IconDelegate Icon; + /// + /// Delegate to Get Image Source + /// + public IconDelegate Icon { get; set; } + + /// + /// Information for Glyph Icon + /// + public GlyphInfo Glyph { get; init; } /// diff --git a/Flow.Launcher/ResultListBox.xaml b/Flow.Launcher/ResultListBox.xaml index 2f9d06d814e..877b82a0697 100644 --- a/Flow.Launcher/ResultListBox.xaml +++ b/Flow.Launcher/ResultListBox.xaml @@ -42,7 +42,10 @@ + Source="{Binding Image.Value}" Visibility="{Binding ShowImage}" /> + diff --git a/Flow.Launcher/ViewModel/ResultViewModel.cs b/Flow.Launcher/ViewModel/ResultViewModel.cs index c91bbb1074f..ce4b23d2184 100644 --- a/Flow.Launcher/ViewModel/ResultViewModel.cs +++ b/Flow.Launcher/ViewModel/ResultViewModel.cs @@ -66,7 +66,9 @@ public ResultViewModel(Result result, Settings settings) { OnPropertyChanged(nameof(Image)); }); - } + + Glyph = Result.Glyph; + } Settings = settings; } @@ -74,7 +76,8 @@ public ResultViewModel(Result result, Settings settings) public Settings Settings { get; private set; } public Visibility ShowOpenResultHotkey => Settings.ShowOpenResultHotkey ? Visibility.Visible : Visibility.Hidden; - + public Visibility ShowIcon => Result.IcoPath != null || Result.Icon is not null || Glyph == null ? Visibility.Visible : Visibility.Hidden; + public Visibility ShowGlyph => Glyph is not null ? Visibility.Visible : Visibility.Hidden; public string OpenResultModifiers => Settings.OpenResultModifiers; public string ShowTitleToolTip => string.IsNullOrEmpty(Result.TitleToolTip) @@ -87,6 +90,8 @@ public ResultViewModel(Result result, Settings settings) public LazyAsync Image { get; set; } + public GlyphInfo Glyph { get; set; } + private async ValueTask SetImage() { var imagePath = Result.IcoPath; @@ -106,7 +111,7 @@ private async ValueTask SetImage() if (ImageLoader.CacheContainImage(imagePath)) // will get here either when icoPath has value\icon delegate is null\when had exception in delegate return ImageLoader.Load(imagePath); - + return await Task.Run(() => ImageLoader.Load(imagePath)); } From 2af29f83769915cc8273d900540f29c84dc23241 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sat, 31 Jul 2021 16:07:14 +0800 Subject: [PATCH 022/625] Create GlyphInfo.cs Add GlyphInfo File --- Flow.Launcher.Plugin/GlyphInfo.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Flow.Launcher.Plugin/GlyphInfo.cs diff --git a/Flow.Launcher.Plugin/GlyphInfo.cs b/Flow.Launcher.Plugin/GlyphInfo.cs new file mode 100644 index 00000000000..d24624d8f50 --- /dev/null +++ b/Flow.Launcher.Plugin/GlyphInfo.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Media; + +namespace Flow.Launcher.Plugin +{ + public record GlyphInfo(string FontFamily, string Glyph); +} From b7df39307f1bdd9fb6b5e791e573682f20a7d391 Mon Sep 17 00:00:00 2001 From: pc223 <10551242+pc223@users.noreply.github.com> Date: Sat, 31 Jul 2021 22:50:11 +0700 Subject: [PATCH 023/625] Add FontFamily --- WindowsSettings.json | 478 +++++++++++++++++++++++++++++++++---------- 1 file changed, 367 insertions(+), 111 deletions(-) diff --git a/WindowsSettings.json b/WindowsSettings.json index 72c32980e5f..f71d52f5d01 100644 --- a/WindowsSettings.json +++ b/WindowsSettings.json @@ -7,7 +7,10 @@ "Workplace" ], "Command": "ms-settings:workplace", - "Glyph": "\ue821" + "IconGlyph": { + "Glyph": "\ue821", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "EmailAndAppAccounts", @@ -31,15 +34,17 @@ "AltNames": [ "AssignedAccess" ], - "Command": "ms-settings:assignedaccess", - "Glyph": null + "Command": "ms-settings:assignedaccess" }, { "Name": "SignInOptions", "Area": "Accounts", "Type": "AppSettingsApp", "Command": "ms-settings:signinoptions", - "Glyph": "\ue8d7" + "IconGlyph": { + "Glyph": "\ue8d7", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "SignInOptionsDynamicLock", @@ -52,7 +57,10 @@ "Area": "Accounts", "Type": "AppSettingsApp", "Command": "ms-settings:sync", - "Glyph": "\ue895" + "IconGlyph": { + "Glyph": "\ue895", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "WindowsHelloSetupFace", @@ -71,14 +79,20 @@ "Area": "Accounts", "Type": "AppSettingsApp", "Command": "ms-settings:yourinfo", - "Glyph": "\ue779" + "IconGlyph": { + "Glyph": "\ue779", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "AppsAndFeatures", "Area": "Apps", "Type": "AppSettingsApp", "Command": "ms-settings:appsfeatures", - "Glyph": "\ue71d" + "IconGlyph": { + "Glyph": "\ue71d", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "AppFeatures", @@ -91,28 +105,40 @@ "Area": "Apps", "Type": "AppSettingsApp", "Command": "ms-settings:appsforwebsites", - "Glyph": "\ue78b" + "IconGlyph": { + "Glyph": "\ue78b", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "DefaultApps", "Area": "Apps", "Type": "AppSettingsApp", "Command": "ms-settings:defaultapps", - "Glyph": "\ue7ac" + "IconGlyph": { + "Glyph": "\ue7ac", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "ManageOptionalFeatures", "Area": "Apps", "Type": "AppSettingsApp", "Command": "ms-settings:optionalfeatures", - "Glyph": "\ue71d" + "IconGlyph": { + "Glyph": "\ue71d", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "OfflineMaps", "Area": "Apps", "Type": "AppSettingsApp", "Command": "ms-settings:maps", - "Glyph": "\ue826" + "IconGlyph": { + "Glyph": "\ue826", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "OfflineMapsDownloadMaps", @@ -125,21 +151,26 @@ "Area": "Apps", "Type": "AppSettingsApp", "Command": "ms-settings:startupapps", - "Glyph": "\ue7b5" + "IconGlyph": { + "Glyph": "\ue7b5", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "VideoPlayback", "Area": "Apps", "Type": "AppSettingsApp", "Command": "ms-settings:videoplayback", - "Glyph": "\ue714" + "IconGlyph": { + "Glyph": "\ue714", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Notifications", "Area": "Cortana", "Type": "AppSettingsApp", - "Command": "ms-settings:cortana-notifications", - "Glyph": null + "Command": "ms-settings:cortana-notifications" }, { "Name": "MoreDetails", @@ -152,14 +183,20 @@ "Area": "Cortana", "Type": "AppSettingsApp", "Command": "ms-settings:cortana-permissions", - "Glyph": "\ue7ef" + "IconGlyph": { + "Glyph": "\ue7ef", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "WindowsSearch", "Area": "Cortana", "Type": "AppSettingsApp", "Command": "ms-settings:cortana-windowssearch", - "Glyph": "\ue713" + "IconGlyph": { + "Glyph": "\ue713", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "CortanaLanguage", @@ -174,8 +211,7 @@ "Name": "Cortana", "Area": "Cortana", "Type": "AppSettingsApp", - "Command": "ms-settings:cortana", - "Glyph": null + "Command": "ms-settings:cortana" }, { "Name": "TalkToCortana", @@ -188,14 +224,20 @@ "Area": "Devices", "Type": "AppSettingsApp", "Command": "ms-settings:autoplay", - "Glyph": "\uec57" + "IconGlyph": { + "Glyph": "\uec57", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Bluetooth", "Area": "Devices", "Type": "AppSettingsApp", "Command": "ms-settings:bluetooth", - "Glyph": "\ue772" + "IconGlyph": { + "Glyph": "\ue772", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "ConnectedDevices", @@ -223,14 +265,20 @@ "Area": "Devices", "Type": "AppSettingsApp", "Command": "ms-settings:pen", - "Glyph": "\uedc6" + "IconGlyph": { + "Glyph": "\uedc6", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "PrintersAndScanners", "Area": "Devices", "Type": "AppSettingsApp", "Command": "ms-settings:printers", - "Glyph": "\ue749" + "IconGlyph": { + "Glyph": "\ue749", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Touchpad", @@ -244,14 +292,20 @@ "Area": "Devices", "Type": "AppSettingsApp", "Command": "ms-settings:typing", - "Glyph": "\ue765" + "IconGlyph": { + "Glyph": "\ue765", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Usb", "Area": "Devices", "Type": "AppSettingsApp", "Command": "ms-settings:usb", - "Glyph": "\ue88e" + "IconGlyph": { + "Glyph": "\ue88e", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Wheel", @@ -285,7 +339,10 @@ "Area": "EaseOfAccess", "Type": "AppSettingsApp", "Command": "ms-settings:easeofaccess-closedcaptioning", - "Glyph": "\ue7f0" + "IconGlyph": { + "Glyph": "\ue7f0", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "ColorFilters", @@ -330,7 +387,10 @@ "Area": "EaseOfAccess", "Type": "AppSettingsApp", "Command": "ms-settings:easeofaccess-eyecontrol", - "Glyph": "\uf19d" + "IconGlyph": { + "Glyph": "\uf19d", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Fonts", @@ -339,14 +399,20 @@ "DeprecatedInBuild": 17763, "Note": "NoteDeprecated17763", "Command": "ms-settings:fonts", - "Glyph": "\ue8d2" + "IconGlyph": { + "Glyph": "\ue8d2", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "HighContrast", "Area": "EaseOfAccess", "Type": "AppSettingsApp", "Command": "ms-settings:easeofaccess-highcontrast", - "Glyph": "\ue706" + "IconGlyph": { + "Glyph": "\ue706", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Keyboard", @@ -362,7 +428,10 @@ "NumLock" ], "Command": "ms-settings:easeofaccess-keyboard", - "Glyph": "\ued4d" + "IconGlyph": { + "Glyph": "\ued4d", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Magnifier", @@ -372,7 +441,10 @@ "Zoom" ], "Command": "ms-settings:easeofaccess-magnifier", - "Glyph": "\uf19d" + "IconGlyph": { + "Glyph": "\uf19d", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Mouse", @@ -396,8 +468,7 @@ "Type": "AppSettingsApp", "DeprecatedInBuild": 17763, "Note": "NoteDeprecated17763", - "Command": "ms-settings:easeofaccess-otheroptions", - "Glyph": null + "Command": "ms-settings:easeofaccess-otheroptions" }, { "Name": "Speech", @@ -420,29 +491,37 @@ "Name": "Broadcasting", "Area": "Gaming", "Type": "AppSettingsApp", - "Command": "ms-settings:gaming-broadcasting", - "Glyph": null + "Command": "ms-settings:gaming-broadcasting" }, { "Name": "GameBar", "Area": "Gaming", "Type": "AppSettingsApp", "Command": "ms-settings:gaming-gamebar", - "Glyph": "\ue713" + "IconGlyph": { + "Glyph": "\ue713", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "GameDvr", "Area": "Gaming", "Type": "AppSettingsApp", "Command": "ms-settings:gaming-gamedvr", - "Glyph": "\ue713" + "IconGlyph": { + "Glyph": "\ue713", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "GameMode", "Area": "Gaming", "Type": "AppSettingsApp", "Command": "ms-settings:gaming-gamemode", - "Glyph": "\uec4a" + "IconGlyph": { + "Glyph": "\uec4a", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "PlayingGameFullScreen", @@ -466,7 +545,10 @@ "Area": "Gaming", "Type": "AppSettingsApp", "Command": "ms-settings:gaming-xboxnetworking", - "Glyph": "\ue713" + "IconGlyph": { + "Glyph": "\ue713", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "SettingsHomePage", @@ -537,14 +619,20 @@ "Area": "NetworkAndInternet", "Type": "AppSettingsApp", "Command": "ms-settings:datausage", - "Glyph": "\uec27" + "IconGlyph": { + "Glyph": "\uec27", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "DialUp", "Area": "NetworkAndInternet", "Type": "AppSettingsApp", "Command": "ms-settings:network-dialup", - "Glyph": "\ue83c" + "IconGlyph": { + "Glyph": "\ue83c", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "DirectAccess", @@ -566,7 +654,10 @@ "Ip" ], "Command": "ms-settings:network-ethernet", - "Glyph": "\ue839" + "IconGlyph": { + "Glyph": "\ue839", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "ManageKnownNetworks", @@ -599,14 +690,20 @@ "Area": "NetworkAndInternet", "Type": "AppSettingsApp", "Command": "ms-settings:network-proxy", - "Glyph": "\ue774" + "IconGlyph": { + "Glyph": "\ue774", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "NetworkStatus", "Area": "NetworkAndInternet", "Type": "AppSettingsApp", "Command": "ms-settings:network-status", - "Glyph": "\uec27" + "IconGlyph": { + "Glyph": "\uec27", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Network", @@ -627,7 +724,10 @@ "Area": "NetworkAndInternet", "Type": "AppSettingsApp", "Command": "ms-settings:network-vpn", - "Glyph": "\ue705" + "IconGlyph": { + "Glyph": "\ue705", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "WiFi", @@ -661,7 +761,10 @@ "Image" ], "Command": "ms-settings:personalization-background", - "Glyph": "\ueb9f" + "IconGlyph": { + "Glyph": "\ueb9f", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "ChooseWhichFoldersAppearOnStart", @@ -671,7 +774,10 @@ "StartPlaces" ], "Command": "ms-settings:personalization-start-places", - "Glyph": "\ueca5" + "IconGlyph": { + "Glyph": "\ueca5", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Colors", @@ -687,7 +793,10 @@ "WindowBorder" ], "Command": "ms-settings:colors", - "Glyph": "\ue790" + "IconGlyph": { + "Glyph": "\ue790", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Glance", @@ -695,8 +804,7 @@ "Type": "AppSettingsApp", "DeprecatedInBuild": 17763, "Note": "NoteDeprecated17763", - "Command": "ms-settings:personalization-glance", - "Glyph": null + "Command": "ms-settings:personalization-glance" }, { "Name": "LockScreen", @@ -733,14 +841,20 @@ "Area": "Personalization", "Type": "AppSettingsApp", "Command": "ms-settings:taskbar", - "Glyph": "\ue90e" + "IconGlyph": { + "Glyph": "\ue90e", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Themes", "Area": "Personalization", "Type": "AppSettingsApp", "Command": "ms-settings:themes", - "Glyph": "\ue771" + "IconGlyph": { + "Glyph": "\ue771", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "AddYourPhone", @@ -769,14 +883,20 @@ "Area": "Privacy", "Type": "AppSettingsApp", "Command": "ms-settings:privacy-accountinfo", - "Glyph": "\ue779" + "IconGlyph": { + "Glyph": "\ue779", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "ActivityHistory", "Area": "Privacy", "Type": "AppSettingsApp", "Command": "ms-settings:privacy-activityhistory", - "Glyph": "\ue7c4" + "IconGlyph": { + "Glyph": "\ue7c4", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "AdvertisingId", @@ -785,28 +905,40 @@ "DeprecatedInBuild": 17763, "Note": "NoteDeprecated17763", "Command": "ms-settings:privacy-advertisingid", - "Glyph": "\ue72e" + "IconGlyph": { + "Glyph": "\ue72e", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "AppDiagnostics", "Area": "Privacy", "Type": "AppSettingsApp", "Command": "ms-settings:privacy-appdiagnostics", - "Glyph": "\ue9d2" + "IconGlyph": { + "Glyph": "\ue9d2", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "AutomaticFileDownloads", "Area": "Privacy", "Type": "AppSettingsApp", "Command": "ms-settings:privacy-automaticfiledownloads", - "Glyph": "\ue753" + "IconGlyph": { + "Glyph": "\ue753", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "BackgroundApps", "Area": "Privacy", "Type": "AppSettingsApp", "Command": "ms-settings:privacy-backgroundapps", - "Glyph": "\ue9d9" + "IconGlyph": { + "Glyph": "\ue9d9", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Calendar", @@ -819,28 +951,40 @@ "Area": "Privacy", "Type": "AppSettingsApp", "Command": "ms-settings:privacy-callhistory", - "Glyph": "\uf738" + "IconGlyph": { + "Glyph": "\uf738", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Camera", "Area": "Privacy", "Type": "AppSettingsApp", "Command": "ms-settings:privacy-webcam", - "Glyph": "\uf439" + "IconGlyph": { + "Glyph": "\uf439", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Contacts", "Area": "Privacy", "Type": "AppSettingsApp", "Command": "ms-settings:privacy-contacts", - "Glyph": "\ue716" + "IconGlyph": { + "Glyph": "\ue716", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Documents", "Area": "Privacy", "Type": "AppSettingsApp", "Command": "ms-settings:privacy-documents", - "Glyph": "\ue7c3" + "IconGlyph": { + "Glyph": "\ue7c3", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Email", @@ -866,14 +1010,20 @@ "Area": "Privacy", "Type": "AppSettingsApp", "Command": "ms-settings:privacy-broadfilesystemaccess", - "Glyph": "\ue7c3" + "IconGlyph": { + "Glyph": "\ue7c3", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "General", "Area": "Privacy", "Type": "AppSettingsApp", "Command": "ms-settings:privacy or privacy-general", - "Glyph": "\uec20" + "IconGlyph": { + "Glyph": "\uec20", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "InkingAndTyping", @@ -883,42 +1033,52 @@ "SpeechTyping" ], "Command": "ms-settings:privacy-speechtyping", - "Glyph": "\ueadf" + "IconGlyph": { + "Glyph": "\ueadf", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Location", "Area": "Privacy", "Type": "AppSettingsApp", "Command": "ms-settings:privacy-location", - "Glyph": "\ue707" + "IconGlyph": { + "Glyph": "\ue707", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Messaging", "Area": "Privacy", "Type": "AppSettingsApp", "Command": "ms-settings:privacy-messaging", - "Glyph": "\uebdb" + "IconGlyph": { + "Glyph": "\uebdb", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Microphone", "Area": "Privacy", "Type": "AppSettingsApp", "Command": "ms-settings:privacy-microphone", - "Glyph": "\ue720" + "IconGlyph": { + "Glyph": "\ue720", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Motion", "Area": "Privacy", "Type": "AppSettingsApp", - "Command": "ms-settings:privacy-motion", - "Glyph": null + "Command": "ms-settings:privacy-motion" }, { "Name": "Notifications", "Area": "Privacy", "Type": "AppSettingsApp", - "Command": "ms-settings:privacy-notifications", - "Glyph": null + "Command": "ms-settings:privacy-notifications" }, { "Name": "OtherDevices", @@ -928,14 +1088,20 @@ "CustomDevices" ], "Command": "ms-settings:privacy-customdevices", - "Glyph": "\ue772" + "IconGlyph": { + "Glyph": "\ue772", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "PhoneCalls", "Area": "Privacy", "Type": "AppSettingsApp", "Command": "ms-settings:privacy-phonecalls", - "Glyph": "\ue77e" + "IconGlyph": { + "Glyph": "\ue77e", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Pictures", @@ -948,7 +1114,10 @@ "Area": "Privacy", "Type": "AppSettingsApp", "Command": "ms-settings:privacy-radios", - "Glyph": "\uec05" + "IconGlyph": { + "Glyph": "\uec05", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Speech", @@ -967,14 +1136,20 @@ "Area": "Privacy", "Type": "AppSettingsApp", "Command": "ms-settings:privacy-videos", - "Glyph": "\ue8b2" + "IconGlyph": { + "Glyph": "\ue8b2", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "VoiceActivation", "Area": "Privacy", "Type": "AppSettingsApp", "Command": "ms-settings:privacy-voiceactivation", - "Glyph": "\uf12e" + "IconGlyph": { + "Glyph": "\uf12e", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Accounts", @@ -1008,7 +1183,10 @@ "Area": "SurfaceHub", "Type": "AppSettingsApp", "Command": "ms-settings:surfacehub-welcome", - "Glyph": "\uee3f" + "IconGlyph": { + "Glyph": "\uee3f", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "About", @@ -1023,7 +1201,10 @@ "Version" ], "Command": "ms-settings:about", - "Glyph": "\ue946" + "IconGlyph": { + "Glyph": "\ue946", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "AdvancedDisplaySettings", @@ -1031,7 +1212,10 @@ "Type": "AppSettingsApp", "Note": "NoteDisplayGraphics", "Command": "ms-settings:display-advanced", - "Glyph": "\ue7f4" + "IconGlyph": { + "Glyph": "\ue7f4", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "AppVolumeAndDevicePreferences", @@ -1070,7 +1254,10 @@ "Area": "System", "Type": "AppSettingsApp", "Command": "ms-settings:clipboard", - "Glyph": "\ue77f" + "IconGlyph": { + "Glyph": "\ue77f", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Display", @@ -1089,14 +1276,20 @@ "Area": "System", "Type": "AppSettingsApp", "Command": "ms-settings:savelocations", - "Glyph": "\ueda2" + "IconGlyph": { + "Glyph": "\ueda2", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "ScreenRotation", "Area": "System", "Type": "AppSettingsApp", "Command": "ms-settings:screenrotation", - "Glyph": "\ue7f4" + "IconGlyph": { + "Glyph": "\ue7f4", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "DuplicatingMyDisplay", @@ -1142,15 +1335,17 @@ "AdvancedGraphics" ], "Note": "NoteAdvancedGraphics", - "Command": "ms-settings:display-advancedgraphics", - "Glyph": null + "Command": "ms-settings:display-advancedgraphics" }, { "Name": "Messaging", "Area": "System", "Type": "AppSettingsApp", "Command": "ms-settings:messaging", - "Glyph": "\uebdb" + "IconGlyph": { + "Glyph": "\uebdb", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Multitasking", @@ -1163,14 +1358,16 @@ "VirtualDesktops" ], "Command": "ms-settings:multitasking", - "Glyph": "\ue7c4" + "IconGlyph": { + "Glyph": "\ue7c4", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "NightLightSettings", "Area": "System", "Type": "AppSettingsApp", - "Command": "ms-settings:nightlight", - "Glyph": null + "Command": "ms-settings:nightlight" }, { "Name": "PhoneDefaultApps", @@ -1183,7 +1380,10 @@ "Area": "System", "Type": "AppSettingsApp", "Command": "ms-settings:project", - "Glyph": "\uebc6" + "IconGlyph": { + "Glyph": "\uebc6", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "SharedExperiences", @@ -1193,28 +1393,36 @@ "Crossdevice" ], "Command": "ms-settings:crossdevice", - "Glyph": "\uf22c" + "IconGlyph": { + "Glyph": "\uf22c", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "TabletMode", "Area": "System", "Type": "AppSettingsApp", "Command": "ms-settings:tabletmode", - "Glyph": "\uebfc" + "IconGlyph": { + "Glyph": "\uebfc", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Taskbar", "Area": "System", "Type": "AppSettingsApp", "Command": "ms-settings:taskbar", - "Glyph": "\ue90e" + "IconGlyph": { + "Glyph": "\ue90e", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "NotificationsAndActions", "Area": "System", "Type": "AppSettingsApp", - "Command": "ms-settings:notifications", - "Glyph": null + "Command": "ms-settings:notifications" }, { "Name": "RemoteDesktop", @@ -1235,21 +1443,30 @@ "Area": "System", "Type": "AppSettingsApp", "Command": "ms-settings:powersleep", - "Glyph": "\uf83d" + "IconGlyph": { + "Glyph": "\uf83d", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Sound", "Area": "System", "Type": "AppSettingsApp", "Command": "ms-settings:sound", - "Glyph": "\ue995" + "IconGlyph": { + "Glyph": "\ue995", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "StorageSense", "Area": "System", "Type": "AppSettingsApp", "Command": "ms-settings:storagesense", - "Glyph": "\ueda2" + "IconGlyph": { + "Glyph": "\ueda2", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "StoragePolicies", @@ -1262,7 +1479,10 @@ "Area": "TimeAndLanguage", "Type": "AppSettingsApp", "Command": "ms-settings:dateandtime", - "Glyph": "\uec92" + "IconGlyph": { + "Glyph": "\uec92", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "JapanImeSettings", @@ -1282,14 +1502,20 @@ "RegionFormatting" ], "Command": "ms-settings:regionformatting", - "Glyph": "\uf49a" + "IconGlyph": { + "Glyph": "\uf49a", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Keyboard", "Area": "TimeAndLanguage", "Type": "AppSettingsApp", "Command": "ms-settings:keyboard", - "Glyph": "\ued4d" + "IconGlyph": { + "Glyph": "\ued4d", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "RegionalLanguage", @@ -1367,7 +1593,10 @@ "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", "Command": "ms-settings:activation", - "Glyph": "\ue930" + "IconGlyph": { + "Glyph": "\ue930", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "Backup", @@ -1380,14 +1609,20 @@ "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", "Command": "ms-settings:delivery-optimization", - "Glyph": "\uf785" + "IconGlyph": { + "Glyph": "\uf785", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "FindMyDevice", "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", "Command": "ms-settings:findmydevice", - "Glyph": "\ue707" + "IconGlyph": { + "Glyph": "\ue707", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "ForDevelopers", @@ -1406,7 +1641,10 @@ "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", "Command": "ms-settings:troubleshoot", - "Glyph": "\ue90f" + "IconGlyph": { + "Glyph": "\ue90f", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "WindowsSecurity", @@ -1435,7 +1673,10 @@ "Area": "UpdateAndSecurity", "Type": "AppSettingsApp", "Command": "ms-settings:windowsupdate", - "Glyph": "\ue895" + "IconGlyph": { + "Glyph": "\ue895", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "WindowsUpdateCheckForUpdates", @@ -1482,7 +1723,10 @@ "Type": "AppSettingsApp", "Note": "NoteMobileProvisioning", "Command": "ms-settings:provisioning", - "Glyph": "\ue821" + "IconGlyph": { + "Glyph": "\ue821", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "WindowsAnywhere", @@ -1532,7 +1776,10 @@ "Area": "Programs", "Type": "ControlPanel", "Command": "control /name Microsoft.AutoPlay", - "Glyph": "\uec57" + "IconGlyph": { + "Glyph": "\uec57", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "BackupAndRestore", @@ -1590,7 +1837,10 @@ "timedate.cpl" ], "Command": "control /name Microsoft.DateAndTime", - "Glyph": "\uec92" + "IconGlyph": { + "Glyph": "\uec92", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "DefaultLocation", @@ -1633,7 +1883,10 @@ "Area": "AppearanceAndPersonalization", "Type": "ControlPanel", "Command": "control /name Microsoft.Fonts", - "Glyph": "\ue8d2" + "IconGlyph": { + "Glyph": "\ue8d2", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "GameControllers", @@ -1856,7 +2109,10 @@ "Area": "HardwareAndSound", "Type": "ControlPanel", "Command": "control /name Microsoft.Sound", - "Glyph": "\ue995" + "IconGlyph": { + "Glyph": "\ue995", + "FontFamily": "Segoe MDL2 Assets" + } }, { "Name": "SpeechRecognition", From 53e305d76544ef07f65c5c0e254b98214a408e44 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Fri, 6 Aug 2021 18:52:09 +1000 Subject: [PATCH 024/625] update per review --- .../Views/ActionKeywordSetting.xaml.cs | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Views/ActionKeywordSetting.xaml.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ActionKeywordSetting.xaml.cs index 14db6d4733f..dfac163bcec 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Views/ActionKeywordSetting.xaml.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ActionKeywordSetting.xaml.cs @@ -63,23 +63,17 @@ private void OnDoneButtonClick(object sender, RoutedEventArgs e) } - if (ActionKeyword == Query.GlobalPluginWildcardSign - && (CurrentActionKeyword.KeywordProperty == Settings.ActionKeyword.FileContentSearchActionKeyword - || CurrentActionKeyword.KeywordProperty == Settings.ActionKeyword.QuickAccessActionKeyword)) - { + if (ActionKeyword == Query.GlobalPluginWildcardSign) switch (CurrentActionKeyword.KeywordProperty) { case Settings.ActionKeyword.FileContentSearchActionKeyword: MessageBox.Show(settingsViewModel.Context.API.GetTranslation("plugin_explorer_globalActionKeywordInvalid")); - break; + return; case Settings.ActionKeyword.QuickAccessActionKeyword: MessageBox.Show(settingsViewModel.Context.API.GetTranslation("plugin_explorer_quickaccess_globalActionKeywordInvalid")); - break; + return; } - return; - } - var oldActionKeyword = CurrentActionKeyword.Keyword; // == because of nullable @@ -92,7 +86,7 @@ private void OnDoneButtonClick(object sender, RoutedEventArgs e) switch (Enabled) { // reset to global so it does not take up an action keyword when disabled - // not for null Enable plugin + // not for null Enable plugin case false when oldActionKeyword != Query.GlobalPluginWildcardSign: settingsViewModel.UpdateActionKeyword(CurrentActionKeyword.KeywordProperty, Query.GlobalPluginWildcardSign, oldActionKeyword); From b86a2a8f5f42d7a23a7cb011ca58524f6b6646c9 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Fri, 6 Aug 2021 17:04:19 +0800 Subject: [PATCH 025/625] Handle Font file --- Flow.Launcher/ViewModel/ResultViewModel.cs | 38 ++++++++++++++-------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/Flow.Launcher/ViewModel/ResultViewModel.cs b/Flow.Launcher/ViewModel/ResultViewModel.cs index ce4b23d2184..c8664dc36f4 100644 --- a/Flow.Launcher/ViewModel/ResultViewModel.cs +++ b/Flow.Launcher/ViewModel/ResultViewModel.cs @@ -6,6 +6,7 @@ using Flow.Launcher.Infrastructure.Logger; using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Plugin; +using System.IO; namespace Flow.Launcher.ViewModel { @@ -60,14 +61,25 @@ public ResultViewModel(Result result, Settings settings) Result = result; Image = new LazyAsync( - SetImage, - ImageLoader.DefaultImage, - () => - { - OnPropertyChanged(nameof(Image)); - }); - - Glyph = Result.Glyph; + SetImage, + ImageLoader.DefaultImage, + () => + { + OnPropertyChanged(nameof(Image)); + }); + + if (Result.Glyph.FontFamily.Contains('/')) + { + var fontPath = Result.Glyph.FontFamily; + Glyph = Path.IsPathRooted(fontPath) ? Result.Glyph : Result.Glyph with + { + FontFamily = Path.Combine(Result.PluginDirectory, fontPath) + }; + } + else + { + Glyph = Result.Glyph; + } } Settings = settings; @@ -81,12 +93,12 @@ public ResultViewModel(Result result, Settings settings) public string OpenResultModifiers => Settings.OpenResultModifiers; public string ShowTitleToolTip => string.IsNullOrEmpty(Result.TitleToolTip) - ? Result.Title - : Result.TitleToolTip; + ? Result.Title + : Result.TitleToolTip; public string ShowSubTitleToolTip => string.IsNullOrEmpty(Result.SubTitleToolTip) - ? Result.SubTitle - : Result.SubTitleToolTip; + ? Result.SubTitle + : Result.SubTitleToolTip; public LazyAsync Image { get; set; } @@ -140,4 +152,4 @@ public override string ToString() return Result.ToString(); } } -} +} \ No newline at end of file From 9eeb04ec1363ab103318b4df859c9f3a918d892d Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Fri, 6 Aug 2021 17:15:10 +0800 Subject: [PATCH 026/625] fix logic --- Flow.Launcher/ViewModel/ResultViewModel.cs | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/Flow.Launcher/ViewModel/ResultViewModel.cs b/Flow.Launcher/ViewModel/ResultViewModel.cs index c8664dc36f4..3eba63b2232 100644 --- a/Flow.Launcher/ViewModel/ResultViewModel.cs +++ b/Flow.Launcher/ViewModel/ResultViewModel.cs @@ -68,17 +68,20 @@ public ResultViewModel(Result result, Settings settings) OnPropertyChanged(nameof(Image)); }); - if (Result.Glyph.FontFamily.Contains('/')) + if (Result.Glyph is { FontFamily: not null } glyph) { - var fontPath = Result.Glyph.FontFamily; - Glyph = Path.IsPathRooted(fontPath) ? Result.Glyph : Result.Glyph with + if (glyph.FontFamily.Contains('/')) { - FontFamily = Path.Combine(Result.PluginDirectory, fontPath) - }; - } - else - { - Glyph = Result.Glyph; + var fontPath = Result.Glyph.FontFamily; + Glyph = Path.IsPathRooted(fontPath) ? Result.Glyph : Result.Glyph with + { + FontFamily = Path.Combine(Result.PluginDirectory, fontPath) + }; + } + else + { + Glyph = glyph; + } } } From 0f66baf64dd7a5466aa66cc099387d30678b2137 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 9 Aug 2021 20:06:18 +1000 Subject: [PATCH 027/625] add comment for system font loading --- Flow.Launcher/ViewModel/ResultViewModel.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Flow.Launcher/ViewModel/ResultViewModel.cs b/Flow.Launcher/ViewModel/ResultViewModel.cs index 3eba63b2232..a73e3847d8e 100644 --- a/Flow.Launcher/ViewModel/ResultViewModel.cs +++ b/Flow.Launcher/ViewModel/ResultViewModel.cs @@ -70,6 +70,7 @@ public ResultViewModel(Result result, Settings settings) if (Result.Glyph is { FontFamily: not null } glyph) { + // Checks if it's a system installed font, which does not require path to be provided. if (glyph.FontFamily.Contains('/')) { var fontPath = Result.Glyph.FontFamily; @@ -155,4 +156,4 @@ public override string ToString() return Result.ToString(); } } -} \ No newline at end of file +} From 317ce59ee769df71bbc7a6d6f87f62b04d56afb7 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Tue, 10 Aug 2021 20:24:27 +1000 Subject: [PATCH 028/625] add comment for system font loading --- Flow.Launcher/ViewModel/ResultViewModel.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Flow.Launcher/ViewModel/ResultViewModel.cs b/Flow.Launcher/ViewModel/ResultViewModel.cs index 176943e4cd7..328dbcba5f6 100644 --- a/Flow.Launcher/ViewModel/ResultViewModel.cs +++ b/Flow.Launcher/ViewModel/ResultViewModel.cs @@ -20,6 +20,7 @@ public ResultViewModel(Result result, Settings settings) if (Result.Glyph is { FontFamily: not null } glyph) { + // Checks if it's a system installed font, which does not require path to be provided. if (glyph.FontFamily.EndsWith(".ttf") || glyph.FontFamily.EndsWith(".otf")) { var fontPath = Result.Glyph.FontFamily; @@ -127,4 +128,4 @@ public override string ToString() return Result.ToString(); } } -} \ No newline at end of file +} From fe45e3bdd27ba6f89d4e7046976713cbe2cff39c Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 12 Aug 2021 09:12:38 +1000 Subject: [PATCH 029/625] update python message from install to download --- Flow.Launcher.Core/Plugin/PluginsLoader.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher.Core/Plugin/PluginsLoader.cs b/Flow.Launcher.Core/Plugin/PluginsLoader.cs index 1b78c68aee8..b3d56221a71 100644 --- a/Flow.Launcher.Core/Plugin/PluginsLoader.cs +++ b/Flow.Launcher.Core/Plugin/PluginsLoader.cs @@ -120,8 +120,8 @@ public static IEnumerable PythonPlugins(List source, var pythonPath = string.Empty; - if (MessageBox.Show("Flow detected you have installed Python plugins, " + - "would you like to install Python to run them? " + + if (MessageBox.Show("Flow detected you have installed Python plugins, which " + + "will need Python to run. Would you like to download Python? " + Environment.NewLine + Environment.NewLine + "Click no if it's already installed, " + "and you will be prompted to select the folder that contains the Python executable", From 7ab86ca1f2606d57350c0337c8a2ae8aefe7a764 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Fri, 13 Aug 2021 13:55:07 +0800 Subject: [PATCH 030/625] Refactor JsonRPC structure --- Flow.Launcher.Core/Plugin/ExecutablePlugin.cs | 24 ++----------- Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs | 34 +++++++++++++------ Flow.Launcher.Core/Plugin/PythonPlugin.cs | 23 ++----------- .../Plugins/JsonRPCPluginTest.cs | 17 ++++------ 4 files changed, 34 insertions(+), 64 deletions(-) diff --git a/Flow.Launcher.Core/Plugin/ExecutablePlugin.cs b/Flow.Launcher.Core/Plugin/ExecutablePlugin.cs index 13b6ac968da..0982e401715 100644 --- a/Flow.Launcher.Core/Plugin/ExecutablePlugin.cs +++ b/Flow.Launcher.Core/Plugin/ExecutablePlugin.cs @@ -24,36 +24,16 @@ public ExecutablePlugin(string filename) }; } - protected override Task ExecuteQueryAsync(Query query, CancellationToken token) + protected override Task RequestAsync(JsonRPCRequestModel request, CancellationToken token = default) { - JsonRPCServerRequestModel request = new JsonRPCServerRequestModel - { - Method = "query", - Parameters = new object[] {query.Search}, - }; - _startInfo.Arguments = $"\"{request}\""; - return ExecuteAsync(_startInfo, token); } - protected override string ExecuteCallback(JsonRPCRequestModel rpcRequest) + protected override string Request(JsonRPCRequestModel rpcRequest, CancellationToken token = default) { _startInfo.Arguments = $"\"{rpcRequest}\""; return Execute(_startInfo); } - - protected override string ExecuteContextMenu(Result selectedResult) - { - JsonRPCServerRequestModel request = new JsonRPCServerRequestModel - { - Method = "contextmenu", - Parameters = new object[] {selectedResult.ContextData}, - }; - - _startInfo.Arguments = $"\"{request}\""; - - return Execute(_startInfo); - } } } \ No newline at end of file diff --git a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs index 0df853a5d1f..9d9a0186c71 100644 --- a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs +++ b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs @@ -30,16 +30,22 @@ internal abstract class JsonRPCPlugin : IAsyncPlugin, IContextMenu /// The language this JsonRPCPlugin support /// public abstract string SupportedLanguage { get; set; } - - protected abstract Task ExecuteQueryAsync(Query query, CancellationToken token); - protected abstract string ExecuteCallback(JsonRPCRequestModel rpcRequest); - protected abstract string ExecuteContextMenu(Result selectedResult); + protected abstract Task RequestAsync(JsonRPCRequestModel rpcRequest, CancellationToken token = default); + protected abstract string Request(JsonRPCRequestModel rpcRequest, CancellationToken token = default); private static readonly RecyclableMemoryStreamManager BufferManager = new(); public List LoadContextMenus(Result selectedResult) { - var output = ExecuteContextMenu(selectedResult); + var request = new JsonRPCRequestModel + { + Method = "context_menu", + Parameters = new[] + { + selectedResult.ContextData + } + }; + var output = Request(request); return DeserializedResult(output); } @@ -100,7 +106,7 @@ private List ParseResults(JsonRPCQueryResponseModel queryResponseModel) } else { - var actionResponse = ExecuteCallback(result.JsonRPCAction); + var actionResponse = Request(result.JsonRPCAction); if (string.IsNullOrEmpty(actionResponse)) { @@ -255,8 +261,8 @@ protected async Task ExecuteAsync(ProcessStartInfo startInfo, Cancellati if (buffer.Length == 0) { - var errorMessage = process.StandardError.EndOfStream ? - "Empty JSONRPC Response" : + var errorMessage = process.StandardError.EndOfStream ? + "Empty JSONRPC Response" : await process.StandardError.ReadToEndAsync(); throw new InvalidDataException($"{context.CurrentPluginMetadata.Name}|{errorMessage}"); } @@ -283,7 +289,15 @@ protected async Task ExecuteAsync(ProcessStartInfo startInfo, Cancellati public async Task> QueryAsync(Query query, CancellationToken token) { - var output = await ExecuteQueryAsync(query, token); + var request = new JsonRPCRequestModel + { + Method = "query", + Parameters = new[] + { + query.Search + } + }; + var output = await RequestAsync(request, token); return await DeserializedResultAsync(output); } @@ -293,4 +307,4 @@ public virtual Task InitAsync(PluginInitContext context) return Task.CompletedTask; } } -} +} \ No newline at end of file diff --git a/Flow.Launcher.Core/Plugin/PythonPlugin.cs b/Flow.Launcher.Core/Plugin/PythonPlugin.cs index 5d2d8d51d43..6f43b6df5be 100644 --- a/Flow.Launcher.Core/Plugin/PythonPlugin.cs +++ b/Flow.Launcher.Core/Plugin/PythonPlugin.cs @@ -32,13 +32,8 @@ public PythonPlugin(string filename) _startInfo.ArgumentList.Add("-B"); } - protected override Task ExecuteQueryAsync(Query query, CancellationToken token) + protected override Task RequestAsync(JsonRPCRequestModel request, CancellationToken token = default) { - JsonRPCServerRequestModel request = new JsonRPCServerRequestModel - { - Method = "query", Parameters = new object[] {query.Search}, - }; - _startInfo.ArgumentList[2] = request.ToString(); // todo happlebao why context can't be used in constructor @@ -47,27 +42,13 @@ protected override Task ExecuteQueryAsync(Query query, CancellationToken return ExecuteAsync(_startInfo, token); } - protected override string ExecuteCallback(JsonRPCRequestModel rpcRequest) + protected override string Request(JsonRPCRequestModel rpcRequest, CancellationToken token = default) { _startInfo.ArgumentList[2] = rpcRequest.ToString(); _startInfo.WorkingDirectory = context.CurrentPluginMetadata.PluginDirectory; // TODO: Async Action return Execute(_startInfo); } - - protected override string ExecuteContextMenu(Result selectedResult) - { - JsonRPCServerRequestModel request = new JsonRPCServerRequestModel - { - Method = "context_menu", Parameters = new object[] {selectedResult.ContextData}, - }; - _startInfo.ArgumentList[2] = request.ToString(); - _startInfo.WorkingDirectory = context.CurrentPluginMetadata.PluginDirectory; - - // TODO: Async Action - return Execute(_startInfo); - } - public override Task InitAsync(PluginInitContext context) { this.context = context; diff --git a/Flow.Launcher.Test/Plugins/JsonRPCPluginTest.cs b/Flow.Launcher.Test/Plugins/JsonRPCPluginTest.cs index 2b9512692f5..383650619ce 100644 --- a/Flow.Launcher.Test/Plugins/JsonRPCPluginTest.cs +++ b/Flow.Launcher.Test/Plugins/JsonRPCPluginTest.cs @@ -18,19 +18,14 @@ internal class JsonRPCPluginTest : JsonRPCPlugin { public override string SupportedLanguage { get; set; } = AllowedLanguage.Executable; - protected override string ExecuteCallback(JsonRPCRequestModel rpcRequest) + protected override string Request(JsonRPCRequestModel rpcRequest, CancellationToken token = default) { throw new System.NotImplementedException(); } - protected override string ExecuteContextMenu(Result selectedResult) + protected override Task RequestAsync(JsonRPCRequestModel request, CancellationToken token = default) { - throw new System.NotImplementedException(); - } - - protected override Task ExecuteQueryAsync(Query query, CancellationToken token) - { - var byteInfo = Encoding.UTF8.GetBytes(query.RawQuery); + var byteInfo = Encoding.UTF8.GetBytes(request.Parameters[0] as string ?? string.Empty); var resultStream = new MemoryStream(byteInfo); return Task.FromResult((Stream)resultStream); @@ -45,7 +40,7 @@ public async Task GivenVariousJsonText_WhenVariousNamingCase_ThenExpectNotNullRe { var results = await QueryAsync(new Query { - RawQuery = resultText + Search = resultText }, default); Assert.IsNotNull(results); @@ -85,8 +80,8 @@ public async Task GivenModel_WhenSerializeWithDifferentNamingPolicy_ThenExpectSa var pascalText = JsonSerializer.Serialize(reference); - var results1 = await QueryAsync(new Query { RawQuery = camelText }, default); - var results2 = await QueryAsync(new Query { RawQuery = pascalText }, default); + var results1 = await QueryAsync(new Query { Search = camelText }, default); + var results2 = await QueryAsync(new Query { Search = pascalText }, default); Assert.IsNotNull(results1); Assert.IsNotNull(results2); From 991b89ff441714efc2c1214b1a58583b5c376506 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Fri, 13 Aug 2021 15:56:58 +0800 Subject: [PATCH 031/625] Remove Legacy debug in sync request --- Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs index 9d9a0186c71..65977219d8f 100644 --- a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs +++ b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs @@ -198,15 +198,6 @@ protected string Execute(ProcessStartInfo startInfo) return string.Empty; } - if (result.StartsWith("DEBUG:")) - { - MessageBox.Show(new Form - { - TopMost = true - }, result.Substring(6)); - return string.Empty; - } - return result; } catch (Exception e) From 8ae13a54735ef3681657f093c3d06d194b442da6 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sat, 14 Aug 2021 06:51:11 +0800 Subject: [PATCH 032/625] Move working directary setting to init --- Flow.Launcher.Core/Plugin/PythonPlugin.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Flow.Launcher.Core/Plugin/PythonPlugin.cs b/Flow.Launcher.Core/Plugin/PythonPlugin.cs index 6f43b6df5be..5711ed6aae9 100644 --- a/Flow.Launcher.Core/Plugin/PythonPlugin.cs +++ b/Flow.Launcher.Core/Plugin/PythonPlugin.cs @@ -36,9 +36,6 @@ protected override Task RequestAsync(JsonRPCRequestModel request, Cancel { _startInfo.ArgumentList[2] = request.ToString(); - // todo happlebao why context can't be used in constructor - _startInfo.WorkingDirectory = context.CurrentPluginMetadata.PluginDirectory; - return ExecuteAsync(_startInfo, token); } @@ -54,6 +51,9 @@ public override Task InitAsync(PluginInitContext context) this.context = context; _startInfo.ArgumentList.Add(context.CurrentPluginMetadata.ExecuteFilePath); _startInfo.ArgumentList.Add(""); + + _startInfo.WorkingDirectory = context.CurrentPluginMetadata.PluginDirectory; + return Task.CompletedTask; } } From fd794b8e779c4bea727ec4576151d79babd5da37 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sat, 14 Aug 2021 07:12:22 +0800 Subject: [PATCH 033/625] Bump Dependency --- Flow.Launcher.Core/Flow.Launcher.Core.csproj | 4 ++-- .../Flow.Launcher.Infrastructure.csproj | 6 +++--- Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj | 2 +- Flow.Launcher.Test/Flow.Launcher.Test.csproj | 4 ++-- Flow.Launcher/Flow.Launcher.csproj | 10 +++++----- .../Flow.Launcher.Plugin.BrowserBookmark.csproj | 4 ++-- .../Flow.Launcher.Plugin.Calculator.csproj | 2 +- .../Flow.Launcher.Plugin.Explorer.csproj | 2 +- .../Flow.Launcher.Plugin.PluginsManager.csproj | 2 +- 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Flow.Launcher.Core/Flow.Launcher.Core.csproj b/Flow.Launcher.Core/Flow.Launcher.Core.csproj index 9e932a5085b..60c4ec3de19 100644 --- a/Flow.Launcher.Core/Flow.Launcher.Core.csproj +++ b/Flow.Launcher.Core/Flow.Launcher.Core.csproj @@ -53,8 +53,8 @@ - - + + diff --git a/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj b/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj index aea43506ef5..47c6c2ef3cb 100644 --- a/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj +++ b/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj @@ -53,9 +53,9 @@ - - - + + + diff --git a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj index 664373434bf..67c76d0064d 100644 --- a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj +++ b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj @@ -61,7 +61,7 @@ - + diff --git a/Flow.Launcher.Test/Flow.Launcher.Test.csproj b/Flow.Launcher.Test/Flow.Launcher.Test.csproj index 84c9137b792..8de0681c85f 100644 --- a/Flow.Launcher.Test/Flow.Launcher.Test.csproj +++ b/Flow.Launcher.Test/Flow.Launcher.Test.csproj @@ -48,13 +48,13 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + \ No newline at end of file diff --git a/Flow.Launcher/Flow.Launcher.csproj b/Flow.Launcher/Flow.Launcher.csproj index f3885ccfdd6..d360aca8592 100644 --- a/Flow.Launcher/Flow.Launcher.csproj +++ b/Flow.Launcher/Flow.Launcher.csproj @@ -81,14 +81,14 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj index acfc79d7a83..73f00a98623 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj @@ -64,8 +64,8 @@ - - + + diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Flow.Launcher.Plugin.Calculator.csproj b/Plugins/Flow.Launcher.Plugin.Calculator/Flow.Launcher.Plugin.Calculator.csproj index 159f6a7287b..d7dd507dce6 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Flow.Launcher.Plugin.Calculator.csproj +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Flow.Launcher.Plugin.Calculator.csproj @@ -62,7 +62,7 @@ - + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Flow.Launcher.Plugin.Explorer.csproj b/Plugins/Flow.Launcher.Plugin.Explorer/Flow.Launcher.Plugin.Explorer.csproj index 71c0463b5b5..8f9466794c1 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Flow.Launcher.Plugin.Explorer.csproj +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Flow.Launcher.Plugin.Explorer.csproj @@ -38,7 +38,7 @@ - + diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Flow.Launcher.Plugin.PluginsManager.csproj b/Plugins/Flow.Launcher.Plugin.PluginsManager/Flow.Launcher.Plugin.PluginsManager.csproj index 93038ab8530..62534ef98b1 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Flow.Launcher.Plugin.PluginsManager.csproj +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Flow.Launcher.Plugin.PluginsManager.csproj @@ -38,6 +38,6 @@ - + \ No newline at end of file From 67027eb74b392380e588e00a1e801394bd6514bd Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Tue, 17 Aug 2021 00:50:36 +0800 Subject: [PATCH 034/625] Allow JsonRPCPlugin.cs to have setting control --- Flow.Launcher.Core/Plugin/JsonPRCModel.cs | 2 +- Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs | 130 ++++++++++++++++++++- Flow.Launcher.Core/Plugin/PythonPlugin.cs | 7 +- 3 files changed, 128 insertions(+), 11 deletions(-) diff --git a/Flow.Launcher.Core/Plugin/JsonPRCModel.cs b/Flow.Launcher.Core/Plugin/JsonPRCModel.cs index 5232e46daee..3dcefc094ee 100644 --- a/Flow.Launcher.Core/Plugin/JsonPRCModel.cs +++ b/Flow.Launcher.Core/Plugin/JsonPRCModel.cs @@ -45,7 +45,7 @@ public class JsonRPCQueryResponseModel : JsonRPCResponseModel public string DebugMessage { get; set; } } - + public class JsonRPCRequestModel { public string Method { get; set; } diff --git a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs index 65977219d8f..d1bfaee216a 100644 --- a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs +++ b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs @@ -1,4 +1,6 @@ -using Flow.Launcher.Core.Resource; +using Accessibility; +using Flow.Launcher.Core.Resource; +using Flow.Launcher.Infrastructure; using System; using System.Collections.Generic; using System.Diagnostics; @@ -8,12 +10,22 @@ using System.Text.Json; using System.Threading; using System.Threading.Tasks; -using System.Windows.Forms; using Flow.Launcher.Infrastructure.Logger; +using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Plugin; using ICSharpCode.SharpZipLib.Zip; using JetBrains.Annotations; using Microsoft.IO; +using System.Text.Json.Serialization; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Forms; +using CheckBox = System.Windows.Controls.CheckBox; +using Control = System.Windows.Controls.Control; +using Label = System.Windows.Controls.Label; +using Orientation = System.Windows.Controls.Orientation; +using TextBox = System.Windows.Controls.TextBox; +using UserControl = System.Windows.Controls.UserControl; namespace Flow.Launcher.Core.Plugin { @@ -21,7 +33,7 @@ namespace Flow.Launcher.Core.Plugin /// Represent the plugin that using JsonPRC /// every JsonRPC plugin should has its own plugin instance /// - internal abstract class JsonRPCPlugin : IAsyncPlugin, IContextMenu + internal abstract class JsonRPCPlugin : IAsyncPlugin, IContextMenu, ISettingProvider, ISavable { protected PluginInitContext context; public const string JsonRPC = "JsonRPC"; @@ -35,6 +47,8 @@ internal abstract class JsonRPCPlugin : IAsyncPlugin, IContextMenu private static readonly RecyclableMemoryStreamManager BufferManager = new(); + private string SettingPath => Path.Combine(DataLocation.PluginSettingsDirectory, context.CurrentPluginMetadata.Name, "Setting.json"); + public List LoadContextMenus(Result selectedResult) { var request = new JsonRPCRequestModel @@ -58,6 +72,7 @@ public List LoadContextMenus(Result selectedResult) new JsonObjectConverter() } }; + private Dictionary Settings { get; set; } private async Task> DeserializedResultAsync(Stream output) { @@ -292,10 +307,115 @@ public async Task> QueryAsync(Query query, CancellationToken token) return await DeserializedResultAsync(output); } - public virtual Task InitAsync(PluginInitContext context) + public async Task InitSettingAsync() + { + if (File.Exists(SettingPath)) + Settings = await JsonSerializer.DeserializeAsync>(File.OpenRead(SettingPath), options); + + var request = new JsonRPCRequestModel() + { + Method = "get_setting_template" + }; + await using var result = await RequestAsync(request); + if (result.Length == 0) + return; + var settingsTemplate = await JsonSerializer.DeserializeAsync>(result, options) ?? + new(); + + Settings ??= new(); + + foreach (var (key, element) in settingsTemplate) + { + if (!Settings.ContainsKey(key)) + { + Settings[key] = element.ValueKind switch + { + JsonValueKind.True or JsonValueKind.False => element.GetBoolean(), + JsonValueKind.String or JsonValueKind.Number => element.GetString(), + JsonValueKind.Null => throw new ArgumentNullException(), + _ => throw new ArgumentOutOfRangeException() + }; + } + } + } + + public virtual async Task InitAsync(PluginInitContext context) { this.context = context; - return Task.CompletedTask; + await InitSettingAsync(); + } + private static Thickness settingControlMargin = new(10); + public Control CreateSettingPanel() + { + if (Settings == null) + return new(); + var settingWindow = new UserControl(); + var mainPanel = new StackPanel + { + Margin = settingControlMargin, + Orientation = Orientation.Vertical + }; + settingWindow.Content = mainPanel; + foreach (var (key, value) in Settings) + { + var panel = new StackPanel + { + Orientation = Orientation.Horizontal, + Margin = settingControlMargin + }; + var name = new Label + { + Content = key, + VerticalAlignment = VerticalAlignment.Center + }; + UIElement content = null; + switch (value) + { + case int i: + case double d: + throw new TypeAccessException(); + case string s: + var textBox = new TextBox + { + Text = s, + Margin = settingControlMargin, + VerticalAlignment = VerticalAlignment.Center + }; + textBox.TextChanged += (_, _) => + { + Settings[key] = textBox.Text; + }; + content = textBox; + break; + case bool b: + var checkBox = new CheckBox + { + IsChecked = b, + Margin = settingControlMargin, + VerticalAlignment = VerticalAlignment.Center + }; + checkBox.Click += (_, _) => + { + Settings[key] = checkBox.IsChecked; + }; + content = checkBox; + break; + default: + throw new ArgumentOutOfRangeException(); + } + panel.Children.Add(name); + panel.Children.Add(content); + mainPanel.Children.Add(panel); + } + return settingWindow; + } + public void Save() + { + if (Settings != null) + { + Helper.ValidateDirectory(Path.Combine(DataLocation.PluginSettingsDirectory, context.CurrentPluginMetadata.Name)); + File.WriteAllText(SettingPath, JsonSerializer.Serialize(Settings)); + } } } } \ No newline at end of file diff --git a/Flow.Launcher.Core/Plugin/PythonPlugin.cs b/Flow.Launcher.Core/Plugin/PythonPlugin.cs index 5711ed6aae9..968c0ab2325 100644 --- a/Flow.Launcher.Core/Plugin/PythonPlugin.cs +++ b/Flow.Launcher.Core/Plugin/PythonPlugin.cs @@ -46,15 +46,12 @@ protected override string Request(JsonRPCRequestModel rpcRequest, CancellationTo // TODO: Async Action return Execute(_startInfo); } - public override Task InitAsync(PluginInitContext context) + public override async Task InitAsync(PluginInitContext context) { - this.context = context; _startInfo.ArgumentList.Add(context.CurrentPluginMetadata.ExecuteFilePath); _startInfo.ArgumentList.Add(""); - + await base.InitAsync(context); _startInfo.WorkingDirectory = context.CurrentPluginMetadata.PluginDirectory; - - return Task.CompletedTask; } } } \ No newline at end of file From e14cbb2ef9157b69b17ad5d8a884861c62116483 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Thu, 19 Aug 2021 11:20:40 +0800 Subject: [PATCH 035/625] downgrade pinyin library until further discussion --- .../Flow.Launcher.Infrastructure.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj b/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj index 47c6c2ef3cb..2bec7c2c77b 100644 --- a/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj +++ b/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj @@ -55,7 +55,7 @@ - + From bd33914abc25ad6f1295347c1890a82f12170404 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Fri, 20 Aug 2021 07:53:18 +1000 Subject: [PATCH 036/625] change to fix major vesion ifor post_build script's nuget commandline --- Scripts/post_build.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Scripts/post_build.ps1 b/Scripts/post_build.ps1 index 139880d2703..49dc0849e66 100644 --- a/Scripts/post_build.ps1 +++ b/Scripts/post_build.ps1 @@ -71,8 +71,8 @@ function Pack-Squirrel-Installer ($path, $version, $output) { Write-Host "Packing: $spec" Write-Host "Input path: $input" # making version static as multiple versions can exist in the nuget folder and in the case a breaking change is introduced. - New-Alias Nuget $env:USERPROFILE\.nuget\packages\NuGet.CommandLine\5.4.0\tools\NuGet.exe -Force - # TODO: can we use dotnet pack here? + New-Alias Nuget $env:USERPROFILE\.nuget\packages\NuGet.CommandLine\5.10.0\tools\NuGet.exe -Force + # dotnet pack is not used because ran into issues, need to test installation and starting up if to use it. nuget pack $spec -Version $version -BasePath $input -OutputDirectory $output -Properties Configuration=Release $nupkg = "$output\FlowLauncher.$version.nupkg" From ffd22d78c208992d4f6c632042491db7ee464d75 Mon Sep 17 00:00:00 2001 From: Michael Mouawad Date: Sun, 22 Aug 2021 13:36:01 +0300 Subject: [PATCH 037/625] add run as administration when holding ctrl and shift to Program and Explorer plugins --- Flow.Launcher/MainWindow.xaml | 1 + .../Search/ResultManager.cs | 23 ++++++++++++++++++- .../Programs/Win32.cs | 14 ++++++++--- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index fcc3af5c502..83cc016bbbd 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -46,6 +46,7 @@ + diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs index 09315d9ddf6..7e12fea135c 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs @@ -1,8 +1,10 @@ using Flow.Launcher.Infrastructure; using Flow.Launcher.Plugin.SharedCommands; using System; +using System.Diagnostics; using System.IO; using System.Linq; +using System.Threading.Tasks; using System.Windows; namespace Flow.Launcher.Plugin.Explorer.Search @@ -127,7 +129,26 @@ internal static Result CreateFileResult(string filePath, Query query, int score { try { - if (c.SpecialKeyState.CtrlPressed) + if (File.Exists(filePath) && c.SpecialKeyState.CtrlPressed && c.SpecialKeyState.ShiftPressed) + { + Task.Run(() => + { + try + { + Process.Start(new ProcessStartInfo + { + FileName = filePath, + UseShellExecute = true, + Verb = "runas", + }); + } + catch (Exception e) + { + MessageBox.Show(e.Message, "Could not start " + filePath); + } + }); + } + else if (c.SpecialKeyState.CtrlPressed) { FilesFolders.OpenContainingFolder(filePath); } diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs index 931cfacc16d..9d753085652 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs @@ -102,16 +102,24 @@ public Result Result(string query, IPublicAPI api) Score = matchResult.Score, TitleHighlightData = matchResult.MatchData, ContextData = this, - Action = _ => + Action = c => { + var runAsAdmin = ( + c.SpecialKeyState.CtrlPressed && + c.SpecialKeyState.ShiftPressed && + !c.SpecialKeyState.AltPressed && + !c.SpecialKeyState.WinPressed + ); + var info = new ProcessStartInfo { FileName = LnkResolvedPath ?? FullPath, WorkingDirectory = ParentDirectory, - UseShellExecute = true + UseShellExecute = true, + Verb = runAsAdmin ? "runas" : null }; - Main.StartProcess(Process.Start, info); + Task.Run(() => Main.StartProcess(Process.Start, info)); return true; } From 8fbf755155d4fd1c6803dd0345d7ac22ecd2f810 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Wed, 25 Aug 2021 09:03:20 +1000 Subject: [PATCH 038/625] fix build failure nuget pack 5.10.0 requires target platform version to be appended to nuspec --- Flow.Launcher/Flow.Launcher.csproj | 2 +- Scripts/post_build.ps1 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/Flow.Launcher.csproj b/Flow.Launcher/Flow.Launcher.csproj index d360aca8592..529fc52a2ee 100644 --- a/Flow.Launcher/Flow.Launcher.csproj +++ b/Flow.Launcher/Flow.Launcher.csproj @@ -83,7 +83,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Scripts/post_build.ps1 b/Scripts/post_build.ps1 index 49dc0849e66..30ab36e142f 100644 --- a/Scripts/post_build.ps1 +++ b/Scripts/post_build.ps1 @@ -71,7 +71,7 @@ function Pack-Squirrel-Installer ($path, $version, $output) { Write-Host "Packing: $spec" Write-Host "Input path: $input" # making version static as multiple versions can exist in the nuget folder and in the case a breaking change is introduced. - New-Alias Nuget $env:USERPROFILE\.nuget\packages\NuGet.CommandLine\5.10.0\tools\NuGet.exe -Force + New-Alias Nuget $env:USERPROFILE\.nuget\packages\NuGet.CommandLine\5.4.0\tools\NuGet.exe -Force # dotnet pack is not used because ran into issues, need to test installation and starting up if to use it. nuget pack $spec -Version $version -BasePath $input -OutputDirectory $output -Properties Configuration=Release From 9d745945cd4dfbbd21acff4c2bf642c6ef571086 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Wed, 25 Aug 2021 09:16:48 +1000 Subject: [PATCH 039/625] add comment record ToolGood.Words.Pinyin package version bump issue --- .../Flow.Launcher.Infrastructure.csproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj b/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj index 2bec7c2c77b..ef76fd61724 100644 --- a/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj +++ b/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj @@ -55,6 +55,8 @@ + + From be516d67f48fac11ca86416902c6c4bd21788e5e Mon Sep 17 00:00:00 2001 From: Jeremy Date: Mon, 6 Sep 2021 09:02:04 +1000 Subject: [PATCH 040/625] add Advanced Boot Options restart for Sys plugin --- .../Images/restart_advanced.png | Bin 0 -> 58662 bytes .../Languages/en.xaml | 2 ++ Plugins/Flow.Launcher.Plugin.Sys/Main.cs | 18 ++++++++++++++++++ Plugins/Flow.Launcher.Plugin.Sys/plugin.json | 2 +- 4 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 Plugins/Flow.Launcher.Plugin.Sys/Images/restart_advanced.png diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Images/restart_advanced.png b/Plugins/Flow.Launcher.Plugin.Sys/Images/restart_advanced.png new file mode 100644 index 0000000000000000000000000000000000000000..feabbefa1f6c637ab7d5a1158e9dec49337ec6cd GIT binary patch literal 58662 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 UMT0O;!AHpX)R~iyk7I8BA6K$fNdN!< literal 0 HcmV?d00001 diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/en.xaml index 45ab9a30412..46dcffdbf03 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/en.xaml @@ -8,6 +8,7 @@ Shutdown Computer Restart Computer + Restart the computer with Advanced Boot Options for Safe and Debugging modes, as well as other options Log off Lock this computer Close Flow Launcher @@ -29,6 +30,7 @@ Reloaded all applicable plugin data Are you sure you want to shut the computer down? Are you sure you want to restart the computer? + Are you sure you want to restart the computer with Advanced Boot Options? System Commands Provides System related commands. e.g. shutdown, lock, settings etc. diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Main.cs b/Plugins/Flow.Launcher.Plugin.Sys/Main.cs index 1a23e646453..ba5de8a8900 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Sys/Main.cs @@ -131,6 +131,24 @@ private List Commands() } }, new Result + { + Title = "Restart With Advanced Boot Options", + SubTitle = context.API.GetTranslation("flowlauncher_plugin_sys_restart_advanced"), + IcoPath = "Images\\restart_advanced.png", + Action = c => + { + var result = MessageBox.Show( + context.API.GetTranslation("flowlauncher_plugin_sys_dlgtext_restart_computer_advanced"), + context.API.GetTranslation("flowlauncher_plugin_sys_restart_computer"), + MessageBoxButton.YesNo, MessageBoxImage.Warning); + + if (result == MessageBoxResult.Yes) + Process.Start("shutdown", "/r /o /t 0"); + + return true; + } + }, + new Result { Title = "Log Off", SubTitle = context.API.GetTranslation("flowlauncher_plugin_sys_log_off"), diff --git a/Plugins/Flow.Launcher.Plugin.Sys/plugin.json b/Plugins/Flow.Launcher.Plugin.Sys/plugin.json index b47aa33a454..1bfcd92a5cb 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Sys/plugin.json @@ -4,7 +4,7 @@ "Name": "System Commands", "Description": "Provide System related commands. e.g. shutdown,lock, setting etc.", "Author": "qianlifeng", - "Version": "1.3.2", + "Version": "1.4.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Sys.dll", From 9c13416231074f78968640b0a4e87b4a00705651 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Mon, 6 Sep 2021 12:31:07 -0500 Subject: [PATCH 041/625] Fixes Typo TermSeparator & remove the actionkeyword in Terms --- Flow.Launcher.Core/Plugin/QueryBuilder.cs | 24 +++++------- Flow.Launcher.Plugin/Query.cs | 37 +++++++------------ Flow.Launcher/ActionKeywords.xaml.cs | 2 +- Flow.Launcher/ViewModel/PluginViewModel.cs | 2 +- .../Main.cs | 2 +- .../Main.cs | 2 +- Plugins/Flow.Launcher.Plugin.Shell/Main.cs | 2 +- 7 files changed, 28 insertions(+), 43 deletions(-) diff --git a/Flow.Launcher.Core/Plugin/QueryBuilder.cs b/Flow.Launcher.Core/Plugin/QueryBuilder.cs index df336e14b69..444335afda5 100644 --- a/Flow.Launcher.Core/Plugin/QueryBuilder.cs +++ b/Flow.Launcher.Core/Plugin/QueryBuilder.cs @@ -10,35 +10,31 @@ public static class QueryBuilder public static Query Build(string text, Dictionary nonGlobalPlugins) { // replace multiple white spaces with one white space - var terms = text.Split(new[] { Query.TermSeperater }, StringSplitOptions.RemoveEmptyEntries); - if (terms.Length == 0) + var textSplit = text.Split(Query.TermSeparator, StringSplitOptions.RemoveEmptyEntries); + if (textSplit.Length == 0) { // nothing was typed return null; } - var rawQuery = string.Join(Query.TermSeperater, terms); + var rawQuery = string.Join(Query.TermSeparator, textSplit); string actionKeyword, search; - string possibleActionKeyword = terms[0]; - List actionParameters; + string possibleActionKeyword = textSplit[0]; + string[] terms; + if (nonGlobalPlugins.TryGetValue(possibleActionKeyword, out var pluginPair) && !pluginPair.Metadata.Disabled) { // use non global plugin for query actionKeyword = possibleActionKeyword; - actionParameters = terms.Skip(1).ToList(); - search = actionParameters.Count > 0 ? rawQuery.Substring(actionKeyword.Length + 1) : string.Empty; + search = textSplit.Length > 1 ? rawQuery[(actionKeyword.Length + 1)..] : string.Empty; + terms = textSplit[1..]; } else { // non action keyword actionKeyword = string.Empty; search = rawQuery; + terms = textSplit; } - var query = new Query - { - Terms = terms, - RawQuery = rawQuery, - ActionKeyword = actionKeyword, - Search = search - }; + var query = new Query(rawQuery, search, terms, actionKeyword); return query; } diff --git a/Flow.Launcher.Plugin/Query.cs b/Flow.Launcher.Plugin/Query.cs index 1eb5c9c1437..05e34b9d917 100644 --- a/Flow.Launcher.Plugin/Query.cs +++ b/Flow.Launcher.Plugin/Query.cs @@ -1,4 +1,5 @@ -using System; +using JetBrains.Annotations; +using System; using System.Collections.Generic; using System.Linq; @@ -23,7 +24,7 @@ public Query(string rawQuery, string search, string[] terms, string actionKeywor /// Raw query, this includes action keyword if it has /// We didn't recommend use this property directly. You should always use Search property. /// - public string RawQuery { get; internal set; } + public string RawQuery { get; internal init; } /// /// Search part of a query. @@ -31,45 +32,40 @@ public Query(string rawQuery, string search, string[] terms, string actionKeywor /// Since we allow user to switch a exclusive plugin to generic plugin, /// so this property will always give you the "real" query part of the query /// - public string Search { get; internal set; } + public string Search { get; internal init; } /// /// The raw query splited into a string array. /// - public string[] Terms { get; set; } + public string[] Terms { get; init; } /// /// Query can be splited into multiple terms by whitespace /// - public const string TermSeperater = " "; + public const string TermSeparator = " "; /// /// User can set multiple action keywords seperated by ';' /// - public const string ActionKeywordSeperater = ";"; + public const string ActionKeywordSeparator = ";"; /// /// '*' is used for System Plugin /// public const string GlobalPluginWildcardSign = "*"; - public string ActionKeyword { get; set; } + public string ActionKeyword { get; init; } /// /// Return first search split by space if it has /// public string FirstSearch => SplitSearch(0); + private string _secondToEndSearch; + /// /// strings from second search (including) to last search /// - public string SecondToEndSearch - { - get - { - var index = string.IsNullOrEmpty(ActionKeyword) ? 1 : 2; - return string.Join(TermSeperater, Terms.Skip(index).ToArray()); - } - } + public string SecondToEndSearch => _secondToEndSearch ??= string.Join(' ', Terms.AsMemory(2)); /// /// Return second search split by space if it has @@ -83,16 +79,9 @@ public string SecondToEndSearch private string SplitSearch(int index) { - try - { - return string.IsNullOrEmpty(ActionKeyword) ? Terms[index] : Terms[index + 1]; - } - catch (IndexOutOfRangeException) - { - return string.Empty; - } + return index < Terms.Length ? Terms[index] : string.Empty; } public override string ToString() => RawQuery; } -} +} \ No newline at end of file diff --git a/Flow.Launcher/ActionKeywords.xaml.cs b/Flow.Launcher/ActionKeywords.xaml.cs index 4a236834748..281be6e5285 100644 --- a/Flow.Launcher/ActionKeywords.xaml.cs +++ b/Flow.Launcher/ActionKeywords.xaml.cs @@ -30,7 +30,7 @@ public ActionKeywords(string pluginId, Settings settings, PluginViewModel plugin private void ActionKeyword_OnLoaded(object sender, RoutedEventArgs e) { - tbOldActionKeyword.Text = string.Join(Query.ActionKeywordSeperater, plugin.Metadata.ActionKeywords.ToArray()); + tbOldActionKeyword.Text = string.Join(Query.ActionKeywordSeparator, plugin.Metadata.ActionKeywords.ToArray()); tbAction.Focus(); } diff --git a/Flow.Launcher/ViewModel/PluginViewModel.cs b/Flow.Launcher/ViewModel/PluginViewModel.cs index 1ac320cf0cf..b0db8bca056 100644 --- a/Flow.Launcher/ViewModel/PluginViewModel.cs +++ b/Flow.Launcher/ViewModel/PluginViewModel.cs @@ -22,7 +22,7 @@ public bool PluginState public Visibility ActionKeywordsVisibility => PluginPair.Metadata.ActionKeywords.Count == 1 ? Visibility.Visible : Visibility.Collapsed; public string InitilizaTime => PluginPair.Metadata.InitTime.ToString() + "ms"; public string QueryTime => PluginPair.Metadata.AvgQueryTime + "ms"; - public string ActionKeywordsText => string.Join(Query.ActionKeywordSeperater, PluginPair.Metadata.ActionKeywords); + public string ActionKeywordsText => string.Join(Query.ActionKeywordSeparator, PluginPair.Metadata.ActionKeywords); public int Priority => PluginPair.Metadata.Priority; public void ChangeActionKeyword(string newActionKeyword, string oldActionKeyword) diff --git a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Main.cs b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Main.cs index 190f40a0303..a27986e759c 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Main.cs @@ -27,7 +27,7 @@ where keyword.StartsWith(query.Terms[0]) IcoPath = metadata.IcoPath, Action = c => { - context.API.ChangeQuery($"{keyword}{Plugin.Query.TermSeperater}"); + context.API.ChangeQuery($"{keyword}{Plugin.Query.TermSeparator}"); return false; } }; diff --git a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Main.cs b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Main.cs index c3d9d1ab2e0..29d3511ebca 100644 --- a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Main.cs @@ -25,7 +25,7 @@ public List Query(Query query) { var termToSearch = query.Terms.Length <= 1 ? null - : string.Join(Plugin.Query.TermSeperater, query.Terms.Skip(1)).ToLower(); + : string.Join(Plugin.Query.TermSeparator, query.Terms.Skip(1)).ToLower(); var processlist = processHelper.GetMatchingProcesses(termToSearch); diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs index 58f8538f0f2..9ccb600e5d2 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs @@ -297,7 +297,7 @@ bool API_GlobalKeyboardEvent(int keyevent, int vkcode, SpecialKeyState state) private void OnWinRPressed() { - context.API.ChangeQuery($"{context.CurrentPluginMetadata.ActionKeywords[0]}{Plugin.Query.TermSeperater}"); + context.API.ChangeQuery($"{context.CurrentPluginMetadata.ActionKeywords[0]}{Plugin.Query.TermSeparator}"); // show the main window and set focus to the query box Window mainWindow = Application.Current.MainWindow; From 812703766ab03693ea1366052f9acb1682f8de41 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Tue, 7 Sep 2021 17:07:21 -0500 Subject: [PATCH 042/625] Mark previous api as obsolete to preserve backward compatibility. --- Flow.Launcher.Core/Plugin/QueryBuilder.cs | 18 +++++++-------- Flow.Launcher.Plugin/Query.cs | 23 +++++++++++++++---- .../Main.cs | 4 ++-- .../Main.cs | 4 +--- 4 files changed, 30 insertions(+), 19 deletions(-) diff --git a/Flow.Launcher.Core/Plugin/QueryBuilder.cs b/Flow.Launcher.Core/Plugin/QueryBuilder.cs index 444335afda5..ef387b693eb 100644 --- a/Flow.Launcher.Core/Plugin/QueryBuilder.cs +++ b/Flow.Launcher.Core/Plugin/QueryBuilder.cs @@ -10,31 +10,31 @@ public static class QueryBuilder public static Query Build(string text, Dictionary nonGlobalPlugins) { // replace multiple white spaces with one white space - var textSplit = text.Split(Query.TermSeparator, StringSplitOptions.RemoveEmptyEntries); - if (textSplit.Length == 0) + var terms = text.Split(Query.TermSeparator, StringSplitOptions.RemoveEmptyEntries); + if (terms.Length == 0) { // nothing was typed return null; } - var rawQuery = string.Join(Query.TermSeparator, textSplit); + var rawQuery = string.Join(Query.TermSeparator, terms); string actionKeyword, search; - string possibleActionKeyword = textSplit[0]; - string[] terms; + string possibleActionKeyword = terms[0]; + string[] searchTerms; if (nonGlobalPlugins.TryGetValue(possibleActionKeyword, out var pluginPair) && !pluginPair.Metadata.Disabled) { // use non global plugin for query actionKeyword = possibleActionKeyword; - search = textSplit.Length > 1 ? rawQuery[(actionKeyword.Length + 1)..] : string.Empty; - terms = textSplit[1..]; + search = terms.Length > 1 ? rawQuery[(actionKeyword.Length + 1)..] : string.Empty; + searchTerms = terms[1..]; } else { // non action keyword actionKeyword = string.Empty; search = rawQuery; - terms = textSplit; + searchTerms = terms; } - var query = new Query(rawQuery, search, terms, actionKeyword); + var query = new Query(rawQuery, search,terms, searchTerms, actionKeyword); return query; } diff --git a/Flow.Launcher.Plugin/Query.cs b/Flow.Launcher.Plugin/Query.cs index 05e34b9d917..12681388ead 100644 --- a/Flow.Launcher.Plugin/Query.cs +++ b/Flow.Launcher.Plugin/Query.cs @@ -12,11 +12,11 @@ public Query() { } /// /// to allow unit tests for plug ins /// - public Query(string rawQuery, string search, string[] terms, string actionKeyword = "") + public Query(string rawQuery, string search, string[] terms, string[] searchTerms, string actionKeyword = "") { Search = search; RawQuery = rawQuery; - Terms = terms; + SearchTerms = searchTerms; ActionKeyword = actionKeyword; } @@ -35,18 +35,31 @@ public Query(string rawQuery, string search, string[] terms, string actionKeywor public string Search { get; internal init; } /// - /// The raw query splited into a string array. + /// The search string split into a string array. /// + public string[] SearchTerms { get; init; } + + /// + /// The raw query split into a string array + /// + [Obsolete("It may or may not include action keyword, which can be confusing. Use SearchTerms instead")] public string[] Terms { get; init; } /// /// Query can be splited into multiple terms by whitespace /// public const string TermSeparator = " "; + + [Obsolete("Typo")] + public const string TermSeperater = TermSeparator; /// /// User can set multiple action keywords seperated by ';' /// public const string ActionKeywordSeparator = ";"; + + [Obsolete("Typo")] + public const string ActionKeywordSeperater = ActionKeywordSeparator; + /// /// '*' is used for System Plugin @@ -65,7 +78,7 @@ public Query(string rawQuery, string search, string[] terms, string actionKeywor /// /// strings from second search (including) to last search /// - public string SecondToEndSearch => _secondToEndSearch ??= string.Join(' ', Terms.AsMemory(2)); + public string SecondToEndSearch => _secondToEndSearch ??= string.Join(' ', SearchTerms.AsMemory(2)); /// /// Return second search split by space if it has @@ -79,7 +92,7 @@ public Query(string rawQuery, string search, string[] terms, string actionKeywor private string SplitSearch(int index) { - return index < Terms.Length ? Terms[index] : string.Empty; + return index < SearchTerms.Length ? SearchTerms[index] : string.Empty; } public override string ToString() => RawQuery; diff --git a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Main.cs b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Main.cs index a27986e759c..b046b2bebb1 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Main.cs @@ -12,11 +12,11 @@ public List Query(Query query) { // if query contains more than one word, eg. github tips // user has decided to type something else rather than wanting to see the available action keywords - if (query.Terms.Length > 1) + if (query.SearchTerms.Length > 1) return new List(); var results = from keyword in PluginManager.NonGlobalPlugins.Keys - where keyword.StartsWith(query.Terms[0]) + where keyword.StartsWith(query.SearchTerms[0]) let metadata = PluginManager.NonGlobalPlugins[keyword].Metadata where !metadata.Disabled select new Result diff --git a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Main.cs b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Main.cs index 29d3511ebca..31b4a67edea 100644 --- a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Main.cs @@ -23,9 +23,7 @@ public void Init(PluginInitContext context) public List Query(Query query) { - var termToSearch = query.Terms.Length <= 1 - ? null - : string.Join(Plugin.Query.TermSeparator, query.Terms.Skip(1)).ToLower(); + var termToSearch = query.Search; var processlist = processHelper.GetMatchingProcesses(termToSearch); From 04882ad9f49e540d32028398eaa9b2afabfe7d14 Mon Sep 17 00:00:00 2001 From: Michael Mouawad Date: Sat, 11 Sep 2021 15:30:30 +0300 Subject: [PATCH 043/625] add run as administrator when holding ctrl and shift and to context menu for UWP applications --- .../Programs/UWP.cs | 77 ++++++++++++++++++- 1 file changed, 76 insertions(+), 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs index 869172de776..5bb5d6a4960 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs @@ -267,6 +267,7 @@ public class Application : IProgram public string Location => Package.Location; public bool Enabled { get; set; } + public bool CanRunElevated { get; set; } public string LogoUri { get; set; } public string LogoPath { get; set; } @@ -320,7 +321,27 @@ public Result Result(string query, IPublicAPI api) ContextData = this, Action = e => { - Launch(api); + var elevated = ( + e.SpecialKeyState.CtrlPressed && + e.SpecialKeyState.ShiftPressed && + !e.SpecialKeyState.AltPressed && + !e.SpecialKeyState.WinPressed + ); + + if (elevated) + { + if (!CanRunElevated) + { + return false; + } + + LaunchElevated(); + } + else + { + Launch(api); + } + return true; } }; @@ -354,6 +375,21 @@ public List ContextMenus(IPublicAPI api) IcoPath = "Images/folder.png" } }; + + if (CanRunElevated) + { + contextMenus.Add(new Result + { + Title = api.GetTranslation("flowlauncher_plugin_program_run_as_administrator"), + Action = _ => + { + LaunchElevated(); + return true; + }, + IcoPath = "Images/cmd.png" + }); + } + return contextMenus; } @@ -377,6 +413,20 @@ await Task.Run(() => }); } + private async void LaunchElevated() + { + string command = "shell:AppsFolder\\" + UniqueIdentifier; + command = Environment.ExpandEnvironmentVariables(command.Trim()); + + var info = new ProcessStartInfo(command) + { + UseShellExecute = true, + Verb = "runas", + }; + + Main.StartProcess(Process.Start, info); + } + public Application(AppxPackageHelper.IAppxManifestApplication manifestApp, UWP package) { // This is done because we cannot use the keyword 'out' along with a property @@ -403,6 +453,31 @@ public Application(AppxPackageHelper.IAppxManifestApplication manifestApp, UWP p LogoPath = LogoPathFromUri(LogoUri); Enabled = true; + CanRunElevated = CanApplicationRunElevated(); + } + + private bool CanApplicationRunElevated() + { + if (EntryPoint == "Windows.FullTrustApplication") + { + return true; + } + else + { + var manifest = Package.Location + "\\AppxManifest.xml"; + if (File.Exists(manifest)) + { + var file = File.ReadAllText(manifest); + + // Using OrdinalIgnoreCase since this is used internally + if (file.Contains("TrustLevel=\"mediumIL\"", StringComparison.OrdinalIgnoreCase)) + { + return true; + } + } + } + + return false; } internal string ResourceFromPri(string packageFullName, string packageName, string rawReferenceValue) From 9b84f6c559a1ac46fed6fd41c1dc3558dd63d289 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sat, 11 Sep 2021 09:41:39 -0500 Subject: [PATCH 044/625] fix an issue of joining string --- Flow.Launcher.Plugin/Query.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher.Plugin/Query.cs b/Flow.Launcher.Plugin/Query.cs index 12681388ead..84dbb3b36a8 100644 --- a/Flow.Launcher.Plugin/Query.cs +++ b/Flow.Launcher.Plugin/Query.cs @@ -78,7 +78,7 @@ public Query(string rawQuery, string search, string[] terms, string[] searchTerm /// /// strings from second search (including) to last search /// - public string SecondToEndSearch => _secondToEndSearch ??= string.Join(' ', SearchTerms.AsMemory(2)); + public string SecondToEndSearch => _secondToEndSearch ??= string.Join(' ', SearchTerms[1..]); /// /// Return second search split by space if it has From d3b4c5469b038401646c417aea9d879cd8a3bc2e Mon Sep 17 00:00:00 2001 From: Michael Mouawad Date: Sat, 11 Sep 2021 20:21:52 +0300 Subject: [PATCH 045/625] add run as administrator when holding ctrl and shift to Shell plugin --- Plugins/Flow.Launcher.Plugin.Shell/Main.cs | 36 +++++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs index 58f8538f0f2..0a934ab32e0 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs @@ -73,7 +73,14 @@ public List Query(Query query) IcoPath = Image, Action = c => { - Execute(Process.Start, PrepareProcessStartInfo(m, c.SpecialKeyState.CtrlPressed)); + var runAsAdministrator = ( + c.SpecialKeyState.CtrlPressed && + c.SpecialKeyState.ShiftPressed && + !c.SpecialKeyState.AltPressed && + !c.SpecialKeyState.WinPressed + ); + + Execute(Process.Start, PrepareProcessStartInfo(m, runAsAdministrator)); return true; } })); @@ -106,7 +113,14 @@ private List GetHistoryCmds(string cmd, Result result) IcoPath = Image, Action = c => { - Execute(Process.Start, PrepareProcessStartInfo(m.Key)); + var runAsAdministrator = ( + c.SpecialKeyState.CtrlPressed && + c.SpecialKeyState.ShiftPressed && + !c.SpecialKeyState.AltPressed && + !c.SpecialKeyState.WinPressed + ); + + Execute(Process.Start, PrepareProcessStartInfo(m.Key, runAsAdministrator)); return true; } }; @@ -129,7 +143,14 @@ private Result GetCurrentCmd(string cmd) IcoPath = Image, Action = c => { - Execute(Process.Start, PrepareProcessStartInfo(cmd)); + var runAsAdministrator = ( + c.SpecialKeyState.CtrlPressed && + c.SpecialKeyState.ShiftPressed && + !c.SpecialKeyState.AltPressed && + !c.SpecialKeyState.WinPressed + ); + + Execute(Process.Start, PrepareProcessStartInfo(cmd, runAsAdministrator)); return true; } }; @@ -147,7 +168,14 @@ private List ResultsFromlHistory() IcoPath = Image, Action = c => { - Execute(Process.Start, PrepareProcessStartInfo(m.Key)); + var runAsAdministrator = ( + c.SpecialKeyState.CtrlPressed && + c.SpecialKeyState.ShiftPressed && + !c.SpecialKeyState.AltPressed && + !c.SpecialKeyState.WinPressed + ); + + Execute(Process.Start, PrepareProcessStartInfo(m.Key, runAsAdministrator)); return true; } }); From 6c7eab9c50daf7a4e9d747723ddf8e7cc6bf7558 Mon Sep 17 00:00:00 2001 From: Michael Mouawad Date: Sat, 11 Sep 2021 21:00:05 +0300 Subject: [PATCH 046/625] code refactoring --- .../Programs/UWP.cs | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs index 5bb5d6a4960..5b4db49beb2 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs @@ -462,18 +462,15 @@ private bool CanApplicationRunElevated() { return true; } - else + + var manifest = Package.Location + "\\AppxManifest.xml"; + if (File.Exists(manifest)) { - var manifest = Package.Location + "\\AppxManifest.xml"; - if (File.Exists(manifest)) - { - var file = File.ReadAllText(manifest); + var file = File.ReadAllText(manifest); - // Using OrdinalIgnoreCase since this is used internally - if (file.Contains("TrustLevel=\"mediumIL\"", StringComparison.OrdinalIgnoreCase)) - { - return true; - } + if (file.Contains("TrustLevel=\"mediumIL\"", StringComparison.OrdinalIgnoreCase)) + { + return true; } } From 9764a99d26a82fb8472fc6fff42156afe7422bde Mon Sep 17 00:00:00 2001 From: Michael Mouawad Date: Sat, 11 Sep 2021 21:01:48 +0300 Subject: [PATCH 047/625] show notification message when attempting to run an unsupported UWP app as admin --- .../Flow.Launcher.Plugin.Program/Languages/de.xaml | 1 + .../Flow.Launcher.Plugin.Program/Languages/en.xaml | 1 + .../Flow.Launcher.Plugin.Program/Languages/ja.xaml | 1 + .../Flow.Launcher.Plugin.Program/Languages/pl.xaml | 1 + .../Flow.Launcher.Plugin.Program/Languages/sk.xaml | 1 + .../Flow.Launcher.Plugin.Program/Languages/tr.xaml | 1 + .../Languages/zh-cn.xaml | 1 + .../Languages/zh-tw.xaml | 2 ++ .../Flow.Launcher.Plugin.Program/Programs/UWP.cs | 14 ++++++++------ 9 files changed, 17 insertions(+), 6 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml index 18e8d9ff104..7f78fa78a00 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml @@ -33,5 +33,6 @@ Programm Suche Programme mit Flow Launcher + This app is not intended to be run as administrator \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/en.xaml index e00534367d4..770bb69ccd8 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/en.xaml @@ -53,5 +53,6 @@ Success Successfully disabled this program from displaying in your query + This app is not intended to be run as administrator \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml index 3b2d8f20b94..6c8f7da0d5f 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml @@ -34,5 +34,6 @@ Program Search programs in Flow Launcher + This app is not intended to be run as administrator \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/pl.xaml index b6244ec128c..8373572f09c 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/pl.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/pl.xaml @@ -33,5 +33,6 @@ Programy Szukaj i uruchamiaj programy z poziomu Flow Launchera + This app is not intended to be run as administrator \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/sk.xaml index cb8a0f9e3e4..b44623aaef6 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/sk.xaml @@ -53,5 +53,6 @@ Úspešné Úspešne zakázané zobrazovanie tohto programu vo výsledkoch vyhľadávania + This app is not intended to be run as administrator \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/tr.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/tr.xaml index 05bd8a3d864..060cc61abbb 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/tr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/tr.xaml @@ -35,5 +35,6 @@ Programları Flow Launcher'tan arayın Geçersiz Konum + This app is not intended to be run as administrator \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/zh-cn.xaml index 8632abb68cf..ee5511e2045 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/zh-cn.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/zh-cn.xaml @@ -50,5 +50,6 @@ 完成 成功禁用了该程序以使其无法显示在查询中 + This app is not intended to be run as administrator \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/zh-tw.xaml index 550630482ff..38aee66ffe4 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/zh-tw.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/zh-tw.xaml @@ -33,4 +33,6 @@ 程式 在 Flow Launcher 中搜尋程式 + This app is not intended to be run as administrator + diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs index 5b4db49beb2..917ebe7ad46 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs @@ -328,18 +328,20 @@ public Result Result(string query, IPublicAPI api) !e.SpecialKeyState.WinPressed ); - if (elevated) + if (elevated && CanRunElevated) { - if (!CanRunElevated) - { - return false; - } - LaunchElevated(); } else { Launch(api); + + if (elevated) + { + var title = "Plugin: Program"; + var message = api.GetTranslation("flowlauncher_plugin_program_run_as_administrator_not_supported_message"); + api.ShowMsg(title, message, string.Empty); + } } return true; From ae868671d15d148c91cca039389a784195248608 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Mon, 13 Sep 2021 08:05:06 +1000 Subject: [PATCH 048/625] version bump for Program and Explorer plugin --- Plugins/Flow.Launcher.Plugin.Explorer/plugin.json | 2 +- Plugins/Flow.Launcher.Plugin.Program/plugin.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json b/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json index 1881eff31c6..88bee905b98 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json @@ -9,7 +9,7 @@ "Name": "Explorer", "Description": "Search and manage files and folders. Explorer utilises Windows Index Search", "Author": "Jeremy Wu", - "Version": "1.8.4", + "Version": "1.9.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Explorer.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Program/plugin.json b/Plugins/Flow.Launcher.Plugin.Program/plugin.json index a37075b0c77..424aa04f54f 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Program/plugin.json @@ -4,7 +4,7 @@ "Name": "Program", "Description": "Search programs in Flow.Launcher", "Author": "qianlifeng", - "Version": "1.5.4", + "Version": "1.6.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Program.dll", From 4c75f8b8bb7bb891c70b3aeae9dbb2eb78ee732f Mon Sep 17 00:00:00 2001 From: Jeremy Date: Mon, 13 Sep 2021 08:20:34 +1000 Subject: [PATCH 049/625] version bump Shell plugin --- Plugins/Flow.Launcher.Plugin.Shell/plugin.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.Shell/plugin.json b/Plugins/Flow.Launcher.Plugin.Shell/plugin.json index bccba4590a3..cb02f66079f 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Shell/plugin.json @@ -4,7 +4,7 @@ "Name": "Shell", "Description": "Provide executing commands from Flow Launcher", "Author": "qianlifeng", - "Version": "1.4.3", + "Version": "1.4.4", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Shell.dll", From 3452ecf33bc53c93da3f697333dfe869d1ec2db3 Mon Sep 17 00:00:00 2001 From: Michael Mouawad Date: Mon, 13 Sep 2021 19:44:10 +0300 Subject: [PATCH 050/625] remove unnecessary strings from languages files --- Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml | 1 - Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml | 1 - Plugins/Flow.Launcher.Plugin.Program/Languages/pl.xaml | 1 - Plugins/Flow.Launcher.Plugin.Program/Languages/sk.xaml | 1 - Plugins/Flow.Launcher.Plugin.Program/Languages/tr.xaml | 1 - Plugins/Flow.Launcher.Plugin.Program/Languages/zh-cn.xaml | 1 - Plugins/Flow.Launcher.Plugin.Program/Languages/zh-tw.xaml | 1 - 7 files changed, 7 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml index 7f78fa78a00..18e8d9ff104 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml @@ -33,6 +33,5 @@ Programm Suche Programme mit Flow Launcher - This app is not intended to be run as administrator \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml index 6c8f7da0d5f..3b2d8f20b94 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml @@ -34,6 +34,5 @@ Program Search programs in Flow Launcher - This app is not intended to be run as administrator \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/pl.xaml index 8373572f09c..b6244ec128c 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/pl.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/pl.xaml @@ -33,6 +33,5 @@ Programy Szukaj i uruchamiaj programy z poziomu Flow Launchera - This app is not intended to be run as administrator \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/sk.xaml index b44623aaef6..cb8a0f9e3e4 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/sk.xaml @@ -53,6 +53,5 @@ Úspešné Úspešne zakázané zobrazovanie tohto programu vo výsledkoch vyhľadávania - This app is not intended to be run as administrator \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/tr.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/tr.xaml index 060cc61abbb..05bd8a3d864 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/tr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/tr.xaml @@ -35,6 +35,5 @@ Programları Flow Launcher'tan arayın Geçersiz Konum - This app is not intended to be run as administrator \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/zh-cn.xaml index ee5511e2045..8632abb68cf 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/zh-cn.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/zh-cn.xaml @@ -50,6 +50,5 @@ 完成 成功禁用了该程序以使其无法显示在查询中 - This app is not intended to be run as administrator \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/zh-tw.xaml index 38aee66ffe4..eb339649f87 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/zh-tw.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/zh-tw.xaml @@ -33,6 +33,5 @@ 程式 在 Flow Launcher 中搜尋程式 - This app is not intended to be run as administrator From 6a0b190120a37309573e710bdcfb07b8fde1f744 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Mon, 20 Sep 2021 21:51:07 -0500 Subject: [PATCH 051/625] Fix Unassigned Terms --- Flow.Launcher.Plugin/Query.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher.Plugin/Query.cs b/Flow.Launcher.Plugin/Query.cs index 84dbb3b36a8..a4a806a62e6 100644 --- a/Flow.Launcher.Plugin/Query.cs +++ b/Flow.Launcher.Plugin/Query.cs @@ -16,6 +16,9 @@ public Query(string rawQuery, string search, string[] terms, string[] searchTerm { Search = search; RawQuery = rawQuery; +#pragma warning disable 618 Legacy Support + Terms = terms; +#pragma warning restore 618 SearchTerms = searchTerms; ActionKeyword = actionKeyword; } @@ -38,7 +41,7 @@ public Query(string rawQuery, string search, string[] terms, string[] searchTerm /// The search string split into a string array. /// public string[] SearchTerms { get; init; } - + /// /// The raw query split into a string array /// @@ -56,7 +59,7 @@ public Query(string rawQuery, string search, string[] terms, string[] searchTerm /// User can set multiple action keywords seperated by ';' /// public const string ActionKeywordSeparator = ";"; - + [Obsolete("Typo")] public const string ActionKeywordSeperater = ActionKeywordSeparator; From 7ff9b688c91af89a49b94ea1b67c09f9462241cd Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Tue, 21 Sep 2021 13:50:51 -0500 Subject: [PATCH 052/625] Refactor Bookmark plugin --- .../Bookmark.cs | 47 ++-------- .../ChromeBookmarkLoader.cs | 26 ++++++ .../ChromeBookmarks.cs | 87 ------------------- .../ChromiumBookmarkLoader.cs | 62 +++++++++++++ .../Commands/Bookmarks.cs | 6 +- .../EdgeBookmarkLoader.cs | 30 +++++++ .../EdgeBookmarks.cs | 87 ------------------- ...xBookmarks.cs => FirefoxBookmarkLoader.cs} | 33 +++---- .../IBookmarkLoader.cs | 9 ++ 9 files changed, 156 insertions(+), 231 deletions(-) create mode 100644 Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromeBookmarkLoader.cs delete mode 100644 Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromeBookmarks.cs create mode 100644 Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs create mode 100644 Plugins/Flow.Launcher.Plugin.BrowserBookmark/EdgeBookmarkLoader.cs delete mode 100644 Plugins/Flow.Launcher.Plugin.BrowserBookmark/EdgeBookmarks.cs rename Plugins/Flow.Launcher.Plugin.BrowserBookmark/{FirefoxBookmarks.cs => FirefoxBookmarkLoader.cs} (85%) create mode 100644 Plugins/Flow.Launcher.Plugin.BrowserBookmark/IBookmarkLoader.cs diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Bookmark.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Bookmark.cs index 790c03686d0..185cf162032 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Bookmark.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Bookmark.cs @@ -7,50 +7,19 @@ namespace Flow.Launcher.Plugin.BrowserBookmark { - public class Bookmark : IEquatable, IEqualityComparer + // Source may be important in the future + public record Bookmark(string Name, string Url, string Source = "") { - private string m_Name; - public string Name - { - get - { - return m_Name; - } - set - { - m_Name = value; - } - } - public string Url { get; set; } - public string Source { get; set; } - public int Score { get; set; } - - /* TODO: since Source maybe unimportant, we just need to compare Name and Url */ - public bool Equals(Bookmark other) - { - return Equals(this, other); - } - - public bool Equals(Bookmark x, Bookmark y) - { - if (Object.ReferenceEquals(x, y)) return true; - if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null)) - return false; - - return x.Name == y.Name && x.Url == y.Url; - } - - public int GetHashCode(Bookmark bookmark) + public override int GetHashCode() { - if (Object.ReferenceEquals(bookmark, null)) return 0; - int hashName = bookmark.Name == null ? 0 : bookmark.Name.GetHashCode(); - int hashUrl = bookmark.Url == null ? 0 : bookmark.Url.GetHashCode(); + var hashName = Name?.GetHashCode() ?? 0; + var hashUrl = Url?.GetHashCode() ?? 0; return hashName ^ hashUrl; } - public override int GetHashCode() + public virtual bool Equals(Bookmark other) { - return GetHashCode(this); + return other != null && Name == other.Name && Url == other.Url; } } -} +} \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromeBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromeBookmarkLoader.cs new file mode 100644 index 00000000000..7fdb86f3148 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromeBookmarkLoader.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; + +namespace Flow.Launcher.Plugin.BrowserBookmark +{ + public class ChromeBookmarkLoader : ChromiumBookmarkLoader + { + public override List GetBookmarks() + { + return LoadChromeBookmarks(); + } + + private List LoadChromeBookmarks() + { + var bookmarks = new List(); + String platformPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); + bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Google\Chrome\User Data"), "Google Chrome")); + bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Google\Chrome SxS\User Data"), "Google Chrome Canary")); + bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Chromium\User Data"), "Chromium")); + return bookmarks; + } + } +} \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromeBookmarks.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromeBookmarks.cs deleted file mode 100644 index def7f3abeca..00000000000 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromeBookmarks.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text.RegularExpressions; - -namespace Flow.Launcher.Plugin.BrowserBookmark -{ - public class ChromeBookmarks - { - private List bookmarks = new List(); - - public List GetBookmarks() - { - bookmarks.Clear(); - LoadChromeBookmarks(); - - return bookmarks; - } - - private void ParseChromeBookmarks(String path, string source) - { - if (!File.Exists(path)) return; - - string all = File.ReadAllText(path); - Regex nameRegex = new Regex("\"name\": \"(?.*?)\""); - MatchCollection nameCollection = nameRegex.Matches(all); - Regex typeRegex = new Regex("\"type\": \"(?.*?)\""); - MatchCollection typeCollection = typeRegex.Matches(all); - Regex urlRegex = new Regex("\"url\": \"(?.*?)\""); - MatchCollection urlCollection = urlRegex.Matches(all); - - List names = (from Match match in nameCollection select match.Groups["name"].Value).ToList(); - List types = (from Match match in typeCollection select match.Groups["type"].Value).ToList(); - List urls = (from Match match in urlCollection select match.Groups["url"].Value).ToList(); - - int urlIndex = 0; - for (int i = 0; i < names.Count; i++) - { - string name = DecodeUnicode(names[i]); - string type = types[i]; - if (type == "url") - { - string url = urls[urlIndex]; - urlIndex++; - - if (url == null) continue; - if (url.StartsWith("javascript:", StringComparison.OrdinalIgnoreCase)) continue; - if (url.StartsWith("vbscript:", StringComparison.OrdinalIgnoreCase)) continue; - - bookmarks.Add(new Bookmark() - { - Name = name, - Url = url, - Source = source - }); - } - } - } - - private void LoadChromeBookmarks(string path, string name) - { - if (!Directory.Exists(path)) return; - var paths = Directory.GetDirectories(path); - - foreach (var profile in paths) - { - if (File.Exists(Path.Combine(profile, "Bookmarks"))) - ParseChromeBookmarks(Path.Combine(profile, "Bookmarks"), name + (Path.GetFileName(profile) == "Default" ? "" : (" (" + Path.GetFileName(profile) + ")"))); - } - } - - private void LoadChromeBookmarks() - { - String platformPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); - LoadChromeBookmarks(Path.Combine(platformPath, @"Google\Chrome\User Data"), "Google Chrome"); - LoadChromeBookmarks(Path.Combine(platformPath, @"Google\Chrome SxS\User Data"), "Google Chrome Canary"); - LoadChromeBookmarks(Path.Combine(platformPath, @"Chromium\User Data"), "Chromium"); - } - - private String DecodeUnicode(String dataStr) - { - Regex reg = new Regex(@"(?i)\\[uU]([0-9a-f]{4})"); - return reg.Replace(dataStr, m => ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString()); - } - } -} \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs new file mode 100644 index 00000000000..7be66eea546 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs @@ -0,0 +1,62 @@ +using Microsoft.AspNetCore.Authentication; +using System.Collections.Generic; +using System.IO; +using System.Text.Json; + +namespace Flow.Launcher.Plugin.BrowserBookmark +{ + public abstract class ChromiumBookmarkLoader : IBookmarkLoader + { + public abstract List GetBookmarks(); + protected List LoadBookmarks(string browserDataPath, string name) + { + var bookmarks = new List(); + if (!Directory.Exists(browserDataPath)) return bookmarks; + var paths = Directory.GetDirectories(browserDataPath); + + foreach (var profile in paths) + { + var bookmarkPath = Path.Combine(profile, "Bookmarks"); + if (!File.Exists(bookmarkPath)) + continue; + + var source = name + (Path.GetFileName(profile) == "Default" ? "" : $" ({Path.GetFileName(profile)})"); + bookmarks.AddRange(LoadBookmarksFromFile(bookmarkPath, source)); + } + return bookmarks; + } + + protected List LoadBookmarksFromFile(string path, string source) + { + var bookmarks = new List(); + using var jsonDocument = JsonDocument.Parse(File.ReadAllText(path)); + if (!jsonDocument.RootElement.TryGetProperty("roots", out var rootElement)) + return new(); + foreach (var folder in rootElement.EnumerateObject()) + { + EnumerateFolderBookmark(folder.Value, bookmarks, source); + } + return bookmarks; + } + + private void EnumerateFolderBookmark(JsonElement folderElement, List bookmarks, string source) + { + foreach (var subElement in folderElement.GetProperty("children").EnumerateArray()) + { + switch (subElement.GetProperty("type").GetString()) + { + case "folder": + EnumerateFolderBookmark(subElement, bookmarks, source); + break; + default: + bookmarks.Add(new Bookmark( + subElement.GetProperty("name").GetString(), + subElement.GetProperty("url").GetString(), + source)); + break; + } + } + + } + } +} \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/Bookmarks.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/Bookmarks.cs index 60c4a0ee660..c7cf4867d18 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/Bookmarks.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/Bookmarks.cs @@ -20,9 +20,9 @@ internal static List LoadAllBookmarks() { var allbookmarks = new List(); - var chromeBookmarks = new ChromeBookmarks(); - var mozBookmarks = new FirefoxBookmarks(); - var edgeBookmarks = new EdgeBookmarks(); + var chromeBookmarks = new ChromeBookmarkLoader(); + var mozBookmarks = new FirefoxBookmarkLoader(); + var edgeBookmarks = new EdgeBookmarkLoader(); //TODO: Let the user select which browser's bookmarks are displayed // Add Firefox bookmarks diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/EdgeBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/EdgeBookmarkLoader.cs new file mode 100644 index 00000000000..d3f1094450b --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/EdgeBookmarkLoader.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.Json; +using System.Text.RegularExpressions; + +namespace Flow.Launcher.Plugin.BrowserBookmark +{ + public class EdgeBookmarkLoader : ChromiumBookmarkLoader + { + + private readonly List _bookmarks = new(); + + private void LoadEdgeBookmarks() + { + var platformPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); + LoadBookmarks(Path.Combine(platformPath, @"Microsoft\Edge\User Data"), "Microsoft Edge"); + LoadBookmarks(Path.Combine(platformPath, @"Microsoft\Edge Dev\User Data"), "Microsoft Edge Dev"); + LoadBookmarks(Path.Combine(platformPath, @"Microsoft\Edge SxS\User Data"), "Microsoft Edge Canary"); + } + + public override List GetBookmarks() + { + _bookmarks.Clear(); + LoadEdgeBookmarks(); + return _bookmarks; + } + } +} \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/EdgeBookmarks.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/EdgeBookmarks.cs deleted file mode 100644 index 37680854949..00000000000 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/EdgeBookmarks.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text.RegularExpressions; - -namespace Flow.Launcher.Plugin.BrowserBookmark -{ - public class EdgeBookmarks - { - private List bookmarks = new List(); - - public List GetBookmarks() - { - bookmarks.Clear(); - LoadEdgeBookmarks(); - - return bookmarks; - } - - private void ParseEdgeBookmarks(string path, string source) - { - if (!File.Exists(path)) return; - - string all = File.ReadAllText(path); - Regex nameRegex = new Regex("\"name\": \"(?.*?)\""); - MatchCollection nameCollection = nameRegex.Matches(all); - Regex typeRegex = new Regex("\"type\": \"(?.*?)\""); - MatchCollection typeCollection = typeRegex.Matches(all); - Regex urlRegex = new Regex("\"url\": \"(?.*?)\""); - MatchCollection urlCollection = urlRegex.Matches(all); - - List names = (from Match match in nameCollection select match.Groups["name"].Value).ToList(); - List types = (from Match match in typeCollection select match.Groups["type"].Value).ToList(); - List urls = (from Match match in urlCollection select match.Groups["url"].Value).ToList(); - - int urlIndex = 0; - for (int i = 0; i < names.Count; i++) - { - string name = DecodeUnicode(names[i]); - string type = types[i]; - if (type == "url") - { - string url = urls[urlIndex]; - urlIndex++; - - if (url == null) continue; - if (url.StartsWith("javascript:", StringComparison.OrdinalIgnoreCase)) continue; - if (url.StartsWith("vbscript:", StringComparison.OrdinalIgnoreCase)) continue; - - bookmarks.Add(new Bookmark() - { - Name = name, - Url = url, - Source = source - }); - } - } - } - - private void LoadEdgeBookmarks(string path, string name) - { - if (!Directory.Exists(path)) return; - var paths = Directory.GetDirectories(path); - - foreach (var profile in paths) - { - if (File.Exists(Path.Combine(profile, "Bookmarks"))) - ParseEdgeBookmarks(Path.Combine(profile, "Bookmarks"), name + (Path.GetFileName(profile) == "Default" ? "" : (" (" + Path.GetFileName(profile) + ")"))); - } - } - - private void LoadEdgeBookmarks() - { - string platformPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); - LoadEdgeBookmarks(Path.Combine(platformPath, @"Microsoft\Edge\User Data"), "Microsoft Edge"); - LoadEdgeBookmarks(Path.Combine(platformPath, @"Microsoft\Edge Dev\User Data"), "Microsoft Edge Dev"); - LoadEdgeBookmarks(Path.Combine(platformPath, @"Microsoft\Edge SxS\User Data"), "Microsoft Edge Canary"); - } - - private string DecodeUnicode(string dataStr) - { - Regex reg = new Regex(@"(?i)\\[uU]([0-9a-f]{4})"); - return reg.Replace(dataStr, m => ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString()); - } - } -} \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarks.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs similarity index 85% rename from Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarks.cs rename to Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs index b718da3cf80..5d47c80e3e1 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarks.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs @@ -6,7 +6,7 @@ namespace Flow.Launcher.Plugin.BrowserBookmark { - public class FirefoxBookmarks + public class FirefoxBookmarkLoader : IBookmarkLoader { private const string queryAllBookmarks = @"SELECT moz_places.url, moz_bookmarks.title FROM moz_places @@ -27,10 +27,10 @@ public List GetBookmarks() if (string.IsNullOrEmpty(PlacesPath) || !File.Exists(PlacesPath)) return new List(); - var bookmarList = new List(); + var bookmarkList = new List(); // create the connection string and init the connection - string dbPath = string.Format(dbPathFormat, PlacesPath); + string dbPath = string.Format(dbPathFormat, PlacesPath); using (var dbConnection = new SQLiteConnection(dbPath)) { // Open connection to the database file and execute the query @@ -38,14 +38,13 @@ public List GetBookmarks() var reader = new SQLiteCommand(queryAllBookmarks, dbConnection).ExecuteReader(); // return results in List format - bookmarList = reader.Select(x => new Bookmark() - { - Name = (x["title"] is DBNull) ? string.Empty : x["title"].ToString(), - Url = x["url"].ToString() - }).ToList(); + bookmarkList = reader.Select( + x => new Bookmark(x["title"] is DBNull ? string.Empty : x["title"].ToString(), + x["url"].ToString()) + ).ToList(); } - return bookmarList; + return bookmarkList; } /// @@ -63,7 +62,8 @@ private string PlacesPath // get firefox default profile directory from profiles.ini string ini; - using (var sReader = new StreamReader(profileIni)) { + using (var sReader = new StreamReader(profileIni)) + { ini = sReader.ReadToEnd(); } @@ -95,7 +95,10 @@ Current profiles.ini structure example as of Firefox version 69.0.1 Version=2 */ - var lines = ini.Split(new string[] { "\r\n" }, StringSplitOptions.None).ToList(); + var lines = ini.Split(new string[] + { + "\r\n" + }, StringSplitOptions.None).ToList(); var defaultProfileFolderNameRaw = lines.Where(x => x.Contains("Default=") && x != "Default=1").FirstOrDefault() ?? string.Empty; @@ -104,14 +107,14 @@ Current profiles.ini structure example as of Firefox version 69.0.1 var defaultProfileFolderName = defaultProfileFolderNameRaw.Split('=').Last(); - var indexOfDefaultProfileAtttributePath = lines.IndexOf("Path="+ defaultProfileFolderName); + var indexOfDefaultProfileAtttributePath = lines.IndexOf("Path=" + defaultProfileFolderName); // Seen in the example above, the IsRelative attribute is always above the Path attribute var relativeAttribute = lines[indexOfDefaultProfileAtttributePath - 1]; return relativeAttribute == "0" // See above, the profile is located in a custom location, path is not relative, so IsRelative=0 - ? defaultProfileFolderName + @"\places.sqlite" - : Path.Combine(profileFolderPath, defaultProfileFolderName) + @"\places.sqlite"; + ? defaultProfileFolderName + @"\places.sqlite" + : Path.Combine(profileFolderPath, defaultProfileFolderName) + @"\places.sqlite"; } } } @@ -126,4 +129,4 @@ public static IEnumerable Select(this SQLiteDataReader reader, Func GetBookmarks(); + } +} \ No newline at end of file From d51579967bad180e9bc3da557674cfe1d40fa0c1 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Wed, 22 Sep 2021 18:09:30 -0500 Subject: [PATCH 053/625] Further Refactor & add CustomBrowsers UI --- .../ChromeBookmarkLoader.cs | 3 +- .../ChromiumBookmarkLoader.cs | 5 +- .../{Bookmarks.cs => BookmarkLoader.cs} | 16 ++++--- .../CustomChromiumBookmarkLoader.cs | 14 ++++++ .../EdgeBookmarkLoader.cs | 1 + .../FirefoxBookmarkLoader.cs | 1 + ...low.Launcher.Plugin.BrowserBookmark.csproj | 4 ++ .../IBookmarkLoader.cs | 3 +- .../Main.cs | 6 +-- .../{ => Models}/Bookmark.cs | 11 ++--- .../Models/CustomBrowser.cs | 8 ++++ .../Models/Settings.cs | 20 +++++++- .../Views/CustomBrowserSetting.xaml | 36 +++++++++++++++ .../Views/CustomBrowserSetting.xaml.cs | 45 ++++++++++++++++++ .../Views/SettingsControl.xaml | 46 +++++++++++++++---- .../Views/SettingsControl.xaml.cs | 40 +++++++++++----- 16 files changed, 218 insertions(+), 41 deletions(-) rename Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/{Bookmarks.cs => BookmarkLoader.cs} (71%) create mode 100644 Plugins/Flow.Launcher.Plugin.BrowserBookmark/CustomChromiumBookmarkLoader.cs rename Plugins/Flow.Launcher.Plugin.BrowserBookmark/{ => Models}/Bookmark.cs (73%) create mode 100644 Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/CustomBrowser.cs create mode 100644 Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/CustomBrowserSetting.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/CustomBrowserSetting.xaml.cs diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromeBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromeBookmarkLoader.cs index 7fdb86f3148..d7cfcaf6a41 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromeBookmarkLoader.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromeBookmarkLoader.cs @@ -1,4 +1,5 @@ -using System; +using Flow.Launcher.Plugin.BrowserBookmark.Models; +using System; using System.Collections.Generic; using System.IO; using System.Linq; diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs index 7be66eea546..a6edf33023a 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Authentication; +using Flow.Launcher.Plugin.BrowserBookmark.Models; +using Microsoft.AspNetCore.Authentication; using System.Collections.Generic; using System.IO; using System.Text.Json; @@ -28,6 +29,8 @@ protected List LoadBookmarks(string browserDataPath, string name) protected List LoadBookmarksFromFile(string path, string source) { + if (!File.Exists(path)) + return new(); var bookmarks = new List(); using var jsonDocument = JsonDocument.Parse(File.ReadAllText(path)); if (!jsonDocument.RootElement.TryGetProperty("roots", out var rootElement)) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/Bookmarks.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/BookmarkLoader.cs similarity index 71% rename from Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/Bookmarks.cs rename to Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/BookmarkLoader.cs index c7cf4867d18..b4c6235e0b4 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/Bookmarks.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/BookmarkLoader.cs @@ -1,11 +1,12 @@ using System.Collections.Generic; using System.Linq; using Flow.Launcher.Infrastructure; +using Flow.Launcher.Plugin.BrowserBookmark.Models; using Flow.Launcher.Plugin.SharedModels; namespace Flow.Launcher.Plugin.BrowserBookmark.Commands { - internal static class Bookmarks + internal static class BookmarkLoader { internal static MatchResult MatchProgram(Bookmark bookmark, string queryString) { @@ -18,23 +19,24 @@ internal static MatchResult MatchProgram(Bookmark bookmark, string queryString) internal static List LoadAllBookmarks() { - var allbookmarks = new List(); var chromeBookmarks = new ChromeBookmarkLoader(); var mozBookmarks = new FirefoxBookmarkLoader(); var edgeBookmarks = new EdgeBookmarkLoader(); + var allBookmarks = new List(); + //TODO: Let the user select which browser's bookmarks are displayed // Add Firefox bookmarks - mozBookmarks.GetBookmarks().ForEach(x => allbookmarks.Add(x)); + allBookmarks.AddRange(mozBookmarks.GetBookmarks()); // Add Chrome bookmarks - chromeBookmarks.GetBookmarks().ForEach(x => allbookmarks.Add(x)); + allBookmarks.AddRange(chromeBookmarks.GetBookmarks()); // Add Edge (Chromium) bookmarks - edgeBookmarks.GetBookmarks().ForEach(x => allbookmarks.Add(x)); + allBookmarks.AddRange(edgeBookmarks.GetBookmarks()); - return allbookmarks.Distinct().ToList(); + return allBookmarks.Distinct().ToList(); } } -} +} \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/CustomChromiumBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/CustomChromiumBookmarkLoader.cs new file mode 100644 index 00000000000..91189ace7c7 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/CustomChromiumBookmarkLoader.cs @@ -0,0 +1,14 @@ +using Flow.Launcher.Plugin.BrowserBookmark.Models; +using System.Collections.Generic; + +namespace Flow.Launcher.Plugin.BrowserBookmark +{ + public class CustomChromiumBookmarkLoader : ChromiumBookmarkLoader + { + public string BrowserDataPath { get; init; } + public string BookmarkFilePath { get; init; } + public string BrowserName { get; init; } + + public override List GetBookmarks() => BrowserDataPath != null ? LoadBookmarks(BrowserDataPath, BrowserName) : LoadBookmarksFromFile(BookmarkFilePath, BrowserName); + } +} \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/EdgeBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/EdgeBookmarkLoader.cs index d3f1094450b..d982ee99e59 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/EdgeBookmarkLoader.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/EdgeBookmarkLoader.cs @@ -1,3 +1,4 @@ +using Flow.Launcher.Plugin.BrowserBookmark.Models; using System; using System.Collections.Generic; using System.IO; diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs index 5d47c80e3e1..3df0347814c 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs @@ -1,3 +1,4 @@ +using Flow.Launcher.Plugin.BrowserBookmark.Models; using System; using System.Collections.Generic; using System.Data.SQLite; diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj index acfc79d7a83..46313d38fbb 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj @@ -69,4 +69,8 @@ + + + + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/IBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/IBookmarkLoader.cs index 1dbd8b6bfb4..2c48cfd557e 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/IBookmarkLoader.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/IBookmarkLoader.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using Flow.Launcher.Plugin.BrowserBookmark.Models; +using System.Collections.Generic; namespace Flow.Launcher.Plugin.BrowserBookmark { diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs index a0b443e7550..eaf14d5c248 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs @@ -26,7 +26,7 @@ public void Init(PluginInitContext context) _settings = context.API.LoadSettingJsonStorage(); - cachedBookmarks = Bookmarks.LoadAllBookmarks(); + cachedBookmarks = BookmarkLoader.LoadAllBookmarks(); } public List Query(Query query) @@ -45,7 +45,7 @@ public List Query(Query query) Title = c.Name, SubTitle = c.Url, IcoPath = @"Images\bookmark.png", - Score = Bookmarks.MatchProgram(c, param).Score, + Score = BookmarkLoader.MatchProgram(c, param).Score, Action = _ => { if (_settings.OpenInNewBrowserWindow) @@ -93,7 +93,7 @@ public void ReloadData() { cachedBookmarks.Clear(); - cachedBookmarks = Bookmarks.LoadAllBookmarks(); + cachedBookmarks = BookmarkLoader.LoadAllBookmarks(); } public string GetTranslatedPluginTitle() diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Bookmark.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/Bookmark.cs similarity index 73% rename from Plugins/Flow.Launcher.Plugin.BrowserBookmark/Bookmark.cs rename to Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/Bookmark.cs index 185cf162032..c2fa9d9775a 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Bookmark.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/Bookmark.cs @@ -1,11 +1,6 @@ -using BinaryAnalysis.UnidecodeSharp; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Collections.Generic; - -namespace Flow.Launcher.Plugin.BrowserBookmark +namespace Flow.Launcher.Plugin.BrowserBookmark.Models { // Source may be important in the future public record Bookmark(string Name, string Url, string Source = "") @@ -21,5 +16,7 @@ public virtual bool Equals(Bookmark other) { return other != null && Name == other.Name && Url == other.Url; } + + public List CustomBrowsers { get; set; }= new(); } } \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/CustomBrowser.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/CustomBrowser.cs new file mode 100644 index 00000000000..1ddeab5df66 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/CustomBrowser.cs @@ -0,0 +1,8 @@ +namespace Flow.Launcher.Plugin.BrowserBookmark.Models +{ + public class CustomBrowser : BaseModel + { + public string Name { get; set; } + public string Path { get; set; } + } +} \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/Settings.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/Settings.cs index dc444fd7365..e63b90dbc5a 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/Settings.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/Settings.cs @@ -1,9 +1,27 @@ -namespace Flow.Launcher.Plugin.BrowserBookmark.Models +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Text.Json.Serialization; + +namespace Flow.Launcher.Plugin.BrowserBookmark.Models { public class Settings : BaseModel { public bool OpenInNewBrowserWindow { get; set; } = true; public string BrowserPath { get; set; } + + public ObservableCollection CustomBrowsers { get; set; } = new() + { + new CustomBrowser + { + Name="awefawef", + Path="awefawef" + }, + new CustomBrowser + { + Name = "awefawefawefawef", + Path = "aweawefawfawef" + } + }; } } \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/CustomBrowserSetting.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/CustomBrowserSetting.xaml new file mode 100644 index 00000000000..2370789f19c --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/CustomBrowserSetting.xaml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + /// - public void ChangeQueryText(string queryText) + public void ChangeQueryText(string queryText, bool reQuery) { - QueryText = queryText; + if (QueryText!=queryText) + { + QueryText = queryText; + } + else if (reQuery) + { + Query(); + } QueryTextCursorMovedToEnd = true; } From 54b5966e410a601f244e978b673a36a871dc5ff2 Mon Sep 17 00:00:00 2001 From: Kevin Zhang <45326534+taooceros@users.noreply.github.com> Date: Fri, 24 Sep 2021 20:07:01 -0500 Subject: [PATCH 061/625] add default Parameter --- Flow.Launcher/ViewModel/MainViewModel.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index b5eec49729d..e012a2dfdc8 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -285,7 +285,7 @@ public string QueryText /// but we don't want to move cursor to end when query is updated from TextBox /// /// - public void ChangeQueryText(string queryText, bool reQuery) + public void ChangeQueryText(string queryText, bool reQuery = false) { if (QueryText!=queryText) { From 9a488dc89628e10b2a7060dee64ede46b15fa884 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 27 Sep 2021 07:39:49 +1000 Subject: [PATCH 062/625] version bump PluginsManager --- Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json b/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json index 08dab6fbf25..59202510300 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json @@ -6,7 +6,7 @@ "Name": "Plugins Manager", "Description": "Management of installing, uninstalling or updating Flow Launcher plugins", "Author": "Jeremy Wu", - "Version": "1.8.5", + "Version": "1.9.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.PluginsManager.dll", From 3ae9e161b2d9633f780a44ed390181b408ee93e6 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sun, 26 Sep 2021 18:28:22 -0500 Subject: [PATCH 063/625] Allow keyword search --- Classes/WindowsSetting.cs | 10 ++++++++++ Flow.Plugin.WindowsSettings.sln | 25 +++++++++++++++++++++++++ Helper/ResultHelper.cs | 15 ++++++++++++++- 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 Flow.Plugin.WindowsSettings.sln diff --git a/Classes/WindowsSetting.cs b/Classes/WindowsSetting.cs index 0a598d12216..4a130daf746 100644 --- a/Classes/WindowsSetting.cs +++ b/Classes/WindowsSetting.cs @@ -47,6 +47,16 @@ public WindowsSetting() /// public IEnumerable? AltNames { get; set; } + /// + /// Gets or sets the Keywords names of this task link. + /// + public IEnumerable>? Keywords { get; set; } + + /// + /// Gets or sets the Ghyph of this setting + /// + public string? glyph { get; set; } + /// /// Gets or sets a additional note of this settings. /// (e.g. why is not supported on your system) diff --git a/Flow.Plugin.WindowsSettings.sln b/Flow.Plugin.WindowsSettings.sln new file mode 100644 index 00000000000..79ce0859866 --- /dev/null +++ b/Flow.Plugin.WindowsSettings.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31512.422 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flow.Plugin.WindowsSettings", "Flow.Plugin.WindowsSettings.csproj", "{5043CECE-E6A7-4867-9CBE-02D27D83747A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Debug|x64.ActiveCfg = Debug|x64 + {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Debug|x64.Build.0 = Debug|x64 + {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Release|x64.ActiveCfg = Release|x64 + {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {EA85E245-28F0-4192-B9E7-6FA8CFF3D3CD} + EndGlobalSection +EndGlobal diff --git a/Helper/ResultHelper.cs b/Helper/ResultHelper.cs index 29fcc0038f7..fb781e1f8c8 100644 --- a/Helper/ResultHelper.cs +++ b/Helper/ResultHelper.cs @@ -69,7 +69,20 @@ internal static List GetResultList( .FirstOrDefault(); } + if (result is null && entry.Keywords is not null) + { + string[] searchKeywords = query.Terms[(string.IsNullOrEmpty(query.ActionKeyword) ? 0 : 1)..]; + + if (searchKeywords + .All(x => entry + .Keywords + .SelectMany(x => x) + .Contains(x, StringComparer.CurrentCultureIgnoreCase)) + ) + result = NewSettingResult(midScore); + } } + if (result is null) continue; @@ -82,7 +95,7 @@ internal static List GetResultList( Action = _ => DoOpenSettingsAction(entry), IcoPath = iconPath, SubTitle = $"{Resources.Area} \"{entry.Area}\" {Resources.SubtitlePreposition} {entry.Type}", - Title = entry.Name, + Title = entry.Name + entry.glyph, ContextData = entry, Score = score }; From 0123f5e930d9a1a7b6e6c73928ba110f76a34850 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Mon, 27 Sep 2021 14:01:14 +1000 Subject: [PATCH 064/625] add comment to clarify re-query --- Flow.Launcher/ViewModel/MainViewModel.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index e012a2dfdc8..04b5ffede35 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -289,6 +289,7 @@ public void ChangeQueryText(string queryText, bool reQuery = false) { if (QueryText!=queryText) { + // re-query is done in QueryText's setter method QueryText = queryText; } else if (reQuery) From 42e0b366c0eff6874dd72f1a0a39a60373d66182 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Mon, 27 Sep 2021 20:57:59 +1000 Subject: [PATCH 065/625] version bump --- Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj | 8 ++++---- appveyor.yml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj index 67c76d0064d..564fef4b54a 100644 --- a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj +++ b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj @@ -14,10 +14,10 @@ - 2.0.0 - 2.0.0 - 2.0.0 - 2.0.0 + 2.1.0 + 2.1.0 + 2.1.0 + 2.1.0 Flow.Launcher.Plugin Flow-Launcher MIT diff --git a/appveyor.yml b/appveyor.yml index b45b4018689..8c4be2d84ec 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -version: '1.8.3.{build}' +version: '1.9.0.{build}' init: - ps: | From 3a0594f99b6167873b4b0e6dd3344780685153dc Mon Sep 17 00:00:00 2001 From: Dobin Park Date: Mon, 27 Sep 2021 20:00:46 +0900 Subject: [PATCH 066/625] - Changing Result item and hotkey layout - Add Hightlight Styling - Add New Themes and adjust classic themes --- Flow.Launcher.Core/Resource/Theme.cs | 12 +- .../Converters/HighlightTextConverter.cs | 8 +- Flow.Launcher/Flow.Launcher.csproj | 4 + Flow.Launcher/MainWindow.xaml | 24 +- Flow.Launcher/ResultListBox.xaml | 51 +-- Flow.Launcher/Themes/Base.xaml | 43 +- Flow.Launcher/Themes/BlackAndWhite.xaml | 10 + Flow.Launcher/Themes/BlurBlack Darker.xaml | 8 + Flow.Launcher/Themes/BlurBlack.xaml | 8 + Flow.Launcher/Themes/BlurWhite.xaml | 4 + Flow.Launcher/Themes/Darker.xaml | 8 + Flow.Launcher/Themes/Gray.xaml | 13 + Flow.Launcher/Themes/League.Designer.xaml | 36 ++ Flow.Launcher/Themes/League.xaml | 58 +++ Flow.Launcher/Themes/Light.xaml | 13 + Flow.Launcher/Themes/Metro Server.xaml | 16 +- Flow.Launcher/Themes/Nord Darker.xaml | 8 + Flow.Launcher/Themes/Nord.xaml | 8 + Flow.Launcher/Themes/Pink.xaml | 28 +- Flow.Launcher/Themes/Win11Dark.Designer.xaml | 36 ++ Flow.Launcher/Themes/Win11Dark.xaml | 251 +++++++++++ Flow.Launcher/ViewModel/ResultViewModel.cs | 2 +- Flow.Launcher/ViewModel/ResultsViewModel.cs | 2 +- ...her.Plugin.Explorer_ovmyrfet_wpftmp.csproj | 403 ++++++++++++++++++ 24 files changed, 991 insertions(+), 63 deletions(-) create mode 100644 Flow.Launcher/Themes/League.Designer.xaml create mode 100644 Flow.Launcher/Themes/League.xaml create mode 100644 Flow.Launcher/Themes/Win11Dark.Designer.xaml create mode 100644 Flow.Launcher/Themes/Win11Dark.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.Explorer/Flow.Launcher.Plugin.Explorer_ovmyrfet_wpftmp.csproj diff --git a/Flow.Launcher.Core/Resource/Theme.cs b/Flow.Launcher.Core/Resource/Theme.cs index e70de673e4c..ac5363a2c12 100644 --- a/Flow.Launcher.Core/Resource/Theme.cs +++ b/Flow.Launcher.Core/Resource/Theme.cs @@ -244,7 +244,7 @@ public void AddDropShadowEffectToCurrentTheme() effectSetter.Property = Border.EffectProperty; effectSetter.Value = new DropShadowEffect { - Opacity = 0.9, + Opacity = 0.4, ShadowDepth = 2, BlurRadius = 15 }; @@ -261,7 +261,7 @@ public void AddDropShadowEffectToCurrentTheme() } else { - var baseMargin = (Thickness) marginSetter.Value; + var baseMargin = (Thickness)marginSetter.Value; var newMargin = new Thickness( baseMargin.Left + ShadowExtraMargin, baseMargin.Top + ShadowExtraMargin, @@ -282,8 +282,8 @@ public void RemoveDropShadowEffectFromCurrentTheme() var effectSetter = windowBorderStyle.Setters.FirstOrDefault(setterBase => setterBase is Setter setter && setter.Property == Border.EffectProperty) as Setter; var marginSetter = windowBorderStyle.Setters.FirstOrDefault(setterBase => setterBase is Setter setter && setter.Property == Border.MarginProperty) as Setter; - - if(effectSetter != null) + + if (effectSetter != null) { windowBorderStyle.Setters.Remove(effectSetter); } @@ -371,11 +371,11 @@ private bool IsBlurTheme() private void SetWindowAccent(Window w, AccentState state) { var windowHelper = new WindowInteropHelper(w); - + // this determines the width of the main query window w.Width = mainWindowWidth; windowHelper.EnsureHandle(); - + var accent = new AccentPolicy { AccentState = state }; var accentStructSize = Marshal.SizeOf(accent); diff --git a/Flow.Launcher/Converters/HighlightTextConverter.cs b/Flow.Launcher/Converters/HighlightTextConverter.cs index 006e523200b..6bea2092ca0 100644 --- a/Flow.Launcher/Converters/HighlightTextConverter.cs +++ b/Flow.Launcher/Converters/HighlightTextConverter.cs @@ -1,4 +1,4 @@ -using System; +using System.Windows;using System; using System.Collections.Generic; using System.Globalization; using System.Linq; @@ -6,6 +6,7 @@ using System.Threading.Tasks; using System.Windows; using System.Windows.Data; +using System.Windows.Media; using System.Windows.Documents; namespace Flow.Launcher.Converters @@ -30,7 +31,10 @@ public object Convert(object[] value, Type targetType, object parameter, Culture var currentCharacter = text.Substring(i, 1); if (this.ShouldHighlight(highlightData, i)) { - textBlock.Inlines.Add(new Bold(new Run(currentCharacter))); + //textBlock.Inlines.Add(new Bold(new Run(currentCharacter))); + //textBlock.Inlines.Add(new Run(currentCharacter) { Foreground = Brushes.RoyalBlue }); + textBlock.Inlines.Add(new Run(currentCharacter) { Style = (Style)Application.Current.FindResource("HighlightStyle") }); + } else { diff --git a/Flow.Launcher/Flow.Launcher.csproj b/Flow.Launcher/Flow.Launcher.csproj index 529fc52a2ee..bb3c84eecac 100644 --- a/Flow.Launcher/Flow.Launcher.csproj +++ b/Flow.Launcher/Flow.Launcher.csproj @@ -47,7 +47,11 @@ + + + + diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index 83cc016bbbd..80373e1f806 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -31,6 +31,7 @@ + @@ -62,13 +63,13 @@ - + + Margin="16,0,56,0"> @@ -83,24 +84,29 @@ AllowDrop="True" Visibility="Visible" Background="Transparent" - Margin="18,0,56,0"> + Margin="16,0,56,0"> - + - + - + + - + Y1="0" Y2="0" X2="100" Height="2" Width="Auto" StrokeThickness="1"> + + + diff --git a/Flow.Launcher/ResultListBox.xaml b/Flow.Launcher/ResultListBox.xaml index dfee8981072..605d0ffa523 100644 --- a/Flow.Launcher/ResultListBox.xaml +++ b/Flow.Launcher/ResultListBox.xaml @@ -20,6 +20,7 @@ IsSynchronizedWithCurrentItem="True" PreviewMouseDown="ListBox_PreviewMouseDown"> + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - + + + + - - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + +  + + + + + + - - - - + + + + + + - + - - - - - - - - + Width="130" Margin="10 0 0 0"> + + + + + + + + + + + + + + +  + - - - - - - - + + + + + + - + - - - - - - - - + Width="130" Margin="10 -2 0 0"> + + + + + + + + + + + + + + +  + - - - + + + + + + + + + + + + +  + + + + - - - + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - void RestartApp(); + /// + /// Run a shell command or external program + /// + /// The command or program to run + void ShellRun(string cmd); + /// /// Save everything, all of Flow Launcher and plugins' data and settings /// diff --git a/Flow.Launcher/PublicAPIInstance.cs b/Flow.Launcher/PublicAPIInstance.cs index 6f995671dd2..c528b82298c 100644 --- a/Flow.Launcher/PublicAPIInstance.cs +++ b/Flow.Launcher/PublicAPIInstance.cs @@ -103,6 +103,16 @@ public void OpenSettingDialog() }); } + public void ShellRun(string cmd) + { + System.Diagnostics.Process process = new(); + var startInfo = process.StartInfo; + startInfo.FileName = "cmd.exe"; + startInfo.Arguments = $"/C {cmd}"; + startInfo.CreateNoWindow = true; + process.Start(); + } + public void StartLoadingBar() => _mainVM.ProgressBarVisibility = Visibility.Visible; public void StopLoadingBar() => _mainVM.ProgressBarVisibility = Visibility.Collapsed; From 254a906f8eaa01357f3c30d23eec8e0f85c99e9e Mon Sep 17 00:00:00 2001 From: Dobin Park Date: Sat, 9 Oct 2021 20:47:05 +0900 Subject: [PATCH 145/625] - Change Prriority text to button - Priority Button color change by Priority number (0 gray, 0<= Bold Black) - Priority button update when property changed. --- Flow.Launcher/SettingWindow.xaml | 43 ++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 9ca403f0727..02de47fe730 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -229,6 +229,7 @@ + @@ -240,6 +241,7 @@ + @@ -253,7 +255,14 @@ + + @@ -566,12 +575,36 @@ - - + + + Date: Sat, 9 Oct 2021 20:58:22 +0900 Subject: [PATCH 146/625] - Remove Expander Button's Circle and adjust arrow size --- Flow.Launcher/App.xaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Flow.Launcher/App.xaml b/Flow.Launcher/App.xaml index 1311de9684b..13d88e1c6f9 100644 --- a/Flow.Launcher/App.xaml +++ b/Flow.Launcher/App.xaml @@ -71,8 +71,8 @@ - - + + @@ -82,11 +82,11 @@ - + - + @@ -160,8 +160,8 @@ - - + + @@ -170,11 +170,11 @@ - + - + From 762df7fdd380926eaced688b2d2bfef713602f85 Mon Sep 17 00:00:00 2001 From: Dobin Park Date: Sat, 9 Oct 2021 22:22:47 +0900 Subject: [PATCH 147/625] - Remove colon Action keyword String - Fix layout for init/query time/version/plugin store - change action keyword to button - add listbox bottom margin - add margin when select list item for easy to distinguish. --- Flow.Launcher/Languages/en.xaml | 2 +- Flow.Launcher/SettingWindow.xaml | 80 +++++++++++++++++------------ Flow.Launcher/SettingWindow.xaml.cs | 14 +++-- 3 files changed, 58 insertions(+), 38 deletions(-) diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 60605df30bb..79b8ce669e6 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -46,7 +46,7 @@ Find more plugins On Off - Action keyword: + Action keyword Current action keyword: New action keyword: Current Priority: diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 02de47fe730..47df7056124 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -229,7 +229,7 @@ - + @@ -241,7 +241,7 @@ - + @@ -257,13 +257,6 @@ - @@ -542,7 +535,7 @@ Margin="0, 0, 0, 0" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ItemContainerStyle="{StaticResource PluginList}" ScrollViewer.IsDeferredScrollingEnabled="True" ScrollViewer.CanContentScroll="False" - Padding="0" Width="Auto" HorizontalAlignment="Stretch"> + Padding="0 0 0 18" Width="Auto" HorizontalAlignment="Stretch"> @@ -618,22 +611,36 @@ - - - + + + - + + + + @@ -652,29 +659,36 @@ - + Padding="0 12 0 0" > - - + + + - + - + - - + HorizontalAlignment="Right" FontSize="12" VerticalAlignment="Center"/> + + diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index 08d0eb88a69..9b5c34c44f3 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -193,14 +193,13 @@ private void OnPluginPriorityClick(object sender, RoutedEventArgs e) } - private void OnPluginActionKeywordsClick(object sender, MouseButtonEventArgs e) + private void OnPluginActionKeywordsClick(object sender, RoutedEventArgs e) { - if (e.ChangedButton == MouseButton.Left) - { + var id = viewModel.SelectedPlugin.PluginPair.Metadata.ID; ActionKeywords changeKeywordsWindow = new ActionKeywords(id, settings, viewModel.SelectedPlugin); changeKeywordsWindow.ShowDialog(); - } + } private void OnPluginNameClick(object sender, MouseButtonEventArgs e) @@ -266,6 +265,13 @@ private void OpenPluginFolder(object sender, RoutedEventArgs e) FilesFolders.OpenPath(Path.Combine(DataLocation.DataDirectory(), Constant.Themes)); } + /* + private void OnPluginActionKeywordsClick(object sender, RoutedEventArgs e) + { + + } + */ + /*private void OnPluginPriorityClick(object sender, RoutedEventArgs e) { From 4a4f0bbefbd24a0e2209b742934c4736dd573dcf Mon Sep 17 00:00:00 2001 From: Dobin Park Date: Sat, 9 Oct 2021 22:27:09 +0900 Subject: [PATCH 148/625] - Add plugin page title - Adjust listbox Margin for fit other setting page list. --- Flow.Launcher/SettingWindow.xaml | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 47df7056124..38c739fb2c7 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -527,12 +527,20 @@ - - - + + + + + + + + + + + From 0d11b79ee31d21aacb6717e5b6a160e90ee5063d Mon Sep 17 00:00:00 2001 From: Dobin Park Date: Sun, 10 Oct 2021 00:02:41 +0900 Subject: [PATCH 149/625] - Adjust Shell, Calc, WebSearch Setting Margin --- .../Views/CalculatorSettings.xaml | 2 +- Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml | 2 +- Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Views/CalculatorSettings.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Views/CalculatorSettings.xaml index 1330247b2ab..374bccf6248 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Views/CalculatorSettings.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Views/CalculatorSettings.xaml @@ -15,7 +15,7 @@ - + diff --git a/Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml b/Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml index 4cd4d8fa3a8..d9b1942f1c1 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml @@ -6,7 +6,7 @@ mc:Ignorable="d" Loaded="CMDSetting_OnLoaded" d:DesignHeight="300" d:DesignWidth="300"> - + diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml index c2f64bc7eda..cb0b5006919 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml @@ -32,7 +32,7 @@ - + From 2dc8bb386e41dbfb1b7d41c7f28726084cebc8e1 Mon Sep 17 00:00:00 2001 From: Dobin Park Date: Sun, 10 Oct 2021 00:33:11 +0900 Subject: [PATCH 150/625] - Add Automatically Hide Plugin Info Border by SettingControl Height --- Flow.Launcher/SettingWindow.xaml | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 38c739fb2c7..769da568ac0 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -655,13 +655,23 @@ - - + + + From 2af186736a12f0d691c89475ec2e0a065cf3d431 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sat, 9 Oct 2021 11:34:41 -0500 Subject: [PATCH 151/625] Rename with async suffix and add lock to prevent concurrent update check --- Flow.Launcher.Core/Updater.cs | 37 +++++++++++-------- Flow.Launcher/App.xaml.cs | 4 +- .../ViewModel/SettingWindowViewModel.cs | 2 +- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/Flow.Launcher.Core/Updater.cs b/Flow.Launcher.Core/Updater.cs index 76713ce2ab1..e09c6380c5d 100644 --- a/Flow.Launcher.Core/Updater.cs +++ b/Flow.Launcher.Core/Updater.cs @@ -16,6 +16,7 @@ using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Plugin; using System.Text.Json.Serialization; +using System.Threading; namespace Flow.Launcher.Core { @@ -28,21 +29,21 @@ public Updater(string gitHubRepository) GitHubRepository = gitHubRepository; } - public async Task UpdateApp(IPublicAPI api, bool silentUpdate = true) + private SemaphoreSlim UpdateLock { get; } = new SemaphoreSlim(1); + + public async Task UpdateAppAsync(IPublicAPI api, bool silentUpdate = true) { + await UpdateLock.WaitAsync(); try { - UpdateInfo newUpdateInfo; - if (!silentUpdate) api.ShowMsg(api.GetTranslation("pleaseWait"), - api.GetTranslation("update_flowlauncher_update_check")); + api.GetTranslation("update_flowlauncher_update_check")); using var updateManager = await GitHubUpdateManager(GitHubRepository).ConfigureAwait(false); - // UpdateApp CheckForUpdate will return value only if the app is squirrel installed - newUpdateInfo = await updateManager.CheckForUpdate().NonNull().ConfigureAwait(false); + var newUpdateInfo = await updateManager.CheckForUpdate().NonNull().ConfigureAwait(false); var newReleaseVersion = Version.Parse(newUpdateInfo.FutureReleaseEntry.Version.ToString()); var currentVersion = Version.Parse(Constant.Version); @@ -58,7 +59,7 @@ public async Task UpdateApp(IPublicAPI api, bool silentUpdate = true) if (!silentUpdate) api.ShowMsg(api.GetTranslation("update_flowlauncher_update_found"), - api.GetTranslation("update_flowlauncher_updating")); + api.GetTranslation("update_flowlauncher_updating")); await updateManager.DownloadReleases(newUpdateInfo.ReleasesToApply).ConfigureAwait(false); @@ -70,8 +71,8 @@ public async Task UpdateApp(IPublicAPI api, bool silentUpdate = true) FilesFolders.CopyAll(DataLocation.PortableDataPath, targetDestination); if (!FilesFolders.VerifyBothFolderFilesEqual(DataLocation.PortableDataPath, targetDestination)) MessageBox.Show(string.Format(api.GetTranslation("update_flowlauncher_fail_moving_portable_user_profile_data"), - DataLocation.PortableDataPath, - targetDestination)); + DataLocation.PortableDataPath, + targetDestination)); } else { @@ -87,12 +88,15 @@ public async Task UpdateApp(IPublicAPI api, bool silentUpdate = true) UpdateManager.RestartApp(Constant.ApplicationFileName); } } - catch (Exception e) when (e is HttpRequestException || e is WebException || e is SocketException || e.InnerException is TimeoutException) + catch (Exception e) when (e is HttpRequestException or WebException or SocketException || e.InnerException is TimeoutException) { Log.Exception($"|Updater.UpdateApp|Check your connection and proxy settings to github-cloud.s3.amazonaws.com.", e); api.ShowMsg(api.GetTranslation("update_flowlauncher_fail"), - api.GetTranslation("update_flowlauncher_check_connection")); - return; + api.GetTranslation("update_flowlauncher_check_connection")); + } + finally + { + UpdateLock.Release(); } } @@ -115,13 +119,16 @@ private async Task GitHubUpdateManager(string repository) var uri = new Uri(repository); var api = $"https://api.github.com/repos{uri.AbsolutePath}/releases"; - var jsonStream = await Http.GetStreamAsync(api).ConfigureAwait(false); + await using var jsonStream = await Http.GetStreamAsync(api).ConfigureAwait(false); var releases = await System.Text.Json.JsonSerializer.DeserializeAsync>(jsonStream).ConfigureAwait(false); var latest = releases.Where(r => !r.Prerelease).OrderByDescending(r => r.PublishedAt).First(); var latestUrl = latest.HtmlUrl.Replace("/tag/", "/download/"); - - var client = new WebClient { Proxy = Http.WebProxy }; + + var client = new WebClient + { + Proxy = Http.WebProxy + }; var downloader = new FileDownloader(client); var manager = new UpdateManager(latestUrl, urlDownloader: downloader); diff --git a/Flow.Launcher/App.xaml.cs b/Flow.Launcher/App.xaml.cs index c2a32100dbb..8c869e9418a 100644 --- a/Flow.Launcher/App.xaml.cs +++ b/Flow.Launcher/App.xaml.cs @@ -129,12 +129,12 @@ private void AutoUpdates() var timer = new Timer(1000 * 60 * 60 * 5); timer.Elapsed += async (s, e) => { - await _updater.UpdateApp(API); + await _updater.UpdateAppAsync(API); }; timer.Start(); // check updates on startup - await _updater.UpdateApp(API); + await _updater.UpdateAppAsync(API); } }); } diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs index d3a4f9a83a5..e85d01b1ba1 100644 --- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs +++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs @@ -46,7 +46,7 @@ public SettingWindowViewModel(Updater updater, IPortable portable) public async void UpdateApp() { - await _updater.UpdateApp(App.API, false); + await _updater.UpdateAppAsync(App.API, false); } public bool AutoUpdates From 234816df4ba28485565ebb3d1c47fe743c355b97 Mon Sep 17 00:00:00 2001 From: Dobin Park Date: Sun, 10 Oct 2021 00:33:11 +0900 Subject: [PATCH 152/625] - Add Automatically Hide Plugin Info Border by SettingControl Height --- Flow.Launcher/SettingWindow.xaml | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 38c739fb2c7..07882445c98 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -636,7 +636,7 @@ ToolTip="Change Action Keywords" Margin="5 0 0 0" Cursor="Hand" FontWeight="Bold" Click="OnPluginActionKeywordsClick" HorizontalAlignment="Right" - Width="100" Height="32"> + Width="100" Height="40"> + + + + + From 2d98dcbfd8faa19706382febef4fda096a57c81c Mon Sep 17 00:00:00 2001 From: Dobin Park Date: Sun, 10 Oct 2021 06:19:15 +0900 Subject: [PATCH 153/625] - Add Author name in plugin list --- Flow.Launcher/Languages/en.xaml | 2 +- Flow.Launcher/SettingWindow.xaml | 226 +++++++++++++++++++++++++++++++ 2 files changed, 227 insertions(+), 1 deletion(-) diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 79b8ce669e6..9d9e69785fd 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -53,7 +53,7 @@ New Priority: Priority Plugin Directory - Author + Author: Init time: Query time: diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index b0f59637274..c875d652cba 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -806,6 +806,232 @@ --> + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 579f8c8b9eed6324b9924f6f35d1d9956e322658 Mon Sep 17 00:00:00 2001 From: Dobin Park Date: Sun, 10 Oct 2021 06:19:15 +0900 Subject: [PATCH 154/625] - Add Author name in plugin list --- Flow.Launcher/Languages/en.xaml | 2 +- Flow.Launcher/SettingWindow.xaml | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 79b8ce669e6..9d9e69785fd 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -53,7 +53,7 @@ New Priority: Priority Plugin Directory - Author + Author: Init time: Query time: diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index b0f59637274..7b45c7448de 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -690,9 +690,16 @@ Padding="0 12 0 0" > - + + + + + From 8174d54de659ec4f1fb850c195114fbee1cdfba2 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sat, 9 Oct 2021 17:58:40 -0500 Subject: [PATCH 155/625] Fix PriorityClick Logic Use sender to find actual pluginviewmodel instead of use selected --- Flow.Launcher/SettingWindow.xaml.cs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index 9b5c34c44f3..4d36ec5da5c 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -13,6 +13,7 @@ using Flow.Launcher.Plugin.SharedCommands; using Flow.Launcher.ViewModel; using Flow.Launcher.Helper; +using System.Windows.Controls; namespace Flow.Launcher { @@ -186,20 +187,18 @@ private void OnPluginToggled(object sender, RoutedEventArgs e) private void OnPluginPriorityClick(object sender, RoutedEventArgs e) { - - - PriorityChangeWindow priorityChangeWindow = new PriorityChangeWindow(viewModel.SelectedPlugin.PluginPair.Metadata.ID, settings, viewModel.SelectedPlugin); + if (sender is Control { DataContext: PluginViewModel pluginViewModel }) + { + PriorityChangeWindow priorityChangeWindow = new PriorityChangeWindow(pluginViewModel.PluginPair.Metadata.ID, settings, pluginViewModel); priorityChangeWindow.ShowDialog(); - + } } private void OnPluginActionKeywordsClick(object sender, RoutedEventArgs e) { - - var id = viewModel.SelectedPlugin.PluginPair.Metadata.ID; - ActionKeywords changeKeywordsWindow = new ActionKeywords(id, settings, viewModel.SelectedPlugin); - changeKeywordsWindow.ShowDialog(); - + var id = viewModel.SelectedPlugin.PluginPair.Metadata.ID; + ActionKeywords changeKeywordsWindow = new ActionKeywords(id, settings, viewModel.SelectedPlugin); + changeKeywordsWindow.ShowDialog(); } private void OnPluginNameClick(object sender, MouseButtonEventArgs e) From 1e479edead18c1290327a908c49c34d5c326d852 Mon Sep 17 00:00:00 2001 From: Dobin Park Date: Sun, 10 Oct 2021 12:39:58 +0900 Subject: [PATCH 156/625] - Add plugin store tab (WIP) --- Flow.Launcher/SettingWindow.xaml | 87 +++++++++++++++++++++++++++++++- 1 file changed, 85 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index bedad7f911c..f58b1796359 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -229,7 +229,7 @@ - + @@ -241,7 +241,7 @@ - + @@ -257,6 +257,14 @@ + + @@ -741,6 +749,81 @@ + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From a3a436c58bf0d41629ad20992542d8a4b81c8a6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Kubala?= <37414585+kubalav@users.noreply.github.com> Date: Sun, 10 Oct 2021 09:27:10 +0200 Subject: [PATCH 157/625] Update Slovak translation --- Flow.Launcher/Languages/sk.xaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Flow.Launcher/Languages/sk.xaml b/Flow.Launcher/Languages/sk.xaml index 5e63020a886..b766ccfa21a 100644 --- a/Flow.Launcher/Languages/sk.xaml +++ b/Flow.Launcher/Languages/sk.xaml @@ -82,6 +82,8 @@ Ste si istý, že chcete odstrániť klávesovú skratku {0} pre plugin? Tieňový efekt v poli vyhľadávania Tieňový efekt významne využíva GPU. Neodporúča sa, ak je výkon počítača obmedzený. + Použiť ikony Segoe Fluent + Použiť ikony Segoe Fluent, ak sú podporované HTTP Proxy @@ -178,4 +180,4 @@ Aktualizovať súbory Aktualizovať popis - \ No newline at end of file + From 876d477f25cde4ee00c10ce56efd87e0aaa12df2 Mon Sep 17 00:00:00 2001 From: Dobin Park Date: Sun, 10 Oct 2021 22:21:32 +0900 Subject: [PATCH 158/625] - Add install button with hover --- Flow.Launcher/SettingWindow.xaml | 154 +++++++++++++++++++++++++++---- 1 file changed, 134 insertions(+), 20 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index f58b1796359..cb2146c535b 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -260,10 +260,70 @@ @@ -785,34 +845,88 @@ Padding="0 0 0 0" Width="Auto" VerticalContentAlignment="Center" HorizontalAlignment="Stretch"> - + - - - - - - + + + + + + + - + + + - - + + + + - + - - + - + + + + + + + + + + + + + + + + + + From 4164b46f728cd413224f2811bf61996e88e14d29 Mon Sep 17 00:00:00 2001 From: Dobin Park Date: Mon, 11 Oct 2021 02:22:39 +0900 Subject: [PATCH 159/625] Add author and version in hover menu. --- Flow.Launcher/SettingWindow.xaml | 37 ++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index cb2146c535b..260ab42801a 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -852,7 +852,7 @@ - + @@ -905,21 +905,30 @@ - + - + - From ccb565e70a39541d1032bef97d3e6fe235bab72e Mon Sep 17 00:00:00 2001 From: Dobin Park Date: Mon, 11 Oct 2021 04:54:04 +0900 Subject: [PATCH 160/625] Responsive Width in Plugin Store List (WIP --- Flow.Launcher/SettingWindow.xaml | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 260ab42801a..c02c487a680 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -263,7 +263,9 @@ - + + + @@ -837,7 +839,7 @@ - - + + + + - + @@ -887,12 +892,12 @@ - + - - + + - - - - + + + + - - + + + - - - - + From 1317077dd8ab1102c97d93ad0477c255e4aa112b Mon Sep 17 00:00:00 2001 From: Dobin Park Date: Sun, 17 Oct 2021 10:57:50 +0900 Subject: [PATCH 190/625] - Change the popup to windows notification --- Flow.Launcher/Msg.xaml.cs | 64 ++++++++++++--------------------------- 1 file changed, 19 insertions(+), 45 deletions(-) diff --git a/Flow.Launcher/Msg.xaml.cs b/Flow.Launcher/Msg.xaml.cs index 6bb2fc2dc6f..c6b26ccd550 100644 --- a/Flow.Launcher/Msg.xaml.cs +++ b/Flow.Launcher/Msg.xaml.cs @@ -5,59 +5,30 @@ using System.Windows.Input; using System.Windows.Media.Animation; using System.Windows.Media.Imaging; +using System.Windows.Media; using Flow.Launcher.Helper; using Flow.Launcher.Infrastructure; using Flow.Launcher.Infrastructure.Image; +using Windows.UI; +using Windows.Data; +using Windows.Data.Xml.Dom; +using Windows.UI.Notifications; namespace Flow.Launcher { public partial class Msg : Window { - Storyboard fadeOutStoryboard = new Storyboard(); - private bool closing; public Msg() { InitializeComponent(); - var screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position); - var dipWorkingArea = WindowsInteropHelper.TransformPixelsToDIP(this, - screen.WorkingArea.Width, - screen.WorkingArea.Height); - Left = dipWorkingArea.X - Width; - Top = dipWorkingArea.Y; - showAnimation.From = dipWorkingArea.Y; - showAnimation.To = dipWorkingArea.Y - Height; - // Create the fade out storyboard - fadeOutStoryboard.Completed += fadeOutStoryboard_Completed; - DoubleAnimation fadeOutAnimation = new DoubleAnimation(dipWorkingArea.Y - Height, dipWorkingArea.Y, new Duration(TimeSpan.FromSeconds(5))) - { - AccelerationRatio = 0.2 - }; - Storyboard.SetTarget(fadeOutAnimation, this); - Storyboard.SetTargetProperty(fadeOutAnimation, new PropertyPath(TopProperty)); - fadeOutStoryboard.Children.Add(fadeOutAnimation); - - imgClose.Source = ImageLoader.Load(Path.Combine(Infrastructure.Constant.ProgramDirectory, "Images\\close.png")); - imgClose.MouseUp += imgClose_MouseUp; } - void imgClose_MouseUp(object sender, MouseButtonEventArgs e) + public void Show(string title, string subTitle, string iconPath) { - if (!closing) - { - closing = true; - fadeOutStoryboard.Begin(); - } - } - private void fadeOutStoryboard_Completed(object sender, EventArgs e) - { - Close(); - } - public void Show(string title, string subTitle, string iconPath) - { tbTitle.Text = title; tbSubTitle.Text = subTitle; if (string.IsNullOrEmpty(subTitle)) @@ -68,20 +39,23 @@ public void Show(string title, string subTitle, string iconPath) { imgIco.Source = ImageLoader.Load(Path.Combine(Constant.ProgramDirectory, "Images\\app.png")); } - else { + else + { imgIco.Source = ImageLoader.Load(iconPath); } - Show(); + /* Using Windows Notification System */ + var ToastTitle = title; + var ToastsubTitle = subTitle; + var Icon = imgIco.Source; + var xml = $"\"meziantou\"/{ToastTitle}" + + $"{ToastsubTitle}"; + var toastXml = new XmlDocument(); + toastXml.LoadXml(xml); + var toast = new ToastNotification(toastXml); + ToastNotificationManager.CreateToastNotifier("Flow Launcher").Show(toast); - Dispatcher.InvokeAsync(async () => - { - if (!closing) - { - closing = true; - await Dispatcher.InvokeAsync(fadeOutStoryboard.Begin); - } - }); } + } } From 52b357952527ed9c1836b91ac2ac9cd53b229042 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sat, 16 Oct 2021 21:28:55 -0500 Subject: [PATCH 191/625] Implement Install & Refresh Button - Add ShowMainWindow API for IPublicAPI --- Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs | 5 +++ Flow.Launcher/PublicAPIInstance.cs | 2 + Flow.Launcher/SettingWindow.xaml | 40 ++++++++++--------- Flow.Launcher/SettingWindow.xaml.cs | 17 ++++++++ .../ViewModel/SettingWindowViewModel.cs | 7 ++++ 5 files changed, 53 insertions(+), 18 deletions(-) diff --git a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs index d9cdf5581d0..974eafa9646 100644 --- a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs +++ b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs @@ -59,6 +59,11 @@ public interface IPublicAPI /// Optional message subtitle void ShowMsgError(string title, string subTitle = ""); + /// + /// Show the MainWindow when hiding + /// + void ShowMainWindow(); + /// /// Show message box /// diff --git a/Flow.Launcher/PublicAPIInstance.cs b/Flow.Launcher/PublicAPIInstance.cs index 6f995671dd2..70d54619d9d 100644 --- a/Flow.Launcher/PublicAPIInstance.cs +++ b/Flow.Launcher/PublicAPIInstance.cs @@ -68,6 +68,8 @@ public void RestartApp() public void RestarApp() => RestartApp(); + public void ShowMainWindow() => _mainVM.MainWindowVisibility = Visibility.Visible; + public void CheckForNewUpdate() => _settingsVM.UpdateApp(); public void SaveAppAllSettings() diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 8a5feb86601..8aaef705431 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -37,7 +37,7 @@ - + - @@ -998,7 +999,10 @@ - @@ -1079,7 +1083,7 @@ + Visibility="Visible" /> @@ -1112,7 +1116,7 @@ - + diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index 4d36ec5da5c..4b58b9c6a35 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -14,6 +14,7 @@ using Flow.Launcher.ViewModel; using Flow.Launcher.Helper; using System.Windows.Controls; +using Flow.Launcher.Core.ExternalPlugins; namespace Flow.Launcher { @@ -264,6 +265,22 @@ private void OpenPluginFolder(object sender, RoutedEventArgs e) FilesFolders.OpenPath(Path.Combine(DataLocation.DataDirectory(), Constant.Themes)); } + private void OnPluginStoreRefreshClick(object sender, RoutedEventArgs e) + { + _ = viewModel.RefreshExternalPluginsAsync(); + } + + private void OnExternalPluginInstallClick(object sender, RoutedEventArgs e) + { + if(sender is Button { DataContext: UserPlugin plugin }) + { + var pluginsManagerPlugin = PluginManager.GetPluginForId("9f8f9b14-2518-4907-b211-35ab6290dee7"); + var actionKeywrod = pluginsManagerPlugin.Metadata.ActionKeywords.Count == 0 ? "" : pluginsManagerPlugin.Metadata.ActionKeywords[0]; + API.ChangeQuery($"{actionKeywrod} install {plugin.Name}"); + API.ShowMainWindow(); + } + } + /* private void OnPluginActionKeywordsClick(object sender, RoutedEventArgs e) { diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs index 7f16da8ae0a..6bbf22c41ee 100644 --- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs +++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs @@ -3,6 +3,7 @@ using System.IO; using System.Linq; using System.Net; +using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Media; @@ -265,6 +266,12 @@ public Control SettingProvider } } + public async Task RefreshExternalPluginsAsync() + { + await PluginsManifest.UpdateManifestAsync(); + OnPropertyChanged(nameof(ExternalPlugins)); + } + #endregion From da12a0616f461567bce4429a986ac3b10753669e Mon Sep 17 00:00:00 2001 From: Dobin Park Date: Sun, 17 Oct 2021 11:44:25 +0900 Subject: [PATCH 192/625] Add style for toggle button --- Flow.Launcher/SettingWindow.xaml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 8aaef705431..e6612e4dc97 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -37,7 +37,6 @@ - + + diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs index e85d01b1ba1..cbb99962b70 100644 --- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs +++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs @@ -304,6 +304,12 @@ public bool DropShadowEffect } } + public double WindowWidthSize + { + get { return Settings.WindowSize; } + set { Settings.WindowSize = value; } + } + public bool UseGlyphIcons { get { return Settings.UseGlyphIcons; } From a452feb4c678ab1d8e8f9bce3919e91ef08edc22 Mon Sep 17 00:00:00 2001 From: DB p Date: Thu, 21 Oct 2021 10:17:37 +0900 Subject: [PATCH 200/625] change plugin/plugin store scrollbar to autohidescrollbar. --- Flow.Launcher/SettingWindow.xaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index e6612e4dc97..c8b454ebf2e 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -651,7 +651,7 @@ Margin="5, 0, 0, 0" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ItemContainerStyle="{StaticResource PluginList}" ScrollViewer.IsDeferredScrollingEnabled="True" ScrollViewer.CanContentScroll="False" - Padding="0 0 7 0" Width="Auto" HorizontalAlignment="Stretch" SnapsToDevicePixels="True"> + Padding="0 0 7 0" Width="Auto" HorizontalAlignment="Stretch" SnapsToDevicePixels="True" ui:ScrollViewerHelper.AutoHideScrollBars="{Binding AutoHideScrollBar, Mode=OneWay}"> @@ -905,7 +905,7 @@ Margin="6, 0, 0, 0" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ItemContainerStyle="{StaticResource StoreList}" SelectionMode="Single" ScrollViewer.IsDeferredScrollingEnabled="True" ScrollViewer.CanContentScroll="False" - Padding="0 0 0 0" Width="Auto" VerticalContentAlignment="Center" HorizontalAlignment="Stretch"> + Padding="0 0 0 0" Width="Auto" VerticalContentAlignment="Center" HorizontalAlignment="Stretch" ui:ScrollViewerHelper.AutoHideScrollBars="{Binding AutoHideScrollBar, Mode=OneWay}"> From d106f065012c740a2b36810718117ec0bb1dc8c0 Mon Sep 17 00:00:00 2001 From: DB p Date: Thu, 21 Oct 2021 13:36:45 +0900 Subject: [PATCH 201/625] - Add a string where there's no string in setting window. - Add some subtext in setting. (English needs to be corrected.) - Add Korean translation - Add Main window close string --- Flow.Launcher/Languages/en.xaml | 19 ++++++++-- Flow.Launcher/Languages/ko.xaml | 62 +++++++++++++++++++++++++++++--- Flow.Launcher/MainWindow.xaml | 2 +- Flow.Launcher/SettingWindow.xaml | 37 +++++++++++++------ 4 files changed, 102 insertions(+), 18 deletions(-) diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 4d24a7c330a..9f2366f3eb7 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -13,30 +13,35 @@ Settings About Exit + Close Flow Launcher Settings General Portable Mode + All setting into single folder. You can use with USB drive or cloud. Start Flow Launcher on system startup Hide Flow Launcher when focus is lost Do not show new version notifications Remember last launch location Language Last Query Style + When you open Query box, decide what to do. Preserve Last Query Select last Query Empty last Query Maximum results shown Ignore hotkeys in fullscreen mode + If you're a gamer, We recommend turning it on. Python Directory Auto Update - Auto Hide Scroll Bar - Automatically hides the Settings window scroll bar and show when hover the mouse over it + Auto Hide Scroll Bar in Setting + If you feel the scroll bar in the setting window is small, We recommend turning it off. Select Hide Flow Launcher on startup Hide tray icon Query Search Precision + Search results become more accurate. Should Use Pinyin Allows using Pinyin to search. Pinyin is the standard system of romanized spelling for translating Chinese Shadow effect is not allowed while current theme has blur effect enabled @@ -57,6 +62,11 @@ Init time: Query time: + + + Plugin Store + Refresh + Theme Browse for more themes @@ -67,12 +77,17 @@ Opacity Theme {0} not exists, fallback to default theme Fail to load theme {0}, fallback to default theme + Theme Folder + Open Theme Folder Hotkey Flow Launcher Hotkey + Enter the shortcut that open the Flow Launcher. Open Result Modifiers + Shortcuts to select the result list. Show Hotkey + Display Shortcut in Result list . Custom Query Hotkey Query Delete diff --git a/Flow.Launcher/Languages/ko.xaml b/Flow.Launcher/Languages/ko.xaml index 6c755dbae24..a9fdede73ba 100644 --- a/Flow.Launcher/Languages/ko.xaml +++ b/Flow.Launcher/Languages/ko.xaml @@ -13,55 +13,87 @@ 설정 정보 종료 + 닫기 Flow Launcher 설정 일반 + 포터블 모드 + 모든 설정이 폴더안에 들어갑니다. USB 드라이브나 클라우드로 사용 가능합니다. 시스템 시작 시 Flow Launcher 실행 포커스 잃으면 Flow Launcher 숨김 새 버전 알림 끄기 마지막 실행 위치 기억 언어 마지막 쿼리 스타일 + 쿼리박스를 열었을 때 쿼리 처리 방식 직전 쿼리에 계속 입력 직전 쿼리 내용 선택 직전 쿼리 지우기 표시할 결과 수 전체화면 모드에서는 핫키 무시 + 게이머라면 켜는 것을 추천합니다. Python 디렉토리 자동 업데이트 + 설정 창 스크롤바 숨기기 + 설정 창 스크롤바가 작다면 끄는 것을 추천합니다. 선택 시작 시 Flow Launcher 숨김 + 트레이 아이콘 숨기기 + 쿼리 검색 정확도 + 검색 결과가 좀 더 정확해집니다. + 항상 Pinyin 사용 + Pinyin을 사용하여 검색할 수 있습니다. Pinyin(병음)은 로마자 중국어 입력 방식입니다. + 반투명 흐림 효과를 사용하는 경우, 그림자 효과를 쓸 수 없습니다. 플러그인 플러그인 더 찾아보기 - 비활성화 + On + Off 액션 키워드 플러그인 디렉토리 저자 초기화 시간: 쿼리 시간: + + + 플러그인 스토어 + 새로고침 + 테마 테마 더 찾아보기 + Hi There 쿼리 상자 글꼴 결과 항목 글꼴 윈도우 모드 투명도 + {0} 테마가 존재하지 않습니다. 기본 테마로 변경합니다. + {0} 테마 로드에 실패했습니다. 기본 테마로 변경합니다. + 테마 폴더 + 테마 폴더 열기 핫키 Flow Launcher 핫키 - 결과 수정 자 열기 - 사용자지정 쿼리 핫키 + Flow Launcher를 열 때 사용할 단축키를 입력합니다. + 결과 선택 단축키 + 결과 목록을 선택하는 단축키입니다. 단축키 표시 + 결과창에서 결과 선택 단축키를 표시합니다. + 사용자지정 쿼리 핫키 + Query 삭제 편집 추가 항목을 선택하세요. {0} 플러그인 핫키를 삭제하시겠습니까? + 그림자 효과 + 그림자 효과는 GPU를 사용합니다. 컴퓨터 퍼포먼스가 제한적인 경우 사용을 추천하지 않습니다. + 플루언트 아이콘 사용 + 결과 및 일부 메뉴에서 플루언트 아이콘을 사용합니다. HTTP 프록시 @@ -86,8 +118,17 @@ Flow Launcher를 {0}번 실행했습니다. 업데이트 확인 새 버전({0})이 있습니다. Flow Launcher를 재시작하세요. + 업데이트 확인을 실패했습니다. api.github.com로의 연결 또는 프록시 설정을 확인해주세요. + + 업데이트 다운로드에 실패했습니다. github-cloud.s3.amazonaws.com의 연결 또는 프록시 설정을 확인해주세요. + 수동 다운로드를 하려면 https://github.com/Flow-Launcher/Flow.Launcher/releases 으로 방문하세요. + 릴리즈 노트: + 사용 팁: + + 높은 수를 넣을수록 상위 결과에 표시됩니다. 5를 시도해보세요. 다른 플러그인 보다 결과를 낮추고 싶다면, 그보다 낮은 수를 입력하세요. + 중요도에 올바른 정수를 입력하세요. 예전 액션 키워드 새 액션 키워드 @@ -97,9 +138,11 @@ 새 액션 키워드를 입력하세요. 새 액션 키워드가 할당된 플러그인이 이미 있습니다. 다른 액션 키워드를 입력하세요. 성공 + 성공적으로 완료했습니다. 액션 키워드를 지정하지 않으려면 *를 사용하세요. + 커스텀 플러그인 핫키 미리보기 핫키를 사용할 수 없습니다. 다른 핫키를 입력하세요. 플러그인 핫키가 유효하지 않습니다. @@ -123,12 +166,23 @@ 보고서를 정상적으로 보냈습니다. 보고서를 보내지 못했습니다. Flow Launcher에 문제가 발생했습니다. - + + + 잠시 기다려주세요... + 새 업데이트 확인 중 새 Flow Launcher 버전({0})을 사용할 수 있습니다. + 이미 가장 최신 버전의 Flow Launcher를 사용중입니다. + 업데이트 발견 + 업데이트 중... + Flow Launcher가 유저 정보 데이터를 새버전으로 옮길 수 없습니다. + 프로필 데이터 폴더를 수동으로 {0} 에서 {1}로 옮겨주세요. + 새 업데이트 소프트웨어 업데이트를 설치하는 중에 오류가 발생했습니다. 업데이트 취소 + 업데이트 실패 + Check your connection and try updating proxy settings to github-cloud.s3.amazonaws.com. 업데이트를 위해 Flow Launcher를 재시작합니다. 아래 파일들이 업데이트됩니다. 업데이트 파일 diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index 73b13be8c95..b517faf191a 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -92,7 +92,7 @@ - + diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index c8b454ebf2e..95ff0a7ba24 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -478,6 +478,8 @@ + @@ -526,6 +528,8 @@ + @@ -540,8 +544,12 @@ - + + + - + + +  - + @@ -885,10 +897,10 @@ - + - @@ -1339,7 +1350,7 @@ - + - + + @@ -1376,7 +1391,7 @@ - Date: Thu, 21 Oct 2021 13:36:45 +0900 Subject: [PATCH 202/625] - Add a string where there's no string in setting window. - Add some subtext in setting. (English needs to be corrected.) - Add Korean translation - Add Main window close string --- Flow.Launcher/Languages/en.xaml | 20 +++++++++- Flow.Launcher/Languages/ko.xaml | 63 ++++++++++++++++++++++++++++++-- Flow.Launcher/MainWindow.xaml | 2 +- Flow.Launcher/SettingWindow.xaml | 39 ++++++++++++++------ 4 files changed, 105 insertions(+), 19 deletions(-) diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 4d24a7c330a..ce451841cc3 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -13,30 +13,35 @@ Settings About Exit + Close Flow Launcher Settings General Portable Mode + All setting into single folder. You can use with USB drive or cloud. Start Flow Launcher on system startup Hide Flow Launcher when focus is lost Do not show new version notifications Remember last launch location Language Last Query Style + When you open Query box, decide what to do. Preserve Last Query Select last Query Empty last Query Maximum results shown Ignore hotkeys in fullscreen mode + If you're a gamer, We recommend turning it on. Python Directory Auto Update - Auto Hide Scroll Bar - Automatically hides the Settings window scroll bar and show when hover the mouse over it + Auto Hide Scroll Bar in Setting + If you feel the scroll bar in the setting window is small, We recommend turning it off. Select Hide Flow Launcher on startup Hide tray icon Query Search Precision + Search results become more accurate. Should Use Pinyin Allows using Pinyin to search. Pinyin is the standard system of romanized spelling for translating Chinese Shadow effect is not allowed while current theme has blur effect enabled @@ -57,6 +62,12 @@ Init time: Query time: + + + Plugin Store + Refresh + Install + Theme Browse for more themes @@ -67,12 +78,17 @@ Opacity Theme {0} not exists, fallback to default theme Fail to load theme {0}, fallback to default theme + Theme Folder + Open Theme Folder Hotkey Flow Launcher Hotkey + Enter the shortcut that open the Flow Launcher. Open Result Modifiers + Shortcuts to select the result list. Show Hotkey + Display Shortcut in Result list . Custom Query Hotkey Query Delete diff --git a/Flow.Launcher/Languages/ko.xaml b/Flow.Launcher/Languages/ko.xaml index 6c755dbae24..6f2881668be 100644 --- a/Flow.Launcher/Languages/ko.xaml +++ b/Flow.Launcher/Languages/ko.xaml @@ -13,55 +13,88 @@ 설정 정보 종료 + 닫기 Flow Launcher 설정 일반 + 포터블 모드 + 모든 설정이 폴더안에 들어갑니다. USB 드라이브나 클라우드로 사용 가능합니다. 시스템 시작 시 Flow Launcher 실행 포커스 잃으면 Flow Launcher 숨김 새 버전 알림 끄기 마지막 실행 위치 기억 언어 마지막 쿼리 스타일 + 쿼리박스를 열었을 때 쿼리 처리 방식 직전 쿼리에 계속 입력 직전 쿼리 내용 선택 직전 쿼리 지우기 표시할 결과 수 전체화면 모드에서는 핫키 무시 + 게이머라면 켜는 것을 추천합니다. Python 디렉토리 자동 업데이트 + 설정 창 스크롤바 숨기기 + 설정 창 스크롤바가 작다면 끄는 것을 추천합니다. 선택 시작 시 Flow Launcher 숨김 + 트레이 아이콘 숨기기 + 쿼리 검색 정확도 + 검색 결과가 좀 더 정확해집니다. + 항상 Pinyin 사용 + Pinyin을 사용하여 검색할 수 있습니다. Pinyin(병음)은 로마자 중국어 입력 방식입니다. + 반투명 흐림 효과를 사용하는 경우, 그림자 효과를 쓸 수 없습니다. 플러그인 플러그인 더 찾아보기 - 비활성화 + On + Off 액션 키워드 플러그인 디렉토리 저자 초기화 시간: 쿼리 시간: + + + 플러그인 스토어 + 새로고침 + 설치 + 테마 테마 더 찾아보기 + Hi There 쿼리 상자 글꼴 결과 항목 글꼴 윈도우 모드 투명도 + {0} 테마가 존재하지 않습니다. 기본 테마로 변경합니다. + {0} 테마 로드에 실패했습니다. 기본 테마로 변경합니다. + 테마 폴더 + 테마 폴더 열기 핫키 Flow Launcher 핫키 - 결과 수정 자 열기 - 사용자지정 쿼리 핫키 + Flow Launcher를 열 때 사용할 단축키를 입력합니다. + 결과 선택 단축키 + 결과 목록을 선택하는 단축키입니다. 단축키 표시 + 결과창에서 결과 선택 단축키를 표시합니다. + 사용자지정 쿼리 핫키 + Query 삭제 편집 추가 항목을 선택하세요. {0} 플러그인 핫키를 삭제하시겠습니까? + 그림자 효과 + 그림자 효과는 GPU를 사용합니다. 컴퓨터 퍼포먼스가 제한적인 경우 사용을 추천하지 않습니다. + 플루언트 아이콘 사용 + 결과 및 일부 메뉴에서 플루언트 아이콘을 사용합니다. HTTP 프록시 @@ -86,8 +119,17 @@ Flow Launcher를 {0}번 실행했습니다. 업데이트 확인 새 버전({0})이 있습니다. Flow Launcher를 재시작하세요. + 업데이트 확인을 실패했습니다. api.github.com로의 연결 또는 프록시 설정을 확인해주세요. + + 업데이트 다운로드에 실패했습니다. github-cloud.s3.amazonaws.com의 연결 또는 프록시 설정을 확인해주세요. + 수동 다운로드를 하려면 https://github.com/Flow-Launcher/Flow.Launcher/releases 으로 방문하세요. + 릴리즈 노트: + 사용 팁: + + 높은 수를 넣을수록 상위 결과에 표시됩니다. 5를 시도해보세요. 다른 플러그인 보다 결과를 낮추고 싶다면, 그보다 낮은 수를 입력하세요. + 중요도에 올바른 정수를 입력하세요. 예전 액션 키워드 새 액션 키워드 @@ -97,9 +139,11 @@ 새 액션 키워드를 입력하세요. 새 액션 키워드가 할당된 플러그인이 이미 있습니다. 다른 액션 키워드를 입력하세요. 성공 + 성공적으로 완료했습니다. 액션 키워드를 지정하지 않으려면 *를 사용하세요. + 커스텀 플러그인 핫키 미리보기 핫키를 사용할 수 없습니다. 다른 핫키를 입력하세요. 플러그인 핫키가 유효하지 않습니다. @@ -123,12 +167,23 @@ 보고서를 정상적으로 보냈습니다. 보고서를 보내지 못했습니다. Flow Launcher에 문제가 발생했습니다. - + + + 잠시 기다려주세요... + 새 업데이트 확인 중 새 Flow Launcher 버전({0})을 사용할 수 있습니다. + 이미 가장 최신 버전의 Flow Launcher를 사용중입니다. + 업데이트 발견 + 업데이트 중... + Flow Launcher가 유저 정보 데이터를 새버전으로 옮길 수 없습니다. + 프로필 데이터 폴더를 수동으로 {0} 에서 {1}로 옮겨주세요. + 새 업데이트 소프트웨어 업데이트를 설치하는 중에 오류가 발생했습니다. 업데이트 취소 + 업데이트 실패 + Check your connection and try updating proxy settings to github-cloud.s3.amazonaws.com. 업데이트를 위해 Flow Launcher를 재시작합니다. 아래 파일들이 업데이트됩니다. 업데이트 파일 diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index 73b13be8c95..b517faf191a 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -92,7 +92,7 @@ - + diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index c8b454ebf2e..a2888609435 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -478,6 +478,8 @@ + @@ -526,6 +528,8 @@ + @@ -540,8 +544,12 @@ - + + + - + + +  - + @@ -885,10 +897,10 @@ - + - @@ -1339,7 +1350,7 @@ - + - + + @@ -1376,7 +1391,7 @@ - Date: Thu, 21 Oct 2021 14:55:54 +0900 Subject: [PATCH 203/625] - Redesign Priority Change Window - Add Priority Window Title String --- Flow.Launcher/Languages/en.xaml | 1 + Flow.Launcher/Languages/ko.xaml | 5 +++ Flow.Launcher/PriorityChangeWindow.xaml | 52 ++++++++++++++++--------- 3 files changed, 39 insertions(+), 19 deletions(-) diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index ce451841cc3..1dd6d3889ca 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -133,6 +133,7 @@ Usage Tips: + Change Priority Greater the number, the higher the result will be ranked. Try setting it as 5. If you want the results to be lower than any other plugin's, provide a negative number Please provide an valid integer for Priority! diff --git a/Flow.Launcher/Languages/ko.xaml b/Flow.Launcher/Languages/ko.xaml index 6f2881668be..6a145d6705c 100644 --- a/Flow.Launcher/Languages/ko.xaml +++ b/Flow.Launcher/Languages/ko.xaml @@ -52,11 +52,15 @@ On Off 액션 키워드 + 현재 중요도: + 새 중요도: + 중요도 플러그인 디렉토리 저자 초기화 시간: 쿼리 시간: + 플러그인 스토어 새로고침 @@ -128,6 +132,7 @@ 사용 팁: + 중요도 변경 높은 수를 넣을수록 상위 결과에 표시됩니다. 5를 시도해보세요. 다른 플러그인 보다 결과를 낮추고 싶다면, 그보다 낮은 수를 입력하세요. 중요도에 올바른 정수를 입력하세요. diff --git a/Flow.Launcher/PriorityChangeWindow.xaml b/Flow.Launcher/PriorityChangeWindow.xaml index 68b5a49b7d1..60a289e61ea 100644 --- a/Flow.Launcher/PriorityChangeWindow.xaml +++ b/Flow.Launcher/PriorityChangeWindow.xaml @@ -7,37 +7,51 @@ Loaded="PriorityChangeWindow_Loaded" mc:Ignorable="d" WindowStartupLocation="CenterScreen" - Title="PriorityChangeWindow" Height="250" Width="300"> + Title="{DynamicResource changePriorityWindow}" Height="400" Width="350" ResizeMode="NoResize" Background="#f3f3f3"> - - + + - - - - - - - + + +  + - + + + + + + + - - From 6af1262ca6255ec7ad58b6e86d3fbb0abc5873f9 Mon Sep 17 00:00:00 2001 From: DB p Date: Thu, 21 Oct 2021 18:16:05 +0900 Subject: [PATCH 204/625] Adjust Width in Theme.cs --- Flow.Launcher.Core/Resource/Theme.cs | 7 ++++--- Flow.Launcher.Infrastructure/UserSettings/Settings.cs | 1 + Flow.Launcher/SettingWindow.xaml | 2 +- Flow.Launcher/Themes/Base.xaml | 4 ++-- Flow.Launcher/ViewModel/SettingWindowViewModel.cs | 2 +- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Flow.Launcher.Core/Resource/Theme.cs b/Flow.Launcher.Core/Resource/Theme.cs index 4648aef637c..d934491beb2 100644 --- a/Flow.Launcher.Core/Resource/Theme.cs +++ b/Flow.Launcher.Core/Resource/Theme.cs @@ -191,7 +191,7 @@ public ResourceDictionary GetResourceDictionary() } var windowStyle = dict["WindowStyle"] as Style; - + /* var width = windowStyle?.Setters.OfType().Where(x => x.Property.Name == "Width") .Select(x => x.Value).FirstOrDefault(); @@ -202,9 +202,10 @@ public ResourceDictionary GetResourceDictionary() width = windowStyle?.Setters.OfType().Where(x => x.Property.Name == "Width") .Select(x => x.Value).FirstOrDefault(); } - + */ + var width = Settings.WindowSize; + windowStyle.Setters.Add(new Setter(Window.WidthProperty, width)); mainWindowWidth = (double)width; - return dict; } diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 99879e64e83..3bae6a24c7c 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -21,6 +21,7 @@ public double WindowSize windowsize = value; OnPropertyChanged(); } + } public string Language diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 8873d8aaede..403e6adaf77 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -683,7 +683,7 @@ Click="OpenPluginFolder" Grid.Column="2">Open Theme Folder--> - +  diff --git a/Flow.Launcher/Themes/Base.xaml b/Flow.Launcher/Themes/Base.xaml index d7df48d939e..ad13e010178 100644 --- a/Flow.Launcher/Themes/Base.xaml +++ b/Flow.Launcher/Themes/Base.xaml @@ -1,7 +1,7 @@  + xmlns:userSettings="clr-namespace:Flow.Launcher.Infrastructure.UserSettings;assembly=Flow.Launcher.Infrastructure"> diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs index cbb99962b70..b5fc2d80345 100644 --- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs +++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs @@ -307,7 +307,7 @@ public bool DropShadowEffect public double WindowWidthSize { get { return Settings.WindowSize; } - set { Settings.WindowSize = value; } + set { Settings.WindowSize = value;} } public bool UseGlyphIcons From 5e0172cbf6e4852c3d3970c352d7f5827a65cf7e Mon Sep 17 00:00:00 2001 From: DB p Date: Thu, 21 Oct 2021 18:31:14 +0900 Subject: [PATCH 205/625] - Remove Comment - Add String "Window Width Size" --- Flow.Launcher.Core/Resource/Theme.cs | 14 +------------- .../UserSettings/Settings.cs | 2 +- Flow.Launcher/Languages/en.xaml | 1 + Flow.Launcher/SettingWindow.xaml | 6 ++---- Flow.Launcher/ViewModel/SettingWindowViewModel.cs | 2 +- 5 files changed, 6 insertions(+), 19 deletions(-) diff --git a/Flow.Launcher.Core/Resource/Theme.cs b/Flow.Launcher.Core/Resource/Theme.cs index d934491beb2..efd311acb3f 100644 --- a/Flow.Launcher.Core/Resource/Theme.cs +++ b/Flow.Launcher.Core/Resource/Theme.cs @@ -189,20 +189,8 @@ public ResourceDictionary GetResourceDictionary() new[] { resultItemStyle, resultSubItemStyle, resultItemSelectedStyle, resultSubItemSelectedStyle, resultHotkeyItemStyle, resultHotkeyItemSelectedStyle }, o => Array.ForEach(setters, p => o.Setters.Add(p))); } - + /* Ignore Theme Window Width and use setting */ var windowStyle = dict["WindowStyle"] as Style; - /* - var width = windowStyle?.Setters.OfType().Where(x => x.Property.Name == "Width") - .Select(x => x.Value).FirstOrDefault(); - - if (width == null) - { - windowStyle = dict["BaseWindowStyle"] as Style; - - width = windowStyle?.Setters.OfType().Where(x => x.Property.Name == "Width") - .Select(x => x.Value).FirstOrDefault(); - } - */ var width = Settings.WindowSize; windowStyle.Setters.Add(new Setter(Window.WidthProperty, width)); mainWindowWidth = (double)width; diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 3bae6a24c7c..1d410013845 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -4,7 +4,7 @@ using System.Text.Json.Serialization; using Flow.Launcher.Plugin; using Flow.Launcher.Plugin.SharedModels; - +using Flow.Launcher; namespace Flow.Launcher.Infrastructure.UserSettings { public class Settings : BaseModel diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 4a9b9270071..bbb56b9ec49 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -82,6 +82,7 @@ Are you sure you want to delete {0} plugin hotkey? Query window shadow effect Shadow effect has a substantial usage of GPU. Not recommended if your computer performance is limited. + Window Width Size Use Segoe Fluent Icons Use Segoe Fluent Icons for query results where supported diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 403e6adaf77..e74cfff7979 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -677,13 +677,11 @@ - + - - +  diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs index b5fc2d80345..0fb6e6969a8 100644 --- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs +++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs @@ -307,7 +307,7 @@ public bool DropShadowEffect public double WindowWidthSize { get { return Settings.WindowSize; } - set { Settings.WindowSize = value;} + set { Settings.WindowSize = value; ThemeManager.Instance.ChangeTheme(Settings.Theme); } } public bool UseGlyphIcons From 6b37adaf0797a407696032cfa3692caac8bca22f Mon Sep 17 00:00:00 2001 From: DB p Date: Thu, 21 Oct 2021 18:31:14 +0900 Subject: [PATCH 206/625] - Remove Comment - Add String "Window Width Size" --- Flow.Launcher.Core/Resource/Theme.cs | 14 +------------- .../UserSettings/Settings.cs | 2 +- Flow.Launcher/Languages/en.xaml | 1 + Flow.Launcher/SettingWindow.xaml | 6 ++---- Flow.Launcher/ViewModel/SettingWindowViewModel.cs | 6 +++++- 5 files changed, 10 insertions(+), 19 deletions(-) diff --git a/Flow.Launcher.Core/Resource/Theme.cs b/Flow.Launcher.Core/Resource/Theme.cs index d934491beb2..efd311acb3f 100644 --- a/Flow.Launcher.Core/Resource/Theme.cs +++ b/Flow.Launcher.Core/Resource/Theme.cs @@ -189,20 +189,8 @@ public ResourceDictionary GetResourceDictionary() new[] { resultItemStyle, resultSubItemStyle, resultItemSelectedStyle, resultSubItemSelectedStyle, resultHotkeyItemStyle, resultHotkeyItemSelectedStyle }, o => Array.ForEach(setters, p => o.Setters.Add(p))); } - + /* Ignore Theme Window Width and use setting */ var windowStyle = dict["WindowStyle"] as Style; - /* - var width = windowStyle?.Setters.OfType().Where(x => x.Property.Name == "Width") - .Select(x => x.Value).FirstOrDefault(); - - if (width == null) - { - windowStyle = dict["BaseWindowStyle"] as Style; - - width = windowStyle?.Setters.OfType().Where(x => x.Property.Name == "Width") - .Select(x => x.Value).FirstOrDefault(); - } - */ var width = Settings.WindowSize; windowStyle.Setters.Add(new Setter(Window.WidthProperty, width)); mainWindowWidth = (double)width; diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 3bae6a24c7c..1d410013845 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -4,7 +4,7 @@ using System.Text.Json.Serialization; using Flow.Launcher.Plugin; using Flow.Launcher.Plugin.SharedModels; - +using Flow.Launcher; namespace Flow.Launcher.Infrastructure.UserSettings { public class Settings : BaseModel diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 4a9b9270071..bbb56b9ec49 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -82,6 +82,7 @@ Are you sure you want to delete {0} plugin hotkey? Query window shadow effect Shadow effect has a substantial usage of GPU. Not recommended if your computer performance is limited. + Window Width Size Use Segoe Fluent Icons Use Segoe Fluent Icons for query results where supported diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 403e6adaf77..8e20232ac3e 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -677,13 +677,11 @@ - + - - +  diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs index b5fc2d80345..67d16711314 100644 --- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs +++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs @@ -307,7 +307,11 @@ public bool DropShadowEffect public double WindowWidthSize { get { return Settings.WindowSize; } - set { Settings.WindowSize = value;} + set + { + Settings.WindowSize = value; + ThemeManager.Instance.ChangeTheme(Settings.Theme); + } } public bool UseGlyphIcons From f6d4736f1ab8766822f1d394d7dc3b3f4418110a Mon Sep 17 00:00:00 2001 From: Jeremy Date: Fri, 22 Oct 2021 08:11:53 +1100 Subject: [PATCH 207/625] add scroll movement with drag --- Flow.Launcher/SettingWindow.xaml | 452 ++++++++++++++++--------------- 1 file changed, 229 insertions(+), 223 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index a2888609435..7c09a8d0f93 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -658,103 +658,105 @@ - + - - - - - - - - + + + + + + + + - - + - - - - - - - - + + + + + + + - - - - + + - + - - - - + + + - - - - - + + + + + + + + + + + - + - + - - - - + + + - - - + + - - - + + + + - - - + + + - + - - - - - - - - + + + + + + - + - + - - + - - + - - - - - - - - - - - - + - - + - - + + + - - - + + - - - + + + + @@ -912,125 +915,128 @@ BorderThickness="1 1 1 2"/> - + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + - - - - + + + - - - - - - + + + + + - + - - - - - - - - - - - - - - - - + - - - + + + + + + + + + + + + + + + + + - - - - + + + - + + - - - - - - - + + + + + - - - - + + + + + From 3bacb3fc0753ccb0c77814de465e120826df3063 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Thu, 21 Oct 2021 22:29:03 -0500 Subject: [PATCH 208/625] Revert "add scroll movement with drag" This reverts commit f6d4736f1ab8766822f1d394d7dc3b3f4418110a. --- Flow.Launcher/SettingWindow.xaml | 452 +++++++++++++++---------------- 1 file changed, 223 insertions(+), 229 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 7c09a8d0f93..a2888609435 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -658,105 +658,103 @@ - - - - - - - - - - + + + + + + + + - - + - - - - - - - - + + + + + + + - - - - + + - + - - - - + + + - - - - - + + + + + + + + + + + - + - + - - - - + + + - - - + + - - - + + + + - - - + + + - + - - - - - - - - + + + + + + - + - + - - + - - + - - - - - - - - - - - - + - - + - - + + - - - + + + - - - - + + + @@ -915,128 +912,125 @@ BorderThickness="1 1 1 2"/> - - - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + - - - - + + + - - - - - - + + + + + - + - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + - - - - + + + - - + - - - - - - + + + + + - - - - - + + + + From 82464b79c511030713f21af05b1f2a171282f36b Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Thu, 21 Oct 2021 22:31:33 -0500 Subject: [PATCH 209/625] Remove deferred scroll option to enable direct scrolling --- Flow.Launcher/SettingWindow.xaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index a2888609435..2dcc2fa02eb 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -662,7 +662,6 @@ ItemsSource="{Binding PluginViewModels}" Margin="5, 0, 0, 0" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ItemContainerStyle="{StaticResource PluginList}" - ScrollViewer.IsDeferredScrollingEnabled="True" ScrollViewer.CanContentScroll="False" Padding="0 0 7 0" Width="Auto" HorizontalAlignment="Stretch" SnapsToDevicePixels="True" ui:ScrollViewerHelper.AutoHideScrollBars="{Binding AutoHideScrollBar, Mode=OneWay}"> @@ -916,7 +915,6 @@ ItemsSource="{Binding ExternalPlugins}" Margin="6, 0, 0, 0" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ItemContainerStyle="{StaticResource StoreList}" SelectionMode="Single" - ScrollViewer.IsDeferredScrollingEnabled="True" ScrollViewer.CanContentScroll="False" Padding="0 0 0 0" Width="Auto" VerticalContentAlignment="Center" HorizontalAlignment="Stretch" ui:ScrollViewerHelper.AutoHideScrollBars="{Binding AutoHideScrollBar, Mode=OneWay}"> From 5be44b68eadc64238bb8c9c1b0764440668a0491 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Thu, 21 Oct 2021 23:31:51 -0500 Subject: [PATCH 210/625] Add fody and use binding to change width --- Flow.Launcher.Core/Resource/Theme.cs | 1 - .../Flow.Launcher.Infrastructure.csproj | 5 +++++ .../UserSettings/Settings.cs | 17 +++++--------- Flow.Launcher/MainWindow.xaml | 1 + Flow.Launcher/MainWindow.xaml.cs | 5 +++++ Flow.Launcher/ViewModel/MainViewModel.cs | 10 +++++++++ .../ViewModel/SettingWindowViewModel.cs | 22 +++++++++---------- 7 files changed, 36 insertions(+), 25 deletions(-) diff --git a/Flow.Launcher.Core/Resource/Theme.cs b/Flow.Launcher.Core/Resource/Theme.cs index efd311acb3f..3abb426cba1 100644 --- a/Flow.Launcher.Core/Resource/Theme.cs +++ b/Flow.Launcher.Core/Resource/Theme.cs @@ -365,7 +365,6 @@ private void SetWindowAccent(Window w, AccentState state) var windowHelper = new WindowInteropHelper(w); // this determines the width of the main query window - w.Width = mainWindowWidth; windowHelper.EnsureHandle(); var accent = new AccentPolicy { AccentState = state }; diff --git a/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj b/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj index ef76fd61724..e01bc1efd56 100644 --- a/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj +++ b/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj @@ -50,10 +50,15 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 1d410013845..614fc1de812 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -5,28 +5,21 @@ using Flow.Launcher.Plugin; using Flow.Launcher.Plugin.SharedModels; using Flow.Launcher; + namespace Flow.Launcher.Infrastructure.UserSettings { public class Settings : BaseModel { private string language = "en"; - public double windowsize = 580; public string Hotkey { get; set; } = $"{KeyConstant.Alt} + {KeyConstant.Space}"; public string OpenResultModifiers { get; set; } = KeyConstant.Alt; public bool ShowOpenResultHotkey { get; set; } = true; - public double WindowSize - { - get => windowsize; set - { - windowsize = value; - OnPropertyChanged(); - } - - } + public double WindowSize { get; set; } = 580; public string Language { - get => language; set + get => language; + set { language = value; OnPropertyChanged(); @@ -62,7 +55,7 @@ public string QuerySearchPrecisionString try { var precisionScore = (SearchPrecisionScore)Enum - .Parse(typeof(SearchPrecisionScore), value); + .Parse(typeof(SearchPrecisionScore), value); QuerySearchPrecision = precisionScore; StringMatcher.Instance.UserSettingSearchPrecision = precisionScore; diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index 73b13be8c95..dbf329b58ad 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -26,6 +26,7 @@ LocationChanged="OnLocationChanged" Deactivated="OnDeactivated" PreviewKeyDown="OnKeyDown" + Width="{Binding MainWindowWidth, Mode=OneTime}" Visibility="{Binding MainWindowVisibility, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" d:DataContext="{d:DesignInstance vm:MainViewModel}"> diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 057c3f07d09..79682806c64 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -19,6 +19,7 @@ using KeyEventArgs = System.Windows.Input.KeyEventArgs; using MessageBox = System.Windows.MessageBox; using NotifyIcon = System.Windows.Forms.NotifyIcon; +using System.Windows.Interop; namespace Flow.Launcher { @@ -131,6 +132,10 @@ private void OnLoaded(object sender, RoutedEventArgs _) _viewModel.QueryTextCursorMovedToEnd = false; } break; + case nameof(MainViewModel.MainWindowWidth): + MinWidth = _viewModel.MainWindowWidth; + MaxWidth = _viewModel.MainWindowWidth; + break; } }; _settings.PropertyChanged += (o, e) => diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index e5401411034..522d10b3a29 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -22,6 +22,7 @@ using ISavable = Flow.Launcher.Plugin.ISavable; using System.Windows.Threading; using NHotkey; +using Windows.Web.Syndication; namespace Flow.Launcher.ViewModel @@ -63,6 +64,13 @@ public MainViewModel(Settings settings) _lastQuery = new Query(); _settings = settings; + _settings.PropertyChanged += (_, args) => + { + if (args.PropertyName == nameof(Settings.WindowSize)) + { + OnPropertyChanged(nameof(MainWindowWidth)); + } + }; _historyItemsStorage = new FlowLauncherJsonStorage(); _userSelectedRecordStorage = new FlowLauncherJsonStorage(); @@ -378,6 +386,8 @@ private ResultsViewModel SelectedResults public Visibility ProgressBarVisibility { get; set; } public Visibility MainWindowVisibility { get; set; } + public double MainWindowWidth => _settings.WindowSize; + public ICommand EscCommand { get; set; } public ICommand SelectNextItemCommand { get; set; } public ICommand SelectPrevItemCommand { get; set; } diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs index 67d16711314..e2c1d970054 100644 --- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs +++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs @@ -35,9 +35,11 @@ public SettingWindowViewModel(Updater updater, IPortable portable) Settings = _storage.Load(); Settings.PropertyChanged += (s, e) => { - if (e.PropertyName == nameof(Settings.ActivateTimes)) + switch (e.PropertyName) { - OnPropertyChanged(nameof(ActivatedTimes)); + case nameof(Settings.ActivateTimes): + OnPropertyChanged(nameof(ActivatedTimes)); + break; } }; } @@ -51,7 +53,7 @@ public async void UpdateApp() public bool AutoUpdates { - get { return Settings.AutoUpdates; } + get => Settings.AutoUpdates; set { Settings.AutoUpdates = value; @@ -71,7 +73,7 @@ public bool AutoHideScrollBar private bool _portableMode = DataLocation.PortableDataLocationInUse(); public bool PortableMode { - get { return _portableMode; } + get => _portableMode; set { if (!_portable.CanUpdatePortability()) @@ -306,18 +308,14 @@ public bool DropShadowEffect public double WindowWidthSize { - get { return Settings.WindowSize; } - set - { - Settings.WindowSize = value; - ThemeManager.Instance.ChangeTheme(Settings.Theme); - } + get => Settings.WindowSize; + set => Settings.WindowSize = value; } public bool UseGlyphIcons { - get { return Settings.UseGlyphIcons; } - set { Settings.UseGlyphIcons = value; } + get => Settings.UseGlyphIcons; + set => Settings.UseGlyphIcons = value; } public Brush PreviewBackground From 674d6154a2156282b9c8bba03e18d5078d308429 Mon Sep 17 00:00:00 2001 From: DB p Date: Fri, 22 Oct 2021 14:39:26 +0900 Subject: [PATCH 211/625] Display Querybox when Using Width slider. --- Flow.Launcher/ViewModel/SettingWindowViewModel.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs index e2c1d970054..c869f560154 100644 --- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs +++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs @@ -309,7 +309,11 @@ public bool DropShadowEffect public double WindowWidthSize { get => Settings.WindowSize; - set => Settings.WindowSize = value; + set + { + Settings.WindowSize = value; + Application.Current.MainWindow.Visibility = Visibility.Visible; + } } public bool UseGlyphIcons From 08c643adcc58f90843ddaa9badc2e21ec4c1ca9e Mon Sep 17 00:00:00 2001 From: DB p Date: Fri, 22 Oct 2021 16:41:35 +0900 Subject: [PATCH 212/625] Add "IsMoveToPointEnabled" property --- Flow.Launcher/SettingWindow.xaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 8e20232ac3e..9126ab4a195 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -681,7 +681,7 @@ - +  From 64a489b3129914543befa8ad4eeae4fc535d97e0 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Fri, 22 Oct 2021 13:41:36 -0500 Subject: [PATCH 213/625] Use Hacky way to show up windows when width change. Clear query to prevent large area of window preventing user change width. --- Flow.Launcher/ViewModel/MainViewModel.cs | 15 +++++++++++++-- Flow.Launcher/ViewModel/SettingWindowViewModel.cs | 6 +----- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 522d10b3a29..cd6392cb61f 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -52,6 +52,7 @@ public class MainViewModel : BaseModel, ISavable private ChannelWriter _resultsUpdateChannelWriter; private Task _resultsViewUpdateTask; + private bool _keepVisibility = false; #endregion @@ -64,10 +65,20 @@ public MainViewModel(Settings settings) _lastQuery = new Query(); _settings = settings; - _settings.PropertyChanged += (_, args) => + _settings.PropertyChanged += async (_, args) => { if (args.PropertyName == nameof(Settings.WindowSize)) { + ChangeQueryText(""); + if (MainWindowVisibility == Visibility.Collapsed) + { + ToggleFlowLauncher(); + _keepVisibility = true; + await Task.Delay(1000); + _keepVisibility = false; + Application.Current.MainWindow.Activate(); + } + OnPropertyChanged(nameof(MainWindowWidth)); } }; @@ -742,7 +753,7 @@ public async void ToggleFlowLauncher() public void Hide() { - if (MainWindowVisibility != Visibility.Collapsed) + if (MainWindowVisibility != Visibility.Collapsed && !_keepVisibility) { ToggleFlowLauncher(); } diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs index c869f560154..e2c1d970054 100644 --- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs +++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs @@ -309,11 +309,7 @@ public bool DropShadowEffect public double WindowWidthSize { get => Settings.WindowSize; - set - { - Settings.WindowSize = value; - Application.Current.MainWindow.Visibility = Visibility.Visible; - } + set => Settings.WindowSize = value; } public bool UseGlyphIcons From a83f9df19c978787220cf0f57167ee1b33176d00 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Fri, 22 Oct 2021 13:57:22 -0500 Subject: [PATCH 214/625] Revert "Use Hacky way to show up windows when width change." This reverts commit 64a489b3129914543befa8ad4eeae4fc535d97e0. --- Flow.Launcher/ViewModel/MainViewModel.cs | 15 ++------------- Flow.Launcher/ViewModel/SettingWindowViewModel.cs | 6 +++++- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index cd6392cb61f..522d10b3a29 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -52,7 +52,6 @@ public class MainViewModel : BaseModel, ISavable private ChannelWriter _resultsUpdateChannelWriter; private Task _resultsViewUpdateTask; - private bool _keepVisibility = false; #endregion @@ -65,20 +64,10 @@ public MainViewModel(Settings settings) _lastQuery = new Query(); _settings = settings; - _settings.PropertyChanged += async (_, args) => + _settings.PropertyChanged += (_, args) => { if (args.PropertyName == nameof(Settings.WindowSize)) { - ChangeQueryText(""); - if (MainWindowVisibility == Visibility.Collapsed) - { - ToggleFlowLauncher(); - _keepVisibility = true; - await Task.Delay(1000); - _keepVisibility = false; - Application.Current.MainWindow.Activate(); - } - OnPropertyChanged(nameof(MainWindowWidth)); } }; @@ -753,7 +742,7 @@ public async void ToggleFlowLauncher() public void Hide() { - if (MainWindowVisibility != Visibility.Collapsed && !_keepVisibility) + if (MainWindowVisibility != Visibility.Collapsed) { ToggleFlowLauncher(); } diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs index e2c1d970054..c869f560154 100644 --- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs +++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs @@ -309,7 +309,11 @@ public bool DropShadowEffect public double WindowWidthSize { get => Settings.WindowSize; - set => Settings.WindowSize = value; + set + { + Settings.WindowSize = value; + Application.Current.MainWindow.Visibility = Visibility.Visible; + } } public bool UseGlyphIcons From 9d3096050f51c6a9876234fc8a15b01ac204d4e4 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Fri, 22 Oct 2021 15:26:13 -0500 Subject: [PATCH 215/625] Bind width to preview --- Flow.Launcher/SettingWindow.xaml | 250 +++++++++--------- .../ViewModel/SettingWindowViewModel.cs | 6 +- 2 files changed, 124 insertions(+), 132 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 9126ab4a195..a696aefddcd 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -68,7 +68,7 @@ - + @@ -223,7 +223,7 @@ - + @@ -432,7 +432,7 @@ - + @@ -457,32 +457,32 @@ - - - - - - - + + + + + + - - - - - - - - - - - - + + + + + + + + + + + - - @@ -494,63 +494,63 @@ - - - + - - - + + - - - - - - - + + + + - - - - - + + + + - + - - - - - - - + + + + + + + - - + + @@ -561,7 +561,7 @@ - + @@ -587,7 +587,7 @@ - + @@ -600,6 +600,35 @@ + + + + + + + + + +  + + + + + + + + + + + + + +  + + + + + - - - - - - - - - - -  - - - - - - - - - - - - - - - - -  - - - - - @@ -789,8 +785,8 @@ - - + + @@ -895,8 +891,8 @@ - - + + @@ -910,7 +906,7 @@ - + @@ -977,53 +973,53 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - + + + - - diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 1d270e42fba..120fd328c74 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -596,8 +596,17 @@ Style="{DynamicResource SettingSubTitleLabel}" /> - Date: Sat, 30 Oct 2021 16:17:33 -0500 Subject: [PATCH 251/625] Change some configuration and refactor code --- Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs index ce5e8ed7f99..358f2956f54 100644 --- a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs +++ b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs @@ -48,8 +48,8 @@ internal abstract class JsonRPCPlugin : IAsyncPlugin, IContextMenu, ISettingProv private static readonly RecyclableMemoryStreamManager BufferManager = new(); - private string SettingConfigurationPath => Path.Combine(context.CurrentPluginMetadata.PluginDirectory, "SettingConfiguration.yaml"); - private string SettingPath => Path.Combine(DataLocation.PluginSettingsDirectory, context.CurrentPluginMetadata.Name, "Setting.json"); + private string SettingConfigurationPath => Path.Combine(context.CurrentPluginMetadata.PluginDirectory, "SettingsTemplate.yaml"); + private string SettingPath => Path.Combine(DataLocation.PluginSettingsDirectory, context.CurrentPluginMetadata.Name, "Settings.json"); public List LoadContextMenus(Result selectedResult) { @@ -417,9 +417,9 @@ public Control CreateSettingPanel() IsChecked = Settings[attribute.Name] is bool isChecked ? isChecked : bool.Parse(attribute.DefaultValue), Margin = settingControlMargin }; - checkBox.Click += (_, _) => + checkBox.Click += (sender, _) => { - Settings[attribute.Name] = !((bool)Settings[attribute.Name]); + Settings[attribute.Name] = ((CheckBox) sender).IsChecked; }; contentControl = checkBox; break; From 4e5975ccf74e5baa24cb650dd4e89f98ba941792 Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 31 Oct 2021 08:09:12 +0900 Subject: [PATCH 252/625] - Remove URL - Add Icon --- .../SettingsControl.xaml | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml index 54ef8d8e4bb..68f5adc3bba 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml @@ -56,7 +56,6 @@ - + - + + + Width="130"> - + + + + + + + + - + From 102e7cb1b93c4d29bdd891291b2cf88e770c778c Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 31 Oct 2021 17:18:03 +0900 Subject: [PATCH 253/625] Fix HideonStartup (#783) --- Flow.Launcher/ViewModel/MainViewModel.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 4588a677fe9..2e0eb492415 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -729,7 +729,7 @@ public void Hide() { if (MainWindowVisibility != Visibility.Collapsed) { - ToggleFlowLauncher(); + MainWindowVisibility = Visibility.Collapsed; } } From 58c599e748860e48fefea59b3a30fb8bbddfbe3f Mon Sep 17 00:00:00 2001 From: DB p Date: Mon, 1 Nov 2021 04:35:58 +0900 Subject: [PATCH 254/625] Move "HideEmptyQuery" from toggleflow to hide. --- Flow.Launcher/ViewModel/MainViewModel.cs | 39 +++++++++++------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 4588a677fe9..fde5bb467b6 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -704,33 +704,30 @@ public async void ToggleFlowLauncher() } else { - switch (_settings.LastQueryMode) - { - case LastQueryMode.Empty: - ChangeQueryText(string.Empty); - Application.Current.MainWindow.Opacity = 0; // Trick for no delay - await Task.Delay(100); - Application.Current.MainWindow.Opacity = 1; - break; - case LastQueryMode.Preserved: - LastQuerySelected = true; - break; - case LastQueryMode.Selected: - LastQuerySelected = false; - break; - default: - throw new ArgumentException($"wrong LastQueryMode: <{_settings.LastQueryMode}>"); - } - MainWindowVisibility = Visibility.Collapsed; + Hide(); } } - public void Hide() + public async void Hide() { - if (MainWindowVisibility != Visibility.Collapsed) + switch (_settings.LastQueryMode) { - ToggleFlowLauncher(); + case LastQueryMode.Empty: + ChangeQueryText(string.Empty); + Application.Current.MainWindow.Opacity = 0; // Trick for no delay + await Task.Delay(100); + Application.Current.MainWindow.Opacity = 1; + break; + case LastQueryMode.Preserved: + LastQuerySelected = true; + break; + case LastQueryMode.Selected: + LastQuerySelected = false; + break; + default: + throw new ArgumentException($"wrong LastQueryMode: <{_settings.LastQueryMode}>"); } + MainWindowVisibility = Visibility.Collapsed; } #endregion From 5aeab2456b8aceb150f7756d6c32cb86287a3cfb Mon Sep 17 00:00:00 2001 From: DB p Date: Mon, 1 Nov 2021 07:33:59 +0900 Subject: [PATCH 255/625] add force closin --- Flow.Launcher/MainWindow.xaml.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 057c3f07d09..16c9fd05cdf 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -53,7 +53,7 @@ private async void OnClosing(object sender, CancelEventArgs e) _viewModel.Save(); e.Cancel = true; await PluginManager.DisposePluginsAsync(); - Application.Current.Shutdown(); + Environment.Exit(0); } private void OnInitialized(object sender, EventArgs e) @@ -185,7 +185,7 @@ private void InitializeNotifyIcon() var setting = items.Add(InternationalizationManager.Instance.GetTranslation("iconTraySettings")); setting.Click += (o, e) => App.API.OpenSettingDialog(); var exit = items.Add(InternationalizationManager.Instance.GetTranslation("iconTrayExit")); - exit.Click += (o, e) => Close(); + exit.Click += (o, e) => Environment.Exit(0); _notifyIcon.ContextMenuStrip = menu; _notifyIcon.MouseClick += (o, e) => From e04284a013d681a3f1fc6d9e5f22819219807e35 Mon Sep 17 00:00:00 2001 From: DB p Date: Mon, 1 Nov 2021 07:33:59 +0900 Subject: [PATCH 256/625] add force closing --- Flow.Launcher/MainWindow.xaml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 057c3f07d09..b0e3492d27d 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -53,7 +53,7 @@ private async void OnClosing(object sender, CancelEventArgs e) _viewModel.Save(); e.Cancel = true; await PluginManager.DisposePluginsAsync(); - Application.Current.Shutdown(); + Environment.Exit(0); } private void OnInitialized(object sender, EventArgs e) From 323c2422ef1bdaad8cfea04f9116738c3fd4df75 Mon Sep 17 00:00:00 2001 From: kubalav Date: Tue, 2 Nov 2021 19:51:28 +0100 Subject: [PATCH 257/625] Update Slovak translation --- Flow.Launcher/Languages/sk.xaml | 35 ++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/Flow.Launcher/Languages/sk.xaml b/Flow.Launcher/Languages/sk.xaml index 70a5d3b7c13..51b03db5d75 100644 --- a/Flow.Launcher/Languages/sk.xaml +++ b/Flow.Launcher/Languages/sk.xaml @@ -13,47 +13,58 @@ Nastavenia O aplikácii Ukončiť + Zavrieť Nastavenia Flow Launchera Všeobecné Prenosný režim + Uloží všetky nastavenia a používateľské údaje do jedného centrálneho priečinka (Užitočné pri vyberateľných diskoch a cloudových službách). Spustiť Flow Launcher po štarte systému Schovať Flow Launcher po strate fokusu Nezobrazovať upozornenia na novú verziu Zapamätať si posledné umiestnenie Jazyk Posledné vyhľadávanie + Zobrazí/skryje predchádzajúce výsledky pri opätovnej aktivácii Flow Launchera. Ponechať Označiť Vymazať Max. výsledkov Ignorovať klávesové skratky v režime na celú obrazovku + Zakázať aktiváciu Flow Launchera, keď je aktívna aplikácia na celú obrazovku (odporúčané pre hry). Priečinok s Pythonom Automatická aktualizácia Vybrať Schovať Flow Launcher po spustení Schovať ikonu z oblasti oznámení Presnosť vyhľadávania + Mení minimálne skóre zhody potrebné na zobrazenie výsledkov. Použiť Pinyin Umožňuje vyhľadávanie pomocou Pinyin. Pinyin je štandardný systém romanizovaného pravopisu pre transliteráciu čínštiny Efekt tieňa nie je povolený, kým má aktuálny motív povolený efekt rozostrenia - + - Plugin + Pluginy Nájsť ďalšie pluginy - Povolené - Zakázané + Zap. + Vyp. Skratka akcie Aktuálna akcia skratky: Nová akcia skratky: Aktuálna priorita: Nová priorita: - Priorita: + Priorita Priečinok s pluginmi - Autor + Autor: Príprava: Čas dopytu: + + + + Repozitár pluginov + Obnoviť + Inštalovať Motív @@ -65,12 +76,17 @@ Nepriehľadnosť Motív {0} neexistuje, návrat na predvolený motív Nepodarilo sa nečítať motív {0}, návrat na predvolený motív + Priečinok s motívmi + Otvoriť priečinok s motívmi Klávesové skratky Klávesová skratka pre Flow Launcher - Modifikáčné klávesy na otvorenie výsledkov + Zadajte skratku na zobrazenie/skrytie Flow Launchera. + Otvoriť výsledok modifikačným klávesom + Vyberte modifikačný kláves na otvorenie výsledku pomocou klávesnice. Zobraziť klávesovú skratku + Zobrazí klávesovú skratku spolu s výsledkami. Vlastná klávesová skratka na vyhľadávanie Dopyt Odstrániť @@ -115,6 +131,7 @@ Tipy na používanie: + Zmena priority Vyššie číslo znamená, že výsledok bude vyššie. Skúste nastaviť napr. 5. Ak chcete, aby boli výsledky nižšie ako ktorékoľvek iné doplnky, zadajte záporné číslo Prosím, zadajte platné číslo pre prioritu! @@ -160,8 +177,8 @@ Čakajte, prosím… - Kontrolujú sa akutalizácie - Už máte najnovšiu verizu Flow Launchera + Kontrolujú sa aktualizácie + Už máte najnovšiu verziu Flow Launchera Bola nájdená aktualizácia Aktualizuje sa… Flow Launcher nedokázal presunúť používateľské údaje do aktualizovanej verzie. From 6f004a4774718c83e81a5c1a3c5974710788de3b Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Tue, 2 Nov 2021 15:07:11 -0500 Subject: [PATCH 258/625] Custom Explorer Binding (Part 1) --- .../UserSettings/CustomExplorerViewModel.cs | 17 ++ .../UserSettings/Settings.cs | 25 +++ Flow.Launcher/App.xaml.cs | 2 +- Flow.Launcher/Languages/en.xaml | 3 +- Flow.Launcher/SelectFileManagerWindow.xaml | 208 +++++++++++------- Flow.Launcher/SelectFileManagerWindow.xaml.cs | 9 +- Flow.Launcher/SettingWindow.xaml.cs | 2 +- 7 files changed, 181 insertions(+), 85 deletions(-) create mode 100644 Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs diff --git a/Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs b/Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs new file mode 100644 index 00000000000..4fd5e317a1e --- /dev/null +++ b/Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Flow.Launcher.ViewModel +{ + public class CustomExplorerViewModel + { + public string Name { get; set; } + public string Path { get; set; } + public string FileArgument { get; set; } = "\"%d\""; + public string DirectoryArgument { get; set; } = "\"%d\""; + public bool Editable { get; init; } = true; + } +} diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 10244615863..f1c5fd442a1 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -1,9 +1,11 @@ using System; +using System.Collections.Generic; using System.Collections.ObjectModel; using System.Drawing; using System.Text.Json.Serialization; using Flow.Launcher.Plugin; using Flow.Launcher.Plugin.SharedModels; +using Flow.Launcher.ViewModel; namespace Flow.Launcher.Infrastructure.UserSettings { @@ -34,6 +36,29 @@ public string Language public string ResultFontStretch { get; set; } public bool UseGlyphIcons { get; set; } = true; + public CustomExplorerViewModel CustomExplorer { get; set; } + public List CustomExplorerList { get; set; } = new() + { + new() + { + Name = "Explorer", + Path = "explorer", + FileArgument = "/select, \"%f\"", + DirectoryArgument = "\"%d\"", + Editable = false + }, + new() + { + Name = "Total Commander", + Path = @"C:\Program Files\TOTALCMD\totalcommander.exe" + }, + new() + { + Name = "Dopus", + Path = @"c:\programe files\dopus\dopus.exe" + } + }; + /// /// when false Alphabet static service will always return empty results diff --git a/Flow.Launcher/App.xaml.cs b/Flow.Launcher/App.xaml.cs index 8c869e9418a..75925b1e064 100644 --- a/Flow.Launcher/App.xaml.cs +++ b/Flow.Launcher/App.xaml.cs @@ -101,7 +101,7 @@ await Stopwatch.NormalAsync("|App.OnStartup|Startup cost", async () => API.SaveAppAllSettings(); - _mainVM.MainWindowVisibility = _settings.HideOnStartup ? Visibility.Hidden : Visibility.Visible; + _mainVM.MainWindowVisibility = _settings.HideOnStartup ? Visibility.Collapsed : Visibility.Visible; Log.Info("|App.OnStartup|End Flow Launcher startup ---------------------------------------------------- "); }); } diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 15954c8967b..84f7c06b1d1 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -135,7 +135,8 @@ Please specify the file location of the file manager you using and add arguments (optional) if necessary. File Manager Path - Argument + Argument For Directory + Argument For File Parent Directory Change Priority diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml b/Flow.Launcher/SelectFileManagerWindow.xaml index 9fb9ee1cdac..55eceae273c 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml +++ b/Flow.Launcher/SelectFileManagerWindow.xaml @@ -2,112 +2,154 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:local="clr-namespace:Flow.Launcher" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:ui="http://schemas.modernwpf.com/2019" - xmlns:local="clr-namespace:Flow.Launcher" - mc:Ignorable="d" + Title="{DynamicResource fileManagerWindow}" + Width="500" + Height="420" + Background="#f3f3f3" + DataContext="{Binding RelativeSource={RelativeSource Self}}" + ResizeMode="NoResize" WindowStartupLocation="CenterScreen" - Title="{DynamicResource fileManagerWindow}" Height="420" Width="500" ResizeMode="NoResize" Background="#f3f3f3"> + mc:Ignorable="d"> - + - + - - + + - + - - - - - - - - + + + + + + + + - - + + - + - + - - + + - - - - - - + + + + + + + + @@ -116,10 +158,16 @@ - - diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml.cs b/Flow.Launcher/SelectFileManagerWindow.xaml.cs index 6fcf6feefd2..429ccec49e9 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml.cs +++ b/Flow.Launcher/SelectFileManagerWindow.xaml.cs @@ -1,4 +1,6 @@ -using System; +using Flow.Launcher.Infrastructure.UserSettings; +using Flow.Launcher.ViewModel; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -19,8 +21,11 @@ namespace Flow.Launcher /// public partial class SelectFileManagerWindow : Window { - public SelectFileManagerWindow() + public Settings Settings { get; } + + public SelectFileManagerWindow(Settings settings) { + Settings = settings; InitializeComponent(); } } diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index 80f82e8ed72..3066778c1be 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -117,7 +117,7 @@ private void OnSelectPythonDirectoryClick(object sender, RoutedEventArgs e) private void OnSelectFileManagerClick(object sender, RoutedEventArgs e) { - SelectFileManagerWindow fileManagerChangeWindow = new SelectFileManagerWindow(); + SelectFileManagerWindow fileManagerChangeWindow = new SelectFileManagerWindow(settings); fileManagerChangeWindow.ShowDialog(); } From c2a633097b16e51e5242eeb5b69e6b125c0a3874 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Wed, 3 Nov 2021 08:17:57 +1100 Subject: [PATCH 259/625] update wording and bump WebSearch version --- Flow.Launcher/CustomQueryHotkeySetting.xaml.cs | 1 - Flow.Launcher/HotkeyControl.xaml.cs | 2 -- Flow.Launcher/SettingWindow.xaml.cs | 2 +- Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml | 4 ++-- Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json | 2 +- 5 files changed, 4 insertions(+), 7 deletions(-) diff --git a/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs b/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs index 6d50ab2b0af..0109474e12d 100644 --- a/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs +++ b/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs @@ -9,7 +9,6 @@ using System.Windows.Input; using System.Windows.Controls; - namespace Flow.Launcher { public partial class CustomQueryHotkeySetting : Window diff --git a/Flow.Launcher/HotkeyControl.xaml.cs b/Flow.Launcher/HotkeyControl.xaml.cs index 43aaa488909..2b6e275df92 100644 --- a/Flow.Launcher/HotkeyControl.xaml.cs +++ b/Flow.Launcher/HotkeyControl.xaml.cs @@ -81,8 +81,6 @@ public void SetHotkey(HotkeyModel keyModel, bool triggerValidate = true) } } - - public void SetHotkey(string keyStr, bool triggerValidate = true) { SetHotkey(new HotkeyModel(keyStr), triggerValidate); diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index c8b5e29ec3f..203248ad658 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -281,6 +281,7 @@ private void OnExternalPluginInstallClick(object sender, RoutedEventArgs e) API.ShowMainWindow(); } } + private void window_MouseDown(object sender, MouseButtonEventArgs e) /* for close hotkey popup */ { TextBox textBox = Keyboard.FocusedElement as TextBox; @@ -290,6 +291,5 @@ private void OnExternalPluginInstallClick(object sender, RoutedEventArgs e) textBox.MoveFocus(tRequest); } } - } } \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml index cc19b57ca64..632b6d3a3a6 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml @@ -19,9 +19,9 @@ Autocomplete Data from: Please select a web search Are you sure you want to delete {0}? - If you have a web search on the service you want to use, you can add it to the Flow. For example, You can check the following formats in the address bar when you search 'casino' on Netflix . "https://www.netflix.com/search?q=Casino" So, you change the search word area as follows. + If you have a web search service you want to use, you can add it to Flow. For example, you can follow the url format in the address bar if you want to search 'casino' on Netflix: "https://www.netflix.com/search?q=Casino". To do this, change the search term 'Casino' as follows. https://www.netflix.com/search?q={q} - And add it to the place URL in this window, then you can search Netflix in Flow. + Add it to the URL section below. You can now search Netflix with Flow using any search terms. diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json b/Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json index 679f976d316..f83b1e40bbe 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json @@ -26,7 +26,7 @@ "Name": "Web Searches", "Description": "Provide the web search ability", "Author": "qianlifeng", - "Version": "1.4.0", + "Version": "1.4.1", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.WebSearch.dll", From ad88e3fb34ef7d3e53916d64ac95650ff83ad8e7 Mon Sep 17 00:00:00 2001 From: kubalav Date: Wed, 3 Nov 2021 09:21:10 +0100 Subject: [PATCH 260/625] Update Slovak translation + bump version --- Flow.Launcher/Languages/sk.xaml | 11 +++++++---- Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml | 2 ++ Plugins/Flow.Launcher.Plugin.Sys/plugin.json | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Flow.Launcher/Languages/sk.xaml b/Flow.Launcher/Languages/sk.xaml index 51b03db5d75..4014d215fcc 100644 --- a/Flow.Launcher/Languages/sk.xaml +++ b/Flow.Launcher/Languages/sk.xaml @@ -49,6 +49,7 @@ Nájsť ďalšie pluginy Zap. Vyp. + Nastavenie kľúčového slova akcie Skratka akcie Aktuálna akcia skratky: Nová akcia skratky: @@ -68,7 +69,8 @@ Motív - Prehliadať viac motívov + Galéria motívov + Ako vytvoriť motív Ahojte Písmo vyhľadávacieho poľa Písmo výsledkov @@ -104,7 +106,7 @@ Povoliť HTTP Proxy HTTP Server Port - Použív. meno + Používateľské meno Heslo Test Proxy Uložiť @@ -145,10 +147,11 @@ Nová skratka pre akciu bola priradená pre iný plugin, prosím, zvoľte inú skratku Úspešné Úspešne dokončené - Použite * ak nechcete určiť skratku pre akciu + Zadajte skratku akcie, ktorá je potrebná na spustenie pluginu. Ak nechcete zadať skratku akcie, použite *. V tom prípade plugin funguje bez kľúčových slov. - Vlastná klávesová skratka pre plugin + Klávesová skratka pre vlastné vyhľadávanie + Stlačením klávesovej skratky sa automaticky vloží zadaný výraz. Náhľad Klávesová skratka je nedostupná, prosím, zadajte novú Neplatná klávesová skratka pluginu diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml index 1b64699cd9c..f5857485414 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml @@ -8,6 +8,7 @@ Vypnúť počítač Reštartovať počítač + Reštartovať počítač s rozšírenými možnosťami spúšťania pre núdzový režim a režim ladenia, ako aj s ďalšími možnosťami Odhlásiť Zamknúť počítač Zavrieť Flow Launcher @@ -29,6 +30,7 @@ Všetky dáta pluginov aktualizované Naozaj chcete počítač vypnúť? Naozaj chcete počítač reštartovať? + Naozaj chcete počítač reštartovať s pokročilými možnosťami spúšťania? Systémové príkazy Poskytuje príkazy súvisiace so systémom ako je vypnutie, uzamknutie počítača atď. diff --git a/Plugins/Flow.Launcher.Plugin.Sys/plugin.json b/Plugins/Flow.Launcher.Plugin.Sys/plugin.json index 1bfcd92a5cb..826a1b7563b 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Sys/plugin.json @@ -4,7 +4,7 @@ "Name": "System Commands", "Description": "Provide System related commands. e.g. shutdown,lock, setting etc.", "Author": "qianlifeng", - "Version": "1.4.0", + "Version": "1.4.1", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Sys.dll", From 58ee77f40f2819ee00e0a1f975b86d58b34c9e4e Mon Sep 17 00:00:00 2001 From: kubalav Date: Wed, 3 Nov 2021 09:29:33 +0100 Subject: [PATCH 261/625] Removed extra spaces before chevrons --- Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/sk.xaml | 2 +- Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/sk.xaml index 62f95534a49..cb52898f271 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/sk.xaml @@ -14,7 +14,7 @@ Prehliadať Kopírovať URL Kopírovať URL záložky do schránky - Načítať prehliadač z: + Načítať prehliadač z: Názov prehliadača Umiestnenie priečinka Data Pridať diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml index f5857485414..42bfcab4463 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml @@ -8,7 +8,7 @@ Vypnúť počítač Reštartovať počítač - Reštartovať počítač s rozšírenými možnosťami spúšťania pre núdzový režim a režim ladenia, ako aj s ďalšími možnosťami + Reštartovať počítač s rozšírenými možnosťami spúšťania pre núdzový režim a režim ladenia, ako aj s ďalšími možnosťami Odhlásiť Zamknúť počítač Zavrieť Flow Launcher From 0a74766b9a7ee2f727e86c0b9301a640d840560f Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Fri, 5 Nov 2021 07:39:10 +1100 Subject: [PATCH 262/625] remove obsolete comment --- Flow.Launcher.Core/Resource/Theme.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Flow.Launcher.Core/Resource/Theme.cs b/Flow.Launcher.Core/Resource/Theme.cs index 3abb426cba1..6561419a16b 100644 --- a/Flow.Launcher.Core/Resource/Theme.cs +++ b/Flow.Launcher.Core/Resource/Theme.cs @@ -364,7 +364,6 @@ private void SetWindowAccent(Window w, AccentState state) { var windowHelper = new WindowInteropHelper(w); - // this determines the width of the main query window windowHelper.EnsureHandle(); var accent = new AccentPolicy { AccentState = state }; From 17f8ffed2d8acfa440d606028bb6daa31fb7e86c Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Fri, 5 Nov 2021 08:00:01 +1100 Subject: [PATCH 263/625] version bump BrowserBookmarks plugin --- Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json index 7d124169b94..d72db3a90cf 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json @@ -4,7 +4,7 @@ "Name": "Browser Bookmarks", "Description": "Search your browser bookmarks", "Author": "qianlifeng, Ioannis G.", - "Version": "1.5.2", + "Version": "1.5.3", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.BrowserBookmark.dll", From 6498c6bd53cf87188bcf4782a5841132664c749d Mon Sep 17 00:00:00 2001 From: DB p Date: Fri, 5 Nov 2021 10:12:35 +0900 Subject: [PATCH 264/625] Merge dev for fix conflict --- Flow.Launcher/SettingWindow.xaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index ad77dee5513..f90ebf4f9ba 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -1114,7 +1114,7 @@ - + @@ -1131,7 +1131,7 @@ - Date: Fri, 5 Nov 2021 12:23:46 -0500 Subject: [PATCH 265/625] Reformat xaml code --- Flow.Launcher/SettingWindow.xaml | 1513 ++++++++++++++++++------------ 1 file changed, 905 insertions(+), 608 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index f90ebf4f9ba..433feeb9fb2 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -1,28 +1,29 @@ - + Icon="Images\app.ico" + Loaded="OnLoaded" + MouseDown="window_MouseDown" + ResizeMode="CanResizeWithGrip" + WindowStartupLocation="CenterScreen" + mc:Ignorable="d"> @@ -32,7 +33,7 @@ - + @@ -46,9 +47,9 @@ - + - + @@ -60,25 +61,25 @@ - - + + - - + - - @@ -768,10 +829,13 @@ - - + + - + - + - - - + + + - - + + - + - - + + @@ -1185,47 +1395,56 @@ - - + + - - + + - + - - + + - - + + - - + + - - - - + + + + @@ -1239,26 +1458,32 @@ - + - - + + - - - - + + + + @@ -1272,8 +1497,11 @@ - + @@ -1282,17 +1510,23 @@ - + - + - - + Click="OpenPluginFolder" + Content="{DynamicResource OpenThemeFolder}" + DockPanel.Dock="Top" /> + @@ -1312,17 +1546,21 @@ - + - + - + @@ -1331,83 +1569,99 @@ - + - + - - + + - - - + + + - + - + - - + + - + SelectedItem="{Binding Settings.OpenResultModifiers}" /> - - + + - - - + + + - + - - + + Style="{StaticResource {x:Static GridView.GridViewStyleKey}}"> - + - + @@ -1417,21 +1671,31 @@ - - + Margin="5,0,0,0" + Content="{DynamicResource done}" + Click="btnDone_Click" + /> diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml.cs b/Flow.Launcher/SelectFileManagerWindow.xaml.cs index 429ccec49e9..7ac8dc1cf7a 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml.cs +++ b/Flow.Launcher/SelectFileManagerWindow.xaml.cs @@ -2,6 +2,7 @@ using Flow.Launcher.ViewModel; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -19,14 +20,43 @@ namespace Flow.Launcher /// /// SelectFileManagerWindow.xaml에 대한 상호 작용 논리 /// - public partial class SelectFileManagerWindow : Window + public partial class SelectFileManagerWindow : Window, INotifyPropertyChanged { + private int selectedCustomExplorerIndex; + + public event PropertyChangedEventHandler PropertyChanged; + public Settings Settings { get; } + public int SelectedCustomExplorerIndex + { + get => selectedCustomExplorerIndex; set + { + selectedCustomExplorerIndex = value; + PropertyChanged?.Invoke(this, new(nameof(CustomExplorer))); + } + } + public List CustomExplorers { get; set; } + + public CustomExplorerViewModel CustomExplorer => CustomExplorers[SelectedCustomExplorerIndex]; public SelectFileManagerWindow(Settings settings) { Settings = settings; + CustomExplorers = Settings.CustomExplorerList.Select(x => x.Copy()).ToList(); + SelectedCustomExplorerIndex = Settings.CustomExplorerIndex; InitializeComponent(); } + + private void btnCancel_Click(object sender, RoutedEventArgs e) + { + Close(); + } + + private void btnDone_Click(object sender, RoutedEventArgs e) + { + Settings.CustomExplorerIndex = SelectedCustomExplorerIndex; + Settings.CustomExplorerList = CustomExplorers; + Close(); + } } } diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 8e9bc8042d4..e8064a421b5 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -618,7 +618,7 @@ diff --git a/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml b/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml index 9db840ad451..d4cf96e8616 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml @@ -1,79 +1,164 @@ - - + + - - - + + + - - - - - + + + + + - - - + + Visibility="{Binding ActionKeywordsVisibility}" /> @@ -1455,8 +1455,8 @@ - + @@ -1840,11 +1840,18 @@ BorderThickness="0" Style="{DynamicResource SettingGroupBox}"> - - + + - + @@ -2060,10 +2067,7 @@ - + Date: Mon, 8 Nov 2021 10:53:13 +0900 Subject: [PATCH 287/625] Change the text to string --- Flow.Launcher/Languages/en.xaml | 2 + Flow.Launcher/SettingWindow.xaml | 2019 +++++++++++++++++------------- 2 files changed, 1178 insertions(+), 843 deletions(-) diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 3884d69971a..289aec337c4 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -34,6 +34,8 @@ Maximum results shown Ignore hotkeys in fullscreen mode Disable Flow Launcher activation when a full screen application is active (Recommended for games). + Default File Manager + Select the file manager to use when opening the folder. Python Directory Auto Update Select diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index e8064a421b5..c567812f827 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -1,29 +1,30 @@ - + @@ -47,9 +48,15 @@ - + - + @@ -115,20 +122,25 @@ - - - + + + @@ -154,20 +166,25 @@ - - - + + + @@ -203,19 +220,21 @@ - - + + @@ -273,19 +292,21 @@ - - + + @@ -341,15 +362,17 @@ - - + + @@ -361,10 +384,11 @@ - + @@ -373,19 +397,22 @@ - - - + + + @@ -397,39 +424,46 @@ - + - + - + - - + + @@ -441,11 +475,12 @@ - + @@ -486,11 +521,12 @@ - + @@ -502,12 +538,16 @@ - - + + @@ -518,15 +558,17 @@ - - + + @@ -538,69 +580,100 @@ - - + + - + - + - + - + - - + + - + - + - - + + - - - + + + @@ -608,43 +681,61 @@ - + - - + + - - -  + +  - + - - + Date: Mon, 8 Nov 2021 11:13:06 +0900 Subject: [PATCH 289/625] Fix Border --- Flow.Launcher/SettingWindow.xaml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index c567812f827..1d160857434 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -681,10 +681,7 @@ - + Date: Mon, 8 Nov 2021 18:40:20 +0900 Subject: [PATCH 290/625] Add Browser Setting Popup --- Flow.Launcher/Languages/en.xaml | 12 ++ Flow.Launcher/SelectBrowserWindow.xaml | 214 ++++++++++++++++++++++ Flow.Launcher/SelectBrowserWindow.xaml.cs | 45 +++++ Flow.Launcher/SettingWindow.xaml | 143 ++++++++------- Flow.Launcher/SettingWindow.xaml.cs | 6 + 5 files changed, 349 insertions(+), 71 deletions(-) create mode 100644 Flow.Launcher/SelectBrowserWindow.xaml create mode 100644 Flow.Launcher/SelectBrowserWindow.xaml.cs diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 289aec337c4..6c3fbe777bd 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -36,6 +36,8 @@ Disable Flow Launcher activation when a full screen application is active (Recommended for games). Default File Manager Select the file manager to use when opening the folder. + Default Web Browser + Setting for New Tab, New Window, Private Mode. Python Directory Auto Update Select @@ -145,6 +147,16 @@ Arguments For Folder Arguments For File + + Default Web Browser + The default setting follows the OS default browser setting. If specified separately, flow uses that browser. + Browser + Browser Name + Browser Path + New Window + New Tab + Priviate Mode + Change Priority Greater the number, the higher the result will be ranked. Try setting it as 5. If you want the results to be lower than any other plugin's, provide a negative number diff --git a/Flow.Launcher/SelectBrowserWindow.xaml b/Flow.Launcher/SelectBrowserWindow.xaml new file mode 100644 index 00000000000..9a435c9966d --- /dev/null +++ b/Flow.Launcher/SelectBrowserWindow.xaml @@ -0,0 +1,214 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Flow.Launcher/SelectBrowserWindow.xaml.cs b/Flow.Launcher/SelectBrowserWindow.xaml.cs new file mode 100644 index 00000000000..1f79b463b3d --- /dev/null +++ b/Flow.Launcher/SelectBrowserWindow.xaml.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; + +namespace Flow.Launcher +{ + /// + /// SelectBrowserWindow.xaml에 대한 상호 작용 논리 + /// + public partial class SelectBrowserWindow : Window + { + public SelectBrowserWindow() + { + InitializeComponent(); + } + + private void btnCancel_Click(object sender, RoutedEventArgs e) + { + } + + private void btnDone_Click(object sender, RoutedEventArgs e) + { + } + + private void btnAdd_Click(object sender, RoutedEventArgs e) + { + } + + private void btnDelete_Click(object sender, RoutedEventArgs e) + { + } + } + + +} diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 761dec1d7fa..7ef751df388 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -688,78 +688,79 @@ - - - - - - - - - - -  - - - - - - - - - - - - - -  - - + + + + + + + + + + + + Content="{Binding Settings.CustomExplorer.Name}" /> Date: Mon, 8 Nov 2021 23:26:24 +0900 Subject: [PATCH 296/625] - Adjust Priority Button --- Flow.Launcher/SettingWindow.xaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 049b0aa0cc9..5c9e80a5a75 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -827,7 +827,7 @@ + TextWrapping="WrapWithOverflow"> @@ -838,10 +838,10 @@ VerticalAlignment="Center" FontSize="12" Text="{DynamicResource priority}" /> - + diff --git a/Flow.Launcher/PriorityChangeWindow.xaml.cs b/Flow.Launcher/PriorityChangeWindow.xaml.cs index 0adb1f08037..8f392f0a383 100644 --- a/Flow.Launcher/PriorityChangeWindow.xaml.cs +++ b/Flow.Launcher/PriorityChangeWindow.xaml.cs @@ -26,7 +26,6 @@ public partial class PriorityChangeWindow : Window private Settings settings; private readonly Internationalization translater = InternationalizationManager.Instance; private readonly PluginViewModel pluginViewModel; - public PriorityChangeWindow(string pluginId, Settings settings, PluginViewModel pluginViewModel) { InitializeComponent(); @@ -62,8 +61,18 @@ private void btnDone_OnClick(object sender, RoutedEventArgs e) private void PriorityChangeWindow_Loaded(object sender, RoutedEventArgs e) { - OldPriority.Text = pluginViewModel.Priority.ToString(); + tbAction.Text = pluginViewModel.Priority.ToString(); + //OldPriority.Text = pluginViewModel.Priority.ToString(); tbAction.Focus(); } + private void window_MouseDown(object sender, MouseButtonEventArgs e) /* for close hotkey popup */ + { + TextBox textBox = Keyboard.FocusedElement as TextBox; + if (textBox != null) + { + TraversalRequest tRequest = new TraversalRequest(FocusNavigationDirection.Next); + textBox.MoveFocus(tRequest); + } + } } } \ No newline at end of file diff --git a/Flow.Launcher/Resources/CustomControlTemplate.xaml b/Flow.Launcher/Resources/CustomControlTemplate.xaml index 70fb18e2df8..cd956d26516 100644 --- a/Flow.Launcher/Resources/CustomControlTemplate.xaml +++ b/Flow.Launcher/Resources/CustomControlTemplate.xaml @@ -4,6 +4,535 @@ xmlns:system="clr-namespace:System;assembly=mscorlib" xmlns:ui="http://schemas.modernwpf.com/2019"> + + + + + + + + + + + + + + + + + + + + + + + + + + result = dlg.ShowDialog(); + + if (result == true) + { + TextBox path = (TextBox)(((FrameworkElement)sender).Parent as FrameworkElement).FindName("PathTextBox"); + path.Text = dlg.FileName; + path.Focus(); + ((Button)sender).Focus(); + } + } } } From c6054d4c56bdfa6a56193bb920a5a333915eb171 Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 31 Oct 2021 03:49:23 +0900 Subject: [PATCH 302/625] Add File Manager Item and popup window --- Flow.Launcher/SelectFileManagerWindow.xaml | 58 +++++++++++++++++++ Flow.Launcher/SelectFileManagerWindow.xaml.cs | 27 +++++++++ Flow.Launcher/SettingWindow.xaml | 22 ++++++- Flow.Launcher/SettingWindow.xaml.cs | 6 ++ 4 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 Flow.Launcher/SelectFileManagerWindow.xaml create mode 100644 Flow.Launcher/SelectFileManagerWindow.xaml.cs diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml b/Flow.Launcher/SelectFileManagerWindow.xaml new file mode 100644 index 00000000000..1a846710f03 --- /dev/null +++ b/Flow.Launcher/SelectFileManagerWindow.xaml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml.cs b/Flow.Launcher/SelectFileManagerWindow.xaml.cs new file mode 100644 index 00000000000..6fcf6feefd2 --- /dev/null +++ b/Flow.Launcher/SelectFileManagerWindow.xaml.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; + +namespace Flow.Launcher +{ + /// + /// SelectFileManagerWindow.xaml에 대한 상호 작용 논리 + /// + public partial class SelectFileManagerWindow : Window + { + public SelectFileManagerWindow() + { + InitializeComponent(); + } + } +} diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 433feeb9fb2..55c65037811 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -608,7 +608,27 @@ - + + + + + + + + diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 55c65037811..8e9bc8042d4 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -617,8 +617,17 @@ Style="{DynamicResource SettingSubTitleLabel}" /> - Date: Tue, 2 Nov 2021 15:07:11 -0500 Subject: [PATCH 304/625] Custom Explorer Binding (Part 1) --- .../UserSettings/CustomExplorerViewModel.cs | 17 ++ .../UserSettings/Settings.cs | 25 +++ Flow.Launcher/App.xaml.cs | 2 +- Flow.Launcher/Languages/en.xaml | 3 +- Flow.Launcher/SelectFileManagerWindow.xaml | 208 +++++++++++------- Flow.Launcher/SelectFileManagerWindow.xaml.cs | 9 +- Flow.Launcher/SettingWindow.xaml.cs | 2 +- 7 files changed, 181 insertions(+), 85 deletions(-) create mode 100644 Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs diff --git a/Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs b/Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs new file mode 100644 index 00000000000..4fd5e317a1e --- /dev/null +++ b/Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Flow.Launcher.ViewModel +{ + public class CustomExplorerViewModel + { + public string Name { get; set; } + public string Path { get; set; } + public string FileArgument { get; set; } = "\"%d\""; + public string DirectoryArgument { get; set; } = "\"%d\""; + public bool Editable { get; init; } = true; + } +} diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 5f9082fe935..53ced152474 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -1,10 +1,12 @@ using System; +using System.Collections.Generic; using System.Collections.ObjectModel; using System.Drawing; using System.Text.Json.Serialization; using Flow.Launcher.Plugin; using Flow.Launcher.Plugin.SharedModels; using Flow.Launcher; +using Flow.Launcher.ViewModel; namespace Flow.Launcher.Infrastructure.UserSettings { @@ -37,6 +39,29 @@ public string Language public string ResultFontStretch { get; set; } public bool UseGlyphIcons { get; set; } = true; + public CustomExplorerViewModel CustomExplorer { get; set; } + public List CustomExplorerList { get; set; } = new() + { + new() + { + Name = "Explorer", + Path = "explorer", + FileArgument = "/select, \"%f\"", + DirectoryArgument = "\"%d\"", + Editable = false + }, + new() + { + Name = "Total Commander", + Path = @"C:\Program Files\TOTALCMD\totalcommander.exe" + }, + new() + { + Name = "Dopus", + Path = @"c:\programe files\dopus\dopus.exe" + } + }; + /// /// when false Alphabet static service will always return empty results diff --git a/Flow.Launcher/App.xaml.cs b/Flow.Launcher/App.xaml.cs index 8c869e9418a..75925b1e064 100644 --- a/Flow.Launcher/App.xaml.cs +++ b/Flow.Launcher/App.xaml.cs @@ -101,7 +101,7 @@ await Stopwatch.NormalAsync("|App.OnStartup|Startup cost", async () => API.SaveAppAllSettings(); - _mainVM.MainWindowVisibility = _settings.HideOnStartup ? Visibility.Hidden : Visibility.Visible; + _mainVM.MainWindowVisibility = _settings.HideOnStartup ? Visibility.Collapsed : Visibility.Visible; Log.Info("|App.OnStartup|End Flow Launcher startup ---------------------------------------------------- "); }); } diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 9d8e0caa0e9..e8469763f73 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -138,7 +138,8 @@ Please specify the file location of the file manager you using and add arguments (optional) if necessary. File Manager Path - Argument + Argument For Directory + Argument For File Parent Directory Change Priority diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml b/Flow.Launcher/SelectFileManagerWindow.xaml index 9fb9ee1cdac..55eceae273c 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml +++ b/Flow.Launcher/SelectFileManagerWindow.xaml @@ -2,112 +2,154 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:local="clr-namespace:Flow.Launcher" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:ui="http://schemas.modernwpf.com/2019" - xmlns:local="clr-namespace:Flow.Launcher" - mc:Ignorable="d" + Title="{DynamicResource fileManagerWindow}" + Width="500" + Height="420" + Background="#f3f3f3" + DataContext="{Binding RelativeSource={RelativeSource Self}}" + ResizeMode="NoResize" WindowStartupLocation="CenterScreen" - Title="{DynamicResource fileManagerWindow}" Height="420" Width="500" ResizeMode="NoResize" Background="#f3f3f3"> + mc:Ignorable="d"> - + - + - - + + - + - - - - - - - - + + + + + + + + - - + + - + - + - - + + - - - - - - + + + + + + + + @@ -116,10 +158,16 @@ - - diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml.cs b/Flow.Launcher/SelectFileManagerWindow.xaml.cs index 6fcf6feefd2..429ccec49e9 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml.cs +++ b/Flow.Launcher/SelectFileManagerWindow.xaml.cs @@ -1,4 +1,6 @@ -using System; +using Flow.Launcher.Infrastructure.UserSettings; +using Flow.Launcher.ViewModel; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -19,8 +21,11 @@ namespace Flow.Launcher /// public partial class SelectFileManagerWindow : Window { - public SelectFileManagerWindow() + public Settings Settings { get; } + + public SelectFileManagerWindow(Settings settings) { + Settings = settings; InitializeComponent(); } } diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index 62ef96b3822..38ede80764b 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -117,7 +117,7 @@ private void OnSelectPythonDirectoryClick(object sender, RoutedEventArgs e) private void OnSelectFileManagerClick(object sender, RoutedEventArgs e) { - SelectFileManagerWindow fileManagerChangeWindow = new SelectFileManagerWindow(); + SelectFileManagerWindow fileManagerChangeWindow = new SelectFileManagerWindow(settings); fileManagerChangeWindow.ShowDialog(); } From 6bfebe9fbd77acdfe2075ee644ecfc7addae0b3f Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Fri, 5 Nov 2021 12:53:53 -0500 Subject: [PATCH 305/625] Revert a test change --- Flow.Launcher/App.xaml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/App.xaml.cs b/Flow.Launcher/App.xaml.cs index 75925b1e064..8c869e9418a 100644 --- a/Flow.Launcher/App.xaml.cs +++ b/Flow.Launcher/App.xaml.cs @@ -101,7 +101,7 @@ await Stopwatch.NormalAsync("|App.OnStartup|Startup cost", async () => API.SaveAppAllSettings(); - _mainVM.MainWindowVisibility = _settings.HideOnStartup ? Visibility.Collapsed : Visibility.Visible; + _mainVM.MainWindowVisibility = _settings.HideOnStartup ? Visibility.Hidden : Visibility.Visible; Log.Info("|App.OnStartup|End Flow Launcher startup ---------------------------------------------------- "); }); } From a69f4a7ea636fd8acc4f2117886bb574f20586d3 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Fri, 5 Nov 2021 14:16:20 -0500 Subject: [PATCH 306/625] File Explore Binding (Part 2) --- .../UserSettings/CustomExplorerViewModel.cs | 17 ++++++++-- .../UserSettings/Settings.cs | 8 ++++- Flow.Launcher/SelectFileManagerWindow.xaml | 17 +++++----- Flow.Launcher/SelectFileManagerWindow.xaml.cs | 32 ++++++++++++++++++- Flow.Launcher/SettingWindow.xaml | 2 +- 5 files changed, 63 insertions(+), 13 deletions(-) diff --git a/Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs b/Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs index 4fd5e317a1e..7806debe125 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs @@ -1,4 +1,5 @@ -using System; +using Flow.Launcher.Plugin; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -6,12 +7,24 @@ namespace Flow.Launcher.ViewModel { - public class CustomExplorerViewModel + public class CustomExplorerViewModel : BaseModel { public string Name { get; set; } public string Path { get; set; } public string FileArgument { get; set; } = "\"%d\""; public string DirectoryArgument { get; set; } = "\"%d\""; public bool Editable { get; init; } = true; + + public CustomExplorerViewModel Copy() + { + return new CustomExplorerViewModel + { + Name = Name, + Path = Path, + FileArgument = FileArgument, + DirectoryArgument = DirectoryArgument, + Editable = Editable + }; + } } } diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 53ced152474..f753a4a1aa8 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -39,7 +39,13 @@ public string Language public string ResultFontStretch { get; set; } public bool UseGlyphIcons { get; set; } = true; - public CustomExplorerViewModel CustomExplorer { get; set; } + public int CustomExplorerIndex { get; set; } = 0; + public CustomExplorerViewModel CustomExplorer + { + get => CustomExplorerList[CustomExplorerIndex]; + set => CustomExplorerList[CustomExplorerIndex] = value; + } + public List CustomExplorerList { get; set; } = new() { new() diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml b/Flow.Launcher/SelectFileManagerWindow.xaml index 55eceae273c..ff472f0078e 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml +++ b/Flow.Launcher/SelectFileManagerWindow.xaml @@ -53,9 +53,8 @@ Margin="14,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Center" - ItemsSource="{Binding Settings.CustomExplorerList}" - SelectedIndex="0" - SelectedItem="{Binding Settings.CustomExplorer}"> + ItemsSource="{Binding CustomExplorers}" + SelectedIndex="{Binding SelectedCustomExplorerIndex}"> @@ -66,7 +65,7 @@ @@ -163,13 +162,15 @@ Width="100" Height="30" Margin="0,0,5,0" - Content="{DynamicResource cancel}" /> + Content="{DynamicResource cancel}" + Click="btnCancel_Click"/> + Margin="5,0,0,0" + Content="{DynamicResource done}" + Click="btnDone_Click" + /> diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml.cs b/Flow.Launcher/SelectFileManagerWindow.xaml.cs index 429ccec49e9..7ac8dc1cf7a 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml.cs +++ b/Flow.Launcher/SelectFileManagerWindow.xaml.cs @@ -2,6 +2,7 @@ using Flow.Launcher.ViewModel; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -19,14 +20,43 @@ namespace Flow.Launcher /// /// SelectFileManagerWindow.xaml에 대한 상호 작용 논리 /// - public partial class SelectFileManagerWindow : Window + public partial class SelectFileManagerWindow : Window, INotifyPropertyChanged { + private int selectedCustomExplorerIndex; + + public event PropertyChangedEventHandler PropertyChanged; + public Settings Settings { get; } + public int SelectedCustomExplorerIndex + { + get => selectedCustomExplorerIndex; set + { + selectedCustomExplorerIndex = value; + PropertyChanged?.Invoke(this, new(nameof(CustomExplorer))); + } + } + public List CustomExplorers { get; set; } + + public CustomExplorerViewModel CustomExplorer => CustomExplorers[SelectedCustomExplorerIndex]; public SelectFileManagerWindow(Settings settings) { Settings = settings; + CustomExplorers = Settings.CustomExplorerList.Select(x => x.Copy()).ToList(); + SelectedCustomExplorerIndex = Settings.CustomExplorerIndex; InitializeComponent(); } + + private void btnCancel_Click(object sender, RoutedEventArgs e) + { + Close(); + } + + private void btnDone_Click(object sender, RoutedEventArgs e) + { + Settings.CustomExplorerIndex = SelectedCustomExplorerIndex; + Settings.CustomExplorerList = CustomExplorers; + Close(); + } } } diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 8e9bc8042d4..e8064a421b5 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -618,7 +618,7 @@ diff --git a/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml b/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml index 9db840ad451..d4cf96e8616 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml @@ -1,79 +1,164 @@ - - + + - - - + + + - - - - - + + + + + - - - -  + +  - + - - + Content="{Binding Settings.CustomExplorer.Name}" /> Date: Wed, 10 Nov 2021 08:30:10 +0900 Subject: [PATCH 325/625] Add File Select Dialogue --- Flow.Launcher/SelectFileManagerWindow.xaml | 41 ++++++++++++++----- Flow.Launcher/SelectFileManagerWindow.xaml.cs | 14 +++++++ 2 files changed, 44 insertions(+), 11 deletions(-) diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml b/Flow.Launcher/SelectFileManagerWindow.xaml index 85d0d14cedc..68e7b93b299 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml +++ b/Flow.Launcher/SelectFileManagerWindow.xaml @@ -88,7 +88,7 @@ Orientation="Horizontal"> - + @@ -123,16 +123,35 @@ VerticalAlignment="Center" FontSize="14" Text="{DynamicResource fileManager_path}" /> - + + + + result = dlg.ShowDialog(); + + if (result == true) + { + TextBox path = (TextBox)(((FrameworkElement)sender).Parent as FrameworkElement).FindName("PathTextBox"); + path.Text = dlg.FileName; + path.Focus(); + ((Button)sender).Focus(); + } + } } } From b15ec0f83b01c21cc58d61e038c29ed5a81fde17 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Wed, 10 Nov 2021 13:39:15 -0600 Subject: [PATCH 326/625] Json Ignore CustomExplorer Property because we don't use that to store value --- Flow.Launcher.Infrastructure/UserSettings/Settings.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index ce07dc0ea21..34e86a3edf5 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -40,6 +40,8 @@ public string Language public bool UseGlyphIcons { get; set; } = true; public int CustomExplorerIndex { get; set; } = 0; + + [JsonIgnore] public CustomExplorerViewModel CustomExplorer { get => CustomExplorerList[CustomExplorerIndex < CustomExplorerList.Count ? CustomExplorerIndex : 0]; From 2ecf57e980c18f940c760e26bf02aebd13b7d498 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Thu, 11 Nov 2021 07:17:45 +1100 Subject: [PATCH 327/625] change the default theme for fresh install --- Flow.Launcher.Infrastructure/Constant.cs | 2 +- Flow.Launcher/App.xaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher.Infrastructure/Constant.cs b/Flow.Launcher.Infrastructure/Constant.cs index a5b89c30027..564e03638c4 100644 --- a/Flow.Launcher.Infrastructure/Constant.cs +++ b/Flow.Launcher.Infrastructure/Constant.cs @@ -33,7 +33,7 @@ public static class Constant public static readonly string QueryTextBoxIconImagePath = $"{ProgramDirectory}\\Images\\mainsearch.svg"; - public const string DefaultTheme = "Darker"; + public const string DefaultTheme = "Win11Light"; public const string Themes = "Themes"; diff --git a/Flow.Launcher/App.xaml b/Flow.Launcher/App.xaml index 13d88e1c6f9..34097aa863b 100644 --- a/Flow.Launcher/App.xaml +++ b/Flow.Launcher/App.xaml @@ -230,7 +230,7 @@ - + From 000a15e5747bed9d5984e40a74d0428f0ace280e Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 11 Nov 2021 08:06:37 +1100 Subject: [PATCH 328/625] remove commented out code --- Flow.Launcher/PriorityChangeWindow.xaml.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Flow.Launcher/PriorityChangeWindow.xaml.cs b/Flow.Launcher/PriorityChangeWindow.xaml.cs index 8f392f0a383..fe846e78b9b 100644 --- a/Flow.Launcher/PriorityChangeWindow.xaml.cs +++ b/Flow.Launcher/PriorityChangeWindow.xaml.cs @@ -62,7 +62,6 @@ private void btnDone_OnClick(object sender, RoutedEventArgs e) private void PriorityChangeWindow_Loaded(object sender, RoutedEventArgs e) { tbAction.Text = pluginViewModel.Priority.ToString(); - //OldPriority.Text = pluginViewModel.Priority.ToString(); tbAction.Focus(); } private void window_MouseDown(object sender, MouseButtonEventArgs e) /* for close hotkey popup */ From d3ece3a2e7e23abbb05cca68890faf3986b0dfcc Mon Sep 17 00:00:00 2001 From: Jeremy Date: Thu, 11 Nov 2021 08:15:13 +1100 Subject: [PATCH 329/625] revert changes to sln --- Flow.Launcher.sln | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher.sln b/Flow.Launcher.sln index 8e44ab421b5..21c3b47dc0a 100644 --- a/Flow.Launcher.sln +++ b/Flow.Launcher.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31903.59 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29806.167 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flow.Launcher.Test", "Flow.Launcher.Test\Flow.Launcher.Test.csproj", "{FF742965-9A80-41A5-B042-D6C7D3A21708}" ProjectSection(ProjectDependencies) = postProject @@ -163,11 +163,13 @@ Global {403B57F2-1856-4FC7-8A24-36AB346B763E}.Release|x86.ActiveCfg = Release|Any CPU {403B57F2-1856-4FC7-8A24-36AB346B763E}.Release|x86.Build.0 = Release|Any CPU {1EE20B48-82FB-48A2-8086-675D6DDAB4F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1EE20B48-82FB-48A2-8086-675D6DDAB4F0}.Debug|Any CPU.Build.0 = Debug|Any CPU {1EE20B48-82FB-48A2-8086-675D6DDAB4F0}.Debug|x64.ActiveCfg = Debug|Any CPU {1EE20B48-82FB-48A2-8086-675D6DDAB4F0}.Debug|x64.Build.0 = Debug|Any CPU {1EE20B48-82FB-48A2-8086-675D6DDAB4F0}.Debug|x86.ActiveCfg = Debug|Any CPU {1EE20B48-82FB-48A2-8086-675D6DDAB4F0}.Debug|x86.Build.0 = Debug|Any CPU {1EE20B48-82FB-48A2-8086-675D6DDAB4F0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1EE20B48-82FB-48A2-8086-675D6DDAB4F0}.Release|Any CPU.Build.0 = Release|Any CPU {1EE20B48-82FB-48A2-8086-675D6DDAB4F0}.Release|x64.ActiveCfg = Release|Any CPU {1EE20B48-82FB-48A2-8086-675D6DDAB4F0}.Release|x64.Build.0 = Release|Any CPU {1EE20B48-82FB-48A2-8086-675D6DDAB4F0}.Release|x86.ActiveCfg = Release|Any CPU @@ -210,11 +212,13 @@ Global {A3DCCBCA-ACC1-421D-B16E-210896234C26}.Release|x86.ActiveCfg = Release|Any CPU {A3DCCBCA-ACC1-421D-B16E-210896234C26}.Release|x86.Build.0 = Release|Any CPU {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0}.Debug|Any CPU.Build.0 = Debug|Any CPU {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0}.Debug|x64.ActiveCfg = Debug|Any CPU {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0}.Debug|x64.Build.0 = Debug|Any CPU {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0}.Debug|x86.ActiveCfg = Debug|Any CPU {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0}.Debug|x86.Build.0 = Debug|Any CPU {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0}.Release|Any CPU.Build.0 = Release|Any CPU {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0}.Release|x64.ActiveCfg = Release|Any CPU {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0}.Release|x64.Build.0 = Release|Any CPU {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0}.Release|x86.ActiveCfg = Release|Any CPU @@ -232,11 +236,13 @@ Global {9B130CC5-14FB-41FF-B310-0A95B6894C37}.Release|x86.ActiveCfg = Release|Any CPU {9B130CC5-14FB-41FF-B310-0A95B6894C37}.Release|x86.Build.0 = Release|Any CPU {59BD9891-3837-438A-958D-ADC7F91F6F7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {59BD9891-3837-438A-958D-ADC7F91F6F7E}.Debug|Any CPU.Build.0 = Debug|Any CPU {59BD9891-3837-438A-958D-ADC7F91F6F7E}.Debug|x64.ActiveCfg = Debug|Any CPU {59BD9891-3837-438A-958D-ADC7F91F6F7E}.Debug|x64.Build.0 = Debug|Any CPU {59BD9891-3837-438A-958D-ADC7F91F6F7E}.Debug|x86.ActiveCfg = Debug|Any CPU {59BD9891-3837-438A-958D-ADC7F91F6F7E}.Debug|x86.Build.0 = Debug|Any CPU {59BD9891-3837-438A-958D-ADC7F91F6F7E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {59BD9891-3837-438A-958D-ADC7F91F6F7E}.Release|Any CPU.Build.0 = Release|Any CPU {59BD9891-3837-438A-958D-ADC7F91F6F7E}.Release|x64.ActiveCfg = Release|Any CPU {59BD9891-3837-438A-958D-ADC7F91F6F7E}.Release|x64.Build.0 = Release|Any CPU {59BD9891-3837-438A-958D-ADC7F91F6F7E}.Release|x86.ActiveCfg = Release|Any CPU From 07905e8d9ce6c9976cbbd8b3a804a7fb0f9ba31f Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 11 Nov 2021 08:40:15 +1100 Subject: [PATCH 330/625] update api description comment --- Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs index 066188882ad..3abdaf01f4e 100644 --- a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs +++ b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs @@ -192,7 +192,7 @@ public interface IPublicAPI void SaveSettingJsonStorage() where T : new(); /// - /// Open Directory in explorer configured by user + /// Open directory in an explorer configured by user via Flow's Settings. The default is Windows Explorer /// /// Directory Path to open /// Extra FileName Info From d8b4050dd6a6350758fb889168dee30b66602a29 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 11 Nov 2021 08:42:16 +1100 Subject: [PATCH 331/625] remove summary --- Flow.Launcher/SelectFileManagerWindow.xaml.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml.cs b/Flow.Launcher/SelectFileManagerWindow.xaml.cs index c648f86ac50..4f6fb343911 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml.cs +++ b/Flow.Launcher/SelectFileManagerWindow.xaml.cs @@ -18,9 +18,6 @@ namespace Flow.Launcher { - /// - /// SelectFileManagerWindow.xaml에 대한 상호 작용 논리 - /// public partial class SelectFileManagerWindow : Window, INotifyPropertyChanged { private int selectedCustomExplorerIndex; From e09248fe0a11e498d841f1d472a7583c1d67f2ee Mon Sep 17 00:00:00 2001 From: Jeremy Date: Thu, 11 Nov 2021 08:50:02 +1100 Subject: [PATCH 332/625] bump version for plugins --- Plugins/Flow.Launcher.Plugin.Explorer/plugin.json | 2 +- Plugins/Flow.Launcher.Plugin.Program/plugin.json | 2 +- Plugins/Flow.Launcher.Plugin.Sys/plugin.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json b/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json index c525c001bee..8d5d97af172 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json @@ -10,7 +10,7 @@ "Name": "Explorer", "Description": "Search and manage files and folders. Explorer utilises Windows Index Search", "Author": "Jeremy Wu", - "Version": "1.9.1", + "Version": "1.10.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Explorer.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Program/plugin.json b/Plugins/Flow.Launcher.Plugin.Program/plugin.json index 5f762f7b6ea..cbcc00f2b36 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Program/plugin.json @@ -4,7 +4,7 @@ "Name": "Program", "Description": "Search programs in Flow.Launcher", "Author": "qianlifeng", - "Version": "1.6.1", + "Version": "1.7.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Program.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Sys/plugin.json b/Plugins/Flow.Launcher.Plugin.Sys/plugin.json index 826a1b7563b..42e8058e511 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Sys/plugin.json @@ -4,7 +4,7 @@ "Name": "System Commands", "Description": "Provide System related commands. e.g. shutdown,lock, setting etc.", "Author": "qianlifeng", - "Version": "1.4.1", + "Version": "1.5.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Sys.dll", From 994d7eba47500f840b48ecdd5bc139f7b885e3c7 Mon Sep 17 00:00:00 2001 From: DB p Date: Thu, 11 Nov 2021 23:53:54 +0900 Subject: [PATCH 333/625] - Add "%f" tip text and adjust string - Adjust Window Size --- Flow.Launcher/Languages/en.xaml | 5 +++-- Flow.Launcher/SelectFileManagerWindow.xaml | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 289aec337c4..64f87759df5 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -139,11 +139,12 @@ Select File Manager Please specify the file location of the file manager you using and add arguments if necessary. The default arguments is "%d", and a path is entered at that location. For example, If a command is required such as "totalcmd.exe /A c:\windows", Argument is /A "%d". + "%f" is an argument that represent the file path. It is used to emphasize the file/folder name when opening a specific file location in 3rd party file manager. This Argument is only available in the "Arg for File" item. If the file manager does not have that function, you can use "%d". File Manager Profile Name File Manager Path - Arguments For Folder - Arguments For File + Arg For Folder + Arg For File Change Priority diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml b/Flow.Launcher/SelectFileManagerWindow.xaml index 68e7b93b299..eba794c96ca 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml +++ b/Flow.Launcher/SelectFileManagerWindow.xaml @@ -42,6 +42,12 @@ Text="{DynamicResource fileManager_tips}" TextAlignment="Left" TextWrapping="WrapWithOverflow" /> + + + @@ -88,7 +94,7 @@ Orientation="Horizontal"> - + @@ -126,7 +132,7 @@ + Text="{DynamicResource fileManager_directory_arg}" + TextWrapping="WrapWithOverflow" /> + Text="{DynamicResource fileManager_file_arg}" + TextWrapping="WrapWithOverflow" /> Date: Fri, 12 Nov 2021 07:30:47 +1100 Subject: [PATCH 334/625] update wording --- Flow.Launcher/Languages/en.xaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 64f87759df5..5ca6bdbfd7a 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -138,8 +138,8 @@ Select File Manager - Please specify the file location of the file manager you using and add arguments if necessary. The default arguments is "%d", and a path is entered at that location. For example, If a command is required such as "totalcmd.exe /A c:\windows", Argument is /A "%d". - "%f" is an argument that represent the file path. It is used to emphasize the file/folder name when opening a specific file location in 3rd party file manager. This Argument is only available in the "Arg for File" item. If the file manager does not have that function, you can use "%d". + Please specify the file location of the file manager you using and add arguments if necessary. The default arguments is "%d", and a path is entered at that location. For example, If a command is required such as "totalcmd.exe /A c:\windows", argument is /A "%d". + "%f" is an argument that represent the file path. It is used to emphasize the file/folder name when opening a specific file location in 3rd party file manager. This argument is only available in the "Arg for File" item. If the file manager does not have that function, you can use "%d". File Manager Profile Name File Manager Path From 342bf306ef27465671cdd575658b96901938c5a2 Mon Sep 17 00:00:00 2001 From: DB p Date: Fri, 12 Nov 2021 06:20:43 +0900 Subject: [PATCH 335/625] - Add Slide Up Animation - Chnage Toggle/Hide Code for animation - Change Tray Open menu to toggle --- Flow.Launcher/MainWindow.xaml | 319 +++++++++++++++-------- Flow.Launcher/MainWindow.xaml.cs | 44 +++- Flow.Launcher/ViewModel/MainViewModel.cs | 19 +- 3 files changed, 271 insertions(+), 111 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index daea406db05..cf471beb743 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -1,105 +1,192 @@ - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - + + - + - - - + + + - - + + - + @@ -121,49 +208,69 @@ - + - - + - - - + + + - + - - - + + + - - - + + + - + - - - + + + - - - - + + + + diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 16e4be8a030..9b44c7b7806 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -196,7 +196,7 @@ private void InitializeNotifyIcon() Header = InternationalizationManager.Instance.GetTranslation("iconTrayExit") }; - open.Click += (o, e) => Visibility = Visibility.Visible; + open.Click += (o, e) => _viewModel.ToggleFlowLauncher(); settings.Click += (o, e) => App.API.OpenSettingDialog(); exit.Click += (o, e) => Close(); contextMenu.Items.Add(header); @@ -235,6 +235,48 @@ private void InitProgressbarAnimation() isProgressBarStoryboardPaused = true; } + public void WindowAnimator() + { + InitializePosition(); + Storyboard sb = new Storyboard(); + var da = new DoubleAnimation + { + From = 0, + To = 1, + Duration = TimeSpan.FromSeconds(0.2), + FillBehavior = FillBehavior.Stop + }; + + var da2 = new DoubleAnimation + { + From = Top + 8, + To = Top, + Duration = TimeSpan.FromSeconds(0.2), + FillBehavior = FillBehavior.Stop + }; + + var da3 = new DoubleAnimation + { + From = Left, + To = Left, + Duration = TimeSpan.FromSeconds(0.1), + FillBehavior = FillBehavior.Stop + }; + System.Diagnostics.Debug.WriteLine("Left: " + Left); + System.Diagnostics.Debug.WriteLine("Top: " + Top); + Storyboard.SetTargetProperty(da3, new PropertyPath(Window.LeftProperty)); + sb.Children.Add(da3); + Storyboard.SetTarget(da, this); + Storyboard.SetTargetProperty(da, new PropertyPath(Window.OpacityProperty)); + Storyboard.SetTargetProperty(da2, new PropertyPath(Window.TopProperty)); + + sb.Children.Add(da); + sb.Children.Add(da2); + + sb.Begin(FlowMainWindow); + } + + private void OnMouseDown(object sender, MouseButtonEventArgs e) { if (e.ChangedButton == MouseButton.Left) DragMove(); diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 547228ee33a..02f2908d2cc 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -380,6 +380,8 @@ private ResultsViewModel SelectedResults public Visibility ProgressBarVisibility { get; set; } public Visibility MainWindowVisibility { get; set; } + public double MainWindowOpacity { get; set; } = 1; + public bool WinToggleStatus { get; set; } = true; public double MainWindowWidth => _settings.WindowSize; @@ -708,9 +710,12 @@ private void SetOpenResultModifiers() public void ToggleFlowLauncher() { - if (MainWindowVisibility != Visibility.Visible) + if (WinToggleStatus != true) { MainWindowVisibility = Visibility.Visible; + ((MainWindow)Application.Current.MainWindow).WindowAnimator(); + WinToggleStatus = true; + MainWindowOpacity = 1; } else { @@ -720,24 +725,30 @@ public void ToggleFlowLauncher() public async void Hide() { + MainWindowOpacity = 0; switch (_settings.LastQueryMode) { case LastQueryMode.Empty: ChangeQueryText(string.Empty); - Application.Current.MainWindow.Opacity = 0; // Trick for no delay - await Task.Delay(100); - Application.Current.MainWindow.Opacity = 1; + MainWindowOpacity = 0; // Trick for no delay + await Task.Delay(100); //Time for change to opacity break; case LastQueryMode.Preserved: + MainWindowOpacity = 0; + await Task.Delay(100); LastQuerySelected = true; break; case LastQueryMode.Selected: + MainWindowOpacity = 0; + await Task.Delay(100); LastQuerySelected = false; break; default: throw new ArgumentException($"wrong LastQueryMode: <{_settings.LastQueryMode}>"); } + WinToggleStatus = false; MainWindowVisibility = Visibility.Collapsed; + } #endregion From a4e941b954aefe8cf900c3ac0e281e2d6cf94117 Mon Sep 17 00:00:00 2001 From: DB p Date: Fri, 12 Nov 2021 07:49:20 +0900 Subject: [PATCH 336/625] Change Property toggle base to Var from visibility --- Flow.Launcher/MainWindow.xaml.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 9b44c7b7806..a0662e9edd1 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -52,6 +52,8 @@ public MainWindow() private async void OnClosing(object sender, CancelEventArgs e) { + _settings.WindowTop = Top; + _settings.WindowLeft = Left; _notifyIcon.Visible = false; _viewModel.Save(); e.Cancel = true; @@ -79,9 +81,9 @@ private void OnLoaded(object sender, RoutedEventArgs _) { switch (e.PropertyName) { - case nameof(MainViewModel.MainWindowVisibility): + case nameof(MainViewModel.WinToggleStatus): { - if (_viewModel.MainWindowVisibility == Visibility.Visible) + if (_viewModel.WinToggleStatus == true) { Activate(); QueryTextBox.Focus(); @@ -157,7 +159,7 @@ private void InitializePosition() Top = WindowTop(); Left = WindowLeft(); _settings.WindowTop = Top; - _settings.WindowLeft = Left; + _settings.WindowLeft = Left; } private void UpdateNotifyIconText() @@ -237,7 +239,6 @@ private void InitProgressbarAnimation() public void WindowAnimator() { - InitializePosition(); Storyboard sb = new Storyboard(); var da = new DoubleAnimation { From 5a969b212f1b178ffade0df888aa4e983c5ea717 Mon Sep 17 00:00:00 2001 From: DB p Date: Fri, 12 Nov 2021 09:18:16 +0900 Subject: [PATCH 337/625] Add InitPosition in WindowAnimator --- Flow.Launcher/MainWindow.xaml.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index a0662e9edd1..4b717298d8a 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -239,6 +239,7 @@ private void InitProgressbarAnimation() public void WindowAnimator() { + InitializePosition(); Storyboard sb = new Storyboard(); var da = new DoubleAnimation { From f1222f948f1eb81a01823cfaeedf30e7c2d6f4d5 Mon Sep 17 00:00:00 2001 From: DB p Date: Fri, 12 Nov 2021 12:14:37 +0900 Subject: [PATCH 338/625] Fix Positioning when turn on remember last launch position --- Flow.Launcher/MainWindow.xaml.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 4b717298d8a..61035da741d 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -239,7 +239,8 @@ private void InitProgressbarAnimation() public void WindowAnimator() { - InitializePosition(); + //InitializePosition(); + UpdatePosition(); Storyboard sb = new Storyboard(); var da = new DoubleAnimation { From 6d8ee6411775e4dfa7341601285820dfb0542379 Mon Sep 17 00:00:00 2001 From: DB p Date: Fri, 12 Nov 2021 13:02:59 +0900 Subject: [PATCH 339/625] - Change trigger animation Timing - Change HideOnStartup using Animator --- Flow.Launcher/App.xaml.cs | 10 +++++++++- Flow.Launcher/ViewModel/MainViewModel.cs | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/App.xaml.cs b/Flow.Launcher/App.xaml.cs index 8c869e9418a..52faf8658ac 100644 --- a/Flow.Launcher/App.xaml.cs +++ b/Flow.Launcher/App.xaml.cs @@ -101,7 +101,15 @@ await Stopwatch.NormalAsync("|App.OnStartup|Startup cost", async () => API.SaveAppAllSettings(); - _mainVM.MainWindowVisibility = _settings.HideOnStartup ? Visibility.Hidden : Visibility.Visible; + if (_settings.HideOnStartup) + { + _mainVM.Hide(); + } + else + { + window.WindowAnimator(); + } + Log.Info("|App.OnStartup|End Flow Launcher startup ---------------------------------------------------- "); }); } diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 02f2908d2cc..4509d1fce90 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -713,8 +713,8 @@ public void ToggleFlowLauncher() if (WinToggleStatus != true) { MainWindowVisibility = Visibility.Visible; - ((MainWindow)Application.Current.MainWindow).WindowAnimator(); WinToggleStatus = true; + ((MainWindow)Application.Current.MainWindow).WindowAnimator(); MainWindowOpacity = 1; } else From 30964e1fa6e6faf1e3b755c9ed2316fde4dc9ca1 Mon Sep 17 00:00:00 2001 From: kubalav Date: Fri, 12 Nov 2021 13:27:49 +0100 Subject: [PATCH 340/625] Update Slovak translation --- Flow.Launcher/Languages/sk.xaml | 60 +++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 22 deletions(-) diff --git a/Flow.Launcher/Languages/sk.xaml b/Flow.Launcher/Languages/sk.xaml index 4014d215fcc..8c0a96f983b 100644 --- a/Flow.Launcher/Languages/sk.xaml +++ b/Flow.Launcher/Languages/sk.xaml @@ -1,7 +1,8 @@ - - + Nepodarilo sa registrovať klávesovú skratku {0} Nepodarilo sa spustiť {0} Neplatný formát súboru pre plugin Flow Launchera @@ -15,11 +16,11 @@ Ukončiť Zavrieť - + Nastavenia Flow Launchera Všeobecné Prenosný režim - Uloží všetky nastavenia a používateľské údaje do jedného centrálneho priečinka (Užitočné pri vyberateľných diskoch a cloudových službách). + Uloží všetky nastavenia a používateľské údaje do jedného priečinka (Užitočné pri vyberateľných diskoch a cloudových službách). Spustiť Flow Launcher po štarte systému Schovať Flow Launcher po strate fokusu Nezobrazovať upozornenia na novú verziu @@ -33,6 +34,8 @@ Max. výsledkov Ignorovať klávesové skratky v režime na celú obrazovku Zakázať aktiváciu Flow Launchera, keď je aktívna aplikácia na celú obrazovku (odporúčané pre hry). + Predvolený správca súborov + Vyberte správcu súborov, ktorý sa má použiť pri otváraní priečinka. Priečinok s Pythonom Automatická aktualizácia Vybrať @@ -44,7 +47,7 @@ Umožňuje vyhľadávanie pomocou Pinyin. Pinyin je štandardný systém romanizovaného pravopisu pre transliteráciu čínštiny Efekt tieňa nie je povolený, kým má aktuálny motív povolený efekt rozostrenia - + Pluginy Nájsť ďalšie pluginy Zap. @@ -62,12 +65,12 @@ Čas dopytu: - + Repozitár pluginov Obnoviť Inštalovať - + Motív Galéria motívov Ako vytvoriť motív @@ -81,12 +84,12 @@ Priečinok s motívmi Otvoriť priečinok s motívmi - + Klávesové skratky Klávesová skratka pre Flow Launcher Zadajte skratku na zobrazenie/skrytie Flow Launchera. - Otvoriť výsledok modifikačným klávesom - Vyberte modifikačný kláves na otvorenie výsledku pomocou klávesnice. + Modifikačný kláves na otvorenie výsledkov + Vyberte modifikačný kláves na otvorenie vybraného výsledku pomocou klávesnice. Zobraziť klávesovú skratku Zobrazí klávesovú skratku spolu s výsledkami. Vlastná klávesová skratka na vyhľadávanie @@ -98,10 +101,11 @@ Ste si istý, že chcete odstrániť klávesovú skratku {0} pre plugin? Tieňový efekt v poli vyhľadávania Tieňový efekt významne využíva GPU. Neodporúča sa, ak je výkon počítača obmedzený. + Veľkosť šírky okna Použiť ikony Segoe Fluent Použiť ikony Segoe Fluent, ak sú podporované - + HTTP Proxy Povoliť HTTP Proxy HTTP Server @@ -117,7 +121,7 @@ Nastavenie proxy je v poriadku Pripojenie proxy zlyhalo - + O aplikácii Webstránka Verzia @@ -126,18 +130,28 @@ Je dostupná nová verzia {0}, chcete reštartovať Flow Launcher, aby sa mohol aktualizovať? Kontrola aktualizácií zlyhala, prosím, skontrolujte pripojenie na internet a nastavenie proxy k api.github.com. - Sťahovanie aktualizácií zlyhalo, skontrolujte pripojenie na internet a nastavenie proxy k github-cloud.s3.amazonaws.com, + Sťahovanie aktualizácií zlyhalo, skontrolujte pripojenie na internet a nastavenie proxy k github-cloud.s3.amazonaws.com, alebo prejdite na https://github.com/Flow-Launcher/Flow.Launcher/releases pre manuálne stiahnutie aktualizácie. Poznámky k vydaniu Tipy na používanie: - + + Vyberte správcu súborov + Zadajte umiestnenie súboru správcu súborov, ktorého používate, a v prípade potreby pridajte argumenty. Predvolené argumenty sú "%d" a cesta sa zadáva na tomto mieste. Napríklad, ak sa vyžaduje príkaz, ako napríklad "totalcmd.exe /A c:\windows", argument je /A "%d". + "%f" je argument, ktorý predstavuje cestu k súboru. Používa sa na zvýraznenie názvu súboru/priečinka pri otváraní konkrétneho umiestnenia súboru v správcovi súborov tretej strany. Tento argument je k dispozícii len v položke "Arg pre súbor". Ak správca súborov nemá túto funkciu, môžete použiť "%d". + Správca súborov + Názov profilu + Cesta k správcovi súborov + Arg. pre priečinok + Arg. pre súbor + + Zmena priority Vyššie číslo znamená, že výsledok bude vyššie. Skúste nastaviť napr. 5. Ak chcete, aby boli výsledky nižšie ako ktorékoľvek iné doplnky, zadajte záporné číslo Prosím, zadajte platné číslo pre prioritu! - + Stará skratka akcie Nová skratka akcie Zrušiť @@ -149,7 +163,7 @@ Úspešne dokončené Zadajte skratku akcie, ktorá je potrebná na spustenie pluginu. Ak nechcete zadať skratku akcie, použite *. V tom prípade plugin funguje bez kľúčových slov. - + Klávesová skratka pre vlastné vyhľadávanie Stlačením klávesovej skratky sa automaticky vloží zadaný výraz. Náhľad @@ -157,10 +171,10 @@ Neplatná klávesová skratka pluginu Aktualizovať - + Klávesová skratka nedostupná - + Verzia Čas Prosím, napíšte nám, ako došlo k pádu aplikácie, aby sme to mohli opraviť @@ -176,16 +190,18 @@ Odoslanie hlásenia zlyhalo Flow Launcher zaznamenal chybu - + Čakajte, prosím… - + Kontrolujú sa aktualizácie Už máte najnovšiu verziu Flow Launchera Bola nájdená aktualizácia Aktualizuje sa… - Flow Launcher nedokázal presunúť používateľské údaje do aktualizovanej verzie. - Prosím, presuňte profilový priečinok data z {0} do {1} + + Flow Launcher nedokázal presunúť používateľské údaje do aktualizovanej verzie. + Prosím, presuňte profilový priečinok data z {0} do {1} + Nová aktualizácia Je dostupná nová verzia Flow Launchera {0} Počas inštalácie aktualizácií došlo k chybe From 037c3439b5b3d6f54e1e1a3ecbdb30d9f4508456 Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 02:09:25 +0900 Subject: [PATCH 341/625] - Change InitializePosition for load setting - add Save Position in onclosing - Remove Debug Log write --- Flow.Launcher/MainWindow.xaml.cs | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 61035da741d..02a21a44cd9 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -87,7 +87,7 @@ private void OnLoaded(object sender, RoutedEventArgs _) { Activate(); QueryTextBox.Focus(); - UpdatePosition(); + //UpdatePosition(); _settings.ActivateTimes++; if (!_viewModel.LastQuerySelected) { @@ -156,10 +156,22 @@ private void OnLoaded(object sender, RoutedEventArgs _) private void InitializePosition() { + /* Top = WindowTop(); Left = WindowLeft(); _settings.WindowTop = Top; _settings.WindowLeft = Left; + */ + if (_settings.RememberLastLaunchLocation) + { + Left = _settings.WindowLeft; + Top = _settings.WindowTop; + } + else + { + Left = WindowLeft(); + Top = WindowTop(); + } } private void UpdateNotifyIconText() @@ -265,17 +277,13 @@ public void WindowAnimator() Duration = TimeSpan.FromSeconds(0.1), FillBehavior = FillBehavior.Stop }; - System.Diagnostics.Debug.WriteLine("Left: " + Left); - System.Diagnostics.Debug.WriteLine("Top: " + Top); Storyboard.SetTargetProperty(da3, new PropertyPath(Window.LeftProperty)); - sb.Children.Add(da3); Storyboard.SetTarget(da, this); Storyboard.SetTargetProperty(da, new PropertyPath(Window.OpacityProperty)); Storyboard.SetTargetProperty(da2, new PropertyPath(Window.TopProperty)); - sb.Children.Add(da); sb.Children.Add(da2); - + sb.Children.Add(da3); sb.Begin(FlowMainWindow); } From 4a8696268d111dd744f0ea3399b6ae030be5b353 Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 04:54:17 +0900 Subject: [PATCH 342/625] - Fix RememberLastPosition when Re-Excute --- Flow.Launcher/MainWindow.xaml | 1 + Flow.Launcher/MainWindow.xaml.cs | 33 +++++++++++++++++--------------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index cf471beb743..359ddc7e635 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -26,6 +26,7 @@ PreviewKeyDown="OnKeyDown" ResizeMode="NoResize" ShowInTaskbar="False" + SizeChanged="OnSizeChanged" SizeToContent="Height" Style="{DynamicResource WindowStyle}" Topmost="True" diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 02a21a44cd9..b17749e6479 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -42,6 +42,7 @@ public MainWindow(Settings settings, MainViewModel mainVM) DataContext = mainVM; _viewModel = mainVM; _settings = settings; + InitializePosition(); InitializeComponent(); } @@ -69,10 +70,8 @@ private void OnLoaded(object sender, RoutedEventArgs _) { // show notify icon when flowlauncher is hidden InitializeNotifyIcon(); - WindowsInteropHelper.DisableControlBox(this); InitProgressbarAnimation(); - InitializePosition(); // since the default main window visibility is visible // so we need set focus during startup QueryTextBox.Focus(); @@ -85,9 +84,9 @@ private void OnLoaded(object sender, RoutedEventArgs _) { if (_viewModel.WinToggleStatus == true) { + UpdatePosition(); Activate(); QueryTextBox.Focus(); - //UpdatePosition(); _settings.ActivateTimes++; if (!_viewModel.LastQuerySelected) { @@ -156,21 +155,15 @@ private void OnLoaded(object sender, RoutedEventArgs _) private void InitializePosition() { - /* - Top = WindowTop(); - Left = WindowLeft(); - _settings.WindowTop = Top; - _settings.WindowLeft = Left; - */ if (_settings.RememberLastLaunchLocation) { - Left = _settings.WindowLeft; - Top = _settings.WindowTop; + this.Top = this._settings.WindowTop; + this.Left = this._settings.WindowLeft; } else { - Left = WindowLeft(); - Top = WindowTop(); + this.Left = WindowLeft(); + this.Top = WindowTop(); } } @@ -251,7 +244,6 @@ private void InitProgressbarAnimation() public void WindowAnimator() { - //InitializePosition(); UpdatePosition(); Storyboard sb = new Storyboard(); var da = new DoubleAnimation @@ -277,10 +269,10 @@ public void WindowAnimator() Duration = TimeSpan.FromSeconds(0.1), FillBehavior = FillBehavior.Stop }; - Storyboard.SetTargetProperty(da3, new PropertyPath(Window.LeftProperty)); Storyboard.SetTarget(da, this); Storyboard.SetTargetProperty(da, new PropertyPath(Window.OpacityProperty)); Storyboard.SetTargetProperty(da2, new PropertyPath(Window.TopProperty)); + Storyboard.SetTargetProperty(da3, new PropertyPath(Window.LeftProperty)); sb.Children.Add(da); sb.Children.Add(da2); sb.Children.Add(da3); @@ -328,6 +320,7 @@ private void OnContextMenusForSettingsClick(object sender, RoutedEventArgs e) private void OnDeactivated(object sender, EventArgs e) { + _viewModel.Save(); if (_settings.HideWhenDeactive) { _viewModel.Hide(); @@ -348,6 +341,16 @@ private void UpdatePosition() } } + private void OnSizeChanged(object sender, SizeChangedEventArgs e) + { + if (_settings.RememberLastLaunchLocation) + { + return; + _settings.WindowLeft = Left; + _settings.WindowTop = Top; + } + } + private void OnLocationChanged(object sender, EventArgs e) { if (_settings.RememberLastLaunchLocation) From 6744e21775cc9b5cc70e5cc0f3c1061d1a804bdb Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sat, 13 Nov 2021 14:48:46 -0600 Subject: [PATCH 343/625] Remove some unused code --- Flow.Launcher/MainWindow.xaml | 1 - Flow.Launcher/MainWindow.xaml.cs | 24 ++++-------------------- 2 files changed, 4 insertions(+), 21 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index 359ddc7e635..cf471beb743 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -26,7 +26,6 @@ PreviewKeyDown="OnKeyDown" ResizeMode="NoResize" ShowInTaskbar="False" - SizeChanged="OnSizeChanged" SizeToContent="Height" Style="{DynamicResource WindowStyle}" Topmost="True" diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index b17749e6479..e6dc377a451 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -11,16 +11,11 @@ using Flow.Launcher.Helper; using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.ViewModel; -using Microsoft.AspNetCore.Authorization; -using Application = System.Windows.Application; using Screen = System.Windows.Forms.Screen; using ContextMenuStrip = System.Windows.Forms.ContextMenuStrip; -using DataFormats = System.Windows.DataFormats; using DragEventArgs = System.Windows.DragEventArgs; using KeyEventArgs = System.Windows.Input.KeyEventArgs; -using MessageBox = System.Windows.MessageBox; using NotifyIcon = System.Windows.Forms.NotifyIcon; -using System.Windows.Interop; namespace Flow.Launcher { @@ -149,21 +144,19 @@ private void OnLoaded(object sender, RoutedEventArgs _) break; } }; - - InitializePosition(); } private void InitializePosition() { if (_settings.RememberLastLaunchLocation) { - this.Top = this._settings.WindowTop; - this.Left = this._settings.WindowLeft; + Top = _settings.WindowTop; + Left = _settings.WindowLeft; } else { - this.Left = WindowLeft(); - this.Top = WindowTop(); + Left = WindowLeft(); + Top = WindowTop(); } } @@ -341,15 +334,6 @@ private void UpdatePosition() } } - private void OnSizeChanged(object sender, SizeChangedEventArgs e) - { - if (_settings.RememberLastLaunchLocation) - { - return; - _settings.WindowLeft = Left; - _settings.WindowTop = Top; - } - } private void OnLocationChanged(object sender, EventArgs e) { From ca2d696791d676f7c584af0b1ee14b8ec7e63bd8 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sat, 13 Nov 2021 15:16:02 -0600 Subject: [PATCH 344/625] Remove redundant animation and potential position change --- Flow.Launcher/MainWindow.xaml.cs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index e6dc377a451..db38f0fadf4 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -29,6 +29,7 @@ public partial class MainWindow private NotifyIcon _notifyIcon; private ContextMenu contextMenu; private MainViewModel _viewModel; + private bool _animating; #endregion @@ -37,8 +38,8 @@ public MainWindow(Settings settings, MainViewModel mainVM) DataContext = mainVM; _viewModel = mainVM; _settings = settings; - InitializePosition(); InitializeComponent(); + InitializePosition(); } public MainWindow() @@ -180,7 +181,7 @@ private void InitializeNotifyIcon() var header = new MenuItem { - Header = "Flow Launcher", + Header = "Flow Launcher", IsEnabled = false }; var open = new MenuItem @@ -237,6 +238,10 @@ private void InitProgressbarAnimation() public void WindowAnimator() { + if (_animating) + return; + + _animating = true; UpdatePosition(); Storyboard sb = new Storyboard(); var da = new DoubleAnimation @@ -269,6 +274,7 @@ public void WindowAnimator() sb.Children.Add(da); sb.Children.Add(da2); sb.Children.Add(da3); + sb.Completed += (_, _) => _animating = false; sb.Begin(FlowMainWindow); } @@ -322,6 +328,9 @@ private void OnDeactivated(object sender, EventArgs e) private void UpdatePosition() { + if (_animating) + return; + if (_settings.RememberLastLaunchLocation) { Left = _settings.WindowLeft; @@ -337,6 +346,8 @@ private void UpdatePosition() private void OnLocationChanged(object sender, EventArgs e) { + if (_animating) + return; if (_settings.RememberLastLaunchLocation) { _settings.WindowLeft = Left; From 4ded458abae0dd35df6da342c02c33f931924dbc Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sat, 13 Nov 2021 15:37:23 -0600 Subject: [PATCH 345/625] increase platform required for win10 notification --- Flow.Launcher/Notification.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/Notification.cs b/Flow.Launcher/Notification.cs index 2c82e14516f..d8f9fd45e44 100644 --- a/Flow.Launcher/Notification.cs +++ b/Flow.Launcher/Notification.cs @@ -11,8 +11,8 @@ internal static class Notification [System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "")] public static void Show(string title, string subTitle, string iconPath) { - var legacy = Environment.OSVersion.Version.Major < 10; - // Handle notification for win7/8 + var legacy = Environment.OSVersion.Version.Build < 19041; + // Handle notification for win7/8/early win10 if (legacy) { LegacyShow(title, subTitle, iconPath); From 62eb1b6cff052df66a3e1540195581002187aa6c Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 07:45:47 +0900 Subject: [PATCH 346/625] - Add Sound - Add Sound/Animation in Setting - Add related String --- .../UserSettings/Settings.cs | 3 + Flow.Launcher/Languages/en.xaml | 4 + Flow.Launcher/MainWindow.xaml.cs | 73 +++++------ Flow.Launcher/Resources/open.wav | Bin 0 -> 4784 bytes Flow.Launcher/SettingWindow.xaml | 119 ++++++++++++++---- Flow.Launcher/ViewModel/MainViewModel.cs | 7 ++ .../ViewModel/SettingWindowViewModel.cs | 12 ++ 7 files changed, 159 insertions(+), 59 deletions(-) create mode 100644 Flow.Launcher/Resources/open.wav diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 5f9082fe935..d0351af5116 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -37,6 +37,9 @@ public string Language public string ResultFontStretch { get; set; } public bool UseGlyphIcons { get; set; } = true; + public bool UseAnimation { get; set; } = true; + public bool UseSound { get; set; } = false; + /// /// when false Alphabet static service will always return empty results diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 1cb203515a3..9721ad86981 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -80,6 +80,10 @@ Fail to load theme {0}, fallback to default theme Theme Folder Open Theme Folder + Sound Effect + Play a small sound when window open. + Animation + Use Animation in UI. Hotkey diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index db38f0fadf4..2d8e2f82292 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -238,44 +238,47 @@ private void InitProgressbarAnimation() public void WindowAnimator() { - if (_animating) - return; + if (_settings.UseAnimation) + { + if (_animating) + return; - _animating = true; - UpdatePosition(); - Storyboard sb = new Storyboard(); - var da = new DoubleAnimation - { - From = 0, - To = 1, - Duration = TimeSpan.FromSeconds(0.2), - FillBehavior = FillBehavior.Stop - }; + _animating = true; + UpdatePosition(); + Storyboard sb = new Storyboard(); + var da = new DoubleAnimation + { + From = 0, + To = 1, + Duration = TimeSpan.FromSeconds(0.2), + FillBehavior = FillBehavior.Stop + }; - var da2 = new DoubleAnimation - { - From = Top + 8, - To = Top, - Duration = TimeSpan.FromSeconds(0.2), - FillBehavior = FillBehavior.Stop - }; + var da2 = new DoubleAnimation + { + From = Top + 8, + To = Top, + Duration = TimeSpan.FromSeconds(0.2), + FillBehavior = FillBehavior.Stop + }; - var da3 = new DoubleAnimation - { - From = Left, - To = Left, - Duration = TimeSpan.FromSeconds(0.1), - FillBehavior = FillBehavior.Stop - }; - Storyboard.SetTarget(da, this); - Storyboard.SetTargetProperty(da, new PropertyPath(Window.OpacityProperty)); - Storyboard.SetTargetProperty(da2, new PropertyPath(Window.TopProperty)); - Storyboard.SetTargetProperty(da3, new PropertyPath(Window.LeftProperty)); - sb.Children.Add(da); - sb.Children.Add(da2); - sb.Children.Add(da3); - sb.Completed += (_, _) => _animating = false; - sb.Begin(FlowMainWindow); + var da3 = new DoubleAnimation + { + From = Left, + To = Left, + Duration = TimeSpan.FromSeconds(0.1), + FillBehavior = FillBehavior.Stop + }; + Storyboard.SetTarget(da, this); + Storyboard.SetTargetProperty(da, new PropertyPath(Window.OpacityProperty)); + Storyboard.SetTargetProperty(da2, new PropertyPath(Window.TopProperty)); + Storyboard.SetTargetProperty(da3, new PropertyPath(Window.LeftProperty)); + sb.Children.Add(da); + sb.Children.Add(da2); + sb.Children.Add(da3); + sb.Completed += (_, _) => _animating = false; + sb.Begin(FlowMainWindow); + } } diff --git a/Flow.Launcher/Resources/open.wav b/Flow.Launcher/Resources/open.wav new file mode 100644 index 0000000000000000000000000000000000000000..c3e0619975cac92469bbfa0b64c66f046c2ad767 GIT binary patch literal 4784 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 literal 0 HcmV?d00001 diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index e69b26f6345..e49465176cf 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -1388,11 +1388,15 @@ TextAlignment="left" /> - - + + @@ -1470,26 +1474,29 @@ - - + + - + @@ -1749,6 +1756,70 @@ + + + + + + + + + + + +  + + + + + + + + + + + + +  + + + + + + diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 4509d1fce90..6e1befeaf46 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -5,6 +5,7 @@ using System.Threading.Tasks; using System.Threading.Tasks.Dataflow; using System.Windows; +using System.Windows.Media; using System.Windows.Input; using Flow.Launcher.Core.Plugin; using Flow.Launcher.Core.Resource; @@ -712,6 +713,12 @@ public void ToggleFlowLauncher() { if (WinToggleStatus != true) { + if (_settings.UseSound) + { + MediaPlayer media = new MediaPlayer(); + media.Open(new Uri(AppDomain.CurrentDomain.BaseDirectory + "Resources\\open.wav")); + media.Play(); + } MainWindowVisibility = Visibility.Visible; WinToggleStatus = true; ((MainWindow)Application.Current.MainWindow).WindowAnimator(); diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs index 4947ca38039..773c4733c34 100644 --- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs +++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs @@ -328,6 +328,18 @@ public bool UseGlyphIcons set => Settings.UseGlyphIcons = value; } + public bool UseAnimation + { + get => Settings.UseAnimation; + set => Settings.UseAnimation = value; + } + + public bool UseSound + { + get => Settings.UseSound; + set => Settings.UseSound = value; + } + public Brush PreviewBackground { get From 15266f25853409609ea237d2af3f5ec4131d68bd Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 09:13:56 +0900 Subject: [PATCH 347/625] - Add time for hide when open setting (using context menu) - Adjust String --- Flow.Launcher/Languages/en.xaml | 51 +++++++++++++++++--------------- Flow.Launcher/MainWindow.xaml.cs | 10 ++++--- 2 files changed, 33 insertions(+), 28 deletions(-) diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 9721ad86981..416773c5469 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -1,7 +1,8 @@ - - + + Failed to register hotkey: {0} Could not start {0} Invalid Flow Launcher plugin file format @@ -15,7 +16,7 @@ Exit Close - + Flow Launcher Settings General Portable Mode @@ -44,7 +45,7 @@ Allows using Pinyin to search. Pinyin is the standard system of romanized spelling for translating Chinese Shadow effect is not allowed while current theme has blur effect enabled - + Plugins Find more plugins On @@ -62,12 +63,12 @@ Query time: - + Plugin Store Refresh Install - + Theme Theme Gallery How to create a theme @@ -81,11 +82,11 @@ Theme Folder Open Theme Folder Sound Effect - Play a small sound when window open. + Play a small sound when window open Animation - Use Animation in UI. + Use Animation in UI - + Hotkey Flow Launcher Hotkey Enter shortcut to show/hide Flow Launcher. @@ -106,7 +107,7 @@ Use Segoe Fluent Icons Use Segoe Fluent Icons for query results where supported - + HTTP Proxy Enable HTTP Proxy HTTP Server @@ -122,7 +123,7 @@ Proxy configured correctly Proxy connection failed - + About Website Version @@ -131,18 +132,18 @@ New version {0} is available, would you like to restart Flow Launcher to use the update? Check updates failed, please check your connection and proxy settings to api.github.com. - Download updates failed, please check your connection and proxy settings to github-cloud.s3.amazonaws.com, + Download updates failed, please check your connection and proxy settings to github-cloud.s3.amazonaws.com, or go to https://github.com/Flow-Launcher/Flow.Launcher/releases to download updates manually. Release Notes Usage Tips: - + Change Priority Greater the number, the higher the result will be ranked. Try setting it as 5. If you want the results to be lower than any other plugin's, provide a negative number Please provide an valid integer for Priority! - + Old Action Keyword New Action Keyword Cancel @@ -152,9 +153,9 @@ This new Action Keyword is already assigned to another plugin, please choose a different one Success Completed successfully - Enter the action keyword you need to start the plug-in. Use * if you don't want to specify an action keyword. In the case, The plug-in works without keywords. + Enter the action keyword you need to start the plug-in. Use * if you don't want to specify an action keyword. In the case, The plug-in works without keywords. - + Custom Query Hotkey Press the custom hotkey to automatically insert the specified query. Preview @@ -162,10 +163,10 @@ Invalid plugin hotkey Update - + Hotkey Unavailable - + Version Time Please tell us how application crashed so we can fix it @@ -181,16 +182,18 @@ Failed to send report Flow Launcher got an error - + Please wait... - + Checking for new update You already have the latest Flow Launcher version Update found Updating... - Flow Launcher was not able to move your user profile data to the new update version. - Please manually move your profile data folder from {0} to {1} + + Flow Launcher was not able to move your user profile data to the new update version. + Please manually move your profile data folder from {0} to {1} + New Update New Flow Launcher release {0} is now available An error occurred while trying to install software updates diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 2d8e2f82292..bae41788ce4 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -250,7 +250,7 @@ public void WindowAnimator() { From = 0, To = 1, - Duration = TimeSpan.FromSeconds(0.2), + Duration = TimeSpan.FromSeconds(0.18), FillBehavior = FillBehavior.Stop }; @@ -258,7 +258,7 @@ public void WindowAnimator() { From = Top + 8, To = Top, - Duration = TimeSpan.FromSeconds(0.2), + Duration = TimeSpan.FromSeconds(0.18), FillBehavior = FillBehavior.Stop }; @@ -266,7 +266,7 @@ public void WindowAnimator() { From = Left, To = Left, - Duration = TimeSpan.FromSeconds(0.1), + Duration = TimeSpan.FromSeconds(0.18), FillBehavior = FillBehavior.Stop }; Storyboard.SetTarget(da, this); @@ -314,8 +314,10 @@ private void OnPreviewDragOver(object sender, DragEventArgs e) e.Handled = true; } - private void OnContextMenusForSettingsClick(object sender, RoutedEventArgs e) + private async void OnContextMenusForSettingsClick(object sender, RoutedEventArgs e) { + _viewModel.Hide(); + await Task.Delay(100); App.API.OpenSettingDialog(); } From 42f1b574276be0304769e1c3882386743196e085 Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 11:30:25 +0900 Subject: [PATCH 348/625] - Change Setting Window Size to responsive --- Flow.Launcher/SettingWindow.xaml | 2 +- Flow.Launcher/SettingWindow.xaml.cs | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index e49465176cf..550b3e85d40 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -14,7 +14,7 @@ xmlns:vm="clr-namespace:Flow.Launcher.ViewModel" Title="{DynamicResource flowlauncher_settings}" Width="1000" - Height="700" + Height="650" MinWidth="900" MinHeight="600" d:DataContext="{d:DesignInstance vm:SettingWindowViewModel}" diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index 203248ad658..0aa6471467c 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -15,6 +15,7 @@ using Flow.Launcher.Helper; using System.Windows.Controls; using Flow.Launcher.Core.ExternalPlugins; +using Screen = System.Windows.Forms.Screen; namespace Flow.Launcher { @@ -44,6 +45,15 @@ private void OnLoaded(object sender, RoutedEventArgs e) HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource; HwndTarget hwndTarget = hwndSource.CompositionTarget; hwndTarget.RenderMode = RenderMode.SoftwareOnly; + + var screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position); + var dip1 = WindowsInteropHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Y); + var dip2 = WindowsInteropHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Height); + var workingHeight = dip2.Y * 0.8; + var top = (dip2.Y / 2) - (workingHeight / 2); + this.Height = workingHeight; + this.Top = top; + } private void OnAutoStartupChecked(object sender, RoutedEventArgs e) From 838d6c5571b2263543ad6d721264859aa9d6c681 Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 11:32:39 +0900 Subject: [PATCH 349/625] Remove Left Positioning Code in animation --- Flow.Launcher/MainWindow.xaml.cs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index bae41788ce4..07a18bc803a 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -261,21 +261,11 @@ public void WindowAnimator() Duration = TimeSpan.FromSeconds(0.18), FillBehavior = FillBehavior.Stop }; - - var da3 = new DoubleAnimation - { - From = Left, - To = Left, - Duration = TimeSpan.FromSeconds(0.18), - FillBehavior = FillBehavior.Stop - }; Storyboard.SetTarget(da, this); Storyboard.SetTargetProperty(da, new PropertyPath(Window.OpacityProperty)); Storyboard.SetTargetProperty(da2, new PropertyPath(Window.TopProperty)); - Storyboard.SetTargetProperty(da3, new PropertyPath(Window.LeftProperty)); sb.Children.Add(da); sb.Children.Add(da2); - sb.Children.Add(da3); sb.Completed += (_, _) => _animating = false; sb.Begin(FlowMainWindow); } From b17f12b99ae072c9e5a887674305b93f651ab4cb Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 11:43:03 +0900 Subject: [PATCH 350/625] change wav file to resource --- Flow.Launcher/Flow.Launcher.csproj | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Flow.Launcher/Flow.Launcher.csproj b/Flow.Launcher/Flow.Launcher.csproj index fd2f5f1d942..86156c59aee 100644 --- a/Flow.Launcher/Flow.Launcher.csproj +++ b/Flow.Launcher/Flow.Launcher.csproj @@ -77,6 +77,7 @@ Designer PreserveNewest + PreserveNewest @@ -104,6 +105,10 @@ + + + + From 37858a4b4ed0456e8338d5f61c21613d5fa2dd4f Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 13:35:53 +0900 Subject: [PATCH 351/625] Change Sound FIle --- Flow.Launcher/Resources/open.wav | Bin 4784 -> 80116 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Flow.Launcher/Resources/open.wav b/Flow.Launcher/Resources/open.wav index c3e0619975cac92469bbfa0b64c66f046c2ad767..4f13724f7093ad2d66c595cf8a672b6dabf008ba 100644 GIT binary patch literal 80116 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 z zD4b{jQZYLhfi%gnvHGlqUNBt(P=bAR1OoZ5oC02Me_gXOlY)0`VgPfkqORn+WR&1oa); zU?S@Kn&Wm@5IBj0=k&|Zhm^~9?K;5Q(|X7kZT{ZdC5-^zz)DXVY@y(>z5_*{B&jMAan#(tzqg$7(d#mRgXWNC(|>IV);=F(4=Uom_^sBX!olhb($+bRHqd0K7u-ymxAFSPR_Va zd z6li|4@;n;}m>Xud?vKad{~JKQH6tSz@GP{V-^Ud?eOBQT!$l{HqEFjl&Od{0ArDRa ze7sbWjJpv?r-$vJTvTQ|?En=gIyDf5=u79gI*|IEhXXMo`)i`0)EYTB)~9($@xyc3 zHLr&-QsbpD?`!sO2TC*ARoLCK>TsBzss>gA!LWI1rc6xh<*{<^4&0CU#JOgnrftP% zHYogTj(plbJ@t@7+lV4TwV(=pH_t@i0Eo#}vzZ}Kv>l^AmAu຾ST~1}iZ@E(N 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 literal 4784 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 From 5a430bfc48e71bdb69ada6f453e2041e9251e5fa Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 13:39:45 +0900 Subject: [PATCH 352/625] Change Wav to output --- Flow.Launcher/Flow.Launcher.csproj | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Flow.Launcher/Flow.Launcher.csproj b/Flow.Launcher/Flow.Launcher.csproj index 86156c59aee..b05a5fddbda 100644 --- a/Flow.Launcher/Flow.Launcher.csproj +++ b/Flow.Launcher/Flow.Launcher.csproj @@ -106,7 +106,9 @@ - + + PreserveNewest + From 05104a5ab0f0f529f59f298b58f9a761002e5e0b Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sat, 13 Nov 2021 23:11:05 -0600 Subject: [PATCH 353/625] Implement Setting back and forward transfer --- Flow.Launcher.Core/Plugin/JsonPRCModel.cs | 4 ++++ Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs | 24 ++++++++++++++++------ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/Flow.Launcher.Core/Plugin/JsonPRCModel.cs b/Flow.Launcher.Core/Plugin/JsonPRCModel.cs index 3dcefc094ee..4ec25a8434a 100644 --- a/Flow.Launcher.Core/Plugin/JsonPRCModel.cs +++ b/Flow.Launcher.Core/Plugin/JsonPRCModel.cs @@ -43,6 +43,8 @@ public class JsonRPCQueryResponseModel : JsonRPCResponseModel [JsonPropertyName("result")] public new List Result { get; set; } + public Dictionary SettingsChange { get; set; } + public string DebugMessage { get; set; } } @@ -52,6 +54,8 @@ public class JsonRPCRequestModel public object[] Parameters { get; set; } + public Dictionary Settings { get; set; } + private static readonly JsonSerializerOptions options = new() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase diff --git a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs index 358f2956f54..255499efdf4 100644 --- a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs +++ b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs @@ -148,6 +148,14 @@ private List ParseResults(JsonRPCQueryResponseModel queryResponseModel) results.AddRange(queryResponseModel.Result); + if (queryResponseModel.SettingsChange != null) + { + foreach (var (key, value) in queryResponseModel.SettingsChange) + { + Settings[key] = value; + } + } + return results; } @@ -300,10 +308,11 @@ public async Task> QueryAsync(Query query, CancellationToken token) var request = new JsonRPCRequestModel { Method = "query", - Parameters = new[] + Parameters = new object[] { query.Search - } + }, + Settings = Settings }; var output = await RequestAsync(request, token); return await DeserializedResultAsync(output); @@ -345,7 +354,8 @@ public Control CreateSettingPanel() var settingWindow = new UserControl(); var mainPanel = new StackPanel { - Margin = settingControlMargin, Orientation = Orientation.Vertical + Margin = settingControlMargin, + Orientation = Orientation.Vertical }; settingWindow.Content = mainPanel; @@ -370,7 +380,8 @@ public Control CreateSettingPanel() { var textBox = new TextBox() { - Width = 300, Text = Settings[attribute.Name] as string ?? string.Empty, + Width = 300, + Text = Settings[attribute.Name] as string ?? string.Empty, Margin = settingControlMargin }; textBox.TextChanged += (_, _) => @@ -401,7 +412,8 @@ public Control CreateSettingPanel() { var comboBox = new ComboBox() { - ItemsSource = attribute.Options, SelectedItem = Settings[attribute.Name], + ItemsSource = attribute.Options, + SelectedItem = Settings[attribute.Name], Margin = settingControlMargin }; comboBox.SelectionChanged += (sender, _) => @@ -419,7 +431,7 @@ public Control CreateSettingPanel() }; checkBox.Click += (sender, _) => { - Settings[attribute.Name] = ((CheckBox) sender).IsChecked; + Settings[attribute.Name] = ((CheckBox)sender).IsChecked; }; contentControl = checkBox; break; From ddc6af52ed4fba8d1e7779c52c4a127e7ff5d964 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sat, 13 Nov 2021 23:48:53 -0600 Subject: [PATCH 354/625] Allow modifying Setting via result --- Flow.Launcher.Core/Plugin/JsonPRCModel.cs | 2 + Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs | 56 ++++------------------ 2 files changed, 10 insertions(+), 48 deletions(-) diff --git a/Flow.Launcher.Core/Plugin/JsonPRCModel.cs b/Flow.Launcher.Core/Plugin/JsonPRCModel.cs index 4ec25a8434a..cf75e4aa3e3 100644 --- a/Flow.Launcher.Core/Plugin/JsonPRCModel.cs +++ b/Flow.Launcher.Core/Plugin/JsonPRCModel.cs @@ -90,5 +90,7 @@ public class JsonRPCClientRequestModel : JsonRPCRequestModel public class JsonRPCResult : Result { public JsonRPCClientRequestModel JsonRPCAction { get; set; } + + public Dictionary SettingsChange { get; set; } } } \ No newline at end of file diff --git a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs index 255499efdf4..fb8c0c4f063 100644 --- a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs +++ b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs @@ -109,6 +109,14 @@ private List ParseResults(JsonRPCQueryResponseModel queryResponseModel) { result.Action = c => { + if (result.SettingsChange is not null) + { + foreach (var (key, value) in result.SettingsChange) + { + Settings[key] = value; + } + } + if (result.JsonRPCAction == null) return false; if (string.IsNullOrEmpty(result.JsonRPCAction.Method)) @@ -442,54 +450,6 @@ public Control CreateSettingPanel() panel.Children.Add(contentControl); mainPanel.Children.Add(panel); } - - // foreach (var (key, value) in Settings) - // { - // var panel = new StackPanel - // { - // Orientation = Orientation.Horizontal, Margin = settingControlMargin - // }; - // var name = new Label - // { - // Content = key, VerticalAlignment = VerticalAlignment.Center - // }; - // UIElement content = null; - // switch (value) - // { - // case int i: - // case double d: - // throw new TypeAccessException(); - // case string s: - // var textBox = new TextBox - // { - // Text = s, - // Margin = settingControlMargin, - // VerticalAlignment = VerticalAlignment.Center - // }; - // textBox.TextChanged += (_, _) => - // { - // Settings[key] = textBox.Text; - // }; - // content = textBox; - // break; - // case bool b: - // var checkBox = new CheckBox - // { - // IsChecked = b, - // Margin = settingControlMargin, - // VerticalAlignment = VerticalAlignment.Center - // }; - // checkBox.Click += (_, _) => - // { - // Settings[key] = checkBox.IsChecked; - // }; - // content = checkBox; - // break; - // default: - // throw new ArgumentOutOfRangeException(); - // } - // - // } return settingWindow; } public void Save() From 3d97f900336ff57242e8c5ae5ea840b9c93aa94f Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 14:51:40 +0900 Subject: [PATCH 355/625] Change Plugin/Store Icon Render --- Flow.Launcher/SettingWindow.xaml | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 2b5fd23972c..fe1704ffe1d 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -846,7 +846,9 @@ Height="32" Margin="32,0,0,0" FlowDirection="LeftToRight" - Source="{Binding Image, IsAsync=True}" /> + RenderOptions.BitmapScalingMode="HighQuality" + Source="{Binding Image, IsAsync=True}" + Stretch="Uniform" /> - + + + + Date: Sat, 13 Nov 2021 23:59:14 -0600 Subject: [PATCH 356/625] Add passwordBox --- .../Plugin/JsonRPCConfigurationModel.cs | 1 + Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/Flow.Launcher.Core/Plugin/JsonRPCConfigurationModel.cs b/Flow.Launcher.Core/Plugin/JsonRPCConfigurationModel.cs index 7eb5ab9c3c7..1f63f85a806 100644 --- a/Flow.Launcher.Core/Plugin/JsonRPCConfigurationModel.cs +++ b/Flow.Launcher.Core/Plugin/JsonRPCConfigurationModel.cs @@ -29,6 +29,7 @@ public class FieldAttributes public bool Validation { get; set; } public List Options { get; set; } public string DefaultValue { get; set; } + public char passwordChar { get; set; } public void Deconstruct(out string Name, out string Label, out string Description, out bool Validation, out List Options, out string DefaultValue) { Name = this.Name; diff --git a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs index fb8c0c4f063..c488bb8d09b 100644 --- a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs +++ b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs @@ -416,6 +416,17 @@ public Control CreateSettingPanel() contentControl = textBox; break; } + case "passwordBox": + { + var passwordBox = new PasswordBox() + { + Width = 300, + Margin = settingControlMargin, + Password = Settings[attribute.Name] as string ?? string.Empty, + PasswordChar = attribute.passwordChar == default ? '*' : attribute.passwordChar + }; + break; + } case "dropdown": { var comboBox = new ComboBox() From abe4eec65de070253193301f7ce206b36b73c7e2 Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 15:09:09 +0900 Subject: [PATCH 357/625] fix Wav output setting --- Flow.Launcher/Flow.Launcher.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Flow.Launcher/Flow.Launcher.csproj b/Flow.Launcher/Flow.Launcher.csproj index b05a5fddbda..1f24b325fd0 100644 --- a/Flow.Launcher/Flow.Launcher.csproj +++ b/Flow.Launcher/Flow.Launcher.csproj @@ -106,9 +106,9 @@ - - PreserveNewest - + + Always + From f8cfa7c45a5bf12f8d87893999a90c26341f9238 Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 15:22:44 +0900 Subject: [PATCH 358/625] Remove Resize Settting window code (It made weired blink when open setting window) --- Flow.Launcher/SettingWindow.xaml.cs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index 0f55eec9685..054274eb63b 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -46,14 +46,6 @@ private void OnLoaded(object sender, RoutedEventArgs e) HwndTarget hwndTarget = hwndSource.CompositionTarget; hwndTarget.RenderMode = RenderMode.SoftwareOnly; - var screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position); - var dip1 = WindowsInteropHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Y); - var dip2 = WindowsInteropHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Height); - var workingHeight = dip2.Y * 0.8; - var top = (dip2.Y / 2) - (workingHeight / 2); - this.Height = workingHeight; - this.Top = top; - } private void OnAutoStartupChecked(object sender, RoutedEventArgs e) From a2600af2eb4d5af78106dd60b88c5af1d755724b Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 17:45:56 +0900 Subject: [PATCH 359/625] - Add Show() function and seperate toggleflow() - Change ShowMainWindow to using Show() (for Fix plugin install button) --- Flow.Launcher/PublicAPIInstance.cs | 2 +- Flow.Launcher/SettingWindow.xaml.cs | 1 - Flow.Launcher/ViewModel/MainViewModel.cs | 25 ++++++++++++++---------- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/Flow.Launcher/PublicAPIInstance.cs b/Flow.Launcher/PublicAPIInstance.cs index e90a53fc3a1..a5c9f3afebd 100644 --- a/Flow.Launcher/PublicAPIInstance.cs +++ b/Flow.Launcher/PublicAPIInstance.cs @@ -70,7 +70,7 @@ public void RestartApp() public void RestarApp() => RestartApp(); - public void ShowMainWindow() => _mainVM.MainWindowVisibility = Visibility.Visible; + public void ShowMainWindow() => _mainVM.Show(); public void CheckForNewUpdate() => _settingsVM.UpdateApp(); diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index 054274eb63b..88d4f2895b2 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -15,7 +15,6 @@ using Flow.Launcher.Helper; using System.Windows.Controls; using Flow.Launcher.Core.ExternalPlugins; -using Screen = System.Windows.Forms.Screen; namespace Flow.Launcher { diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 6e1befeaf46..9870053c230 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -713,16 +713,7 @@ public void ToggleFlowLauncher() { if (WinToggleStatus != true) { - if (_settings.UseSound) - { - MediaPlayer media = new MediaPlayer(); - media.Open(new Uri(AppDomain.CurrentDomain.BaseDirectory + "Resources\\open.wav")); - media.Play(); - } - MainWindowVisibility = Visibility.Visible; - WinToggleStatus = true; - ((MainWindow)Application.Current.MainWindow).WindowAnimator(); - MainWindowOpacity = 1; + Show(); } else { @@ -730,6 +721,20 @@ public void ToggleFlowLauncher() } } + public void Show() + { + if (_settings.UseSound) + { + MediaPlayer media = new MediaPlayer(); + media.Open(new Uri(AppDomain.CurrentDomain.BaseDirectory + "Resources\\open.wav")); + media.Play(); + } + MainWindowVisibility = Visibility.Visible; + WinToggleStatus = true; + ((MainWindow)Application.Current.MainWindow).WindowAnimator(); + MainWindowOpacity = 1; + } + public async void Hide() { MainWindowOpacity = 0; From add99c4d6d29e0adc6bfa21d56eae48f9d9545c9 Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 18:13:03 +0900 Subject: [PATCH 360/625] - Change MainwindowVisibility to using show() - HotkeyMapper, CustomQueryHotkeySetting. --- Flow.Launcher/CustomQueryHotkeySetting.xaml | 137 +++++++++++++----- .../CustomQueryHotkeySetting.xaml.cs | 1 + Flow.Launcher/Helper/HotKeyMapper.cs | 2 +- 3 files changed, 105 insertions(+), 35 deletions(-) diff --git a/Flow.Launcher/CustomQueryHotkeySetting.xaml b/Flow.Launcher/CustomQueryHotkeySetting.xaml index 23bd8990658..e9d486fe147 100644 --- a/Flow.Launcher/CustomQueryHotkeySetting.xaml +++ b/Flow.Launcher/CustomQueryHotkeySetting.xaml @@ -1,57 +1,126 @@ - + - + - + - + - + - - + + - + - - - - + + + + - - - - diff --git a/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs b/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs index 0109474e12d..e1f69d11727 100644 --- a/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs +++ b/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs @@ -92,6 +92,7 @@ private void BtnTestActionKeyword_OnClick(object sender, RoutedEventArgs e) { App.API.ChangeQuery(tbAction.Text); Application.Current.MainWindow.Visibility = Visibility.Visible; + Application.Current.MainWindow.Opacity = 1; Application.Current.MainWindow.Focus(); } diff --git a/Flow.Launcher/Helper/HotKeyMapper.cs b/Flow.Launcher/Helper/HotKeyMapper.cs index fe25ecf18ad..70d71bb32b0 100644 --- a/Flow.Launcher/Helper/HotKeyMapper.cs +++ b/Flow.Launcher/Helper/HotKeyMapper.cs @@ -78,7 +78,7 @@ internal static void SetCustomQueryHotkey(CustomPluginHotkey hotkey) if (mainViewModel.ShouldIgnoreHotkeys()) return; - mainViewModel.MainWindowVisibility = Visibility.Visible; + mainViewModel.Show(); mainViewModel.ChangeQueryText(hotkey.ActionKeyword, true); }); } From 420d8ea0053f1ce0a2cb4df94f2866825facedcf Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sun, 14 Nov 2021 11:12:47 -0600 Subject: [PATCH 361/625] fix passwordBox issue --- Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs index c488bb8d09b..0819ded847b 100644 --- a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs +++ b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs @@ -425,6 +425,11 @@ public Control CreateSettingPanel() Password = Settings[attribute.Name] as string ?? string.Empty, PasswordChar = attribute.passwordChar == default ? '*' : attribute.passwordChar }; + passwordBox.PasswordChanged += (sender, _) => + { + Settings[attribute.Name] = ((PasswordBox)sender).Password; + }; + contentControl = passwordBox; break; } case "dropdown": From c677a636797584d8ba9173f89a6481d8cfaeea37 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sun, 14 Nov 2021 11:46:09 -0600 Subject: [PATCH 362/625] Manually Implement UI Binding --- Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs | 62 ++++++++++++++++------ 1 file changed, 46 insertions(+), 16 deletions(-) diff --git a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs index 0819ded847b..6d1d15d6c0c 100644 --- a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs +++ b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs @@ -27,6 +27,7 @@ using Orientation = System.Windows.Controls.Orientation; using TextBox = System.Windows.Controls.TextBox; using UserControl = System.Windows.Controls.UserControl; +using System.Windows.Data; namespace Flow.Launcher.Core.Plugin { @@ -74,8 +75,15 @@ public List LoadContextMenus(Result selectedResult) new JsonObjectConverter() } }; + + private static readonly JsonSerializerOptions settingSerializeOption = new() + { + WriteIndented = true + }; private Dictionary Settings { get; set; } + private Dictionary _settingControls = new(); + private async Task> DeserializedResultAsync(Stream output) { if (output == Stream.Null) return null; @@ -109,13 +117,7 @@ private List ParseResults(JsonRPCQueryResponseModel queryResponseModel) { result.Action = c => { - if (result.SettingsChange is not null) - { - foreach (var (key, value) in result.SettingsChange) - { - Settings[key] = value; - } - } + UpdateSettings(result.SettingsChange); if (result.JsonRPCAction == null) return false; @@ -156,13 +158,7 @@ private List ParseResults(JsonRPCQueryResponseModel queryResponseModel) results.AddRange(queryResponseModel.Result); - if (queryResponseModel.SettingsChange != null) - { - foreach (var (key, value) in queryResponseModel.SettingsChange) - { - Settings[key] = value; - } - } + UpdateSettings(queryResponseModel.SettingsChange); return results; } @@ -384,7 +380,7 @@ public Control CreateSettingPanel() switch (type) { - case "Input": + case "input": { var textBox = new TextBox() { @@ -462,6 +458,7 @@ public Control CreateSettingPanel() default: continue; } + _settingControls[attribute.Name] = contentControl; panel.Children.Add(name); panel.Children.Add(contentControl); mainPanel.Children.Add(panel); @@ -473,7 +470,40 @@ public void Save() if (Settings != null) { Helper.ValidateDirectory(Path.Combine(DataLocation.PluginSettingsDirectory, context.CurrentPluginMetadata.Name)); - File.WriteAllText(SettingPath, JsonSerializer.Serialize(Settings)); + File.WriteAllText(SettingPath, JsonSerializer.Serialize(Settings, settingSerializeOption)); + } + } + + public void UpdateSettings(Dictionary settings) + { + if (settings == null || settings.Count == 0) + return; + + foreach (var (key, value) in settings) + { + if (Settings.ContainsKey(key)) + { + Settings[key] = value; + } + if (_settingControls.ContainsKey(key)) + { + + switch (_settingControls[key]) + { + case TextBox textBox: + textBox.Dispatcher.Invoke(() => textBox.Text = value as string); + break; + case PasswordBox passwordBox: + passwordBox.Dispatcher.Invoke(() => passwordBox.Password = value as string); + break; + case ComboBox comboBox: + comboBox.Dispatcher.Invoke(() => comboBox.SelectedItem = value); + break; + case CheckBox checkBox: + checkBox.Dispatcher.Invoke(() => checkBox.IsChecked = value is bool isChecked ? isChecked : bool.Parse(value as string)); + break; + } + } } } } From 979a7b8b7b825aa968ffd0e23d0647636fa82b39 Mon Sep 17 00:00:00 2001 From: DB p Date: Mon, 15 Nov 2021 05:08:01 +0900 Subject: [PATCH 363/625] Change Titlebar to Custom TitleBar (SettingWindow) --- .../Resources/CustomControlTemplate.xaml | 83 + Flow.Launcher/SettingWindow.xaml | 3523 +++++++++-------- Flow.Launcher/SettingWindow.xaml.cs | 142 + 3 files changed, 2032 insertions(+), 1716 deletions(-) diff --git a/Flow.Launcher/Resources/CustomControlTemplate.xaml b/Flow.Launcher/Resources/CustomControlTemplate.xaml index 877a976459a..bcb20579fac 100644 --- a/Flow.Launcher/Resources/CustomControlTemplate.xaml +++ b/Flow.Launcher/Resources/CustomControlTemplate.xaml @@ -4,6 +4,89 @@ xmlns:system="clr-namespace:System;assembly=mscorlib" xmlns:ui="http://schemas.modernwpf.com/2019"> + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + SelectedIndex="1" + TabStripPlacement="Left"> + + + + + + + + + -  - - - - - - - - - - - + Grid.Row="1" + Margin="0,12,0,0" + Text="Flow Launcher" + TextAlignment="center" /> -  - - - - - - - - - - + Grid.Row="2" + Margin="0,5,0,0" + FontSize="12" + Text="{Binding Version}" + TextAlignment="center" /> + + + + + + + + + + + -  +  - - + + + - - - - - - - + + -  - - - + Grid.Row="2" + Margin="0,5,0,5" + FontSize="30" + Text="{DynamicResource general}" + TextAlignment="left" /> - - - + - - + - + + +  + - - + + - - + - - - - - - - - + -  +  - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - + + + + - - - - - - - - - - - + + + + + + + + + +  + + + + + Date: Wed, 17 Nov 2021 10:23:12 +0900 Subject: [PATCH 382/625] Change hardcoded style in SelectFileManagerWindow --- .../Resources/CustomControlTemplate.xaml | 12 +- Flow.Launcher/Resources/Dark.xaml | 4 + Flow.Launcher/Resources/Light.xaml | 4 + Flow.Launcher/SelectFileManagerWindow.xaml | 150 +++++++++++------- 4 files changed, 111 insertions(+), 59 deletions(-) diff --git a/Flow.Launcher/Resources/CustomControlTemplate.xaml b/Flow.Launcher/Resources/CustomControlTemplate.xaml index f029168f3a1..c5c71f6d774 100644 --- a/Flow.Launcher/Resources/CustomControlTemplate.xaml +++ b/Flow.Launcher/Resources/CustomControlTemplate.xaml @@ -5,13 +5,19 @@ xmlns:ui="http://schemas.modernwpf.com/2019"> + + + diff --git a/Flow.Launcher/Resources/Dark.xaml b/Flow.Launcher/Resources/Dark.xaml index e2b266b29e9..4c02fde8cb2 100644 --- a/Flow.Launcher/Resources/Dark.xaml +++ b/Flow.Launcher/Resources/Dark.xaml @@ -33,6 +33,10 @@ + + + + #202020 #2b2b2b #1d1d1d diff --git a/Flow.Launcher/Resources/Light.xaml b/Flow.Launcher/Resources/Light.xaml index e2eb9070ff3..c4a3aa13949 100644 --- a/Flow.Launcher/Resources/Light.xaml +++ b/Flow.Launcher/Resources/Light.xaml @@ -30,6 +30,10 @@ + + + + #f3f3f3 #ffffff #e5e5e5 diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml b/Flow.Launcher/SelectFileManagerWindow.xaml index eba794c96ca..2adac5639fe 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml +++ b/Flow.Launcher/SelectFileManagerWindow.xaml @@ -7,25 +7,63 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:ui="http://schemas.modernwpf.com/2019" Title="{DynamicResource fileManagerWindow}" - Background="#f3f3f3" + Width="600" + Background="{DynamicResource PopuBGColor}" DataContext="{Binding RelativeSource={RelativeSource Self}}" + Foreground="{DynamicResource PopupTextColor}" ResizeMode="NoResize" - SizeToContent="WidthAndHeight" + SizeToContent="Height" WindowStartupLocation="CenterScreen" mc:Ignorable="d"> - + + + + + - - + + - + + + + + + + + + + + + + - + @@ -86,7 +120,7 @@ + Fill="{StaticResource Color03B}" /> - + + + + + + + - - - From 0fbec350cb8be5a2af5fc5d24b79a33d49219ee7 Mon Sep 17 00:00:00 2001 From: DB p Date: Wed, 17 Nov 2021 14:17:17 +0900 Subject: [PATCH 383/625] Darkmode CPriority Change Window --- Flow.Launcher/PriorityChangeWindow.xaml | 165 +- .../Resources/CustomControlTemplate.xaml | 1527 +++++++++-------- Flow.Launcher/Resources/Dark.xaml | 16 +- Flow.Launcher/Resources/Light.xaml | 11 + Flow.Launcher/SettingWindow.xaml | 2 +- 5 files changed, 889 insertions(+), 832 deletions(-) diff --git a/Flow.Launcher/PriorityChangeWindow.xaml b/Flow.Launcher/PriorityChangeWindow.xaml index bbe6010101e..d8fda81e32f 100644 --- a/Flow.Launcher/PriorityChangeWindow.xaml +++ b/Flow.Launcher/PriorityChangeWindow.xaml @@ -7,84 +7,117 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:ui="http://schemas.modernwpf.com/2019" Title="{DynamicResource changePriorityWindow}" - Background="#F3F3F3" - BorderBrush="#cecece" + Width="350" + Background="{DynamicResource PopuBGColor}" + Foreground="{DynamicResource PopupTextColor}" Loaded="PriorityChangeWindow_Loaded" MouseDown="window_MouseDown" ResizeMode="NoResize" - SizeToContent="WidthAndHeight" + SizeToContent="Height" WindowStartupLocation="CenterScreen" mc:Ignorable="d"> - + + + + - - + + + + + + + + + + + + + + + + + + - - - - - - + + - - - - + + + - - - - + + + + + + diff --git a/Flow.Launcher/Resources/CustomControlTemplate.xaml b/Flow.Launcher/Resources/CustomControlTemplate.xaml index c5c71f6d774..ad0340f6735 100644 --- a/Flow.Launcher/Resources/CustomControlTemplate.xaml +++ b/Flow.Launcher/Resources/CustomControlTemplate.xaml @@ -123,63 +123,139 @@ - - + + + + - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - + + - - - - - + + + + + - - - - + + + + + + \ No newline at end of file diff --git a/Flow.Launcher/HotkeyControl.xaml b/Flow.Launcher/HotkeyControl.xaml index 285a282ef32..94cdc6703e5 100644 --- a/Flow.Launcher/HotkeyControl.xaml +++ b/Flow.Launcher/HotkeyControl.xaml @@ -1,26 +1,55 @@ - + - + - - - - press key + + + + Press key - - - + + \ No newline at end of file diff --git a/Flow.Launcher/Resources/Dark.xaml b/Flow.Launcher/Resources/Dark.xaml index 7c631bdc202..4933dc02114 100644 --- a/Flow.Launcher/Resources/Dark.xaml +++ b/Flow.Launcher/Resources/Dark.xaml @@ -39,9 +39,9 @@ - + - + #202020 #2b2b2b From 7333b571091ec15b786ad3d4f13f78c94376bbb5 Mon Sep 17 00:00:00 2001 From: DB p Date: Wed, 17 Nov 2021 15:04:57 +0900 Subject: [PATCH 385/625] - remove Bookmark/websearch setting panel hardcoded bgcolor - Adjust Colors in settingwindow --- Flow.Launcher/Resources/Dark.xaml | 2 + Flow.Launcher/Resources/Light.xaml | 2 + Flow.Launcher/SettingWindow.xaml | 26 +- .../Views/SettingsControl.xaml | 138 +++++++---- .../SettingsControl.xaml | 229 ++++++++++++------ 5 files changed, 255 insertions(+), 142 deletions(-) diff --git a/Flow.Launcher/Resources/Dark.xaml b/Flow.Launcher/Resources/Dark.xaml index 4933dc02114..581b1f10ecb 100644 --- a/Flow.Launcher/Resources/Dark.xaml +++ b/Flow.Launcher/Resources/Dark.xaml @@ -37,6 +37,7 @@ + @@ -72,6 +73,7 @@ #f5f5f5 #464646 #ffffff + #272727 diff --git a/Flow.Launcher/Resources/Light.xaml b/Flow.Launcher/Resources/Light.xaml index 9dd240f4dd2..4e8abc1bc80 100644 --- a/Flow.Launcher/Resources/Light.xaml +++ b/Flow.Launcher/Resources/Light.xaml @@ -34,6 +34,7 @@ + @@ -66,6 +67,7 @@ #f5f5f5 #878787 #1b1b1b + #f6f6f6 diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index f846dd057f5..17b18acb2e7 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -1118,65 +1118,65 @@ MaxWidth="100" Margin="10,0,0,0" FontSize="11" - Foreground="#8F8F8F" + Foreground="{DynamicResource PluginInfoColor}" Text="{DynamicResource author}" /> @@ -1201,7 +1201,7 @@ VerticalAlignment="Center" Cursor="Hand" FontSize="12" - Foreground="#8f8f8f" + Foreground="{DynamicResource PluginInfoColor}" MouseUp="OnPluginDirecotyClick" Text="{DynamicResource pluginDirectory}" TextDecorations="Underline" /> @@ -1412,7 +1412,7 @@ VerticalAlignment="Stretch" Panel.ZIndex="1"> - + diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/SettingsControl.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/SettingsControl.xaml index abe1f0ad5ea..59bdf222b48 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/SettingsControl.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/SettingsControl.xaml @@ -1,72 +1,106 @@ - + - - + + - + - - + + - - - + + + + - + - - - + + + - - - - + + - - - - - - - \ No newline at end of file diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index b8f214538a3..fe1c5dd914b 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -83,6 +83,10 @@ Fail to load theme {0}, fallback to default theme Theme Folder Open Theme Folder + Dark Mode + System Default + Light + Dark Hotkey diff --git a/Flow.Launcher/Resources/Dark.xaml b/Flow.Launcher/Resources/Dark.xaml index 581b1f10ecb..388f329d01a 100644 --- a/Flow.Launcher/Resources/Dark.xaml +++ b/Flow.Launcher/Resources/Dark.xaml @@ -39,6 +39,10 @@ + + + + diff --git a/Flow.Launcher/Resources/Light.xaml b/Flow.Launcher/Resources/Light.xaml index 4e8abc1bc80..864cd01ce15 100644 --- a/Flow.Launcher/Resources/Light.xaml +++ b/Flow.Launcher/Resources/Light.xaml @@ -35,6 +35,7 @@ + diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index f6e1f95f143..28707d21299 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -1354,9 +1354,9 @@ Height="32" Margin="8,0,6,0" VerticalAlignment="Center" - RenderOptions.BitmapScalingMode="HighQuality" - Source="{Binding IcoPath, IsAsync=True}" - Stretch="Uniform" /> + RenderOptions.BitmapScalingMode="HighQuality" + Source="{Binding IcoPath, IsAsync=True}" + Stretch="Uniform" /> - + + + + + + + +  + + + + + From ef71f6dee27b5b441487562ac457871a79e2bbcc Mon Sep 17 00:00:00 2001 From: DB p Date: Wed, 17 Nov 2021 16:59:09 +0900 Subject: [PATCH 387/625] Fix Plugin List Color in Light Mode --- Flow.Launcher/SettingWindow.xaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 28707d21299..b32ba36e810 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -244,7 +244,7 @@ @@ -53,7 +53,7 @@ - + @@ -439,14 +439,14 @@ Margin="4,0,0,0" VerticalAlignment="Center" FontSize="12" - Foreground="{StaticResource Color05B}" + Foreground="{DynamicResource Color05B}" Text="{DynamicResource flowlauncher_settings}" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Flow.Launcher/Languages/ko.xaml b/Flow.Launcher/Languages/ko.xaml index 2c3e733edd0..4df5d67de80 100644 --- a/Flow.Launcher/Languages/ko.xaml +++ b/Flow.Launcher/Languages/ko.xaml @@ -165,7 +165,7 @@ 중요도 변경 - 높은 수를 넣을수록 상위 결과에 표시됩니다. 5를 시도해보세요. 다른 플러그인 보다 결과를 낮추고 싶다면, 그보다 낮은 수를 입력하세요. + 높은 수를 넣을수록 상위 결과에 표시됩니다. 5를 시도해보세요. 다른 플러그인 보다 결과를 낮춰 표시하고 싶다면, 그보다 낮은 수를 입력하세요. 중요도에 올바른 정수를 입력하세요. 예전 액션 키워드 @@ -177,10 +177,11 @@ 새 액션 키워드가 할당된 플러그인이 이미 있습니다. 다른 액션 키워드를 입력하세요. 성공 성공적으로 완료했습니다. - 액션 키워드를 지정하지 않으려면 *를 사용하세요. + 플러그인을 시작하는데 필요한 액션 키워드를 입력하세요. 액션 키워드를 지정하지 않으려면 *를 사용하세요. 이 경우 키워드를 입력하지 않아도 동작합니다. 커스텀 플러그인 핫키 + 단축키를 지정하여 특정 쿼리를 자동으로 입력할 수 있습니다. 사용하고 싶은 단축키를 눌러 지정한 후, 사용할 쿼리를 입력하세요. 미리보기 핫키를 사용할 수 없습니다. 다른 핫키를 입력하세요. 플러그인 핫키가 유효하지 않습니다. diff --git a/Flow.Launcher/PriorityChangeWindow.xaml b/Flow.Launcher/PriorityChangeWindow.xaml index d8fda81e32f..8fb27c470da 100644 --- a/Flow.Launcher/PriorityChangeWindow.xaml +++ b/Flow.Launcher/PriorityChangeWindow.xaml @@ -104,17 +104,18 @@ diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml b/Flow.Launcher/SelectFileManagerWindow.xaml index 6092c1da19c..7380baa6af2 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml +++ b/Flow.Launcher/SelectFileManagerWindow.xaml @@ -239,21 +239,19 @@ + + + + + + + + diff --git a/Flow.Launcher/WelcomeWindow.xaml.cs b/Flow.Launcher/WelcomeWindow.xaml.cs index c946ae90026..e150afce633 100644 --- a/Flow.Launcher/WelcomeWindow.xaml.cs +++ b/Flow.Launcher/WelcomeWindow.xaml.cs @@ -23,5 +23,10 @@ public WelcomeWindow() { InitializeComponent(); } + + private void BtnCancel_OnClick(object sender, RoutedEventArgs e) + { + Close(); + } } } From 699bcfd8e5881859454413b641b2afc0238449b5 Mon Sep 17 00:00:00 2001 From: DB p Date: Tue, 30 Nov 2021 16:38:21 +0900 Subject: [PATCH 477/625] add button and adjust color --- Flow.Launcher/WelcomeWindow.xaml | 41 ++++++++++++++++++++++++++--- Flow.Launcher/WelcomeWindow.xaml.cs | 28 ++++++++++++++++++++ 2 files changed, 65 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher/WelcomeWindow.xaml b/Flow.Launcher/WelcomeWindow.xaml index e8fdba4d042..21137e1595a 100644 --- a/Flow.Launcher/WelcomeWindow.xaml +++ b/Flow.Launcher/WelcomeWindow.xaml @@ -5,15 +5,17 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:Flow.Launcher" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:ui="http://schemas.modernwpf.com/2019" Name="FlowWelcomeWindow" Title="Welcome to Flow Launcher" Width="550" Height="650" - Background="{DynamicResource PopuBGColor}" + Background="{DynamicResource Color00B}" Foreground="{DynamicResource PopupTextColor}" ResizeMode="NoResize" WindowStartupLocation="CenterScreen" mc:Ignorable="d"> + @@ -70,14 +72,45 @@ - + + + + + + + + + + - + + public partial class WelcomePage5 : Page { + private const string StartupPath = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; public WelcomePage5() { InitializeComponent(); } + + private void OnAutoStartupChecked(object sender, RoutedEventArgs e) + { + SetStartup(); + + } + private void OnAutoStartupUncheck(object sender, RoutedEventArgs e) + { + RemoveStartup(); + } + + private void RemoveStartup() + { + using var key = Registry.CurrentUser.OpenSubKey(StartupPath, true); + key?.DeleteValue(Constant.FlowLauncher, false); + } + public static void SetStartup() + { + using var key = Registry.CurrentUser.OpenSubKey(StartupPath, true); + key?.SetValue(Constant.FlowLauncher, Constant.ExecutablePath); + } + + } } diff --git a/Flow.Launcher/WelcomeWindow.xaml b/Flow.Launcher/WelcomeWindow.xaml index 6430da1d49a..f61eeb29e90 100644 --- a/Flow.Launcher/WelcomeWindow.xaml +++ b/Flow.Launcher/WelcomeWindow.xaml @@ -91,28 +91,64 @@ Background="{DynamicResource Color00B}" BorderBrush="{DynamicResource PopupButtonAreaBorderColor}" BorderThickness="0,1,0,0"> - - public string Command { get; set; } + private string type = string.Empty; + /// /// Gets or sets the type of the windows setting. /// public string Type { get; set; } + /// + /// Gets or sets the type display name of this setting. + /// + public string? DisplayType { get; set; } /// /// Gets or sets the alternative names of this setting. @@ -73,4 +79,4 @@ public WindowsSetting() /// public uint? DeprecatedInBuild { get; set; } } -} +} \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Flow.Plugin.WindowsSettings.csproj b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Flow.Plugin.WindowsSettings.csproj index e65a4c62e43..d6dc20dd47a 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Flow.Plugin.WindowsSettings.csproj +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Flow.Plugin.WindowsSettings.csproj @@ -70,12 +70,9 @@ - + PreserveNewest - - - PreserveNewest - + diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/ResultHelper.cs b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/ResultHelper.cs index c5fd287bda7..a273ea75df6 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/ResultHelper.cs +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/ResultHelper.cs @@ -27,12 +27,13 @@ internal static class ResultHelper /// /// The original result list to convert. /// Query for specific result List - /// The path to the icon of each entry. + /// The path to the icon of each entry. /// A list with . internal static List GetResultList( in IEnumerable list, Query query, - string iconPath) + string windowsSettingIconPath, + string controlPanelIconPath) { var resultList = new List(); foreach (var entry in list) @@ -47,7 +48,7 @@ internal static List GetResultList( if (nameMatch.IsSearchPrecisionScoreMet()) { - var settingResult = NewSettingResult(nameMatch.Score + highScore); + var settingResult = NewSettingResult(nameMatch.Score + highScore, entry.Type); settingResult.TitleHighlightData = nameMatch.MatchData; result = settingResult; } @@ -56,7 +57,7 @@ internal static List GetResultList( var areaMatch = _api.FuzzySearch(query.Search, entry.Area); if (areaMatch.IsSearchPrecisionScoreMet()) { - var settingResult = NewSettingResult(areaMatch.Score + midScore); + var settingResult = NewSettingResult(areaMatch.Score + midScore, entry.Type); settingResult.SubTitleHighlightData = areaMatch.MatchData.Select(x => x + 6).ToList(); result = settingResult; } @@ -65,7 +66,7 @@ internal static List GetResultList( result = entry.AltNames? .Select(altName => _api.FuzzySearch(query.Search, altName)) .Where(match => match.IsSearchPrecisionScoreMet()) - .Select(altNameMatch => NewSettingResult(altNameMatch.Score + midScore)) + .Select(altNameMatch => NewSettingResult(altNameMatch.Score + midScore, entry.Type)) .FirstOrDefault(); } @@ -79,7 +80,7 @@ internal static List GetResultList( .SelectMany(x => x) .Contains(x, StringComparer.CurrentCultureIgnoreCase)) ) - result = NewSettingResult(midScore); + result = NewSettingResult(midScore, entry.Type); } } @@ -90,10 +91,10 @@ internal static List GetResultList( resultList.Add(result); - Result NewSettingResult(int score) => new() + Result NewSettingResult(int score, string type) => new() { Action = _ => DoOpenSettingsAction(entry), - IcoPath = iconPath, + IcoPath = type == "AppSettingsApp" ? windowsSettingIconPath : controlPanelIconPath, SubTitle = $"{Resources.Area} \"{entry.Area}\" {Resources.SubtitlePreposition} {entry.Type}", Title = entry.Name + entry.glyph, ContextData = entry, @@ -150,7 +151,7 @@ private static bool DoOpenSettingsAction(WindowsSetting entry) ProcessStartInfo processStartInfo; var command = entry.Command; - + command = Environment.ExpandEnvironmentVariables(command); if (command.Contains(' ')) diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/TranslationHelper.cs b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/TranslationHelper.cs index 529fae0a3c1..73ac76bf689 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/TranslationHelper.cs +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/TranslationHelper.cs @@ -84,7 +84,7 @@ internal static IEnumerable TranslateAllSettings(in IEnumerable< { Area = area ?? settings.Area, Name = name ?? settings.Name, - Type = type ?? settings.Type, + DisplayType = type ?? settings.Type, AltNames = translatedAltNames }; diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Images/ControlPanel_Small.png b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Images/ControlPanel_Small.png new file mode 100644 index 0000000000000000000000000000000000000000..8a8a41aeb8f370ac29e8164a6e31f2133ffbff53 GIT binary patch literal 2980 zcmaJ@XH*ku7Y@P#QWQao)EE#HO)@DYCM2{3OjHm71sjqw!5~R62_~S@{5TZBP!z17 zSSTWjh@jLJg>{kQvMNQ222nw!3&JjJP}y&P?AbYI=6&Bg_qq4E?aU;2dTi3xFxG%T zAlh^q)l0Dg3%9ze;_18OYn)mVqGGQmJDp9~wWsDVMbY%0wD;+BT#S_002-t0l{W487wAq0~8IQQAhxbL}B3oK*SJ;SS<9%1yi^a zvN=RAs@o4|iW3=jKr9X+B9Rh_1R=p71j0Zhia;PB0W=bghATASqAn)8LD%|n`D}qiv~HnB-$SN?LhfOZ?IslPpx=^A$GT{J*1;Fjt zSOT2DWZ>Wcj*Z8$2m}Df;lPjzipYh&`9~iuiWJScu>E^16o?TYZZO7bu_pI$!_^U?A=bM8?{Hd)i z?V2l}t$8jEeR=apji^~tE#fDm>-#Pql}h6*G?fihH)#18-3I#RyP^VS;x%9Z5 zWho|>ZFx*{%nE&Src3SQ@$1ozF;7wq4{7ahXy2T9`MA!f8Hn?NzWh<;w!Tf~HX}a+ zl+!HBT|V|LfwqsJ^bcoNGE&Z?PF^6yD;;T#IdQdlkN>P@?~WGhzqW_-BXkEeJhE~8-`#y+cOhY8HaO8P7&j^q_q#jN*xEJO4} z&rjGTJFOF{(cYZx`%t{$#RzQq`UYe53>V`!mrGOMG+)%**txsm$$+Nx(9p{2`=jJw ztEo%f#=9*wToOhvmhNj#UoE%GeHiE{w%>W)LHBZ6!KJVdAZfZ&P7@qcA8Lq*4s6!B zgkSZ9GQO`icVcI&R!EmJ4||g8*-tY*?%!X9rQ-8hHr&^&rkcKvuIm4tZtiOD*52@b zZ{qDk1IAun)_H2`1r9!sDcR4oxK~@gE_oblys359v6bDY*_uBD*9!eDQ*d& zHx_-PVb93@JP)%-xIR|+)1mAx&QcrO`A21$S@kc=BBSEJ>ZJ95fR;M#>}eY~N_VZ}-MsvwG$|;j3_m&q@?^kQS7n>^iCehTarloIxszgh*9-Ou5JypG&-Z<+^ zxlk!trCoG+{D`@>-;kAb&cgnEN(`*!3RCK*v2^X_WJ9UtoPGi9oJH%O&&#*i`z-4r z>z!MDayD>9koD59W|H4h#*!u~a?q`)Ax;)W%Jt3^+itrXGjI1>|53RTDYQSAHj}W! z$g)6A;5KF)DSxZ3X%_Zz$A$I|6@%SlGo8@7E%SqY>urMaFb@@-k-ugoF%n*XtLN3> zQWcHaD#Fq)Qx1mL=4|$E$VnR9ZXvf$syx+)^~0yeHhU&ieSUVO^i`C>E#cG|dmi?UDe%cq1>Hf26Lw!%(Qh{7h%dYJl^Zada}ZRbn@@IqW&voz86f_ zZ~EC{ZqnA{Vuy3pfGlm=)8t%ErlBm+w+#J^#-_vib*aJD@wc?#lfV9y zr{(W(O?h9z+PfyJBmUs1Ioekxm<>2(|JG?1H2YLd_Ttij?g5$l)?liz#r8pXI^D1+ zE#@H5k$3AVc#+S+4lpBJTnLJ#|2 zt-JIkbS_vqF)6z+0-@{RY;)15uIcreUYFFTcB5%hSG6EOb$H+*yJlN1X{z4f^PZc2 z^kZ2s(KMg;wtHln_Jyca{L7dCPK%5_g0Q&YLfe0p#4@>=bLnhC(Anb_Z{t@94!N0K zE4G8m2L*-8KMtsdzbd3p-t-#@;^&$^t*x1wD}@A(JH5SDYJ|M|Om3cV?w0&_GLrB* zOdfu!WsNsgKk{DljpLuZV|FbCwEgcT=Z|jcIe&jOlK1D`Q*W&(2lIoXhyCRaQN5=> zdi>hd;h=9Y5a6a#qFb)zfYUd{=Z=Q`p@MShlAo^(z1_`SQsJC>uiR?|W2BV4eP&O=_LU2ln z7##@M5Ph!v4!vjFj`lHfn##E+`P-wlWfr$>G=ksUFs&p)YxCa`x8PvE6rU>{$AI+K@Rlw%Q50zu)EA?^~`76;0v1lDl^G2bHuG4MwTysn=AV uGC?P>WmwV*UaXJ`U#q literal 0 HcmV?d00001 diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Main.cs b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Main.cs index 491bb903f20..6afb3fb090c 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Main.cs @@ -18,16 +18,6 @@ namespace Flow.Plugin.WindowsSettings /// public sealed class Main : IPlugin, IContextMenu, IPluginI18n, IDisposable { - /// - /// The path to the symbol for a light theme. - /// - private const string _lightSymbol = "Images/WindowsSettings.light.png"; - - /// - /// The path to the symbol for a dark theme. - /// - private const string _darkSymbol = "Images/WindowsSettings.dark.png"; - /// /// The name of this assembly. /// @@ -39,9 +29,14 @@ public sealed class Main : IPlugin, IContextMenu, IPluginI18n, IDisposable private PluginInitContext? _context; /// - /// The path to the icon for each result. + /// The path to the icon for windows setting result. + /// + private const string windowSettingsIconPath = "Images/WindowsSettings.light.png"; + + /// + /// The path to the icon for control panel result. /// - private string _defaultIconPath; + private const string controlPanelIconPath = "Images/ControlPanel_Small.png"; /// /// Indicate that the plugin is disposed. @@ -64,7 +59,6 @@ public sealed class Main : IPlugin, IContextMenu, IPluginI18n, IDisposable public Main() { _assemblyName = Assembly.GetExecutingAssembly().GetName().Name ?? Name; - _defaultIconPath = _lightSymbol; } /// @@ -101,7 +95,7 @@ public void Init(PluginInitContext context) /// A filtered list, can be empty when nothing was found. public List Query(Query query) { - var newList = ResultHelper.GetResultList(_translatedSettingList, query, _defaultIconPath); + var newList = ResultHelper.GetResultList(_translatedSettingList, query, windowSettingsIconPath, controlPanelIconPath); return newList; From 39b626749c3a3ddfa701f57f81abde2f16c9a828 Mon Sep 17 00:00:00 2001 From: DB p Date: Wed, 1 Dec 2021 07:03:44 +0900 Subject: [PATCH 491/625] Add Hotkey Data & List Style --- Flow.Launcher/Languages/en.xaml | 18 +++++++ .../Resources/Pages/WelcomePage3.xaml | 50 ++++++++++++++++--- .../Resources/Pages/WelcomePage3.xaml.cs | 50 +++++++++++++++++-- 3 files changed, 109 insertions(+), 9 deletions(-) diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 9baa33329e9..b0a389c6776 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -244,4 +244,22 @@ Let's Start Flow Launcher Finished. Enjoy Flow Launcher. Don't forget the hotkey to start :) + + U+2B60, U+2B62 + Back / Context Menu + U+2B61, U+2B63 + Item Navigation + Shift+Enter + Open Context Menu + Ctrl+Enter + Open Contaning Folder + Ctrl+Shift+Enter + Run as Admin + Ctrl+C + Copy File Path + Ctrl+H + Query History + ESC + Back to Result in Context Menu + diff --git a/Flow.Launcher/Resources/Pages/WelcomePage3.xaml b/Flow.Launcher/Resources/Pages/WelcomePage3.xaml index ea818ea4b34..1fc03a9be77 100644 --- a/Flow.Launcher/Resources/Pages/WelcomePage3.xaml +++ b/Flow.Launcher/Resources/Pages/WelcomePage3.xaml @@ -10,6 +10,43 @@ d:DesignWidth="800" mc:Ignorable="d"> + + + - - - + @@ -87,9 +42,9 @@ @@ -100,17 +55,228 @@ FontSize="20" FontWeight="SemiBold" Text="{DynamicResource Welcome_Page3_Title}" /> - - + + + + + + + , + + + + + + + + + + + + + + + , + + + + + + + + + + + + + + Enter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Flow.Launcher/Resources/Pages/WelcomePage3.xaml.cs b/Flow.Launcher/Resources/Pages/WelcomePage3.xaml.cs index 87285183fb9..39c260b549d 100644 --- a/Flow.Launcher/Resources/Pages/WelcomePage3.xaml.cs +++ b/Flow.Launcher/Resources/Pages/WelcomePage3.xaml.cs @@ -16,57 +16,15 @@ namespace Flow.Launcher.Resources.Pages { + public partial class WelcomePage3 : Page { public WelcomePage3() { InitializeComponent(); - } - - public string strHotkey { get; set; } - public string strHotkeyAction { get; set; } - private List HotkeyListData() - { - List list = new List(); - - list.Add(new WelcomePage3() - { - strHotkey = string.Format(InternationalizationManager.Instance.GetTranslation("Hotkey01")), - strHotkeyAction = string.Format(InternationalizationManager.Instance.GetTranslation("Hotkey01Action")) - }); - list.Add(new WelcomePage3() - { - strHotkey = string.Format(InternationalizationManager.Instance.GetTranslation("Hotkey02")), - strHotkeyAction = string.Format(InternationalizationManager.Instance.GetTranslation("Hotkey02Action")) - }); - list.Add(new WelcomePage3() - { - strHotkey = string.Format(InternationalizationManager.Instance.GetTranslation("Hotkey03")), - strHotkeyAction = string.Format(InternationalizationManager.Instance.GetTranslation("Hotkey03Action")) - }); - list.Add(new WelcomePage3() - { - strHotkey = string.Format(InternationalizationManager.Instance.GetTranslation("Hotkey04")), - strHotkeyAction = string.Format(InternationalizationManager.Instance.GetTranslation("Hotkey04Action")) - }); - list.Add(new WelcomePage3() - { - strHotkey = string.Format(InternationalizationManager.Instance.GetTranslation("Hotkey05")), - strHotkeyAction = string.Format(InternationalizationManager.Instance.GetTranslation("Hotkey05Action")) - }); - list.Add(new WelcomePage3() - { - strHotkey = string.Format(InternationalizationManager.Instance.GetTranslation("Hotkey07")), - strHotkeyAction = string.Format(InternationalizationManager.Instance.GetTranslation("Hotkey07Action")) - }); - list.Add(new WelcomePage3() - { - strHotkey = string.Format(InternationalizationManager.Instance.GetTranslation("Hotkey08")), - strHotkeyAction = string.Format(InternationalizationManager.Instance.GetTranslation("Hotkey08Action")) - }); - - return list; + } + } } diff --git a/Flow.Launcher/Resources/Pages/WelcomePage4.xaml b/Flow.Launcher/Resources/Pages/WelcomePage4.xaml index 7f579ecae3b..a4b609aa862 100644 --- a/Flow.Launcher/Resources/Pages/WelcomePage4.xaml +++ b/Flow.Launcher/Resources/Pages/WelcomePage4.xaml @@ -9,6 +9,21 @@ d:DesignHeight="450" d:DesignWidth="800" mc:Ignorable="d"> + + + + @@ -43,14 +58,42 @@ FontWeight="SemiBold" Text="{DynamicResource Welcome_Page4_Title}" /> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 7e2a3bc1155f3849a61b0ed63ac4afdac0dbc4aa Mon Sep 17 00:00:00 2001 From: DB p Date: Wed, 1 Dec 2021 11:23:27 +0900 Subject: [PATCH 493/625] Adjust Content --- Flow.Launcher/Languages/en.xaml | 4 +- .../Resources/Pages/WelcomePage2.xaml | 18 +- .../Resources/Pages/WelcomePage3.xaml | 476 +++++++++--------- .../Resources/Pages/WelcomePage4.xaml | 46 +- Flow.Launcher/WelcomeWindow.xaml | 7 +- 5 files changed, 289 insertions(+), 262 deletions(-) diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 0a3e6cd5cd4..94db7174eb1 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -237,7 +237,8 @@ Hello, It's your first time to run a Flow Launcher! Before starting, proceed with a simple setting. Surely, You can skip. Please choose the language you use. Search and run everything in everywhere - To start Flow, start with the hotkey below. To change, select input and press the wanted hotkey in keyboard. + Search everything from applications, files, bookmarks, YouTube, Twitter and more. All from the comfort of your keyboard without ever touching the mouse. + To start Flow, start with the hotkey below. To change, select input and press the wanted hotkey in keyboard. Hotkeys Action Keyword and Commands You can search the web or run various functions. Certain functions start with the expression action keyword, and if necessary, they can be used without action keywords. Try these queries in Flow Launcher. @@ -255,5 +256,6 @@ Back to Result in Context Menu Open / Run Selected Item Open Setting Window + Reload Plugin Data diff --git a/Flow.Launcher/Resources/Pages/WelcomePage2.xaml b/Flow.Launcher/Resources/Pages/WelcomePage2.xaml index 2ecfac2c4ff..194b1c88cca 100644 --- a/Flow.Launcher/Resources/Pages/WelcomePage2.xaml +++ b/Flow.Launcher/Resources/Pages/WelcomePage2.xaml @@ -82,19 +82,6 @@ Stretch="Fill" Style="{DynamicResource SearchIconStyle}" /> - @@ -113,6 +100,11 @@ FontSize="14" Text="{DynamicResource Welcome_Page2_Text01}" TextWrapping="WrapWithOverflow" /> + - + - + @@ -43,243 +41,273 @@ - - - - - - - - - - , - - - - - - - - + + + - - - - - - , - - - - - - - - + + + + + + + + + , + + + + + + + + + + + + + + , + + + + + + + + - - - - Enter - - - - - - + + + + Enter + - - - - - - - - - - + + + + + - - - - - - + - - - - - - - - + + + + + + + + + + - - - - - - + - - - - - - - - + + + + + + + + + + + + + + + - - - - - - + - - - - + - - - - - - - - + + + + + + + + + + + + + + + - - - - - - + - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + - diff --git a/Flow.Launcher/Resources/Pages/WelcomePage4.xaml b/Flow.Launcher/Resources/Pages/WelcomePage4.xaml index a4b609aa862..432c6d09851 100644 --- a/Flow.Launcher/Resources/Pages/WelcomePage4.xaml +++ b/Flow.Launcher/Resources/Pages/WelcomePage4.xaml @@ -23,6 +23,13 @@ + @@ -64,34 +71,31 @@ TextWrapping="WrapWithOverflow" /> - - - - - - - - - - - - - - - + Columns="2" + Rows="2"> - + + + + - + + + + - + + + + - + + + + diff --git a/Flow.Launcher/WelcomeWindow.xaml b/Flow.Launcher/WelcomeWindow.xaml index b1acdf6ead7..e6e2309d6b8 100644 --- a/Flow.Launcher/WelcomeWindow.xaml +++ b/Flow.Launcher/WelcomeWindow.xaml @@ -12,7 +12,6 @@ Height="650" Background="{DynamicResource Color00B}" Foreground="{DynamicResource PopupTextColor}" - ResizeMode="NoResize" WindowStartupLocation="CenterScreen" mc:Ignorable="d"> @@ -76,8 +75,10 @@ + HorizontalAlignment="Stretch" + ScrollViewer.CanContentScroll="True" + ScrollViewer.HorizontalScrollBarVisibility="Visible" + ScrollViewer.VerticalScrollBarVisibility="Visible"> From 5a733d05dbc4c85dfe27ca152f06da496cd6910d Mon Sep 17 00:00:00 2001 From: Garulf <535299+Garulf@users.noreply.github.com> Date: Wed, 1 Dec 2021 04:20:54 -0500 Subject: [PATCH 494/625] Initial Tab complete --- Flow.Launcher/MainWindow.xaml | 2 +- Flow.Launcher/ViewModel/MainViewModel.cs | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index dd897965075..31f2c528c5d 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -41,7 +41,7 @@ - + + { + var results = SelectedResults; + + if (index != null) + { + results.SelectedIndex = int.Parse(index.ToString()); + } + + var result = results.SelectedItem?.Result; + if (result != null) // SelectedItem returns null if selection is empty. + { + ChangeQueryText(result.Title, true); + } + }); + LoadContextMenuCommand = new RelayCommand(_ => { if (SelectedIsFromQueryResults()) @@ -383,6 +399,7 @@ private ResultsViewModel SelectedResults public ICommand OpenSettingCommand { get; set; } public ICommand ReloadPluginDataCommand { get; set; } public ICommand ClearQueryCommand { get; private set; } + public ICommand ReplaceQueryWithResult { get; set; } public string OpenResultCommandModifiers { get; private set; } From 0d152f5ee7478a92e5f7986caf75fed059001380 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Wed, 1 Dec 2021 20:21:26 +1100 Subject: [PATCH 495/625] change default action keyword to global --- Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json b/Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json index 30105bbe372..3180e4c4bcb 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json @@ -1,6 +1,6 @@ { "ID": "5043CECEE6A748679CBE02D27D83747A", - "ActionKeyword": "$", + "ActionKeyword": "*", "Description": "Windows Settings Query Functionality", "Name": "Windows Settings", "Author": "TobiasSekan", From e7d3dec91fe53c79c9ab5527d8d003f943dbf371 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Wed, 1 Dec 2021 20:27:44 +1100 Subject: [PATCH 496/625] fix typo --- Flow.Launcher/Languages/en.xaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 784f357467a..5dc040004a5 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -178,7 +178,7 @@ This new Action Keyword is already assigned to another plugin, please choose a different one Success Completed successfully - Enter the action keyword you like to use to start the plugin. Use * if you don't want to specify any, and the plugin be triggered without any action keywords. + Enter the action keyword you like to use to start the plugin. Use * if you don't want to specify any, and the plugin will be triggered without any action keywords. Custom Query Hotkey From d61ac8548f01f4e787305d051ce7262428437c70 Mon Sep 17 00:00:00 2001 From: Garulf <535299+Garulf@users.noreply.github.com> Date: Wed, 1 Dec 2021 05:13:30 -0500 Subject: [PATCH 497/625] Remove requery bool --- Flow.Launcher/ViewModel/MainViewModel.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 8e9ed5bf2de..73a0820ac4d 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -240,7 +240,7 @@ private void InitializeKeyCommands() var result = results.SelectedItem?.Result; if (result != null) // SelectedItem returns null if selection is empty. { - ChangeQueryText(result.Title, true); + ChangeQueryText(result.Title); } }); From acb697cba78f13940581f78b1c5dc2a3b8ff07cd Mon Sep 17 00:00:00 2001 From: Jeremy Date: Wed, 1 Dec 2021 21:20:13 +1100 Subject: [PATCH 498/625] update project file, plugin.json and comments --- .../Classes/WindowsSetting.cs | 6 +----- .../Flow.Launcher.Plugin.WindowsSettings.csproj | 14 ++++++-------- .../Helper/ContextMenuHelper.cs | 6 +----- .../Helper/JsonSettingsListHelper.cs | 6 +----- .../Helper/ResultHelper.cs | 9 +-------- .../Helper/TranslationHelper.cs | 6 +----- .../Helper/UnsupportedSettingsHelper.cs | 6 +----- .../Flow.Launcher.Plugin.WindowsSettings/Main.cs | 6 +----- .../Flow.Launcher.Plugin.WindowsSettings/README.md | 2 +- .../plugin.json | 4 ++-- 10 files changed, 16 insertions(+), 49 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Classes/WindowsSetting.cs b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Classes/WindowsSetting.cs index f0d36d8225c..aa90e900faf 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Classes/WindowsSetting.cs +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Classes/WindowsSetting.cs @@ -1,8 +1,4 @@ -// Copyright (c) Microsoft Corporation -// The Microsoft Corporation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System.Collections.Generic; +using System.Collections.Generic; namespace Flow.Launcher.Plugin.WindowsSettings.Classes { diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Flow.Launcher.Plugin.WindowsSettings.csproj b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Flow.Launcher.Plugin.WindowsSettings.csproj index 0a597216371..f8a19affd56 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Flow.Launcher.Plugin.WindowsSettings.csproj +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Flow.Launcher.Plugin.WindowsSettings.csproj @@ -1,20 +1,18 @@  + Library net5.0-windows - {5043CECE-E6A7-4867-9CBE-02D27D83747A} - Properties - Flow.Launcher.Plugin.WindowsSettings - Flow.Launcher.Plugin.WindowsSettings + true + true false - false + Properties x64 prompt - true en-US enable - + ..\..\Output\Debug\Plugins\Flow.Launcher.Plugin.WindowsSettings DEBUG;TRACE false @@ -26,7 +24,7 @@ true - + ..\..\Output\Release\Plugins\Flow.Launcher.Plugin.WindowsSettings TRACE true diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/ContextMenuHelper.cs b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/ContextMenuHelper.cs index 4572d2b70fb..d23959329b1 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/ContextMenuHelper.cs +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/ContextMenuHelper.cs @@ -1,8 +1,4 @@ -// Copyright (c) Microsoft Corporation -// The Microsoft Corporation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System; +using System; using System.Collections.Generic; using System.Windows; using Flow.Launcher.Plugin; diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/JsonSettingsListHelper.cs b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/JsonSettingsListHelper.cs index 19cfb30e244..20e78f71774 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/JsonSettingsListHelper.cs +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/JsonSettingsListHelper.cs @@ -1,8 +1,4 @@ -// Copyright (c) Microsoft Corporation -// The Microsoft Corporation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System; +using System; using System.Collections.Generic; using System.IO; using System.Linq; diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/ResultHelper.cs b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/ResultHelper.cs index 998a7f212d2..9da84d09d11 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/ResultHelper.cs +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/ResultHelper.cs @@ -1,8 +1,4 @@ -// Copyright (c) Microsoft Corporation -// The Microsoft Corporation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -102,12 +98,9 @@ internal static List GetResultList( }; } - return resultList; } - - /// /// Add a tool-tip to the given , based o the given . /// diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/TranslationHelper.cs b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/TranslationHelper.cs index 330e013d7a4..88e624a9e97 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/TranslationHelper.cs +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/TranslationHelper.cs @@ -1,8 +1,4 @@ -// Copyright (c) Microsoft Corporation -// The Microsoft Corporation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System.Collections.Generic; +using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using Flow.Launcher.Plugin.WindowsSettings.Classes; diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/UnsupportedSettingsHelper.cs b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/UnsupportedSettingsHelper.cs index 627d875d074..e67be29f5db 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/UnsupportedSettingsHelper.cs +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/UnsupportedSettingsHelper.cs @@ -1,8 +1,4 @@ -// Copyright (c) Microsoft Corporation -// The Microsoft Corporation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System; +using System; using System.Collections.Generic; using System.Linq; using Flow.Launcher.Plugin.WindowsSettings.Classes; diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Main.cs b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Main.cs index b38bd8613ae..cbcca03ae7d 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Main.cs @@ -1,8 +1,4 @@ -// Copyright (c) Microsoft Corporation -// The Microsoft Corporation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System; +using System; using System.Collections.Generic; using System.Globalization; using System.Reflection; diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/README.md b/Plugins/Flow.Launcher.Plugin.WindowsSettings/README.md index e6a98726bd4..8276c25faa0 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/README.md +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/README.md @@ -1,2 +1,2 @@ # Flow.Launcher.Plugin.WindowsSettings -Port from PowerToy WindowsSettings plugin +Ported from PowerToys WindowsSettings plugin diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json b/Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json index 3180e4c4bcb..58c02bd5f77 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json @@ -1,10 +1,10 @@ { - "ID": "5043CECEE6A748679CBE02D27D83747A", + "ID": "5043CETYU6A748679OPA02D27D99677A", "ActionKeyword": "*", "Description": "Windows Settings Query Functionality", "Name": "Windows Settings", "Author": "TobiasSekan", - "Version": "1.0.0", + "Version": "2.0.0", "Language": "csharp", "Website": "https://aka.ms/powertoys", "ExecuteFileName": "Flow.Launcher.Plugin.WindowsSettings.dll", From 8fc5776efe4c5a9b28a9fdcb6b565ac0c616d11f Mon Sep 17 00:00:00 2001 From: Jeremy Date: Wed, 1 Dec 2021 21:25:36 +1100 Subject: [PATCH 499/625] update plugin description --- Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json b/Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json index 58c02bd5f77..5d2ad85e710 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json @@ -1,12 +1,12 @@ { "ID": "5043CETYU6A748679OPA02D27D99677A", "ActionKeyword": "*", - "Description": "Windows Settings Query Functionality", + "Description": "Search settings inside Control Panel and Settings App", "Name": "Windows Settings", "Author": "TobiasSekan", "Version": "2.0.0", "Language": "csharp", - "Website": "https://aka.ms/powertoys", + "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.WindowsSettings.dll", "IcoPath": "Images\\WindowsSettings.light.png" } From 0b725eb02c43f1368095f38058acd5512bc1533b Mon Sep 17 00:00:00 2001 From: Jeremy Date: Wed, 1 Dec 2021 22:15:22 +1100 Subject: [PATCH 500/625] change project to .Net SDK, Any CPU build, remove Platform targeted, --- Flow.Launcher.sln | 24 +++++++++---------- ...low.Launcher.Plugin.WindowsSettings.csproj | 5 +--- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/Flow.Launcher.sln b/Flow.Launcher.sln index 95e8b39c13f..ef4a0519e7f 100644 --- a/Flow.Launcher.sln +++ b/Flow.Launcher.sln @@ -286,18 +286,18 @@ Global {4792A74A-0CEA-4173-A8B2-30E6764C6217}.Release|x64.Build.0 = Release|Any CPU {4792A74A-0CEA-4173-A8B2-30E6764C6217}.Release|x86.ActiveCfg = Release|Any CPU {4792A74A-0CEA-4173-A8B2-30E6764C6217}.Release|x86.Build.0 = Release|Any CPU - {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Debug|Any CPU.ActiveCfg = Debug|x64 - {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Debug|Any CPU.Build.0 = Debug|x64 - {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Debug|x64.ActiveCfg = Debug|x64 - {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Debug|x64.Build.0 = Debug|x64 - {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Debug|x86.ActiveCfg = Debug|x64 - {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Debug|x86.Build.0 = Debug|x64 - {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Release|Any CPU.ActiveCfg = Release|x64 - {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Release|Any CPU.Build.0 = Release|x64 - {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Release|x64.ActiveCfg = Release|x64 - {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Release|x64.Build.0 = Release|x64 - {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Release|x86.ActiveCfg = Release|x64 - {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Release|x86.Build.0 = Release|x64 + {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Debug|x64.ActiveCfg = Debug|Any CPU + {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Debug|x64.Build.0 = Debug|Any CPU + {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Debug|x86.ActiveCfg = Debug|Any CPU + {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Debug|x86.Build.0 = Debug|Any CPU + {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Release|Any CPU.Build.0 = Release|Any CPU + {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Release|x64.ActiveCfg = Release|Any CPU + {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Release|x64.Build.0 = Release|Any CPU + {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Release|x86.ActiveCfg = Release|Any CPU + {5043CECE-E6A7-4867-9CBE-02D27D83747A}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Flow.Launcher.Plugin.WindowsSettings.csproj b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Flow.Launcher.Plugin.WindowsSettings.csproj index f8a19affd56..c30fbf9972a 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Flow.Launcher.Plugin.WindowsSettings.csproj +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Flow.Launcher.Plugin.WindowsSettings.csproj @@ -1,4 +1,4 @@ - + Library net5.0-windows @@ -6,7 +6,6 @@ true false Properties - x64 prompt en-US enable @@ -18,7 +17,6 @@ false portable true - x64 MinimumRecommendedRules.ruleset 4 true @@ -29,7 +27,6 @@ TRACE true portable - x64 MinimumRecommendedRules.ruleset 4 true From 05c1466b8b461f3cdfd4ebfe36bc31b584f4dd1c Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Wed, 1 Dec 2021 20:53:54 -0600 Subject: [PATCH 501/625] Assign Setting to Welcome Page --- Flow.Launcher/HotkeyControl.xaml.cs | 2 +- Flow.Launcher/MainWindow.xaml.cs | 2 +- .../Resources/Pages/WelcomePage1.xaml | 88 ++++++++----------- .../Resources/Pages/WelcomePage1.xaml.cs | 27 +++++- .../Resources/Pages/WelcomePage2.xaml | 1 - .../Resources/Pages/WelcomePage2.xaml.cs | 18 +++- .../Resources/Pages/WelcomePage5.xaml.cs | 9 +- Flow.Launcher/SettingWindow.xaml.cs | 3 +- Flow.Launcher/WelcomeWindow.xaml.cs | 49 +++++------ 9 files changed, 109 insertions(+), 90 deletions(-) diff --git a/Flow.Launcher/HotkeyControl.xaml.cs b/Flow.Launcher/HotkeyControl.xaml.cs index 2b6e275df92..c8d0bef4325 100644 --- a/Flow.Launcher/HotkeyControl.xaml.cs +++ b/Flow.Launcher/HotkeyControl.xaml.cs @@ -31,7 +31,7 @@ void TbHotkey_OnPreviewKeyDown(object sender, KeyEventArgs e) tbMsg.Visibility = Visibility.Hidden; //when alt is pressed, the real key should be e.SystemKey - Key key = (e.Key == Key.System ? e.SystemKey : e.Key); + Key key = e.Key == Key.System ? e.SystemKey : e.Key; SpecialKeyState specialKeyState = GlobalHotkey.Instance.CheckModifiers(); diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 75e3fefa9da..f87419053d5 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -241,7 +241,7 @@ private void InitializeNotifyIcon() private void OpenWelcomeWindow() { - Flow.Launcher.WelcomeWindow WelcomeWindow = new Flow.Launcher.WelcomeWindow(); + Flow.Launcher.WelcomeWindow WelcomeWindow = new WelcomeWindow(_settings); WelcomeWindow.Show(); } private void ToggleGameMode() diff --git a/Flow.Launcher/Resources/Pages/WelcomePage1.xaml b/Flow.Launcher/Resources/Pages/WelcomePage1.xaml index 8957cd2a3e2..1c7531d6464 100644 --- a/Flow.Launcher/Resources/Pages/WelcomePage1.xaml +++ b/Flow.Launcher/Resources/Pages/WelcomePage1.xaml @@ -1,12 +1,12 @@ - + + + @@ -116,37 +139,51 @@ - - - - - - - - - + + + + + + + + + + + + + + + + From d72c685851bea3a10379fa59e85147a3391e8554 Mon Sep 17 00:00:00 2001 From: DB p Date: Fri, 3 Dec 2021 06:09:39 +0900 Subject: [PATCH 520/625] Remove Keyboard Image --- Flow.Launcher/Images/page_img02.png | Bin 15941 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Flow.Launcher/Images/page_img02.png diff --git a/Flow.Launcher/Images/page_img02.png b/Flow.Launcher/Images/page_img02.png deleted file mode 100644 index ac4aa989c2393bd92d3ce9ff40dbb500074e93dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15941 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 From d257040dd5a8bfd322c21a3220ab5dd42fea753e Mon Sep 17 00:00:00 2001 From: DB p Date: Fri, 3 Dec 2021 06:11:18 +0900 Subject: [PATCH 521/625] change ko translataion --- Flow.Launcher/Languages/ko.xaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/Languages/ko.xaml b/Flow.Launcher/Languages/ko.xaml index e5384e4ed78..cb38106b116 100644 --- a/Flow.Launcher/Languages/ko.xaml +++ b/Flow.Launcher/Languages/ko.xaml @@ -235,7 +235,7 @@ 건너뛰기 Flow Launcher에 오신 것을 환영합니다 안녕하세요, Flow Launcher를 처음 실행하시네요! - 시작하기전에 간단한 설정을 진행합니다. 물론 건너 뛰셔도 됩니다. 사용하시는 언어를 선택해주세요. + 시작하기전에 간단한 설정을 진행합니다. 디스켓을 사용하던 고대의 사람들은 이러한 창을 "마법사"라고 불렀습니다. 물론 건너 뛰셔도 됩니다. 사용하시는 언어를 선택해주세요. 모든 것을 모든 곳에서 검색합니다 프로그램, 파일, 즐겨찾기, YouTube, Twitter 등 모든 것을 검색하세요. 마우스에 손대지 않고 키보드만으로 모든 것을 얻을 수 있습니다. Flow는 아래의 단축키로 실행합니다. 변경하려면 입력창을 선택하고 키보드에서 원하는 단축키를 누릅니다. From 848ee1c030cf7a3faf1c9cc969b1e9dcf5a4509c Mon Sep 17 00:00:00 2001 From: DB p Date: Fri, 3 Dec 2021 06:13:25 +0900 Subject: [PATCH 522/625] adjust ko text --- Flow.Launcher/Languages/ko.xaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/Languages/ko.xaml b/Flow.Launcher/Languages/ko.xaml index cb38106b116..eaccfe0224d 100644 --- a/Flow.Launcher/Languages/ko.xaml +++ b/Flow.Launcher/Languages/ko.xaml @@ -235,7 +235,7 @@ 건너뛰기 Flow Launcher에 오신 것을 환영합니다 안녕하세요, Flow Launcher를 처음 실행하시네요! - 시작하기전에 간단한 설정을 진행합니다. 디스켓을 사용하던 고대의 사람들은 이러한 창을 "마법사"라고 불렀습니다. 물론 건너 뛰셔도 됩니다. 사용하시는 언어를 선택해주세요. + 시작하기전에 간단한 설정을 진행합니다. 플로피 디스크를 사용하던 고대의 사람들은 이러한 창을 "마법사"라고 불렀습니다. 물론 건너 뛰셔도 됩니다. 사용하시는 언어를 선택해주세요. 모든 것을 모든 곳에서 검색합니다 프로그램, 파일, 즐겨찾기, YouTube, Twitter 등 모든 것을 검색하세요. 마우스에 손대지 않고 키보드만으로 모든 것을 얻을 수 있습니다. Flow는 아래의 단축키로 실행합니다. 변경하려면 입력창을 선택하고 키보드에서 원하는 단축키를 누릅니다. From 56b9f4f5d77f938a5c6fe377eb20bcb3ea8d3c30 Mon Sep 17 00:00:00 2001 From: DB p Date: Fri, 3 Dec 2021 06:32:58 +0900 Subject: [PATCH 523/625] Add ko translation --- Flow.Launcher/Languages/ko.xaml | 1 + 1 file changed, 1 insertion(+) diff --git a/Flow.Launcher/Languages/ko.xaml b/Flow.Launcher/Languages/ko.xaml index 81063e7cb77..02d67624887 100644 --- a/Flow.Launcher/Languages/ko.xaml +++ b/Flow.Launcher/Languages/ko.xaml @@ -152,6 +152,7 @@ 개발자도구 설정 폴더 로그 폴더 + 마법사 파일관리자 선택 From 430a126e06705c626c640a3e4700b0ed298580d2 Mon Sep 17 00:00:00 2001 From: DB p Date: Fri, 3 Dec 2021 09:00:13 +0900 Subject: [PATCH 524/625] Change En String (deefrawley) --- Flow.Launcher/Languages/en.xaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index b00e8d2a682..d89ef83b34a 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -235,14 +235,14 @@ Skip Welcome to Flow Launcher - Hello, It's your first time to run a Flow Launcher! - Before starting, proceed with a simple setting. Surely, You can skip. Please choose the language you use. - Search and run everything in everywhere + Hello, this is the first time you are running Flow Launcher! + Before starting, this wizard will assist in setting up Flow Launcher. You can skip this if you wish. Please choose a language + Search and run all files and applications on your PC Search everything from applications, files, bookmarks, YouTube, Twitter and more. All from the comfort of your keyboard without ever touching the mouse. Flow Launcher starts with the hotkey below, start with the hotkey below. To change, select input and press the wanted hotkey in keyboard. Hotkeys Action Keyword and Commands - Search the web or run various functions. Certain functions start with the expression action keyword, and if necessary, they can be used without action keywords. Try the queries below in Flow Launcher. + Search the web, launch applications or run various functions through Flow Launcher plugins. Certain functions start with an action keyword, and if necessary, they can be used without action keywords. Try the queries below in Flow Launcher. Let's Start Flow Launcher Finished. Enjoy Flow Launcher. Don't forget the hotkey to start :) From a632cea77e9d4013cfacee50114a9daf90ccb12a Mon Sep 17 00:00:00 2001 From: DB p Date: Fri, 3 Dec 2021 09:05:15 +0900 Subject: [PATCH 525/625] Adjust Korean --- Flow.Launcher/Languages/ko.xaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Flow.Launcher/Languages/ko.xaml b/Flow.Launcher/Languages/ko.xaml index 02d67624887..8b5d2b426d8 100644 --- a/Flow.Launcher/Languages/ko.xaml +++ b/Flow.Launcher/Languages/ko.xaml @@ -235,13 +235,13 @@ 건너뛰기 Flow Launcher에 오신 것을 환영합니다 안녕하세요, Flow Launcher를 처음 실행하시네요! - 시작하기전에 간단한 설정을 진행합니다. 플로피 디스크를 사용하던 고대의 사람들은 이러한 창을 "마법사"라고 불렀습니다. 물론 건너 뛰셔도 됩니다. 사용하시는 언어를 선택해주세요. - 모든 것을 모든 곳에서 검색합니다 + 시작하기전에 이 마법사가 간단한 설정을 도와드릴겁니다.물론 건너 뛰셔도 됩니다. 사용하시는 언어를 선택해주세요. + PC에서 모든 파일과 프로그램을 검색하고 실행합니다 프로그램, 파일, 즐겨찾기, YouTube, Twitter 등 모든 것을 검색하세요. 마우스에 손대지 않고 키보드만으로 모든 것을 얻을 수 있습니다. Flow는 아래의 단축키로 실행합니다. 변경하려면 입력창을 선택하고 키보드에서 원하는 단축키를 누릅니다. 단축키 액션 키워드와 명령어 - 프로그램 이외에도 웹을 검색하거나 다양한 기능을 실행할 수 있습니다. 특정 기능은 액션 키워드로 시작하며, 필요한 경우 액션 키워드 없이도 사용할 수 있습니다. Flow Launcher에서 아래 쿼리를 사용해 보세요. + Flow Launcher는 플러그인을 통해 웹 검색, 프로그램 실행, 다양한 기능을 실행합니다. 특정 기능은 액션 키워드로 시작하며, 필요한 경우 액션 키워드 없이 사용할 수 있습니다. Flow Launcher에서 아래 쿼리를 사용해 보세요. Flow Launcher를 시작합시다 끝났습니다. Flow Launcher를 즐겨주세요. 시작하는 단축키를 잊지마세요 :) From 3d07ab5c5055438aa247792a7d35d924adba75f2 Mon Sep 17 00:00:00 2001 From: DB p Date: Fri, 3 Dec 2021 13:27:34 +0900 Subject: [PATCH 526/625] adjust ko string --- Flow.Launcher/Languages/ko.xaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher/Languages/ko.xaml b/Flow.Launcher/Languages/ko.xaml index 8b5d2b426d8..bbf290f78ff 100644 --- a/Flow.Launcher/Languages/ko.xaml +++ b/Flow.Launcher/Languages/ko.xaml @@ -235,7 +235,7 @@ 건너뛰기 Flow Launcher에 오신 것을 환영합니다 안녕하세요, Flow Launcher를 처음 실행하시네요! - 시작하기전에 이 마법사가 간단한 설정을 도와드릴겁니다.물론 건너 뛰셔도 됩니다. 사용하시는 언어를 선택해주세요. + 시작하기전에 이 마법사가 간단한 설정을 도와드릴겁니다. 물론 건너 뛰셔도 됩니다. 사용하시는 언어를 선택해주세요. PC에서 모든 파일과 프로그램을 검색하고 실행합니다 프로그램, 파일, 즐겨찾기, YouTube, Twitter 등 모든 것을 검색하세요. 마우스에 손대지 않고 키보드만으로 모든 것을 얻을 수 있습니다. Flow는 아래의 단축키로 실행합니다. 변경하려면 입력창을 선택하고 키보드에서 원하는 단축키를 누릅니다. @@ -247,13 +247,13 @@ - 뒤로/ 컨텍스트 메뉴 + 뒤로/ 콘텍스트 메뉴 아이템 이동 - 컨텍스트 메뉴 열기 + 콘텍스트 메뉴 열기 포함된 폴더 열기 관리자 권한으로 실행 검색 기록 - 컨텍스트 메뉴에서 뒤로 가기 + 콘텍스트 메뉴에서 뒤로 가기 선택한 아이템 열기 설정창 열기 플러그인 데이터 새로고침 From 2cedd1bf122bdaf87b53b6ab0b590557c103af9e Mon Sep 17 00:00:00 2001 From: Jeremy Date: Fri, 3 Dec 2021 20:25:39 +1100 Subject: [PATCH 527/625] change weather tip as action keyword is no longer required --- Flow.Launcher/Languages/en.xaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index d89ef83b34a..6f0b420be62 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -259,7 +259,7 @@ Open Setting Window Reload Plugin Data - g Weather + Weather Weather in Google Result > ping 8.8.8.8 Shell Command From a94e6a31db4bf29d4f62a273b2d7c8a02a608663 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Fri, 3 Dec 2021 21:08:42 +1100 Subject: [PATCH 528/625] update code format --- Flow.Launcher/MainWindow.xaml.cs | 2 +- .../Resources/Pages/WelcomePage1.xaml.cs | 24 ------------------- .../Resources/Pages/WelcomePage2.xaml.cs | 3 --- .../Resources/Pages/WelcomePage3.xaml.cs | 14 ----------- .../Resources/Pages/WelcomePage4.xaml.cs | 15 ------------ .../Resources/Pages/WelcomePage5.xaml.cs | 16 ------------- Flow.Launcher/SettingWindow.xaml.cs | 1 - Flow.Launcher/WelcomeWindow.xaml.cs | 14 +---------- 8 files changed, 2 insertions(+), 87 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 54c567c88e1..a6f45257ae8 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -244,7 +244,7 @@ private void CheckFirstLaunch() } private void OpenWelcomeWindow() { - Flow.Launcher.WelcomeWindow WelcomeWindow = new WelcomeWindow(_settings); + var WelcomeWindow = new WelcomeWindow(_settings); WelcomeWindow.Show(); } private void ToggleGameMode() diff --git a/Flow.Launcher/Resources/Pages/WelcomePage1.xaml.cs b/Flow.Launcher/Resources/Pages/WelcomePage1.xaml.cs index 84703d9be19..98fb47288ea 100644 --- a/Flow.Launcher/Resources/Pages/WelcomePage1.xaml.cs +++ b/Flow.Launcher/Resources/Pages/WelcomePage1.xaml.cs @@ -1,39 +1,15 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.IO; -using System.Windows.Media.Imaging; using System.Windows.Navigation; -using System.Windows.Shapes; using Flow.Launcher.Infrastructure.UserSettings; -using System.Windows.Interop; -using Microsoft.Win32; -using Flow.Launcher.Infrastructure; -using Flow.Launcher.ViewModel; using Flow.Launcher.Core.Resource; -using ModernWpf.Navigation; -using Page = ModernWpf.Controls.Page; namespace Flow.Launcher.Resources.Pages { - ///

- /// WelcomePage1.xaml에 대한 상호 작용 논리 - /// public partial class WelcomePage1 { - private bool initialize = false; - protected override void OnNavigatedTo(NavigationEventArgs e) { - if (e.ExtraData is Settings settings) Settings = settings; else diff --git a/Flow.Launcher/Resources/Pages/WelcomePage2.xaml.cs b/Flow.Launcher/Resources/Pages/WelcomePage2.xaml.cs index f7ec0f2705f..5fad71b7498 100644 --- a/Flow.Launcher/Resources/Pages/WelcomePage2.xaml.cs +++ b/Flow.Launcher/Resources/Pages/WelcomePage2.xaml.cs @@ -5,9 +5,6 @@ namespace Flow.Launcher.Resources.Pages { - /// - /// WelcomePage2.xaml에 대한 상호 작용 논리 - /// public partial class WelcomePage2 { private Settings Settings { get; set; } diff --git a/Flow.Launcher/Resources/Pages/WelcomePage3.xaml.cs b/Flow.Launcher/Resources/Pages/WelcomePage3.xaml.cs index 8c2b188ef8f..9051e7c2798 100644 --- a/Flow.Launcher/Resources/Pages/WelcomePage3.xaml.cs +++ b/Flow.Launcher/Resources/Pages/WelcomePage3.xaml.cs @@ -1,23 +1,9 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using Flow.Launcher.Core.Resource; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; using System.Windows.Navigation; -using System.Windows.Shapes; using Flow.Launcher.Infrastructure.UserSettings; namespace Flow.Launcher.Resources.Pages { - public partial class WelcomePage3 { protected override void OnNavigatedTo(NavigationEventArgs e) diff --git a/Flow.Launcher/Resources/Pages/WelcomePage4.xaml.cs b/Flow.Launcher/Resources/Pages/WelcomePage4.xaml.cs index 1c701b20093..11bbcd6ed22 100644 --- a/Flow.Launcher/Resources/Pages/WelcomePage4.xaml.cs +++ b/Flow.Launcher/Resources/Pages/WelcomePage4.xaml.cs @@ -1,24 +1,9 @@ using Flow.Launcher.Infrastructure.UserSettings; using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; using System.Windows.Navigation; -using System.Windows.Shapes; namespace Flow.Launcher.Resources.Pages { - /// - /// WelcomePage4.xaml에 대한 상호 작용 논리 - /// public partial class WelcomePage4 { protected override void OnNavigatedTo(NavigationEventArgs e) diff --git a/Flow.Launcher/Resources/Pages/WelcomePage5.xaml.cs b/Flow.Launcher/Resources/Pages/WelcomePage5.xaml.cs index 5d432bc16a2..abb8053035c 100644 --- a/Flow.Launcher/Resources/Pages/WelcomePage5.xaml.cs +++ b/Flow.Launcher/Resources/Pages/WelcomePage5.xaml.cs @@ -1,23 +1,9 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.IO; -using System.Windows.Media.Imaging; using System.Windows.Navigation; -using System.Windows.Shapes; using Flow.Launcher.Infrastructure.UserSettings; -using System.Windows.Interop; using Microsoft.Win32; using Flow.Launcher.Infrastructure; -using Flow.Launcher.ViewModel; namespace Flow.Launcher.Resources.Pages { @@ -39,7 +25,6 @@ protected override void OnNavigatedTo(NavigationEventArgs e) private void OnAutoStartupChecked(object sender, RoutedEventArgs e) { SetStartup(); - } private void OnAutoStartupUncheck(object sender, RoutedEventArgs e) { @@ -62,7 +47,6 @@ private void SetStartup() private void OnHideOnStartupChecked(object sender, RoutedEventArgs e) { Settings.HideOnStartup = true; - } private void OnHideOnStartupUnchecked(object sender, RoutedEventArgs e) { diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index 4b052e2bd09..11189b1577d 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -319,7 +319,6 @@ private void ColorSchemeSelectedIndexChanged(object sender, EventArgs e) _ => ThemeManager.Current.ApplicationTheme }; - /* Custom TitleBar */ private void OnMinimizeButtonClick(object sender, RoutedEventArgs e) diff --git a/Flow.Launcher/WelcomeWindow.xaml.cs b/Flow.Launcher/WelcomeWindow.xaml.cs index f62f655315b..b41bfa23bfd 100644 --- a/Flow.Launcher/WelcomeWindow.xaml.cs +++ b/Flow.Launcher/WelcomeWindow.xaml.cs @@ -1,17 +1,5 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Animation; -using System.Windows.Media.Imaging; -using System.Windows.Shapes; using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Resources.Pages; using ModernWpf.Media.Animation; @@ -38,7 +26,7 @@ public WelcomeWindow(Settings settings) { Effect = SlideNavigationTransitionEffect.FromLeft }; - Storyboard sb = new Storyboard(); + private int pageNum = 1; private int MaxPage = 5; public string PageDisplay => $"{pageNum}/5"; From af2fae5e213824eb4789069269fd35ee73e8c41a Mon Sep 17 00:00:00 2001 From: Jeremy Date: Fri, 3 Dec 2021 21:11:53 +1100 Subject: [PATCH 529/625] update code format --- Flow.Launcher/SettingWindow.xaml.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index 11189b1577d..db8d1447686 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -115,8 +115,8 @@ private void OnSelectPythonDirectoryClick(object sender, RoutedEventArgs e) private void OnSelectFileManagerClick(object sender, RoutedEventArgs e) { - SelectFileManagerWindow fileManagerChangeWindow = new SelectFileManagerWindow(settings); - fileManagerChangeWindow.ShowDialog(); + SelectFileManagerWindow fileManagerChangeWindow = new SelectFileManagerWindow(settings); + fileManagerChangeWindow.ShowDialog(); } #endregion @@ -276,7 +276,7 @@ private void OpenSettingFolder(object sender, RoutedEventArgs e) private void OpenWelcomeWindow(object sender, RoutedEventArgs e) { - Flow.Launcher.WelcomeWindow WelcomeWindow = new Flow.Launcher.WelcomeWindow(settings); + var WelcomeWindow = new WelcomeWindow(settings); WelcomeWindow.Show(); } private void OpenLogFolder(object sender, RoutedEventArgs e) From f4edff71fecf35a1dd8edad455ef6873882fb353 Mon Sep 17 00:00:00 2001 From: Garulf <535299+Garulf@users.noreply.github.com> Date: Fri, 3 Dec 2021 05:44:33 -0500 Subject: [PATCH 530/625] Add field for tab complete --- Flow.Launcher.Plugin/Result.cs | 11 +++++++++++ Flow.Launcher/ViewModel/MainViewModel.cs | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Flow.Launcher.Plugin/Result.cs b/Flow.Launcher.Plugin/Result.cs index 833ada9cda1..deb22510077 100644 --- a/Flow.Launcher.Plugin/Result.cs +++ b/Flow.Launcher.Plugin/Result.cs @@ -13,6 +13,8 @@ public class Result private string _icoPath; + private string _insertText; + /// /// Provides the title of the result. This is always required. /// @@ -29,6 +31,15 @@ public class Result ///
public string ActionKeywordAssigned { get; set; } + public string InsertText + { + get { return string.IsNullOrEmpty(_insertText) ? Title : _insertText; } + set + { + _insertText = value; + } + } + public string IcoPath { get { return _icoPath; } diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 73a0820ac4d..dc9fd5dd1e7 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -240,7 +240,7 @@ private void InitializeKeyCommands() var result = results.SelectedItem?.Result; if (result != null) // SelectedItem returns null if selection is empty. { - ChangeQueryText(result.Title); + ChangeQueryText(result.InsertText); } }); From 919d4515b9070ecea2a3619f127b60e0c2b12eae Mon Sep 17 00:00:00 2001 From: Garulf <535299+Garulf@users.noreply.github.com> Date: Fri, 3 Dec 2021 05:53:36 -0500 Subject: [PATCH 531/625] Insert subtitle when shift is held --- Flow.Launcher/MainWindow.xaml | 2 +- Flow.Launcher/ViewModel/MainViewModel.cs | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index 31f2c528c5d..563038504a2 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -44,7 +44,7 @@ Date: Fri, 3 Dec 2021 09:30:47 -0500 Subject: [PATCH 532/625] Use suggestion text Use suggestion text if available --- Flow.Launcher.Plugin/Result.cs | 9 +----- Flow.Launcher/MainWindow.xaml | 5 --- Flow.Launcher/MainWindow.xaml.cs | 4 +++ Flow.Launcher/ViewModel/MainViewModel.cs | 41 ++++++++++-------------- 4 files changed, 22 insertions(+), 37 deletions(-) diff --git a/Flow.Launcher.Plugin/Result.cs b/Flow.Launcher.Plugin/Result.cs index deb22510077..45f3e7663c8 100644 --- a/Flow.Launcher.Plugin/Result.cs +++ b/Flow.Launcher.Plugin/Result.cs @@ -31,14 +31,7 @@ public class Result ///
public string ActionKeywordAssigned { get; set; } - public string InsertText - { - get { return string.IsNullOrEmpty(_insertText) ? Title : _insertText; } - set - { - _insertText = value; - } - } + public string SuggestionText { get; set; } = string.Empty; public string IcoPath { diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index 563038504a2..2675dd8825a 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -41,11 +41,6 @@ - - - { - var results = SelectedResults; - - if (index != null) - { - results.SelectedIndex = int.Parse(index.ToString()); - } - - var result = results.SelectedItem?.Result; - if (result != null) // SelectedItem returns null if selection is empty. - { - string _newText = String.Empty; - _newText = result.Title; - var SpecialKeyState = GlobalHotkey.Instance.CheckModifiers(); - if (SpecialKeyState.ShiftPressed) - { - _newText = result.SubTitle; - } - ChangeQueryText(_newText); - } - }); - LoadContextMenuCommand = new RelayCommand(_ => { if (SelectedIsFromQueryResults()) @@ -310,7 +287,6 @@ private void InitializeKeyCommands() public bool GameModeStatus { get; set; } private string _queryText; - public string QueryText { get => _queryText; @@ -339,7 +315,24 @@ public void ChangeQueryText(string queryText, bool reQuery = false) } QueryTextCursorMovedToEnd = true; } + public void InsertSuggestion(string suggestion) + { + var results = SelectedResults; + var result = results.SelectedItem?.Result; + if (result != null) // SelectedItem returns null if selection is empty. + { + suggestion = String.IsNullOrEmpty(suggestion) ? result.Title : suggestion; + string _newText = String.IsNullOrEmpty(result.SuggestionText) ? suggestion : result.SuggestionText; + + var SpecialKeyState = GlobalHotkey.Instance.CheckModifiers(); + if (SpecialKeyState.ShiftPressed) + { + _newText = result.SubTitle; + } + ChangeQueryText(_newText); + } + } public bool LastQuerySelected { get; set; } // This is not a reliable indicator of the cursor's position, it is manually set for a specific purpose. From 5d9a897453c752bf1d2185c91cef9e6970e89291 Mon Sep 17 00:00:00 2001 From: Garulf <535299+Garulf@users.noreply.github.com> Date: Fri, 3 Dec 2021 10:31:59 -0500 Subject: [PATCH 533/625] Have QuerySuggection converter handle suggestions --- .../Converters/QuerySuggestionBoxConverter.cs | 6 +++ Flow.Launcher/MainWindow.xaml | 7 ++++ Flow.Launcher/MainWindow.xaml.cs | 4 -- Flow.Launcher/ViewModel/MainViewModel.cs | 37 ++++++++++--------- 4 files changed, 32 insertions(+), 22 deletions(-) diff --git a/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs b/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs index c70796a6d4e..c4533c019eb 100644 --- a/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs +++ b/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs @@ -44,6 +44,12 @@ public object Convert(object[] values, Type targetType, object parameter, Cultur return string.Empty; // When user typed lower case and result title is uppercase, we still want to display suggestion + + string _suggestion = queryText + selectedResultPossibleSuggestion.Substring(queryText.Length); + if (String.IsNullOrEmpty(selectedResult.SuggestionText)) + { + selectedItem.Result.SuggestionText = _suggestion; + } return queryText + selectedResultPossibleSuggestion.Substring(queryText.Length); } catch (Exception e) diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index 2675dd8825a..3d383d7d8a7 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -41,6 +41,13 @@ + + + { + var results = SelectedResults; + + var result = results.SelectedItem?.Result; + if (result != null) // SelectedItem returns null if selection is empty. + { + string _newText = String.IsNullOrEmpty(result.SuggestionText) ? result.Title : result.SuggestionText; + + var SpecialKeyState = GlobalHotkey.Instance.CheckModifiers(); + if (SpecialKeyState.ShiftPressed) + { + _newText = result.SubTitle; + } + ChangeQueryText(_newText); + } + }); + LoadContextMenuCommand = new RelayCommand(_ => { if (SelectedIsFromQueryResults()) @@ -315,24 +333,7 @@ public void ChangeQueryText(string queryText, bool reQuery = false) } QueryTextCursorMovedToEnd = true; } - public void InsertSuggestion(string suggestion) - { - var results = SelectedResults; - - var result = results.SelectedItem?.Result; - if (result != null) // SelectedItem returns null if selection is empty. - { - suggestion = String.IsNullOrEmpty(suggestion) ? result.Title : suggestion; - string _newText = String.IsNullOrEmpty(result.SuggestionText) ? suggestion : result.SuggestionText; - var SpecialKeyState = GlobalHotkey.Instance.CheckModifiers(); - if (SpecialKeyState.ShiftPressed) - { - _newText = result.SubTitle; - } - ChangeQueryText(_newText); - } - } public bool LastQuerySelected { get; set; } // This is not a reliable indicator of the cursor's position, it is manually set for a specific purpose. @@ -399,7 +400,7 @@ private ResultsViewModel SelectedResults public ICommand OpenSettingCommand { get; set; } public ICommand ReloadPluginDataCommand { get; set; } public ICommand ClearQueryCommand { get; private set; } - public ICommand ReplaceQueryWithResult { get; set; } + public ICommand InsertSuggestion { get; set; } public string OpenResultCommandModifiers { get; private set; } From f3c0c3384d4e6a623f8a9541298d57f76472b52e Mon Sep 17 00:00:00 2001 From: DB p Date: Sat, 4 Dec 2021 01:19:51 +0900 Subject: [PATCH 534/625] Change Default HideOnStartup to true --- Flow.Launcher.Infrastructure/UserSettings/Settings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 1c08da0d6c9..6bf9c2ff010 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -135,7 +135,7 @@ public string QuerySearchPrecisionString public bool EnableUpdateLog { get; set; } public bool StartFlowLauncherOnSystemStartup { get; set; } = false; - public bool HideOnStartup { get; set; } + public bool HideOnStartup { get; set; } = true; bool _hideNotifyIcon { get; set; } public bool HideNotifyIcon { From 0ed52a2c9c4ada7b97a7062b1754d2c1a028abd1 Mon Sep 17 00:00:00 2001 From: DB p Date: Sat, 4 Dec 2021 02:06:42 +0900 Subject: [PATCH 535/625] - change string vs to sn (sticky notes) - Add ClearFocus When Set hotkey - Add get focus when click window --- Flow.Launcher/HotkeyControl.xaml.cs | 1 + Flow.Launcher/Languages/en.xaml | 4 ++-- Flow.Launcher/Languages/ko.xaml | 6 +++--- Flow.Launcher/WelcomeWindow.xaml | 2 ++ Flow.Launcher/WelcomeWindow.xaml.cs | 16 ++++++++++++++++ 5 files changed, 24 insertions(+), 5 deletions(-) diff --git a/Flow.Launcher/HotkeyControl.xaml.cs b/Flow.Launcher/HotkeyControl.xaml.cs index c8d0bef4325..dd7a138d439 100644 --- a/Flow.Launcher/HotkeyControl.xaml.cs +++ b/Flow.Launcher/HotkeyControl.xaml.cs @@ -78,6 +78,7 @@ public void SetHotkey(HotkeyModel keyModel, bool triggerValidate = true) } tbMsg.Visibility = Visibility.Visible; OnHotkeyChanged(); + Keyboard.ClearFocus(); } } diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 6f0b420be62..78daee8bb40 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -265,7 +265,7 @@ Shell Command Bluetooth Bluetooth in Windows Setting - vs - Visual Studio + sn + Sticky Notes diff --git a/Flow.Launcher/Languages/ko.xaml b/Flow.Launcher/Languages/ko.xaml index bbf290f78ff..66d101a5a46 100644 --- a/Flow.Launcher/Languages/ko.xaml +++ b/Flow.Launcher/Languages/ko.xaml @@ -258,13 +258,13 @@ 설정창 열기 플러그인 데이터 새로고침 - g 날씨 + 날씨 구글 날씨 검색 > ping 8.8.8.8 쉘 명령어 블루투스 윈도우 블루투스 설정 - vs - Visual Studio + 스메 + 스티커 메모 \ No newline at end of file diff --git a/Flow.Launcher/WelcomeWindow.xaml b/Flow.Launcher/WelcomeWindow.xaml index 93f41d27818..d797a623b01 100644 --- a/Flow.Launcher/WelcomeWindow.xaml +++ b/Flow.Launcher/WelcomeWindow.xaml @@ -8,8 +8,10 @@ xmlns:ui="http://schemas.modernwpf.com/2019" Name="FlowWelcomeWindow" Title="Welcome to Flow Launcher" + Activated="OnActivated" Width="550" Height="650" + MouseDown="window_MouseDown" Background="{DynamicResource Color00B}" Foreground="{DynamicResource PopupTextColor}" WindowStartupLocation="CenterScreen" diff --git a/Flow.Launcher/WelcomeWindow.xaml.cs b/Flow.Launcher/WelcomeWindow.xaml.cs index b41bfa23bfd..eaa9938727d 100644 --- a/Flow.Launcher/WelcomeWindow.xaml.cs +++ b/Flow.Launcher/WelcomeWindow.xaml.cs @@ -1,5 +1,7 @@ using System; using System.Windows; +using System.Windows.Input; +using System.Windows.Controls; using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Resources.Pages; using ModernWpf.Media.Animation; @@ -90,5 +92,19 @@ private static Type PageTypeSelector(int pageNumber) _ => throw new ArgumentOutOfRangeException(nameof(pageNumber), pageNumber, "Unexpected Page Number") }; } + + private void window_MouseDown(object sender, MouseButtonEventArgs e) /* for close hotkey popup */ + { + if (Keyboard.FocusedElement is not TextBox textBox) + { + return; + } + var tRequest = new TraversalRequest(FocusNavigationDirection.Next); + textBox.MoveFocus(tRequest); + } + private void OnActivated(object sender, EventArgs e) + { + Keyboard.ClearFocus(); + } } } \ No newline at end of file From ef7f471d507acd86494b55db7412303532292cb6 Mon Sep 17 00:00:00 2001 From: DB p Date: Sat, 4 Dec 2021 02:20:49 +0900 Subject: [PATCH 536/625] Fix Save in CheckFristLaunch --- Flow.Launcher/MainWindow.xaml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index a6f45257ae8..c27cccd5c8a 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -238,7 +238,7 @@ private void CheckFirstLaunch() if (_settings.FirstLaunch) { _settings.FirstLaunch = false; - _viewModel.Save(); + PluginManager.API.SaveAppAllSettings(); OpenWelcomeWindow(); } } From 35838b23af2d858fd0d6f8bb0cd616c98f993016 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Fri, 3 Dec 2021 13:36:08 -0600 Subject: [PATCH 537/625] Revise Hotkey control logic to remove hotkey at focus and add it back at lost focus. --- Flow.Launcher/HotkeyControl.xaml.cs | 18 +++++++----- .../Resources/Pages/WelcomePage2.xaml | 4 ++- .../Resources/Pages/WelcomePage2.xaml.cs | 29 ++++++++++++------- Flow.Launcher/SettingWindow.xaml | 3 +- Flow.Launcher/SettingWindow.xaml.cs | 12 +++++++- 5 files changed, 46 insertions(+), 20 deletions(-) diff --git a/Flow.Launcher/HotkeyControl.xaml.cs b/Flow.Launcher/HotkeyControl.xaml.cs index dd7a138d439..d4836b976c6 100644 --- a/Flow.Launcher/HotkeyControl.xaml.cs +++ b/Flow.Launcher/HotkeyControl.xaml.cs @@ -8,6 +8,7 @@ using Flow.Launcher.Helper; using Flow.Launcher.Infrastructure.Hotkey; using Flow.Launcher.Plugin; +using System.Threading; namespace Flow.Launcher { @@ -25,8 +26,14 @@ public HotkeyControl() InitializeComponent(); } + private CancellationTokenSource hotkeyUpdateSource; + void TbHotkey_OnPreviewKeyDown(object sender, KeyEventArgs e) { + hotkeyUpdateSource?.Cancel(); + hotkeyUpdateSource?.Dispose(); + hotkeyUpdateSource = new(); + var token = hotkeyUpdateSource.Token; e.Handled = true; tbMsg.Visibility = Visibility.Hidden; @@ -52,7 +59,8 @@ void TbHotkey_OnPreviewKeyDown(object sender, KeyEventArgs e) Dispatcher.InvokeAsync(async () => { await Task.Delay(500); - SetHotkey(hotkeyModel); + if (!token.IsCancellationRequested) + SetHotkey(hotkeyModel); }); } @@ -78,7 +86,6 @@ public void SetHotkey(HotkeyModel keyModel, bool triggerValidate = true) } tbMsg.Visibility = Visibility.Visible; OnHotkeyChanged(); - Keyboard.ClearFocus(); } } @@ -89,9 +96,6 @@ public void SetHotkey(string keyStr, bool triggerValidate = true) private bool CheckHotkeyAvailability() => HotKeyMapper.CheckAvailability(CurrentHotkey); - public new bool IsFocused - { - get { return tbHotkey.IsFocused; } - } + public new bool IsFocused => tbHotkey.IsFocused; } -} +} \ No newline at end of file diff --git a/Flow.Launcher/Resources/Pages/WelcomePage2.xaml b/Flow.Launcher/Resources/Pages/WelcomePage2.xaml index f8b30093bc2..033f9fe6606 100644 --- a/Flow.Launcher/Resources/Pages/WelcomePage2.xaml +++ b/Flow.Launcher/Resources/Pages/WelcomePage2.xaml @@ -113,7 +113,9 @@ x:Name="HotkeyControl" Width="300" Height="35" - Margin="-206,10,0,0" /> + Margin="-206,10,0,0" + GotFocus="HotkeyControl_OnGotFocus" + LostFocus="HotkeyControl_OnLostFocus"/> diff --git a/Flow.Launcher/Resources/Pages/WelcomePage2.xaml.cs b/Flow.Launcher/Resources/Pages/WelcomePage2.xaml.cs index 5fad71b7498..70c828f47ce 100644 --- a/Flow.Launcher/Resources/Pages/WelcomePage2.xaml.cs +++ b/Flow.Launcher/Resources/Pages/WelcomePage2.xaml.cs @@ -1,6 +1,8 @@ using Flow.Launcher.Helper; +using Flow.Launcher.Infrastructure.Hotkey; using Flow.Launcher.Infrastructure.UserSettings; using System; +using System.Windows; using System.Windows.Navigation; namespace Flow.Launcher.Resources.Pages @@ -17,16 +19,23 @@ protected override void OnNavigatedTo(NavigationEventArgs e) throw new ArgumentException("Unexpected Parameter setting."); InitializeComponent(); - HotkeyControl.SetHotkey(new Infrastructure.Hotkey.HotkeyModel(Settings.Hotkey)); - HotkeyControl.HotkeyChanged += (_, _) => + HotkeyControl.SetHotkey(new Infrastructure.Hotkey.HotkeyModel(Settings.Hotkey), false); + } + private void HotkeyControl_OnGotFocus(object sender, RoutedEventArgs args) + { + HotKeyMapper.RemoveHotkey(Settings.Hotkey); + } + private void HotkeyControl_OnLostFocus(object sender, RoutedEventArgs args) + { + if (HotkeyControl.CurrentHotkeyAvailable) + { + HotKeyMapper.SetHotkey(HotkeyControl.CurrentHotkey, HotKeyMapper.OnToggleHotkey); + Settings.Hotkey = HotkeyControl.CurrentHotkey.ToString(); + } + else { - if (HotkeyControl.CurrentHotkeyAvailable) - { - HotKeyMapper.SetHotkey(HotkeyControl.CurrentHotkey, HotKeyMapper.OnToggleHotkey); - HotKeyMapper.RemoveHotkey(Settings.Hotkey); - Settings.Hotkey = HotkeyControl.CurrentHotkey.ToString(); - } - }; + HotKeyMapper.SetHotkey(new HotkeyModel(Settings.Hotkey), HotKeyMapper.OnToggleHotkey); + } } } -} +} \ No newline at end of file diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 0bcac919fe3..981b35f3cab 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -2018,7 +2018,8 @@ Margin="0,0,0,0" HorizontalAlignment="Right" HorizontalContentAlignment="Right" - HotkeyChanged="OnHotkeyChanged" + LostFocus="OnHotkeyControlFocusLost" + GotFocus="OnHotkeyControlFocused" Loaded="OnHotkeyControlLoaded" /> diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index db8d1447686..8967606409e 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -3,6 +3,7 @@ using Flow.Launcher.Core.Resource; using Flow.Launcher.Helper; using Flow.Launcher.Infrastructure; +using Flow.Launcher.Infrastructure.Hotkey; using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Plugin; using Flow.Launcher.Plugin.SharedCommands; @@ -128,7 +129,12 @@ private void OnHotkeyControlLoaded(object sender, RoutedEventArgs e) HotkeyControl.SetHotkey(viewModel.Settings.Hotkey, false); } - void OnHotkeyChanged(object sender, EventArgs e) + private void OnHotkeyControlFocused(object sender, EventArgs e) + { + HotKeyMapper.RemoveHotkey(settings.Hotkey); + } + + private void OnHotkeyControlFocusLost(object sender, EventArgs e) { if (HotkeyControl.CurrentHotkeyAvailable) { @@ -136,6 +142,10 @@ void OnHotkeyChanged(object sender, EventArgs e) HotKeyMapper.RemoveHotkey(settings.Hotkey); settings.Hotkey = HotkeyControl.CurrentHotkey.ToString(); } + else + { + HotKeyMapper.SetHotkey(new HotkeyModel(settings.Hotkey), HotKeyMapper.OnToggleHotkey); + } } private void OnDeleteCustomHotkeyClick(object sender, RoutedEventArgs e) From 1f5478d3c5a79a7505dac6fc2bc5f6629f36862f Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Fri, 3 Dec 2021 13:45:36 -0600 Subject: [PATCH 538/625] Fix incompatible delegate type --- Flow.Launcher/SettingWindow.xaml.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index 8967606409e..3f2d7ebd3e5 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -129,12 +129,12 @@ private void OnHotkeyControlLoaded(object sender, RoutedEventArgs e) HotkeyControl.SetHotkey(viewModel.Settings.Hotkey, false); } - private void OnHotkeyControlFocused(object sender, EventArgs e) + private void OnHotkeyControlFocused(object sender, RoutedEventArgs e) { HotKeyMapper.RemoveHotkey(settings.Hotkey); } - private void OnHotkeyControlFocusLost(object sender, EventArgs e) + private void OnHotkeyControlFocusLost(object sender, RoutedEventArgs e) { if (HotkeyControl.CurrentHotkeyAvailable) { From c8a9c29463be6b0d1fbed40581d2f82607680be6 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Fri, 3 Dec 2021 15:10:25 -0600 Subject: [PATCH 539/625] Clear Focus after 500ms user no input hotkey --- Flow.Launcher/HotkeyControl.xaml.cs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/Flow.Launcher/HotkeyControl.xaml.cs b/Flow.Launcher/HotkeyControl.xaml.cs index d4836b976c6..43a4936b074 100644 --- a/Flow.Launcher/HotkeyControl.xaml.cs +++ b/Flow.Launcher/HotkeyControl.xaml.cs @@ -28,7 +28,7 @@ public HotkeyControl() private CancellationTokenSource hotkeyUpdateSource; - void TbHotkey_OnPreviewKeyDown(object sender, KeyEventArgs e) + private void TbHotkey_OnPreviewKeyDown(object sender, KeyEventArgs e) { hotkeyUpdateSource?.Cancel(); hotkeyUpdateSource?.Dispose(); @@ -56,15 +56,15 @@ void TbHotkey_OnPreviewKeyDown(object sender, KeyEventArgs e) return; } - Dispatcher.InvokeAsync(async () => + _ = Dispatcher.InvokeAsync(async () => { - await Task.Delay(500); + await Task.Delay(500, token); if (!token.IsCancellationRequested) - SetHotkey(hotkeyModel); + await SetHotkey(hotkeyModel); }); } - public void SetHotkey(HotkeyModel keyModel, bool triggerValidate = true) + public async Task SetHotkey(HotkeyModel keyModel, bool triggerValidate = true) { CurrentHotkey = keyModel; @@ -86,6 +86,13 @@ public void SetHotkey(HotkeyModel keyModel, bool triggerValidate = true) } tbMsg.Visibility = Visibility.Visible; OnHotkeyChanged(); + + var token = hotkeyUpdateSource.Token; + await Task.Delay(500, token); + if (token.IsCancellationRequested) + return; + FocusManager.SetFocusedElement(FocusManager.GetFocusScope(this), null); + Keyboard.ClearFocus(); } } From 41279998d1c9003db740cb034fb1f1329ab6e456 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Sat, 4 Dec 2021 12:40:52 +1100 Subject: [PATCH 540/625] update wording --- Flow.Launcher/Languages/en.xaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 78daee8bb40..926ed558b6c 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -239,7 +239,7 @@ Before starting, this wizard will assist in setting up Flow Launcher. You can skip this if you wish. Please choose a language Search and run all files and applications on your PC Search everything from applications, files, bookmarks, YouTube, Twitter and more. All from the comfort of your keyboard without ever touching the mouse. - Flow Launcher starts with the hotkey below, start with the hotkey below. To change, select input and press the wanted hotkey in keyboard. + Flow Launcher starts with the hotkey below, go ahead and try it out now. To change it, click on the input and press the desired hotkey on the keyboard. Hotkeys Action Keyword and Commands Search the web, launch applications or run various functions through Flow Launcher plugins. Certain functions start with an action keyword, and if necessary, they can be used without action keywords. Try the queries below in Flow Launcher. From 3b5b840b3973b166a4e512f6de7e416258939a4a Mon Sep 17 00:00:00 2001 From: DB p Date: Sat, 4 Dec 2021 11:20:46 +0900 Subject: [PATCH 541/625] Fix CustomHotkey Listview Height --- Flow.Launcher/SettingWindow.xaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 981b35f3cab..6152e960dc6 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -1991,8 +1991,8 @@ - - + + + Loaded="OnHotkeyControlLoaded" + LostFocus="OnHotkeyControlFocusLost" />  From 09e10c4ce84fdd470801386d437f26feae10373b Mon Sep 17 00:00:00 2001 From: Garulf <535299+Garulf@users.noreply.github.com> Date: Sat, 4 Dec 2021 02:04:57 -0500 Subject: [PATCH 542/625] Initial commit --- Flow.Launcher/MainWindow.xaml | 1 + Flow.Launcher/MainWindow.xaml.cs | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index dd897965075..618cee60983 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -172,6 +172,7 @@ Background="Transparent" PreviewDragOver="OnPreviewDragOver" Style="{DynamicResource QueryBoxStyle}" + SelectionChanged="TextBox_SelectionChanged" Text="{Binding QueryText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Visibility="Visible"> diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index ba0b63a5211..749f006c721 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -260,6 +260,14 @@ private void InitProgressbarAnimation() isProgressBarStoryboardPaused = true; } + private void TextBox_SelectionChanged(object sender, RoutedEventArgs e) + { + + // QueryTextSuggestionBox.ScrollToCaret(); + QueryTextSuggestionBox.ScrollToLine(QueryTextBox.GetLineIndexFromCharacterIndex(QueryTextBox.SelectionStart)); + QueryTextSuggestionBox.CaretIndex = QueryTextBox.CaretIndex; + } + public void WindowAnimator() { if (_animating) From 721e481a0ee8b00db2593a635cd0a4459164c5c5 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sat, 4 Dec 2021 01:58:04 -0600 Subject: [PATCH 543/625] Allow unsafe for release --- .../Flow.Launcher.Infrastructure.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj b/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj index e01bc1efd56..3a3b2d97e84 100644 --- a/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj +++ b/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj @@ -32,7 +32,7 @@ TRACE prompt 4 - false + true false From 846333af1ef868c3f7f497d467ddd1b18dab2b16 Mon Sep 17 00:00:00 2001 From: Garulf <535299+Garulf@users.noreply.github.com> Date: Sat, 4 Dec 2021 03:51:21 -0500 Subject: [PATCH 544/625] Initial commit --- .../Converters/QuerySuggestionBoxConverter.cs | 11 +++++++---- Flow.Launcher/MainWindow.xaml | 8 ++++---- Flow.Launcher/MainWindow.xaml.cs | 6 ++++-- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs b/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs index c70796a6d4e..3de95fe479f 100644 --- a/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs +++ b/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs @@ -1,5 +1,6 @@ using System; using System.Globalization; +using System.Windows.Controls; using System.Windows.Data; using Flow.Launcher.Infrastructure.Logger; using Flow.Launcher.ViewModel; @@ -10,19 +11,21 @@ public class QuerySuggestionBoxConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { - if (values.Length != 2) + if (values.Length != 3) { return string.Empty; } - + var QueryText = values[1] as TextBox; + var Suggestion = values[0] as TextBox; + Suggestion.ScrollToHorizontalOffset(QueryText.HorizontalOffset); // first prop is the current query string - var queryText = (string)values[0]; + var queryText = QueryText.Text; if (string.IsNullOrEmpty(queryText)) return string.Empty; // second prop is the current selected item result - var val = values[1]; + var val = values[2]; if (val == null) { return string.Empty; diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index 618cee60983..b419c20920b 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -161,7 +161,8 @@ Style="{DynamicResource QuerySuggestionBoxStyle}"> - + + @@ -171,10 +172,9 @@ AllowDrop="True" Background="Transparent" PreviewDragOver="OnPreviewDragOver" - Style="{DynamicResource QueryBoxStyle}" - SelectionChanged="TextBox_SelectionChanged" + Style="{DynamicResource QueryBoxStyle }" Text="{Binding QueryText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" - Visibility="Visible"> + Visibility="Visible" Margin="16,7,0,7"> diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 749f006c721..e2c443b1216 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -262,10 +262,12 @@ private void InitProgressbarAnimation() private void TextBox_SelectionChanged(object sender, RoutedEventArgs e) { - + // QueryTextSuggestionBox.ScrollToCaret(); - QueryTextSuggestionBox.ScrollToLine(QueryTextBox.GetLineIndexFromCharacterIndex(QueryTextBox.SelectionStart)); QueryTextSuggestionBox.CaretIndex = QueryTextBox.CaretIndex; + QueryTextSuggestionBox.ScrollToHorizontalOffset(QueryTextBox.HorizontalOffset); + + } public void WindowAnimator() From ab2fe8fdc3f28efcb04c111506c9edcb4d6cbfeb Mon Sep 17 00:00:00 2001 From: Garulf <535299+Garulf@users.noreply.github.com> Date: Sat, 4 Dec 2021 04:03:26 -0500 Subject: [PATCH 545/625] Move suggestion caret --- Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs b/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs index 3de95fe479f..64e75f5730a 100644 --- a/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs +++ b/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs @@ -17,7 +17,9 @@ public object Convert(object[] values, Type targetType, object parameter, Cultur } var QueryText = values[1] as TextBox; var Suggestion = values[0] as TextBox; + Suggestion.CaretIndex = QueryText.CaretIndex; Suggestion.ScrollToHorizontalOffset(QueryText.HorizontalOffset); + // first prop is the current query string var queryText = QueryText.Text; From e9102f31932ecb076ca7d11ff1b12f4d73658dfc Mon Sep 17 00:00:00 2001 From: Garulf <535299+Garulf@users.noreply.github.com> Date: Sat, 4 Dec 2021 04:03:38 -0500 Subject: [PATCH 546/625] Revert accidental change --- Flow.Launcher/MainWindow.xaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index b419c20920b..66278905ffd 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -172,9 +172,9 @@ AllowDrop="True" Background="Transparent" PreviewDragOver="OnPreviewDragOver" - Style="{DynamicResource QueryBoxStyle }" + Style="{DynamicResource QueryBoxStyle}" Text="{Binding QueryText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" - Visibility="Visible" Margin="16,7,0,7"> + Visibility="Visible"> From 984f2a137fbf593b3a77ed592d03d112bb918da6 Mon Sep 17 00:00:00 2001 From: Garulf <535299+Garulf@users.noreply.github.com> Date: Sat, 4 Dec 2021 04:04:55 -0500 Subject: [PATCH 547/625] Remove unused function --- Flow.Launcher/MainWindow.xaml.cs | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index e2c443b1216..7ab4371c9f4 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -259,17 +259,6 @@ private void InitProgressbarAnimation() _viewModel.ProgressBarVisibility = Visibility.Hidden; isProgressBarStoryboardPaused = true; } - - private void TextBox_SelectionChanged(object sender, RoutedEventArgs e) - { - - // QueryTextSuggestionBox.ScrollToCaret(); - QueryTextSuggestionBox.CaretIndex = QueryTextBox.CaretIndex; - QueryTextSuggestionBox.ScrollToHorizontalOffset(QueryTextBox.HorizontalOffset); - - - } - public void WindowAnimator() { if (_animating) From 178776f2006a749f17875fc9213624acf4bbee46 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Sat, 4 Dec 2021 20:36:04 +1100 Subject: [PATCH 548/625] fix popup empty when same key press, add reset pop msg when lost focus --- Flow.Launcher/HotkeyControl.xaml | 3 ++- Flow.Launcher/HotkeyControl.xaml.cs | 13 ++++++++++++- Flow.Launcher/Resources/Pages/WelcomePage2.xaml.cs | 11 +++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/HotkeyControl.xaml b/Flow.Launcher/HotkeyControl.xaml index 94cdc6703e5..9b5f671d8f5 100644 --- a/Flow.Launcher/HotkeyControl.xaml +++ b/Flow.Launcher/HotkeyControl.xaml @@ -50,6 +50,7 @@ VerticalContentAlignment="Center" input:InputMethod.IsInputMethodEnabled="False" PreviewKeyDown="TbHotkey_OnPreviewKeyDown" - TabIndex="100" /> + TabIndex="100" + LostFocus="tbHotkey_LostFocus"/> \ No newline at end of file diff --git a/Flow.Launcher/HotkeyControl.xaml.cs b/Flow.Launcher/HotkeyControl.xaml.cs index 43a4936b074..9ba7c43681f 100644 --- a/Flow.Launcher/HotkeyControl.xaml.cs +++ b/Flow.Launcher/HotkeyControl.xaml.cs @@ -14,6 +14,10 @@ namespace Flow.Launcher { public partial class HotkeyControl : UserControl { + private Brush tbMsgForegroundColorOriginal; + + private string tbMsgTextOriginal; + public HotkeyModel CurrentHotkey { get; private set; } public bool CurrentHotkeyAvailable { get; private set; } @@ -24,6 +28,8 @@ public partial class HotkeyControl : UserControl public HotkeyControl() { InitializeComponent(); + tbMsgTextOriginal = tbMsg.Text; + tbMsgForegroundColorOriginal = tbMsg.Foreground; } private CancellationTokenSource hotkeyUpdateSource; @@ -35,7 +41,6 @@ private void TbHotkey_OnPreviewKeyDown(object sender, KeyEventArgs e) hotkeyUpdateSource = new(); var token = hotkeyUpdateSource.Token; e.Handled = true; - tbMsg.Visibility = Visibility.Hidden; //when alt is pressed, the real key should be e.SystemKey Key key = e.Key == Key.System ? e.SystemKey : e.Key; @@ -104,5 +109,11 @@ public void SetHotkey(string keyStr, bool triggerValidate = true) private bool CheckHotkeyAvailability() => HotKeyMapper.CheckAvailability(CurrentHotkey); public new bool IsFocused => tbHotkey.IsFocused; + + private void tbHotkey_LostFocus(object sender, RoutedEventArgs e) + { + tbMsg.Text = tbMsgTextOriginal; + tbMsg.Foreground = tbMsgForegroundColorOriginal; + } } } \ No newline at end of file diff --git a/Flow.Launcher/Resources/Pages/WelcomePage2.xaml.cs b/Flow.Launcher/Resources/Pages/WelcomePage2.xaml.cs index 70c828f47ce..a433611f605 100644 --- a/Flow.Launcher/Resources/Pages/WelcomePage2.xaml.cs +++ b/Flow.Launcher/Resources/Pages/WelcomePage2.xaml.cs @@ -3,6 +3,7 @@ using Flow.Launcher.Infrastructure.UserSettings; using System; using System.Windows; +using System.Windows.Media; using System.Windows.Navigation; namespace Flow.Launcher.Resources.Pages @@ -11,13 +12,20 @@ public partial class WelcomePage2 { private Settings Settings { get; set; } + private Brush tbMsgForegroundColorOriginal; + + private string tbMsgTextOriginal; + protected override void OnNavigatedTo(NavigationEventArgs e) { if (e.ExtraData is Settings settings) Settings = settings; else throw new ArgumentException("Unexpected Parameter setting."); + InitializeComponent(); + tbMsgTextOriginal = HotkeyControl.tbMsg.Text; + tbMsgForegroundColorOriginal = HotkeyControl.tbMsg.Foreground; HotkeyControl.SetHotkey(new Infrastructure.Hotkey.HotkeyModel(Settings.Hotkey), false); } @@ -36,6 +44,9 @@ private void HotkeyControl_OnLostFocus(object sender, RoutedEventArgs args) { HotKeyMapper.SetHotkey(new HotkeyModel(Settings.Hotkey), HotKeyMapper.OnToggleHotkey); } + + HotkeyControl.tbMsg.Text = tbMsgTextOriginal; + HotkeyControl.tbMsg.Foreground = tbMsgForegroundColorOriginal; } } } \ No newline at end of file From 1d9bc990b29f7fca82220f064b23f843e59b36b4 Mon Sep 17 00:00:00 2001 From: Garulf <535299+Garulf@users.noreply.github.com> Date: Sat, 4 Dec 2021 10:20:00 -0500 Subject: [PATCH 549/625] Remove unused variable Co-authored-by: Jeremy Wu --- Flow.Launcher.Plugin/Result.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/Flow.Launcher.Plugin/Result.cs b/Flow.Launcher.Plugin/Result.cs index 45f3e7663c8..55c14b2c7b1 100644 --- a/Flow.Launcher.Plugin/Result.cs +++ b/Flow.Launcher.Plugin/Result.cs @@ -13,8 +13,6 @@ public class Result private string _icoPath; - private string _insertText; - /// /// Provides the title of the result. This is always required. /// From 64b3a62dd989838c2008938c7cec8fd3f0e7f953 Mon Sep 17 00:00:00 2001 From: Garulf <535299+Garulf@users.noreply.github.com> Date: Sat, 4 Dec 2021 13:31:54 -0500 Subject: [PATCH 550/625] When QueryTextBox scrolls hide Suggestion --- .../Converters/QuerySuggestionBoxConverter.cs | 12 +++++------- Flow.Launcher/MainWindow.xaml | 1 - 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs b/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs index 64e75f5730a..bfff2782934 100644 --- a/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs +++ b/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs @@ -11,14 +11,12 @@ public class QuerySuggestionBoxConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { - if (values.Length != 3) + if (values.Length != 2) { return string.Empty; } - var QueryText = values[1] as TextBox; - var Suggestion = values[0] as TextBox; - Suggestion.CaretIndex = QueryText.CaretIndex; - Suggestion.ScrollToHorizontalOffset(QueryText.HorizontalOffset); + var QueryText = values[0] as TextBox; + // first prop is the current query string var queryText = QueryText.Text; @@ -27,7 +25,7 @@ public object Convert(object[] values, Type targetType, object parameter, Cultur return string.Empty; // second prop is the current selected item result - var val = values[2]; + var val = values[1]; if (val == null) { return string.Empty; @@ -45,7 +43,7 @@ public object Convert(object[] values, Type targetType, object parameter, Cultur var selectedResultActionKeyword = string.IsNullOrEmpty(selectedResult.ActionKeywordAssigned) ? "" : selectedResult.ActionKeywordAssigned + " "; var selectedResultPossibleSuggestion = selectedResultActionKeyword + selectedResult.Title; - if (!selectedResultPossibleSuggestion.StartsWith(queryText, StringComparison.CurrentCultureIgnoreCase)) + if (!selectedResultPossibleSuggestion.StartsWith(queryText, StringComparison.CurrentCultureIgnoreCase) || QueryText.HorizontalOffset != 0) return string.Empty; // When user typed lower case and result title is uppercase, we still want to display suggestion diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index 66278905ffd..9c74e417b7c 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -161,7 +161,6 @@ Style="{DynamicResource QuerySuggestionBoxStyle}"> - From 40b1a289c696db93b0d6b9920de0b035e77e2289 Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 5 Dec 2021 06:57:21 +0900 Subject: [PATCH 551/625] Add Padding in plugin list in settingpanel --- Flow.Launcher/SettingWindow.xaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 4fac9ec27f5..43b633bfa50 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -896,7 +896,7 @@ Date: Sun, 5 Dec 2021 07:09:11 +0900 Subject: [PATCH 552/625] Change Padding to Margin --- Flow.Launcher/SettingWindow.xaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 43b633bfa50..0e98d8881f0 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -895,8 +895,8 @@ Background="{DynamicResource Color01B}"> Date: Sat, 4 Dec 2021 18:19:09 -0500 Subject: [PATCH 553/625] Push Text path --- Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs | 4 ++-- Flow.Launcher/MainWindow.xaml | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs b/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs index bfff2782934..64b47833d9b 100644 --- a/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs +++ b/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs @@ -11,7 +11,7 @@ public class QuerySuggestionBoxConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { - if (values.Length != 2) + if (values.Length != 3) { return string.Empty; } @@ -19,7 +19,7 @@ public object Convert(object[] values, Type targetType, object parameter, Cultur // first prop is the current query string - var queryText = QueryText.Text; + var queryText = (string)values[2]; if (string.IsNullOrEmpty(queryText)) return string.Empty; diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index 9c74e417b7c..acfa964060f 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -163,6 +163,7 @@ + From f24c14183cb8f535a55f80f56549e4c3f47d4d99 Mon Sep 17 00:00:00 2001 From: Garulf <535299+Garulf@users.noreply.github.com> Date: Sat, 4 Dec 2021 20:16:23 -0500 Subject: [PATCH 554/625] Change mode to OneWay --- Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs | 6 +++--- Flow.Launcher/MainWindow.xaml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs b/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs index 64b47833d9b..e68098c4980 100644 --- a/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs +++ b/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs @@ -11,15 +11,15 @@ public class QuerySuggestionBoxConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { - if (values.Length != 3) + if (values.Length != 2) { return string.Empty; } var QueryText = values[0] as TextBox; - // first prop is the current query string - var queryText = (string)values[2]; + + var queryText = QueryText.Text; if (string.IsNullOrEmpty(queryText)) return string.Empty; diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index acfa964060f..29df0f9ae48 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -161,7 +161,7 @@ Style="{DynamicResource QuerySuggestionBoxStyle}"> - + From 8b33ca9a416693899e2ae0d7b1929e10603236c9 Mon Sep 17 00:00:00 2001 From: Garulf <535299+Garulf@users.noreply.github.com> Date: Sat, 4 Dec 2021 20:34:40 -0500 Subject: [PATCH 555/625] Use text path --- .../Converters/QuerySuggestionBoxConverter.cs | 10 ++++------ Flow.Launcher/MainWindow.xaml | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs b/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs index e68098c4980..d6b0c12d7df 100644 --- a/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs +++ b/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs @@ -11,15 +11,13 @@ public class QuerySuggestionBoxConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { - if (values.Length != 2) + if (values.Length != 3) { return string.Empty; } - var QueryText = values[0] as TextBox; + var QueryTextBox = values[0] as TextBox; - - - var queryText = QueryText.Text; + var queryText = (string)values[2]; if (string.IsNullOrEmpty(queryText)) return string.Empty; @@ -43,7 +41,7 @@ public object Convert(object[] values, Type targetType, object parameter, Cultur var selectedResultActionKeyword = string.IsNullOrEmpty(selectedResult.ActionKeywordAssigned) ? "" : selectedResult.ActionKeywordAssigned + " "; var selectedResultPossibleSuggestion = selectedResultActionKeyword + selectedResult.Title; - if (!selectedResultPossibleSuggestion.StartsWith(queryText, StringComparison.CurrentCultureIgnoreCase) || QueryText.HorizontalOffset != 0) + if (!selectedResultPossibleSuggestion.StartsWith(queryText, StringComparison.CurrentCultureIgnoreCase) || QueryTextBox.HorizontalOffset != 0) return string.Empty; // When user typed lower case and result title is uppercase, we still want to display suggestion diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index 29df0f9ae48..acfa964060f 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -161,7 +161,7 @@ Style="{DynamicResource QuerySuggestionBoxStyle}"> - + From 74cf92bc4862f58953b51f295cf10363633121cf Mon Sep 17 00:00:00 2001 From: Jeremy Date: Sun, 5 Dec 2021 18:17:55 +1100 Subject: [PATCH 556/625] change to resize without grip --- Flow.Launcher/SettingWindow.xaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 0e98d8881f0..ca553cdb875 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -22,7 +22,7 @@ Icon="Images\app.ico" Loaded="OnLoaded" MouseDown="window_MouseDown" - ResizeMode="CanResizeWithGrip" + ResizeMode="CanResize" StateChanged="Window_StateChanged" WindowStartupLocation="CenterScreen" mc:Ignorable="d"> @@ -895,7 +895,7 @@ Background="{DynamicResource Color01B}"> Date: Sun, 5 Dec 2021 01:19:16 -0600 Subject: [PATCH 557/625] Add NewTab option in viewmodel and partially implement the public api --- .../UserSettings/CustomBrowserViewModel.cs | 2 ++ Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs | 3 ++ .../SharedCommands/SearchWeb.cs | 6 ++-- Flow.Launcher/PublicAPIInstance.cs | 28 ++++++++++++++++++- Flow.Launcher/SelectBrowserWindow.xaml | 4 +-- Flow.Launcher/SelectBrowserWindow.xaml.cs | 2 +- 6 files changed, 38 insertions(+), 7 deletions(-) diff --git a/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs b/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs index 45cd50385cb..7ce1dd656fa 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs @@ -8,6 +8,8 @@ public class CustomBrowserViewModel : BaseModel public string Path { get; set; } public string PrivateArg { get; set; } public bool EnablePrivate { get; set; } + public bool OpenInTab { get; set; } = true; + public bool OpenInNewWindow => !OpenInTab; public bool Editable { get; set; } = true; public CustomBrowserViewModel Copy() diff --git a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs index 3abdaf01f4e..da2f9a3eb3e 100644 --- a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs +++ b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs @@ -197,5 +197,8 @@ public interface IPublicAPI /// Directory Path to open /// Extra FileName Info public void OpenDirectory(string DirectoryPath, string FileName = null); + + + public void OpenUrl(string url); } } diff --git a/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs b/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs index 95d05770709..5743181edf1 100644 --- a/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs +++ b/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs @@ -35,7 +35,7 @@ private static string GetDefaultBrowserPath() /// Opens search in a new browser. If no browser path is passed in then Chrome is used. /// Leave browser path blank to use Chrome. ///
- public static void NewBrowserWindow(this string url, string browserPath = "") + public static void NewBrowserWindow(this string url, string browserPath = "", bool inPrivate = false) { browserPath = string.IsNullOrEmpty(browserPath) ? GetDefaultBrowserPath() : browserPath; @@ -68,7 +68,7 @@ public static void NewBrowserWindow(this string url, string browserPath = "") /// /// Opens search as a tab in the default browser chosen in Windows settings. /// - public static void NewTabInBrowser(this string url, string browserPath = "") + public static void NewTabInBrowser(this string url, string browserPath = "", bool inPrivate = false) { browserPath = string.IsNullOrEmpty(browserPath) ? GetDefaultBrowserPath() : browserPath; @@ -78,7 +78,7 @@ public static void NewTabInBrowser(this string url, string browserPath = "") if (!string.IsNullOrEmpty(browserPath)) { psi.FileName = browserPath; - psi.Arguments = url; + psi.Arguments = url + (inPrivate ? "" : "-inprivate"); } else { diff --git a/Flow.Launcher/PublicAPIInstance.cs b/Flow.Launcher/PublicAPIInstance.cs index e90a53fc3a1..2b230657777 100644 --- a/Flow.Launcher/PublicAPIInstance.cs +++ b/Flow.Launcher/PublicAPIInstance.cs @@ -182,7 +182,7 @@ public void SavePluginSettings() public void OpenDirectory(string DirectoryPath, string FileName = null) { - using Process explorer = new Process(); + using var explorer = new Process(); var explorerInfo = _settingsVM.Settings.CustomExplorer; explorer.StartInfo = new ProcessStartInfo { @@ -195,6 +195,32 @@ public void OpenDirectory(string DirectoryPath, string FileName = null) explorer.Start(); } + public void OpenUrl(string url) + { + using var process = new Process(); + var browserInfo = _settingsVM.Settings.CustomBrowser; + + var path = browserInfo.Path == "Default" ? "" : browserInfo.Path; + + if (browserInfo.Path == "Default") + { + if (browserInfo.OpenInTab) + SearchWeb.NewTabInBrowser(url); + else + SearchWeb.NewBrowserWindow(url); + return; + } + + var browserStartInfo = new ProcessStartInfo() + { + FileName = browserInfo.Path + }; + browserStartInfo.ArgumentList.Add(url); + + if(browserInfo.EnablePrivate) + browserStartInfo.ArgumentList.Add(browserInfo.PrivateArg); + } + public event FlowLauncherGlobalKeyboardEventHandler GlobalKeyboardEvent; #endregion diff --git a/Flow.Launcher/SelectBrowserWindow.xaml b/Flow.Launcher/SelectBrowserWindow.xaml index 09828737e4f..a4ea4701a56 100644 --- a/Flow.Launcher/SelectBrowserWindow.xaml +++ b/Flow.Launcher/SelectBrowserWindow.xaml @@ -121,8 +121,8 @@ HorizontalAlignment="Left" VerticalAlignment="Center" Orientation="Horizontal"> - New Tab - New Window + New Tab + New Window (Settings.CustomBrowserList.Select(x => x.Copy())); - SelectedCustomBrowserIndex = Settings.CustomExplorerIndex; + SelectedCustomBrowserIndex = Settings.CustomBrowserIndex; InitializeComponent(); } From 02b92c0a2aec8ffd01e29ee36cd4f3051fe3792f Mon Sep 17 00:00:00 2001 From: Jeremy Date: Sun, 5 Dec 2021 18:40:43 +1100 Subject: [PATCH 558/625] change variable name to AutoCompleteText --- Flow.Launcher.Plugin/Result.cs | 7 ++++++- .../Converters/QuerySuggestionBoxConverter.cs | 11 +++++------ Flow.Launcher/ViewModel/MainViewModel.cs | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/Flow.Launcher.Plugin/Result.cs b/Flow.Launcher.Plugin/Result.cs index 55c14b2c7b1..29f8198ab44 100644 --- a/Flow.Launcher.Plugin/Result.cs +++ b/Flow.Launcher.Plugin/Result.cs @@ -29,7 +29,12 @@ public class Result ///
public string ActionKeywordAssigned { get; set; } - public string SuggestionText { get; set; } = string.Empty; + /// + /// This holds the text which can be provided by plugin to help Flow autocomplete text + /// for user on the plugin result. If autocomplete action for example is tab, pressing tab will have + /// the default constructed autocomplete text (result's Title), or the text provided here if not empty. + /// + public string AutoCompleteText { get; set; } public string IcoPath { diff --git a/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs b/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs index c4533c019eb..6aa1facbc59 100644 --- a/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs +++ b/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs @@ -43,13 +43,12 @@ public object Convert(object[] values, Type targetType, object parameter, Cultur if (!selectedResultPossibleSuggestion.StartsWith(queryText, StringComparison.CurrentCultureIgnoreCase)) return string.Empty; - // When user typed lower case and result title is uppercase, we still want to display suggestion - + // construct autocomplete with suggestion string _suggestion = queryText + selectedResultPossibleSuggestion.Substring(queryText.Length); - if (String.IsNullOrEmpty(selectedResult.SuggestionText)) - { - selectedItem.Result.SuggestionText = _suggestion; - } + if (string.IsNullOrEmpty(selectedResult.AutoCompleteText)) + selectedItem.Result.AutoCompleteText = _suggestion; + + // When user typed lower case and result title is uppercase, we still want to display suggestion return queryText + selectedResultPossibleSuggestion.Substring(queryText.Length); } catch (Exception e) diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index a8394cc6ba6..984bbecc76d 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -235,7 +235,7 @@ private void InitializeKeyCommands() var result = results.SelectedItem?.Result; if (result != null) // SelectedItem returns null if selection is empty. { - string _newText = String.IsNullOrEmpty(result.SuggestionText) ? result.Title : result.SuggestionText; + string _newText = String.IsNullOrEmpty(result.AutoCompleteText) ? result.Title : result.AutoCompleteText; var SpecialKeyState = GlobalHotkey.Instance.CheckModifiers(); if (SpecialKeyState.ShiftPressed) From 0fe8c93636a93b4f9fb4f1b89b6f6683baca3fda Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 5 Dec 2021 18:42:38 +1100 Subject: [PATCH 559/625] simplify code --- Flow.Launcher/ViewModel/MainViewModel.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 984bbecc76d..5cc9d7cad99 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -230,9 +230,7 @@ private void InitializeKeyCommands() InsertSuggestion = new RelayCommand(_ => { - var results = SelectedResults; - - var result = results.SelectedItem?.Result; + var result = SelectedResults.SelectedItem?.Result; if (result != null) // SelectedItem returns null if selection is empty. { string _newText = String.IsNullOrEmpty(result.AutoCompleteText) ? result.Title : result.AutoCompleteText; From 2ba6ce9e874f80db739da756f79e8b6c3b759ed0 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Sun, 5 Dec 2021 19:15:32 +1100 Subject: [PATCH 560/625] use ResultViewModel to hold constructed suggestion text instead --- .../Converters/QuerySuggestionBoxConverter.cs | 2 +- Flow.Launcher/ViewModel/MainViewModel.cs | 16 +++++++++++++--- Flow.Launcher/ViewModel/ResultViewModel.cs | 2 ++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs b/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs index 6aa1facbc59..1890cba6ed9 100644 --- a/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs +++ b/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs @@ -46,7 +46,7 @@ public object Convert(object[] values, Type targetType, object parameter, Cultur // construct autocomplete with suggestion string _suggestion = queryText + selectedResultPossibleSuggestion.Substring(queryText.Length); if (string.IsNullOrEmpty(selectedResult.AutoCompleteText)) - selectedItem.Result.AutoCompleteText = _suggestion; + selectedItem.QuerySuggestionText = _suggestion; // When user typed lower case and result title is uppercase, we still want to display suggestion return queryText + selectedResultPossibleSuggestion.Substring(queryText.Length); diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 5cc9d7cad99..6f87162d3ff 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -233,14 +233,24 @@ private void InitializeKeyCommands() var result = SelectedResults.SelectedItem?.Result; if (result != null) // SelectedItem returns null if selection is empty. { - string _newText = String.IsNullOrEmpty(result.AutoCompleteText) ? result.Title : result.AutoCompleteText; + var autoCompleteText = result.Title; + + if (!string.IsNullOrEmpty(result.AutoCompleteText)) + { + autoCompleteText = result.AutoCompleteText; + } + else if (!string.IsNullOrEmpty(SelectedResults.SelectedItem?.QuerySuggestionText)) + { + autoCompleteText = SelectedResults.SelectedItem.QuerySuggestionText; + } var SpecialKeyState = GlobalHotkey.Instance.CheckModifiers(); if (SpecialKeyState.ShiftPressed) { - _newText = result.SubTitle; + autoCompleteText = result.SubTitle; } - ChangeQueryText(_newText); + + ChangeQueryText(autoCompleteText); } }); diff --git a/Flow.Launcher/ViewModel/ResultViewModel.cs b/Flow.Launcher/ViewModel/ResultViewModel.cs index ed3d842e3b9..908de0c0993 100644 --- a/Flow.Launcher/ViewModel/ResultViewModel.cs +++ b/Flow.Launcher/ViewModel/ResultViewModel.cs @@ -142,6 +142,8 @@ private async ValueTask LoadImageAsync() public Result Result { get; } + public string QuerySuggestionText { get; set; } + public override bool Equals(object obj) { return obj is ResultViewModel r && Result.Equals(r.Result); From e3aa648e88b7bc4215f800222eb4c6c0860db38b Mon Sep 17 00:00:00 2001 From: Jeremy Date: Sun, 5 Dec 2021 19:28:04 +1100 Subject: [PATCH 561/625] rename function to AutocompleteQueryCommand --- Flow.Launcher/MainWindow.xaml | 4 ++-- Flow.Launcher/ViewModel/MainViewModel.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index 3d383d7d8a7..1f449421522 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -43,10 +43,10 @@ + Command="{Binding AutocompleteQueryCommand}"/> + AutocompleteQueryCommand = new RelayCommand(_ => { var result = SelectedResults.SelectedItem?.Result; if (result != null) // SelectedItem returns null if selection is empty. @@ -408,7 +408,7 @@ private ResultsViewModel SelectedResults public ICommand OpenSettingCommand { get; set; } public ICommand ReloadPluginDataCommand { get; set; } public ICommand ClearQueryCommand { get; private set; } - public ICommand InsertSuggestion { get; set; } + public ICommand AutocompleteQueryCommand { get; set; } public string OpenResultCommandModifiers { get; private set; } From 78dbc0c53dbc5c2471dd96e14f6feca38b9a449b Mon Sep 17 00:00:00 2001 From: Jeremy Date: Sun, 5 Dec 2021 19:40:36 +1100 Subject: [PATCH 562/625] simplify suggestion's autocomplete logic --- .../Converters/QuerySuggestionBoxConverter.cs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs b/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs index 1890cba6ed9..acbbf6971e1 100644 --- a/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs +++ b/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs @@ -43,13 +43,11 @@ public object Convert(object[] values, Type targetType, object parameter, Cultur if (!selectedResultPossibleSuggestion.StartsWith(queryText, StringComparison.CurrentCultureIgnoreCase)) return string.Empty; - // construct autocomplete with suggestion - string _suggestion = queryText + selectedResultPossibleSuggestion.Substring(queryText.Length); - if (string.IsNullOrEmpty(selectedResult.AutoCompleteText)) - selectedItem.QuerySuggestionText = _suggestion; - + // For AutocompleteQueryCommand. // When user typed lower case and result title is uppercase, we still want to display suggestion - return queryText + selectedResultPossibleSuggestion.Substring(queryText.Length); + selectedItem.QuerySuggestionText = queryText + selectedResultPossibleSuggestion.Substring(queryText.Length); + + return selectedItem.QuerySuggestionText; } catch (Exception e) { From e79f80514b461485f5d6142607ab458838ef2f98 Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 5 Dec 2021 21:44:41 +0900 Subject: [PATCH 563/625] Fix dev Merge / Adjust Button Size --- .../UserSettings/Settings.cs | 2 + Flow.Launcher/SelectBrowserWindow.xaml | 278 ++++++++++-------- 2 files changed, 155 insertions(+), 125 deletions(-) diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 1ed632e5178..21264013148 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -39,6 +39,8 @@ public string Language public string ResultFontWeight { get; set; } public string ResultFontStretch { get; set; } public bool UseGlyphIcons { get; set; } = true; + public bool UseAnimation { get; set; } = true; + public bool UseSound { get; set; } = true; public int CustomExplorerIndex { get; set; } = 0; diff --git a/Flow.Launcher/SelectBrowserWindow.xaml b/Flow.Launcher/SelectBrowserWindow.xaml index 09828737e4f..d7ac4482bb0 100644 --- a/Flow.Launcher/SelectBrowserWindow.xaml +++ b/Flow.Launcher/SelectBrowserWindow.xaml @@ -1,77 +1,91 @@ - + - + - + - + - - + + - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/SettingsControl.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/SettingsControl.xaml index 1ee02fa438e..6762ca345c4 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/SettingsControl.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/SettingsControl.xaml @@ -10,71 +10,12 @@ mc:Ignorable="d"> - - - - - - - - - - - - -
- public unsafe static class GlobalHotkey + public static unsafe class GlobalHotkey { private static readonly IntPtr hookId; From 8f18e2f603ed2567a8384eb7808bb7399769c08f Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sun, 5 Dec 2021 17:47:07 -0600 Subject: [PATCH 577/625] fix an api changed --- Flow.Launcher/ViewModel/MainViewModel.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 5583d9e5917..506ce8fd8aa 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -244,8 +244,8 @@ private void InitializeKeyCommands() autoCompleteText = SelectedResults.SelectedItem.QuerySuggestionText; } - var SpecialKeyState = GlobalHotkey.Instance.CheckModifiers(); - if (SpecialKeyState.ShiftPressed) + var specialKeyState = GlobalHotkey.CheckModifiers(); + if (specialKeyState.ShiftPressed) { autoCompleteText = result.SubTitle; } From 84528ae8a70ed5c4a832ce2a1f9da830808e67e7 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sun, 5 Dec 2021 18:22:41 -0600 Subject: [PATCH 578/625] Use Instance class with static method --- Flow.Launcher.Infrastructure/Hotkey/GlobalHotkey.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Flow.Launcher.Infrastructure/Hotkey/GlobalHotkey.cs b/Flow.Launcher.Infrastructure/Hotkey/GlobalHotkey.cs index f26348e3d7c..5f14b7598f1 100644 --- a/Flow.Launcher.Infrastructure/Hotkey/GlobalHotkey.cs +++ b/Flow.Launcher.Infrastructure/Hotkey/GlobalHotkey.cs @@ -9,7 +9,7 @@ namespace Flow.Launcher.Infrastructure.Hotkey /// Listens keyboard globally. /// Uses WH_KEYBOARD_LL. /// - public static unsafe class GlobalHotkey + public unsafe class GlobalHotkey : IDisposable { private static readonly IntPtr hookId; @@ -28,7 +28,6 @@ static GlobalHotkey() { // Set the hook hookId = InterceptKeys.SetHook(& LowLevelKeyboardProc); - AppDomain.CurrentDomain.ProcessExit += (_, _) => Dispose(); } public static SpecialKeyState CheckModifiers() @@ -82,9 +81,14 @@ private static IntPtr LowLevelKeyboardProc(int nCode, UIntPtr wParam, IntPtr lPa return (IntPtr)(-1); } - public static void Dispose() + public void Dispose() { InterceptKeys.UnhookWindowsHookEx(hookId); } + + ~GlobalHotkey() + { + Dispose(); + } } } \ No newline at end of file From b83bbb5923a06f5e81153cfd875e810838dc3f65 Mon Sep 17 00:00:00 2001 From: DB p Date: Mon, 6 Dec 2021 11:59:21 +0900 Subject: [PATCH 579/625] Adjust popup in explorer plugin with string Fix Color --- .../Languages/en.xaml | 2 +- .../Views/ActionKeywordSetting.xaml | 156 ++++++++++++---- .../Views/ActionKeywordSetting.xaml.cs | 4 + .../Views/ExplorerSettings.xaml | 169 ++++++++++++------ .../Views/ExplorerSettings.xaml.cs | 2 +- 5 files changed, 245 insertions(+), 88 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml index e2914d017d8..e23bd77bd4c 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml @@ -29,7 +29,7 @@ File Content Search: Index Search: Quick Access: - Current Action Keyword: + Current Action Keyword Done Enabled When disabled Flow will not execute this search option, and will additionally revert back to '*' to free up the action keyword diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Views/ActionKeywordSetting.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ActionKeywordSetting.xaml index 19542dcac81..a469184832f 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Views/ActionKeywordSetting.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ActionKeywordSetting.xaml @@ -1,39 +1,129 @@ - + + + + - + - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Views/ActionKeywordSetting.xaml.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ActionKeywordSetting.xaml.cs index 23f8f13cd6c..27e4a0b9a8d 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Views/ActionKeywordSetting.xaml.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ActionKeywordSetting.xaml.cs @@ -100,6 +100,10 @@ private void OnDoneButtonClick(object sender, RoutedEventArgs e) MessageBox.Show(settingsViewModel.Context.API.GetTranslation("newActionKeywordsHasBeenAssigned")); } + private void BtnCancel_OnClick(object sender, RoutedEventArgs e) + { + Close(); + } private void TxtCurrentActionKeyword_OnKeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Enter) diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml index 50171a363d9..ce8ecb6fff3 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml @@ -1,82 +1,145 @@ - + - + - + - + - - + + + + + + + + + + - - + + - + - - + + - + + Drop="lbxAccessLinks_Drop" + ItemTemplate="{StaticResource ListViewTemplateAccessLinks}" /> - + + Drop="lbxAccessLinks_Drop" + ItemTemplate="{StaticResource ListViewTemplateExcludedPaths}" /> - - + + - - + + + + + + - + + + + + + + + + + + + + + + - - - + New Tab + New Window + + - - - - - - - + + + + + + diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 8c7b34e9c20..11d48235ecc 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -52,9 +52,15 @@ - + - + @@ -90,7 +96,10 @@ - - @@ -241,19 +253,21 @@ - - + + @@ -311,19 +325,21 @@ - - + + @@ -796,38 +812,35 @@ Content="{Binding Settings.CustomExplorer.Name}" /> - -  - - - - - - - - - - - - + ForceCursor="True" + Style="{DynamicResource AccentButtonStyle}" /> From 40d7baac86f02cb8c62b88bd4ccc806004f1ce13 Mon Sep 17 00:00:00 2001 From: DB p Date: Tue, 7 Dec 2021 19:33:11 +0900 Subject: [PATCH 599/625] Add Chrome, Edge, Firefox Browser Profile --- .../UserSettings/Settings.cs | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 2bbed1f3b38..0d39d6663f8 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -104,6 +104,31 @@ public CustomBrowserViewModel CustomBrowser PrivateArg = "", EnablePrivate = false, Editable = false + }, + new() + { + Name = "Google Chrome", + Path = "chrome", + PrivateArg = "-incognito", + EnablePrivate = false, + Editable = false + }, + new() + { + Name = "Mozilla Firefox", + Path = "firefox", + PrivateArg = "-private", + EnablePrivate = false, + Editable = false + } + , + new() + { + Name = "MS Edge", + Path = "msedge", + PrivateArg = "-inprivate", + EnablePrivate = false, + Editable = false } }; From ba2853b5c19055c02ac399005dde1b21cf1ea8cd Mon Sep 17 00:00:00 2001 From: DB p Date: Tue, 7 Dec 2021 19:40:01 +0900 Subject: [PATCH 600/625] Fix Edge Private arg --- Flow.Launcher.Infrastructure/UserSettings/Settings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 0d39d6663f8..8ecd6dc4b76 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -126,7 +126,7 @@ public CustomBrowserViewModel CustomBrowser { Name = "MS Edge", Path = "msedge", - PrivateArg = "-inprivate", + PrivateArg = "-inPrivate", EnablePrivate = false, Editable = false } From f741420f952a8fc2915455f396a9dc718c546b7e Mon Sep 17 00:00:00 2001 From: Jeremy Date: Wed, 8 Dec 2021 08:01:16 +1100 Subject: [PATCH 601/625] retrieve path with action keywrod --- .../Search/ResultManager.cs | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs index 9b77b57a099..63310bebd3a 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs @@ -13,19 +13,26 @@ public static class ResultManager { private static PluginInitContext Context; private static Settings Settings { get; set; } - public static object Keyword { get; private set; } public static void Init(PluginInitContext context, Settings settings) { Context = context; Settings = settings; - Keyword = Settings.SearchActionKeywordEnabled ? Settings.SearchActionKeyword : Settings.PathSearchActionKeyword; - Keyword = Keyword.ToString() == Query.GlobalPluginWildcardSign ? string.Empty : Keyword + " "; } - public static string ChangeToPath(string path) + private static string GetPathWithActionKeyword(string path, ResultType type) { - return path.EndsWith(Constants.DirectorySeperator) ? path : path + Constants.DirectorySeperator; + // one of it is enabled + var keyword = Settings.SearchActionKeywordEnabled ? Settings.SearchActionKeyword : Settings.PathSearchActionKeyword; + + keyword = keyword == Query.GlobalPluginWildcardSign ? string.Empty : keyword + " "; + + var formatted_path = path; + + if (type == ResultType.Folder) + formatted_path = path.EndsWith(Constants.DirectorySeperator) ? path : path + Constants.DirectorySeperator; + + return $"{keyword}{formatted_path}"; } internal static Result CreateFolderResult(string title, string subtitle, string path, Query query, int score = 0, bool showIndexState = false, bool windowsIndexed = false) @@ -35,7 +42,7 @@ internal static Result CreateFolderResult(string title, string subtitle, string Title = title, IcoPath = path, SubTitle = subtitle, - AutoCompleteText = $"{Keyword}{ChangeToPath(path)}", + AutoCompleteText = GetPathWithActionKeyword(path, ResultType.Folder), TitleHighlightData = StringMatcher.FuzzySearch(query.Search, title).MatchData, Action = c => { @@ -52,7 +59,9 @@ internal static Result CreateFolderResult(string title, string subtitle, string return false; } } - Context.API.ChangeQuery($"{Keyword}{ChangeToPath(path)}"); + + Context.API.ChangeQuery(GetPathWithActionKeyword(path, ResultType.Folder)); + return false; }, Score = score, @@ -100,6 +109,7 @@ internal static Result CreateOpenCurrentFolderResult(string path, bool windowsIn Title = title, SubTitle = $"Use > to search within {subtitleFolderName}, " + $"* to search for file extensions or >* to combine both searches.", + AutoCompleteText = GetPathWithActionKeyword(retrievedDirectoryPath, ResultType.Folder), IcoPath = retrievedDirectoryPath, Score = 500, Action = c => @@ -126,7 +136,7 @@ internal static Result CreateFileResult(string filePath, Query query, int score Title = Path.GetFileName(filePath), SubTitle = filePath, IcoPath = filePath, - AutoCompleteText = filePath, + AutoCompleteText = GetPathWithActionKeyword(filePath, ResultType.File), TitleHighlightData = StringMatcher.FuzzySearch(query.Search, Path.GetFileName(filePath)).MatchData, Score = score, Action = c => From b2867620626decdf854289fa3e89f88355046a1c Mon Sep 17 00:00:00 2001 From: Kevin Zhang <45326534+taooceros@users.noreply.github.com> Date: Tue, 7 Dec 2021 23:21:03 -0600 Subject: [PATCH 602/625] Update Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml.cs Co-authored-by: Jeremy Wu --- Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml.cs b/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml.cs index d2af6eb6d3e..c50fea52ec6 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml.cs +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml.cs @@ -21,7 +21,6 @@ public SettingsControl(PluginInitContext context, SettingsViewModel viewModel) _context = context; _settings = viewModel.Settings; DataContext = viewModel; - } private void OnAddSearchSearchClick(object sender, RoutedEventArgs e) From 8ba52ff2446f7a2de174e0fd0944c0ad6e8d4e86 Mon Sep 17 00:00:00 2001 From: Kevin Zhang <45326534+taooceros@users.noreply.github.com> Date: Tue, 7 Dec 2021 23:21:14 -0600 Subject: [PATCH 603/625] Update Flow.Launcher/SettingWindow.xaml.cs Co-authored-by: Jeremy Wu --- Flow.Launcher/SettingWindow.xaml.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index 30e00da3c1a..ca5f2885526 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -122,8 +122,8 @@ private void OnSelectFileManagerClick(object sender, RoutedEventArgs e) private void OnSelectDefaultBrowserClick(object sender, RoutedEventArgs e) { - SelectBrowserWindow test = new SelectBrowserWindow(settings); - test.ShowDialog(); + var browserWindow = new SelectBrowserWindow(settings); + browserWindow.ShowDialog(); } #endregion From 127888137bfab26c151bc6b5bed1d47e04796b6a Mon Sep 17 00:00:00 2001 From: Kevin Zhang <45326534+taooceros@users.noreply.github.com> Date: Tue, 7 Dec 2021 23:21:37 -0600 Subject: [PATCH 604/625] Update Flow.Launcher/SelectBrowserWindow.xaml.cs Co-authored-by: Jeremy Wu --- Flow.Launcher/SelectBrowserWindow.xaml.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/Flow.Launcher/SelectBrowserWindow.xaml.cs b/Flow.Launcher/SelectBrowserWindow.xaml.cs index 32d79e569b8..5ab8885277d 100644 --- a/Flow.Launcher/SelectBrowserWindow.xaml.cs +++ b/Flow.Launcher/SelectBrowserWindow.xaml.cs @@ -18,9 +18,6 @@ namespace Flow.Launcher { - /// - /// SelectBrowserWindow.xaml에 대한 상호 작용 논리 - /// public partial class SelectBrowserWindow : Window, INotifyPropertyChanged { private int selectedCustomExplorerIndex; From 171a5015db8c1e8301e2b8bbac53dff0044244db Mon Sep 17 00:00:00 2001 From: Kevin Zhang <45326534+taooceros@users.noreply.github.com> Date: Tue, 7 Dec 2021 23:21:44 -0600 Subject: [PATCH 605/625] Update Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs Co-authored-by: Jeremy Wu --- Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs index a07071d1e53..f87ca39696d 100644 --- a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs +++ b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs @@ -213,7 +213,6 @@ public interface IPublicAPI /// Extra FileName Info public void OpenDirectory(string DirectoryPath, string FileName = null); - public void OpenUrl(string url); } } From d2bb1e88e507997eb9a3756ac7b261bca6177ae2 Mon Sep 17 00:00:00 2001 From: Kevin Zhang <45326534+taooceros@users.noreply.github.com> Date: Tue, 7 Dec 2021 23:22:23 -0600 Subject: [PATCH 606/625] Update Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs Co-authored-by: Jeremy Wu --- .../UserSettings/CustomBrowserViewModel.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs b/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs index 7ce1dd656fa..1cf62873cfc 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs @@ -25,7 +25,6 @@ public CustomBrowserViewModel Copy() } } - } From 233a3382961965c4a5152a28919d535a34b6eb87 Mon Sep 17 00:00:00 2001 From: Kevin Zhang <45326534+taooceros@users.noreply.github.com> Date: Tue, 7 Dec 2021 23:22:34 -0600 Subject: [PATCH 607/625] Update Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs Co-authored-by: Jeremy Wu --- .../UserSettings/CustomBrowserViewModel.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs b/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs index 1cf62873cfc..30b7c5a6836 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs @@ -23,7 +23,6 @@ public CustomBrowserViewModel Copy() Editable = Editable }; } - } } From cbd23373c300205fb14fa1dca07a45c91df401d1 Mon Sep 17 00:00:00 2001 From: Kevin Zhang <45326534+taooceros@users.noreply.github.com> Date: Tue, 7 Dec 2021 23:24:15 -0600 Subject: [PATCH 608/625] Update Flow.Launcher/PublicAPIInstance.cs Co-authored-by: Jeremy Wu --- Flow.Launcher/PublicAPIInstance.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Flow.Launcher/PublicAPIInstance.cs b/Flow.Launcher/PublicAPIInstance.cs index 606143bffdc..238a57cbc65 100644 --- a/Flow.Launcher/PublicAPIInstance.cs +++ b/Flow.Launcher/PublicAPIInstance.cs @@ -211,7 +211,6 @@ public void OpenDirectory(string DirectoryPath, string FileName = null) public void OpenUrl(string url) { - using var process = new Process(); var browserInfo = _settingsVM.Settings.CustomBrowser; var path = browserInfo.Path == "*" ? "" : browserInfo.Path; From 7bf6a7d1411aa19e36ec7f2d5a6564b653b57a27 Mon Sep 17 00:00:00 2001 From: Kevin Zhang <45326534+taooceros@users.noreply.github.com> Date: Wed, 8 Dec 2021 02:49:32 -0600 Subject: [PATCH 609/625] Update crowdin translations (#871) Update crowdin translations (#871) --- Flow.Launcher/Languages/pt-pt.xaml | 231 +++++ Flow.Launcher/Languages/sk.xaml | 56 +- Flow.Launcher/Languages/zh-cn.xaml | 445 ++++++---- .../Languages/pt-pt.xaml | 21 + .../Languages/pt-pt.xaml | 15 + .../Languages/zh-cn.xaml | 2 +- .../Languages/pt-pt.xaml | 67 ++ .../Languages/pt-pt.xaml | 7 + .../Languages/pt-pt.xaml | 48 ++ .../Languages/sk.xaml | 2 +- .../Languages/pt-pt.xaml | 11 + .../Languages/pt-pt.xaml | 58 ++ .../Languages/sk.xaml | 9 +- .../Languages/pt-pt.xaml | 15 + .../Languages/zh-cn.xaml | 2 +- .../Languages/pt-pt.xaml | 37 + .../Languages/pt-pt.xaml | 17 + .../Languages/zh-cn.xaml | 2 +- .../Languages/pt-pt.xaml | 43 + .../Properties/Resources.pt-PT.resx | 801 ++++++++++++------ 20 files changed, 1458 insertions(+), 431 deletions(-) create mode 100644 Flow.Launcher/Languages/pt-pt.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/pt-pt.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.Calculator/Languages/pt-pt.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/pt-pt.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-pt.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/pt-pt.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.Program/Languages/pt-pt.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.Shell/Languages/pt-pt.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-pt.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.Url/Languages/pt-pt.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-pt.xaml diff --git a/Flow.Launcher/Languages/pt-pt.xaml b/Flow.Launcher/Languages/pt-pt.xaml new file mode 100644 index 00000000000..0bee02aced4 --- /dev/null +++ b/Flow.Launcher/Languages/pt-pt.xaml @@ -0,0 +1,231 @@ + + + + Falha ao registar tecla de atalho: {0} + Não foi possível iniciar {0} + Formato do ficheiro inválido como plugin + Definir como principal para esta consulta + Cancelar como principal para esta consulta + Executar consulta: {0} + Última execução: {0} + Abrir + Definições + Acerca + Sair + Fechar + Modo de jogo + Suspender utilização de teclas de atalho + + + Definições Flow launcher + Geral + Modo portátil + Guardar todas as definições e dados do utilizador numa pasta (indicado se utilizar discos amovíveis ou serviços cloud) + Iniciar Flow launcher ao arrancar o sistema + Ocultar Flow launcher ao perder o foco + Não notificar acerca de novas versões + Memorizar localização anterior + Idioma + Estilo da última consulta + Mostrar/ocultar resultados anteriores ao reiniciar Flow Launcher + Manter última consulta + Selecionar última consulta + Limpar última consulta + N.º máximo de resultados + Ignorar teclas de atalho se em ecrã completo + Desativar ativação do Flow Launcher se alguma aplicação estiver em ecrã completo (recomendado para jogos) + Gestor de ficheiros padrão + Selecione o gestor de ficheiros utilizado para abrir a página + Diretório Python + Atualização automática + Selecionar + Ocultar Flow Launcher no arranque + Ocultar ícone da bandeja + Precisão da pesquisa + Altera a precisão mínima necessário para obter resultados + Utilizar Pinyin + Permitir Pinyin para a pesquisa. Pinyin é o sistema padrão da ortografia romanizada para tradução de mandarim + O efeito sombra não é permitido com este tema porque o efeito desfocar está ativo + + + Plugins + Mais plugins + Ativar + Desativar + Definição de palavra-chave + Palavra-chave da ação + Palavra-chave atual + Nova palavra-chave + Prioridade atual + Nova prioridade + Prioridade + Diretório de plugins + Autor: + Tempo de inicialização: + Tempo de consulta: + | Versão + Site + + + + Loja de plugins + Recarregar + Instalar + + + Tema + Galeria de temas + Como criar um tema + Olá + Tipo de letra da caixa de pesquisa + Tipo de letra dos resultados + Modo da janela + Opacidade + O tema {0} não existe e será utilizado o tema padrão + Não foi possível carregar o tema {0}, será utilizado o tema padrão + Pasta de temas + Abrir pasta de temas + Esquema de cores + Padrão do sistema + Claro + Escuro + Efeitos sonoros + Reproduzir um som ao abrir a janela de pesquisa + Animação + Utilizar animações na aplicação + + + Tecla de atalho + Tecla de atalho Flow Launcher + Introduza o atalho para mostrar/ocultar Flow launcher + Tecla modificadora para os resultados + Selecione a tecla modificadora para abrir o resultado através do teclado + Mostrar tecla de atalho + Mostrar tecla de atalho em conjunto com os resultados. + Tecla de atalho personalizada + Consulta + Eliminar + Editar + Adicionar + Selecione um item + Tem a certeza de que deseja remover a tecla de atalho do plugin {0}? + Efeito de sombra da janela + Este efeito intensifica a utilização da GPU. Não deve ativar esta opção se o desempenho do seu computador for fraco. + Largura da janela + Utilizar ícones Segoe Fluent + Se possível, utilizar ícones Segoe Fluent para os resultados + + + Proxy HTTP + Ativar proxy HTTP + Servidor HTTP + Porta + Nome de utilizador + Palavra-passe + Testar + Guardar + Campo Servidor não pode estar vazio + Campo Porta não pode estar vazio + Formato de porta inválido + Configuração proxy guardada com sucesso + Proxy configurado corretamente + Falha na ligação ao proxy + + + Acerca + Site + GitHub + Documentos + Versão + Ativou o Flow Launcher {0} vezes + Procurar atualizações + Está disponível a versão {0}. Gostaria de reiniciar Flow Launcher para atualizar a sua versão? + Erro ao procurar atualizações. Verifique a sua ligação e as definições do proxy estabelecidas para api.github.com + + Não foi possível descarregar a atualização. Verifique a sua ligação e as definições do proxy estabelecidas para github-cloud.s3.amazonaws.com ou aceda a https://github.com/Flow-Launcher/Flow.Launcher/releases para descarregar a atualização. + + Notas da versão + Dicas de utilização + DevTools + Pasta de definições + Pasta de registos + + + Selecione o gestor de ficheiros + Especifique a localização do executável do gestor de ficheiros e, eventualmente, alguns argumentos. Os argumentos padrão são "%d" e o caminho é introduzido nesse local. Por exemplo, se necessitar de um comando como "totalcmd.exe /A c:\windows", o argumento é /A "%d". + "%f" é o argumento que representa o caminho do ficheiro. É utilizado para dar ênfase ao nome do ficheiro ou da pasta se utilizar um gestor de ficheiros não nativo. Este argumento apenas está disponível para o item "Arg para ficheiro". Se o seu gestor de ficheiros não possuir esta funcionalidade, pode utilizar "%d". + Gestor de ficheiros + Nome do perfil + Caminho do gestor de ficheiros + Argumento para pasta + Argumento para ficheiro + + + Alterar prioridade + Quanto maior for o número, melhor avaliação terá o resultado. Experimente com o número 5. Se quiser que os resultados sejam inferiores aos dos outros plugins, indique um número negativo. + Tem que indicar um valor inteiro para a prioridade! + + + Palavra-chave atual + Nova palavra-chave + Cancelar + Feito + Plugin não encontrado + A nova palavra-chave não pode estar vazia + Esta palavra-chave já está associada a um plugin. Por favor escolha outra. + Sucesso + Terminado com sucesso + Introduza a palavra-chave a utilizar para iniciar o plugin. Utilize * se não quiser utilizar esta funcionalidade e o plugin não será ativada com palavras-chave. + + + Tecla de atalho personalizada + Prima a tecla de atalho personalizada para introduzir automaticamente a consulta especificada + Antevisão + Tecla de atalho indisponível, por favor escolha outra + Tecla de atalho inválida + Atualizar + + + Tecla de atalho indisponível + + + Versão + Hora + Indique-nos, por favor, como é que o erro ocorreu para que o possamos corrigir + Enviar relatório + Cancelar + Geral + Exceções + Tipo de exceção + Origem + Stack Trace + A enviar + Relatório enviado com sucesso + Falha ao enviar o relatório + Ocorreu um erro + + + Por favor aguarde... + + + A procurar atualizações... + A sua versão de Flow Launcher é a mais recente + Atualização encontrada + A atualizar... + + Flow Launcher não conseguiu mover o seu perfil de dados para a nova versão. +Queira por favor mover a pasta do seu perfil de {0} para {1} + + Nova atualização + Está disponível a versão {0} do Flow Launcher + Ocorreu um erro ao tentar instalar as atualizações + Atualizar + Cancelar + Falha ao atualizar + Verifique a sua ligação e as definições do proxy estabelecidas para github-cloud.s3.amazonaws.com + Esta atualização irá reiniciar o Flow Launcher + Os seguintes ficheiros serão atualizados + Atualizar ficheiros + Atualizar descrição + + diff --git a/Flow.Launcher/Languages/sk.xaml b/Flow.Launcher/Languages/sk.xaml index 05f9228baca..aea9f1d64ea 100644 --- a/Flow.Launcher/Languages/sk.xaml +++ b/Flow.Launcher/Languages/sk.xaml @@ -60,7 +60,7 @@ Nová priorita: Priorita Priečinok s pluginmi - Autor: + od Príprava: Čas dopytu: | Verzia @@ -85,10 +85,10 @@ Nepodarilo sa nečítať motív {0}, návrat na predvolený motív Priečinok s motívmi Otvoriť priečinok s motívmi - Tmavý režim - Predvolené systémom - Svetlý - Tmavý + Farebná schéma + Predvolené systémom + Svetlý + Tmavý Zvukový efekt Po otvorení okna vyhľadávania prehrať krátky zvuk Animácia @@ -115,7 +115,6 @@ Použiť ikony Segoe Fluent Použiť ikony Segoe Fluent, ak sú podporované - HTTP proxy Povoliť HTTP Proxy @@ -147,15 +146,16 @@ alebo prejdite na https://github.com/Flow-Launcher/Flow.Launcher/releases pre manuálne stiahnutie aktualizácie. Poznámky k vydaniu - Tipy na používanie: + Tipy na používanie Nástroje pre vývojárov Priečinok s nastaveniami Priečinok s logmi + Sprievodca Vyberte správcu súborov - Zadajte umiestnenie súboru správcu súborov, ktorého používate, a v prípade potreby pridajte argumenty. Predvolené argumenty sú "%d" a cesta sa zadáva na tomto mieste. Napríklad, ak sa vyžaduje príkaz, ako napríklad "totalcmd.exe /A c:\windows", argument je /A "%d". - "%f" je argument, ktorý predstavuje cestu k súboru. Používa sa na zvýraznenie názvu súboru/priečinka pri otváraní konkrétneho umiestnenia súboru v správcovi súborov tretej strany. Tento argument je k dispozícii len v položke "Arg pre súbor". Ak správca súborov nemá túto funkciu, môžete použiť "%d". + Zadajte umiestnenie súboru správcu súborov, ktorý používate, a v prípade potreby pridajte argumenty. Predvolené argumenty sú "%d" a cesta sa zadáva na tomto mieste. Napríklad, ak sa vyžaduje príkaz, ako napríklad "totalcmd.exe /A c:\windows", argument je /A "%d". + "%f" je argument, ktorý predstavuje cestu k súboru. Používa sa na zvýraznenie názvu súboru/priečinka pri otváraní konkrétneho umiestnenia súboru v správcovi súborov tretej strany. Tento argument je k dispozícii len v položke "Arg. pre súbor". Ak správca súborov nemá túto funkciu, môžete použiť "%d". Správca súborov Názov profilu Cesta k správcovi súborov @@ -177,7 +177,6 @@ Nová skratka pre akciu bola priradená pre iný plugin, prosím, zvoľte inú skratku Úspešné Úspešne dokončené - Zadajte skratku akcie, ktorá je potrebná na spustenie pluginu. Ak nechcete zadať skratku akcie, použite *. V tom prípade plugin funguje bez kľúčových slov. @@ -204,7 +203,6 @@ Trasovanie zásobníka Odosiela sa Hlásenie bolo úspešne odoslané - Odoslanie hlásenia zlyhalo Flow Launcher zaznamenal chybu @@ -232,4 +230,40 @@ Aktualizovať súbory Aktualizovať popis + + Preskočiť + Vitajte vo Flow Launcheri + Dobrý deň, toto je prvýkrát, čo spúšťate Flow Launcher! + Pred spustením vám tento sprievodca pomôže s nastavením aplikácie Flow Launcher. Ak chcete, môžete ho preskočiť. Vyberte si jazyk + Vyhľadávajte a spúšťajte všetky súbory a aplikácie v počítači + Vyhľadávajte vo všetkých aplikáciách, súboroch, záložkách, YouTube, Twitteri a ďalších. Všetko z pohodlia klávesnice bez toho, aby ste sa dotkli myši. + Flow Launcher sa spúšťa pomocou dole uvedenej klávesovej skratky, poďte si to vyskúšať. Ak ju chcete zmeniť, kliknite na vstupné pole a stlačte požadovanú klávesovú skratku na klávesnici. + Klávesové skratky + Kľúčové slovo akcie a príkazy + Vyhľadávajte na webe, spúšťajte aplikácie alebo spúšťajte rôzne funkcie pomocou pluginov Flow Launchera. Niektoré funkcie sa začínajú kľúčovým slovom akcie a v prípade potreby ich možno použiť aj bez kľúčových slov akcie. Vyskúšajte nižšie uvedené dopyty v aplikácii Flow Launcher. + Spustite Flow Launcher + Hotovo. Užite si Flow Launcher. Nezabudnite na klávesovú skratku na spustenie :) + + + + Späť/kontextová ponuka + Navigácia medzi položkami + Otvoriť kontextovú ponuku + Otvoriť umiestnenie priečinka + Spustiť ako správca + História dopytov + Návrat na výsledky z kontextovej ponuky + Otvoriť/spustiť vybranú položku + Otvoriť okno s nastaveniami + Znova načítať údaje pluginov + + Počasie + Počasie na Googli + > ping 8.8.8.8 + Príkazový riadok + Bluetooth + Bluetooth v nastaveniach Windowsu + sn + Sticky Notes + diff --git a/Flow.Launcher/Languages/zh-cn.xaml b/Flow.Launcher/Languages/zh-cn.xaml index 0c2307dc51a..01cd974673c 100644 --- a/Flow.Launcher/Languages/zh-cn.xaml +++ b/Flow.Launcher/Languages/zh-cn.xaml @@ -1,176 +1,269 @@ - - - 注册热键:{0} 失败 - 启动命令 {0} 失败 - Flow Launcher插件格式错误 - 在当前查询中置顶 - 取消置顶 - 执行查询:{0} - 上次执行时间:{0} - 打开 - 设置 - 关于 - 退出 - - - Flow Launcher设置 - 通用 - 便携模式 - 开机自动启动 - 失去焦点时自动隐藏Flow Launcher - 不显示新版本提示 - 记住上次启动位置 - 语言 - 上次搜索关键字模式 - 保留上次搜索关键字 - 选择上次搜索关键字 - 清空上次搜索关键字 - 最大结果显示个数 - 全屏模式下忽略热键 - Python 路径 - 自动更新 - 选择 - 启动时不显示主窗口 - 隐藏任务栏图标 - 查询搜索精度 - 启动拼音搜索 - 允许使用拼音进行搜索。 - - - 插件 - 浏览更多插件 - 启用 - 禁用 - 触发关键字 - 当前操作关键字: - 新动作关键字: - 当前优先级: - 新优先级: - 插件目录 - 作者 - 加载耗时 - 查询耗时 - - - 主题 - 浏览更多主题 - 在这里输入 - 查询框字体 - 结果项字体 - 窗口模式 - 透明度 - 无法找到主题 {0} ,切换为默认主题 - 无法加载主题 {0} ,切换为默认主题 - - - 热键 - Flow Launcher激活热键 - 开放结果修饰符 - 显示热键 - 自定义查询热键 - 删除 - 编辑 - 增加 - 请选择一项 - 你确定要删除插件 {0} 的热键吗? - 查询窗口阴影效果 - 阴影效果将占用大量的GPU资源。 如果您的计算机性能有限,则不建议使用。 - - - HTTP 代理 - 启用 HTTP 代理 - HTTP 服务器 - 端口 - 用户名 - 密码 - 测试代理 - 保存 - 服务器不能为空 - 端口不能为空 - 非法的端口格式 - 保存代理设置成功 - 代理设置正确 - 代理连接失败 - - - 关于 - 网站 - 版本 - 你已经激活了Flow Launcher {0} 次 - 检查更新 - 发现新版本 {0} , 请重启 Flow Launcher。 - 下载更新失败,请检查您与 api.github.com 的连接状态或检查代理设置。 - - 下载更新失败,请检查您与 github-cloud.s3.amazonaws.com 的连接状态或检查代理设置, - 或访问 https://github.com/Flow-Launcher/Flow.Launcher/releases 手动下载更新。 - - 更新说明: - 使用技巧: - - - 数字越大,结果排名越高。如果你想要结果比任何其他插件的低,请使用负数 - 请提供有效的整数作为优先级设置值! - - - 旧触发关键字 - 新触发关键字 - 取消 - 确定 - 找不到指定的插件 - 新触发关键字不能为空 - 新触发关键字已经被指派给其他插件了,请换一个关键字 - 成功 - 成功完成 - 如果你不想设置触发关键字,可以使用*代替 - - - 自定义插件热键 - 预览 - 热键不可用,请选择一个新的热键 - 插件热键不合法 - 更新 - - - 热键不可用 - - - 版本 - 时间 - 请告诉我们如何重现此问题,以便我们进行修复 - 发送报告 - 取消 - 基本信息 - 异常信息 - 异常类型 - 异常源 - 堆栈信息 - 发送中 - 发送成功 - 发送失败 - Flow Launcher出错啦 - - - 请稍等... - - - 检查新的更新 - 您已经拥有最新的Flow Launcher版本 - 检查到更新 - 更新中... - Flow Launcher无法将您的用户配置文件数据移动到新的更新版本中。 - 请手动将您的用户配置文件数据文件夹从 {0} 到 {1} - 新的更新 - 发现Flow Launcher新版本 V{0} - 尝试安装软件更新时发生错误 - 更新 - 取消 - 更新错误 - 检查网络是否可以连接至github-cloud.s3.amazonaws.com. - 此次更新需要重启Flow Launcher - 下列文件会被更新 - 更新文件 - 更新日志 - - \ No newline at end of file + + + + 注册热键:{0} 失败 + 启动命令 {0} 失败 + 无效的 Flow Launcher 插件文件格式 + 在当前查询中置顶 + 取消置顶 + 执行查询:{0} + 上次执行时间:{0} + 打开 + 设置 + 关于 + 退出 + 关闭 + 游戏模式 + 暂停使用快捷键。 + + + Flow Launcher设置 + 通用 + 便携模式 + 将所有设置和用户数据存储在一个文件夹中 (可用于可移除驱动器或云服务)。 + 开机自启 + 失去焦点时自动隐藏Flow Launcher + 不显示新版本提示 + 记住上次启动位置 + 语言 + 再次激活时 + 重启Flow Launcher时显示/隐藏以前的结果。 + 保留上次搜索关键字 + 选择上次搜索关键字 + 清空上次搜索关键字 + 最大结果显示个数 + 全屏模式下忽略热键 + 当全屏应用程序激活时禁用快捷键。 + 默认文件管理器 + 选择打开文件夹时要使用的文件管理器。 + Python 路径 + 自动更新 + 选择 + 系统启动时不显示主窗口 + 隐藏任务栏图标 + 查询搜索精度 + 更改匹配成功所需的最低分数。 + 启动拼音搜索 + 允许使用拼音进行搜索 + 当前主题已启用模糊效果,不允许启用阴影效果 + + + 插件 + 浏览更多插件 + 启用 + 禁用 + 动作关键字设置 + 触发关键字 + 当前触发关键字 + 新触发关键字 + 当前优先级 + 新优先级 + 优先级 + 插件目录 + 出自 + 加载耗时: + 查询耗时: + | 版本 + 官方网站 + + + + 插件商店 + 刷新 + 安装 + + + 主题 + 浏览更多主题 + 如何创建一个主题 + 你好! + 查询框字体 + 结果项字体 + 窗口模式 + 透明度 + 无法找到主题 {0} ,切换为默认主题 + 无法加载主题 {0} ,切换为默认主题 + 主题目录 + 打开主题目录... + 颜色主题 + 跟随系统 + 浅色 + 深色 + 音效 + 启用激活音效 + 动画 + 启用动画 + + + 热键 + Flow Launcher激活热键 + 输入显示/隐藏Flow Launcher的快捷键。 + 开放结果修饰符 + 指定修饰符用于打开指定的选项。 + 显示热键 + 显示热键用于快速选择选项。 + 自定义查询热键 + 查询 + 删除 + 编辑 + 增加 + 请选择一项 + 你确定要删除插件 {0} 的热键吗? + 查询窗口阴影效果 + 阴影效果将占用大量的GPU资源。 如果您的计算机性能有限,则不建议使用。 + 窗口宽度 + 使用Segoe Fluent图标 + 在支持时在选项中显示 Segoe Fluent 图标 + + + HTTP 代理 + 启用 HTTP 代理 + HTTP 服务器 + 端口 + 用户名 + 密码 + 测试代理 + 保存 + 服务器不能为空 + 端口不能为空 + 非法的端口格式 + 保存代理设置成功 + 代理设置正确 + 代理连接失败 + + + 关于 + 网站 + Github + 文档 + 版本 + 你已经激活了Flow Launcher {0} 次 + 检查更新 + 发现新版本 {0} , 请重启 Flow Launcher + 下载更新失败,请检查您与 api.github.com 的连接状态或检查代理设置 + + 下载更新失败,请检查您与 github-cloud.s3.amazonaws.com 的连接状态或检查代理设置, + 或访问 https://github.com/Flow-Launcher/Flow.Launcher/releases 手动下载更新 + + 更新说明: + 使用技巧: + 开发工具 + 设置目录 + 日志目录 + 向导 + + + 默认文件管理器 + 请指定文件管理器的文件位置,并在必要时修改参数。 默认参数是%d",作为占位符代表文件路径。 例如命令 “totalcmd.exe /A c:\winds”,参数是 /A "%d”。 + %f是一个表示文件路径的参数。 它用于在第三方文件管理器中打开特定文件位置时强调文件/文件夹名称。 此参数仅在“选中文件参数”项目中可用。 如果文件管理器没有该功能,“%d” 仍然可用。 + 文件管理器 + 档案名称 + 文件管理器路径 + 文件夹路径参数 + 选中文件路径参数 + + + 更改优先级 + 数字越大,结果排名越高。如果你想要结果比任何其他插件的低,请使用负数 + 请提供有效的整数作为优先级设置值 + + + 旧触发关键字 + 新触发关键字 + 取消 + 确认 + 找不到指定的插件 + 新触发关键字不能为空 + 此触发关键字已经被指派给其他插件了,请换一个关键字 + 成功 + 成功完成 + 如果你不想设置触发关键字,可以使用*代替 + + + 自定义插件热键 + 按下自定义快捷键激活Flow Launcher并插入指定的查询前缀。 + 预览 + 热键不可用,请选择一个新的热键 + 插件热键不合法 + 更新 + + + 热键不可用 + + + 版本 + 时间 + 请告诉我们如何重现此问题,以便我们进行修复 + 发送报告 + 取消 + 基本信息 + 异常信息 + 异常类型 + 异常源 + 堆栈信息 + 发送中 + 发送成功 + 发送失败 + Flow Launcher出错啦 + + + 请稍等... + + + 检查新的更新 + 您已经拥有最新的Flow Launcher版本 + 检查到更新 + 更新中... + + Flow Launcher无法将您的用户配置文件数据移动到新的更新版本中。 + 请手动将您的用户配置文件数据文件夹从 {0} 到 {1} + + 新的更新 + 发现Flow Launcher新版本 V{0} + 尝试安装软件更新时发生错误 + 更新 + 取消 + 更新失败 + 检查网络是否可以连接至github-cloud.s3.amazonaws.com. + 此次更新需要重启Flow Launcher + 下列文件会被更新 + 更新文件 + 更新日志 + + + 跳过 + 欢迎使用Flow Launcher + 你好,这是你第一次运行Flow Launcher! + 在启动前,这个向导将有助于设置Flow Launcher。如果您愿意,您可以跳过。请选择一种语言 + 搜索并运行您PC上的文件和应用程序 + 搜索所有应用程序、 文件、 书签、 YouTube、 Twitter等。所有都只需要键盘而不需要触摸鼠标。 + Flow Launcher默认使用下面的快捷键激活。 要更改它,请点击输入并按键盘上所需的热键。 + 快捷键 + 动作关键词和命令 + 通过Flow Launcher 插件搜索网站、启动应用程序或运行各种功能。 某些函数起始于一个动作关键词,如有必要,它们可以在没有动作关键词的情况下使用。欢迎尝试一下的查询语句。 + 开始使用Flow Launcher + 完成了!享受Flow Launcher。不要忘记激活快捷键 :) + + + + 返回/上下文菜单 + 选项导航 + 打开菜单目录 + 打开所在目录 + 以管理员身份运行 + 查询历史 + 返回查询界面 + 打开/运行选中项目 + 打开设置窗口 + 重新加载插件数据 + + 天气 + 谷歌天气结果 + > ping 8.8.8.8 + 命令行命令 + Bluetooth + Windows 设置中的蓝牙 + sn + Sticky Notes + + diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/pt-pt.xaml new file mode 100644 index 00000000000..259f34c8549 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/pt-pt.xaml @@ -0,0 +1,21 @@ + + + + + Marcadores do navegador + Pesquisar nos marcadores do navegador + + + Abrir marcadores em: + Nova janela + Novo separador + Caminho do navegador: + Escolher + Copiar URL + Copiar URL do marcador para área de transferência + Carregar navegador de: + Nome do navegador + Caminho do diretório de dados + Adicionar + Eliminar + diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/pt-pt.xaml new file mode 100644 index 00000000000..4f9e7c617d3 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/pt-pt.xaml @@ -0,0 +1,15 @@ + + + + Calculadora + Permite a execução de cálculos matemáticos (experimente 5*3-2) + Não é número (NN) + Expressão errada ou incompleta (esqueceu-se de algum parêntese?) + Copiar número para a área de transferência + Separador decimal + O separador decimal a ser usado no resultado. + Utilizar definições do sistema + Vírgula (,) + Ponto (.) + N.º máximo de casas decimais + diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/zh-cn.xaml index 0fd0e8791eb..a73bc63f219 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/zh-cn.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/zh-cn.xaml @@ -7,7 +7,7 @@ 表达错误或不完整(您是否忘记了一些括号?) 将结果复制到剪贴板 十进制分隔符 - 在输出中使用的十进制分隔符。 + 在输出中使用的十进制分隔符 使用系统区域设置 逗号(,) 点(.) diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml new file mode 100644 index 00000000000..6d5160f2a64 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml @@ -0,0 +1,67 @@ + + + + + Primeiro, escolha uma selação + Selecione a ligação para a pasta + Tem a certeza de que deseja eliminar {0}? + Tem certeza de que deseja eliminar permanentemente {0}? + Eliminada com sucesso + {0} foi eliminada com sucesso + A atribuição de uma palavra-chave global pode devolver demasiados resultados. deve escolher uma palavra-chave específica. + Se o plugin Acesso rápido estiver ativo, não pode ser definido como palavra-chave global. Por favor escolha outra. + Parece que o serviço de pesquisa Windows não está em execução. + Para corrigir, inicie o serviço Windows Search. Selecione aqui para remover este aviso. + A mensagem de aviso foi desativada. Como alternativa ao serviço de pesquisa Windows, gostaria de instalar o plugin Everything?{0}{0}Selecione 'Sim' para instalar ou 'Não' para não instalar. + Alternativa + + + Eliminar + Editar + Adicionar + Personalizar palavras-chave + Ligações de acesso rápido + Caminhos excluídos do índice de pesquisa + Opções de indexação + Pesquisar: + Pesquisa de caminho: + Pesquisa no conteúdo dos ficheiros: + Pesquisa no índice: + Acesso rápido: + Palavra-chave atual: + Feito + Ativo + Se desativar a opção, o Flow Launcher não irá executar esta opção de pesquisa e utilizará '*' para libertar a palavra-chave + + + Explorador + Pesquisar e gerir ficheiros e pastas. O explorador utiliza o índice de pesquisa Windows. + + + Copiar caminho + Copiar + Eliminar + Caminho: + Eliminar seleção + Executar com outro utilizador + Executar ações com uma conta de utilizador diferente + Abrir pasta de destino + Abre a localização que contém o ficheiro ou a pasta + Abrir com o editor: + Excluir diretório do índice de pesquisas + Excluído do índice de pesquisa + Abrir opções de indexação do Windows + Gerir ficheiros e pastas indexadas + Não foi possível abrir as opções de indexação do Windows + Adicionar ao acesso rápido + Adicionar {0} ao acesso rápido + Adicionado com sucesso + Adicionado com sucesso ao acesso rápido + Removido com sucesso + Removido com sucesso do acesso rápido + Adicionar ao acesso rápido para que possa ser aberto com a palavra-chave de ativação da pesquisa no explorador + Remover do acesso rápido + Remover do acesso rápido + Remover {0} do acesso rápido + + diff --git a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/pt-pt.xaml new file mode 100644 index 00000000000..355f709fa94 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/pt-pt.xaml @@ -0,0 +1,7 @@ + + + + Plugin Indicador + Disponibiliza sugestões de palavras-chave para os plugins + + diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-pt.xaml new file mode 100644 index 00000000000..81c05b28662 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-pt.xaml @@ -0,0 +1,48 @@ + + + + + Descarregar plugin + Descarregado com sucesso + Erro: não foi possível descarregar o plugin + {0} de {1} {2}{3}Tem a certeza de que pretende desinstalar este plugin? Após a desinstalação, Flow Launcher será reiniciado. + {0} de{1} {2}{3}Tem a certeza de que pretende instalar este plugin? Após a instalação, Flow Launcher será reiniciado. + Instalador de plugins + Descarregar e instalar {0} + Desinstalador de plugins + Plugin instalado com sucesso. Por favor aguarde, estamos a reiniciar Flow launcher... + Não foi possível localizar o ficheiro plugin.json a partir do ficheiro extraído. + Erro: já está instalado um plugin com uma versão igual ou superior a {0}. + Erro ao instalar o plugin + Ocorreu um erro ao tentar instalar {0} + Não existem atualizações + Todos os plugins estão instalados + {0} de {1} {2}{3}Tem a certeza de que pretende atualizar este plugin? Após a atualização, Flow Launcher será reiniciado. + Atualização de plugin + Existe uma atualização para este plugin. Deseja ver? + Este plugin já está instalado + Erro ao descarregar o manifesto do plugin + Verifique se consegue estabelecer ligação a github.com. Este erro significa que pode não ser possível instalar ou atualizar os plugins. + Instalar a partir de fontes desconhecidas + Está a instalar este plugin a partir de uma fonte desconhecida o que pode ser perigoso!{0}{0}Certifique-se de que este plugin é seguro.{0}{0}Ainda assim, pretende continuar com a instalação?{0}{0}(Pode desativar este aviso nas definições da aplicação) + + + + + Gestor de plugins + Módulo para instalar, desinstalar e atualizar os plugins do Flow Launcher + Autor desconhecido + + + Abrir site + Aceder ao site do plugin + Ver código fonte + Consultar o código fonte do plugin + Sugerir uma melhoria ou reportar um erro + Possibilidade de sugerir uma melhoria ou reportar um erro ao programador + Ir para o repositório de plugins + Aceda ao repositório para ver os plugins submetidos pela comunidade + + + Aviso ao instalar de fontes desconhecidas + diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sk.xaml index 6678fcbda6d..cca5f54b21a 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sk.xaml @@ -3,7 +3,7 @@ Sťahovanie pluginu - Úspešne stiahnut + Úspešne stiahnuté Chyba: Nepodarilo sa stiahnuť plugin {0} od {1} {2}{3}Chcete odinštalovať tento plugin? Po odinštalovaní sa Flow automaticky reštartuje. {0} by {1} {2}{3}Chcete nainštalovať tento plugin? Po nainštalovaní sa Flow automaticky reštartuje. diff --git a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/pt-pt.xaml new file mode 100644 index 00000000000..9c4fe7be05e --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/pt-pt.xaml @@ -0,0 +1,11 @@ + + + + Terminador de processos + Terminar todos os processos do Flow Launcher + + terminar todas as instâncias de {0} + terminar {0} processos + terminar todas as instâncias + + diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/pt-pt.xaml new file mode 100644 index 00000000000..9ff64447230 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/pt-pt.xaml @@ -0,0 +1,58 @@ + + + + + Eliminar + Editar + Adicionar + Desativar + Localização + Todos os programas + Sufixos de ficheiros + Reindexar + Indexação + Indexar menu Iniciar + Se ativada, Flow Launcher irá carregar os programas do menu Iniciar + Indexar registo + Se ativada, Flow Launcher irá carregar os programas do registo + Ocultar caminho da aplicação + Para ficheiros executásseis, tais como UWP ou lnk, ocultar o caminho do ficheiro + Pesquisar na descrição dos programas + Se ativada, Flow Launcher irá analisar também a descrição dos programas + Sufixos + Profundidade máxima + + Diretório + Explorar + Sufixos de ficheiros: + Profundidade máxima de pesquisa (-1 é ilimitada): + + Por favor selecione uma origem de programas + Tem a certeza de que deseja remover as origens selecionadas? + + OK + Flow Launcher apena irá indexar os ficheiros que possuam os seguintes sufixos (separe cada sufixo com ';') + Sufixos de ficheiros indexados com sucesso + Não pode indicar sufixos vazios + + Executar com outro utilizador + Executar como administrador + Abrir pasta de destino + Desativar exibição deste programa + + Programa + Pesquisa de programas com o Flow Launcher + + Caminho inválido + + Explorador personalizado + Argumentos + Pode utilizar um gestor de ficheiros personalizado para abrir a pasta de destino, introduzindo a variável de ambiente do gestor de ficheiros a utilizar. Deve utilizar a linha de comandos para testar se a variável de ambiente está disponível. + Introduza os argumentos personalizados para o gestor de ficheiros personalizado. %s para diretório superior e %f para o caminho completo (apenas funcional em sistemas 32 bits) Consulte o site do gestor de ficheiros para detalhes. + + + Sucesso + Desativou com sucesso a exibição deste programa nas suas consultas + Não é suposto que esta aplicação seja executada como administrador + + diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/sk.xaml index aa65dd336fc..6091c3f5c82 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/sk.xaml @@ -1,7 +1,7 @@  - + Odstrániť Upraviť Pridať @@ -15,6 +15,8 @@ Ak je povolené, Flow načíta programy z ponuky Štart Indexovať databázu Registry Ak je povolené, Flow načíta programy z databázy Registry + Skryť cestu k aplikácii + Pre spustiteľné súbory ako sú UWP alebo odkazy nezobrazovať cestu k súborom Povoliť popis programu Zakázaním tejto funkcie sa tiež zastaví vyhľadávanie popisu programu cez Flow Prípony @@ -30,8 +32,7 @@ Aktualizovať Flow Launcher bude indexovať iba súbory s nasledujúcimi príponami: - (Každú príponu oddeľte ;) - Prípony boli úspešne aktualizovan + Prípony boli úspešne aktualizované Súbor s príponami nemôže byť prázdny Spustiť ako iný používateľ @@ -49,7 +50,7 @@ Môžete si prispôsobiť otváranie umiestnenia priečinka vložením Premenných prostredia, ktoré chcete použiť. Dostupnosť premenných prostredia môžete vyskúšať cez príkazový riadok. Zadajte argumenty, ktoré chcete pridať pre správcu súborov. %s pre rodičovský priečinok, %f pre celú cestu (funguje iba pre win32). Pre podrobnosti pozrite webovú stránku správcu súborov. - + Úspešné Úspešne zakázané zobrazovanie tohto programu vo výsledkoch vyhľadávania Táto aplikácia nie je určená na spustenie ako správca diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/pt-pt.xaml new file mode 100644 index 00000000000..d69c37192fa --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/pt-pt.xaml @@ -0,0 +1,15 @@ + + + + Substituir Win+R + Não fechar linha de comandos depois de executar o comando + Executar sempre como administrador + Executar com outro utilizador + Consola + Permite a execução de comandos do sistema no Flow Launcher. Deve iniciar o comando o '>' + este comando foi executado {0} vezes + executar comando através de uma consola + Executar como administrador + Copiar comando + Mostrar apenas o número dos comandos mais usados: + diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/zh-cn.xaml index f66159527a6..076c93df724 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/zh-cn.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/zh-cn.xaml @@ -11,5 +11,5 @@ 执行此命令 以管理员身份运行 复制命令 - 显示最常用的命令个数: + 显示最常用的命令个数 diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-pt.xaml new file mode 100644 index 00000000000..94713bd4a31 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-pt.xaml @@ -0,0 +1,37 @@ + + + + + Comando + Descrição + + Desligar + Reiniciar + Reinicia o computador com as opções de arranque para os modos de segurança e de depuração assim como outras opções + Sair + Bloquear + Fechar Flow Launcher + Reiniciar Flow Launcher + Ajustar esta aplicação + Suspender + Esvaziar reciclagem + Hibernar + Guardar definições do Flow Launcher + Recarrega os dados do plugin com o novo conteúdo + Abrir localização dos registos do Flow Launcher + Procurar por novas versões do Flow Launcher + Aceda à documentação para mais informações e dicas de utilização + Abrir localização onde as definições do Flow Launcher estão guardadas + + + Sucesso + Todas as definições guardadas + Recarregar todos os dados aplicáveis ao plugin + Tem certeza de que deseja desligar o computador? + Tem a certeza que deseja reiniciar o computador? + Tem certeza de que deseja reiniciar o computador com as opções avançadas de arranque? + + Comandos do sistema + Disponibiliza os comandos relacionados com o sistema tais como: desligar, bloquear, reiniciar... + + diff --git a/Plugins/Flow.Launcher.Plugin.Url/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.Url/Languages/pt-pt.xaml new file mode 100644 index 00000000000..b94eb1f8080 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Url/Languages/pt-pt.xaml @@ -0,0 +1,17 @@ + + + + Abrir pesquisa em: + Nova janela + Novo separador + + Abrir URL:{0} + Impossível abrir URL:{0} + + URL + Abrir o URL no Flow Launcher + + Defina o caminho do navegador: + Escolher + Aplicação(*.exe)|*.exe|Todos os ficheiros|*.* + diff --git a/Plugins/Flow.Launcher.Plugin.Url/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.Url/Languages/zh-cn.xaml index 3dd1b504385..d107c641092 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/Languages/zh-cn.xaml +++ b/Plugins/Flow.Launcher.Plugin.Url/Languages/zh-cn.xaml @@ -1,7 +1,7 @@  - 使用以下位置打开: + 使用以下位置打开 新窗户 新标签 diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-pt.xaml new file mode 100644 index 00000000000..16b1a89a127 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-pt.xaml @@ -0,0 +1,43 @@ + + + + Definição do motor de pesquisa + Abrir pesquisa em: + Nova janela + Novo separador + Caminho do navegador: + Escolher + Eliminar + Editar + Adicionar + Confirmar + Palavra-chave da ação + URL + Pesquisar + Utilizar conclusão automática da consulta: + Preencher dados a partir de: + Selecione uma pesquisa web + Tem a certeza de que deseja remover {0}? + Se quiser, também pode adicionar um serviço web personalizado ao Flow Launcher. Por exemplo, pode utilizar o seguinte formato URL para pesquisar por 'casino' no Netflix: "https://www.netflix.com/search?q=Casino". Para o fazer, altere o termo de pesquisa 'Casino' como indicado a seguir. + https://www.netflix.com/search?q={q} + Adicione o URL à secção abaixo. Agora, já pode utilizar o Flow Launcher para pesquisar no Netflix. + + + + Título + Ativar + Selecionar ícone + Ícone + Cancelar + Pesquisa web inválida + Introduza um título + Introduza a palavra-chave da ação + Introduza um URL + A palavra-chave já existe. Por favor escolha outra + Sucesso + Dica: não é necessário colocar imagens personalizadas neste diretório pois se Flow Launcher for atualizado, estas serão perdidas. O Flow irá copiar todas as imagens que estejam fora deste diretório para em todas as pesquisas Web. + + Pesquisas web + Permite pesquisar diretamente na web + + diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.pt-PT.resx b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.pt-PT.resx index 8f8023c1f2b..b75011a817f 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.pt-PT.resx +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.pt-PT.resx @@ -59,46 +59,46 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - - + + - + - - - - + + + + - - + + - - + + - - - - + + + + - + - + @@ -118,58 +118,79 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Sobre + Acerca + Area System - - Aceder a trabalho ou escola + + access.cpl + File name, Should not translated - Opções de Acessibilidade + Opções de acessibilidade + Area Control Panel (legacy settings) Aplicações de acessórios + Area Privacy + + + Aceder a trabalho ou escola + Area UserAccounts Informações da conta + Area Privacy Contas + Area SurfaceHub - Centro de Ações + Centro de ação + Area Control Panel (legacy settings) Ativação + Area UpdateAndSecurity Histórico da atividade + Area Privacy - Adicionar Hardware + Adicionar hardware + Area Control Panel (legacy settings) - Adicionar/Remover Programas + Adicionar/remover programas + Area Control Panel (legacy settings) Adicionar o seu telemóvel + Area Phone - Ferramentas Administrativas + Ferramentas administrativas + Area System - Definições avançadas de visualização + Definições avançadas de exibição + Area System, only available on devices that support advanced display options Gráficos avançados - ID de Publicidade + ID de publicidade + Area Privacy, Deprecated in Windows 10, version 1809 and later - Modo de avião + Modo avião + Area NetworkAndInternet Alt+Tab + Means the key combination "Tabulator+Alt" on the keyboard Nomes alternativos @@ -180,47 +201,60 @@ Cor da aplicação - - Painel de Controlo - Diagnóstico de aplicações + Area Privacy Funcionalidades da aplicação - - - Definições do sistema - - - Volume das aplicações e preferências do dispositivo + Area Apps Aplicação + Short/modern name for application - Aplicações e Funcionalidades + Aplicações e funcionalidades + Area Apps + + + Definições do sistema + Type of the setting is a "Modern Windows settings". We use the same term as used in start menu search at the moment. Aplicações para sites + Area Apps + + + Volume das aplicações e preferências do dispositivo + Area System, Added in Windows 10, version 1903 + + + appwiz.cpl + File name, Should not translated Área + Mean the settings area or settings category Contas - Ferramentas Administrativas + Ferramentas administrativas + Area Control Panel (legacy settings) - Aspecto e Personalização + Aparência e personalização Aplicações - Relógio e Região + Relógio e região + + + Painel de controlo Cortana @@ -238,10 +272,10 @@ Jogos - Hardware e Som + Hardware e som - Home page + Página inicial Realidade mista @@ -268,7 +302,7 @@ Sistema - Sistema e Segurança + Sistema e segurança Hora e idioma @@ -284,132 +318,181 @@ Áudio + Area EaseOfAccess Alertas de áudio Áudio e voz - - - Reprodução Automática + Area MixedReality, only available if the Mixed Reality Portal app is installed. - Transferências automáticas de ficheiros + Descargas automáticas de ficheiros + Area Privacy + + + Reprodução automática + Area Device Fundo + Area Personalization - Aplicações em Segundo Plano + Aplicações em segundo plano + Area Privacy Cópia de segurança + Area UpdateAndSecurity - Cópia de Segurança e Restauro + Backup e restauro + Area Control Panel (legacy settings) Poupança de bateria + Area System, only available on devices that have a battery, such as a tablet - Definições de Poupança de Bateria + Definições de poupança de bateria + Area System, only available on devices that have a battery, such as a tablet Detalhes de utilização da poupança de bateria Utilização da bateria + Area System, only available on devices that have a battery, such as a tablet - Dispositivos Biométricos + Dispositivos biométricos + Area Control Panel (legacy settings) - Encriptação de Unidade BitLocker + Encriptação BitLocker + Area Control Panel (legacy settings) Luz azul - - Azul-amarelo - Bluetooth + Area Device Dispositivos Bluetooth + Area Control Panel (legacy settings) + + + Azul-amarelo IME Bopomofo + Area TimeAndLanguage + + + bpmf + Should not translated Transmissão + Area Gaming Calendário + Area Privacy Histórico de chamadas + Area Privacy + + + chamadas Câmara + Area Privacy IME Cangjie + Area TimeAndLanguage Caps Lock + Mean the "Caps Lock" key Celular e SIM + Area NetworkAndInternet Escolha as pastas que irão aparecer no Início + Area Personalization - Serviço ao cliente para NetWare + Cliente para NetWare + Area Control Panel (legacy settings) Área de transferência + Area System - Legendagem de áudio + Legendas ocultas + Area EaseOfAccess Filtros de cor + Area EaseOfAccess Gestão de cores + Area Control Panel (legacy settings) Cores + Area Personalization Comando + The command to direct start a setting - Dispositivos Ligados + Dispositivos ligados + Area Device Contactos + Area Privacy + + + Painel de controlo + Type of the setting is a "(legacy) Control Panel setting" Copiar comando - Isolamento do Núcleo + Isolamento de núcleo + Means the protection of the system core Cortana + Area Cortana Cortana nos meus dispositivos + Area Cortana Cortana - Idioma + Area Cortana Gestor de credenciais + Area Control Panel (legacy settings) Vários dispositivos @@ -417,9 +500,6 @@ Dispositivos personalizados - - DNS - Cor escura @@ -428,231 +508,327 @@ Utilização de dados + Area NetworkAndInternet Data e hora + Area TimeAndLanguage Aplicações predefinidas + Area Apps Câmara predefinida + Area Device Localização predefinida + Area Control Panel (legacy settings) Programas predefinidos + Area Control Panel (legacy settings) - Localizações para Guardar Predefinidas + Localizações predefinidas + Area System - Otimização da Entrega + Otimização de entrega + Area UpdateAndSecurity + + + desk.cpl + File name, Should not translated Temas do ambiente de trabalho + Area Control Panel (legacy settings) + + + deuteranopia + Medical: Mean you don't can see red colors Gestor de dispositivos + Area Control Panel (legacy settings) Dispositivos e impressoras + Area Control Panel (legacy settings) DHCP + Should not translated - Dial-up + Ligações + Area NetworkAndInternet Acesso direto + Area NetworkAndInternet, only available if DirectAccess is enabled Abrir diretamente o telefone + Area EaseOfAccess Ecrã + Area EaseOfAccess - Propriedades do ecrã + Propriedades de exibição + Area Control Panel (legacy settings) + + + DNS + Should not translated Documentos + Area Privacy - A duplicar o meu ecrã + Duplicar o ecrã + Area System Durante estas horas + Area System Centro de facilidade de acesso + Area Control Panel (legacy settings) Edição + Means the "Windows Edition" E-mail + Area Privacy Contas de e-mail e aplicações + Area UserAccounts Encriptação + Area System Ambiente + Area MixedReality, only available if the Mixed Reality Portal app is installed. Ethernet + Area NetworkAndInternet - Exploit Protection + Proteção 'exploit' Extras + Area Extra, , only used for setting of 3rd-Party tools Controlo ocular + Area EaseOfAccess Rastreador ocular + Area Privacy, requires eyetracker hardware Família e outras pessoas + Area UserAccounts Feedback e diagnósticos + Area Privacy Sistema de ficheiros + Area Privacy FindFast + Area Control Panel (legacy settings) + + + findfast.cpl + File name, Should not translated - Localizar o meu Dispositivo + Localizar dispositivo + Area UpdateAndSecurity Firewall Auxiliar de concentração – Horas de descanso + Area System Auxiliar de concentração – Momentos de pausa + Area System Opções de pasta + Area Control Panel (legacy settings) Tipos de letra + Area EaseOfAccess Para programadores + Area UpdateAndSecurity - Game bar + Barra de jogo + Area Gaming Controladores de jogo + Area Control Panel (legacy settings) Gravador de jogo + Area Gaming - Modo Jogo + Modo de jogo + Area Gaming Gateway + Should not translated Geral + Area Privacy Obter programas + Area Control Panel (legacy settings) Introdução + Area Control Panel (legacy settings) Reprodução Automática + Area Personalization, Deprecated in Windows 10, version 1809 and later Definições de gráficos + Area System Escala de cinzentos Semana verde + Mean you don't can see green colors - Ecrã do headset de realidade mista + Ecrã de realidade mista + Area MixedReality, only available if the Mixed Reality Portal app is installed. Alto contraste + Area EaseOfAccess Áudio holográfico - Ambiente Holográfico + Ambiente holográfico - Headset Holográfico + Auscultador holográfico - Gestão Holográfica + Gestão holográfica Grupo doméstico + Area Control Panel (legacy settings) ID + MEans The "Windows Identifier" Imagem Opções de indexação + Area Control Panel (legacy settings) + + + inetcpl.cpl + File name, Should not translated Infravermelhos + Area Control Panel (legacy settings) Tinta digital e escrita + Area Privacy Opções de Internet + Area Control Panel (legacy settings) + + + intl.cpl + File name, Should not translated Cores invertidas IP + Should not translated - Navegação Isolada + Navegação isolada - Definições de IME Japão + Definições de IME em japonês + Area TimeAndLanguage, available if the Microsoft Japan input method editor is installed + + + joy.cpl + File name, Should not translated Propriedades do joystick + Area Control Panel (legacy settings) + + + jpnime + Should not translated Teclado + Area EaseOfAccess Teclado numérico - Chaves + Teclas Idioma + Area TimeAndLanguage Cor clara @@ -662,102 +838,155 @@ Localização + Area Privacy Ecrã de bloqueio + Area Personalization Lupa + Area EaseOfAccess - Correio – Microsoft Exchange ou Mensagens do Windows + Correio – Microsoft Exchange ou Windows Messaging + Area Control Panel (legacy settings) + + + main.cpl + File name, Should not translated Gerir redes conhecidas + Area NetworkAndInternet Gerir funcionalidades opcionais + Area Apps Mensagens + Area Privacy - Ligação com tráfego limitado + Ligações limitadas Microfone + Area Privacy Microsoft Mail Post Office + Area Control Panel (legacy settings) + + + mlcfg32.cpl + File name, Should not translated + + + mmsys.cpl + File name, Should not translated Dispositivos móveis Hotspot móvel + Area NetworkAndInternet + + + modem.cpl + File name, Should not translated Mono Mais detalhes + Area Cortana Movimento + Area Privacy Rato + Area EaseOfAccess - Rato e touchpad + Rato e painel de toque + Area Device - Propriedades do Rato, Tipos de Letra, Teclado e Impressoras + Rato, tipos de letra, teclado e propriedades de impressoras + Area Control Panel (legacy settings) Ponteiro do rato + Area EaseOfAccess Propriedades multimédia + Area Control Panel (legacy settings) - Multitasking - - - NFC - - - Transações NFC + Multitarefas + Area System Narrador + Area EaseOfAccess Barra de navegação + Area Personalization + + + netcpl.cpl + File name, Should not translated + + + netsetup.cpl + File name, Should not translated Rede + Area NetworkAndInternet Centro de rede e partilha + Area Control Panel (legacy settings) Ligação de rede + Area Control Panel (legacy settings) Propriedades da rede + Area Control Panel (legacy settings) - Assistente de Configuração de Rede + Assistente de configuração de redes + Area Control Panel (legacy settings) Estado da rede + Area NetworkAndInternet + + + NFC + Area NetworkAndInternet + + + Transações NFC + "NFC should not translated" Luz noturna Definições de luz noturna + Area System Nota @@ -766,25 +995,25 @@ Disponível apenas quando tiver ligado um dispositivo móvel ao seu dispositivo. - Disponível apenas em dispositivos que suportam opções de gráficos avançadas. + Disponível apenas em dispositivos com suporte a opções avançadas de gráficos. Disponível apenas em dispositivos com bateria, como um tablet. - Preterido no Windows 10, versão 1809 (compilação 17763) e posterior. + Descontinuada no Windows 10, versão 1809 (compilação 17763) e posterior. - Só disponível se o Dispositivo de marcação estiver emparelhado. + Disponível apenas com emparelhamento. - Disponível apenas se o DirectAccess estiver ativado. + Disponível apenas se DirectAccess estiver ativo. - Disponível apenas em dispositivos que suportam opções de apresentação avançadas. + Disponível apenas em dispositivos com suporte a opções avançadas de exibição. - Presente apenas se o utilizador estiver inscrito no WIP. + Apenas se o utilizador estiver inscrito no WIP. Requer hardware de rastreio ocular. @@ -799,7 +1028,7 @@ Disponível se o editor de métodos de entrada Wubi da Microsoft estiver instalado. - Disponível apenas se a aplicação Portal de Realidade Mista estiver instalada. + Disponível apenas se a aplicação Mixed Reality Portal estiver instalada. Disponível apenas em dispositivos móveis e se a empresa tiver implementado um pacote de aprovisionamento. @@ -811,13 +1040,13 @@ Adicionado no Windows 10, versão 2004 (compilação 19041). - Só disponível se estiverem instaladas, por exemplo, “aplicações de definições” de terceiros. + Disponível se estiverem instaladas “aplicações de definições” de terceiros. - Disponível apenas se estiver presente hardware de touchpad. + Disponível apenas se estiver presente um painel de toque. - Disponível apenas se o dispositivo tiver um adaptador de Wi-Fi. + Disponível apenas se o dispositivo tiver um adaptador Wi-Fi. O dispositivo deve ter a capacidade Windows Anywhere. @@ -827,342 +1056,479 @@ Notificações + Area Privacy Notificações e ações + Area System Bloqueio Numérico + Mean the "Num Lock" key + + + nwc.cpl + File name, Should not translated + + + odbccp32.cpl + File name, Should not translated - Administrador da Origem de Dados ODBC (32 bits) + Administrador da origem de dados ODBC (32 bits) + Area Control Panel (legacy settings) - Administrador da Origem de Dados ODBC (64 bits) + Administrador da origem de dados ODBC (64 bits) + Area Control Panel (legacy settings) Ficheiros offline + Area Control Panel (legacy settings) - Mapas Offline + Mapas offline + Area Apps - Mapas Offline – Transferir mapas + Mapas offline – Descarregar mapas + Area Apps No ecrã SO + Means the "Operating System" Outros dispositivos + Area Privacy Outras opções + Area EaseOfAccess Outros utilizadores Controlos parentais + Area Control Panel (legacy settings) Palavra-passe + + password.cpl + File name, Should not translated + Propriedades da palavra-passe + Area Control Panel (legacy settings) Dispositivos de caneta e entrada + Area Control Panel (legacy settings) Caneta e toque + Area Control Panel (legacy settings) Caneta e Windows Ink + Area Device - Pessoas Perto de Mim + Pessoas na vizinhança + Area Control Panel (legacy settings) Informações e ferramentas de desempenho + Area Control Panel (legacy settings) Permissões e histórico + Area Cortana Personalização (categoria) + Area Personalization Telefone + Area Phone Telefone e modem + Area Control Panel (legacy settings) Telefone e modem – Opções + Area Control Panel (legacy settings) Chamadas telefónicas + Area Privacy Telefone – Aplicações predefinidas + Area System Imagem Imagens + Area Privacy Definições IME Pinyin + Area TimeAndLanguage, available if the Microsoft Pinyin input method editor is installed Definições de IME Pinyin – léxico de domínio + Area TimeAndLanguage Definições de IME Pinyin – Configuração de teclas + Area TimeAndLanguage Definições IME Pinyin – UDP + Area TimeAndLanguage - A jogar em ecrã inteiro + Jogos em ecrã completo + Area Gaming - Plug-in para pesquisa de definições do Windows + Plug-in para pesquisar nas definições do Windows Definições do Windows Energia e suspensão + Area System + + + powercfg.cpl + File name, Should not translated Opções de energia + Area Control Panel (legacy settings) Apresentação - - Print screen - Impressoras + Area Control Panel (legacy settings) Impressoras e scanners + Area Device + + + Tecla Print Screen + Mean the "Print screen" key Relatórios e soluções de problemas + Area Control Panel (legacy settings) Processador Programas e funcionalidades + Area Control Panel (legacy settings) - A projetar neste PC + Projetar neste PC + Area System + + + protanopia + Medical: Mean you don't can see green colors - A aprovisionar + Aprovisionamento + Area UserAccounts, only available if enterprise has deployed a provisioning package Proximidade + Area NetworkAndInternet Proxy + Area NetworkAndInternet QuickTime + Area TimeAndLanguage Jogo de momentos de pausa Rádios + Area Privacy RAM + Means the Read-Access-Memory (typical the used to inform about the size) Reconhecimento Recuperação + Area UpdateAndSecurity Olhos vermelhos + Mean red eye effect by over-the-night flights Vermelho-verde + Mean the weakness you can't differ between red and green colors Semana vermelha + Mean you don't can see red colors Região + Area TimeAndLanguage + + + Configuração regional + Area TimeAndLanguage + + + Propriedades de configurações regionais + Area Control Panel (legacy settings) Região e idioma + Area Control Panel (legacy settings) - Formatação da região - - - Idioma regional - - - Propriedades de definições regionais + Formatos regionais - Ligações RemoteApp e Ambientes de Trabalho + Ligações remotas + Area Control Panel (legacy settings) - Ambiente de Trabalho Remoto + Ambiente de trabalho remoto + Area System Scanners e câmaras + Area Control Panel (legacy settings) + + + schedtasks + File name, Should not translated - Agendado + Agendadas Tarefas agendadas + Area Control Panel (legacy settings) Rotação do ecrã + Area System Barras de deslocamento Bloqueio de deslocamento + Mean the "Scroll Lock" key SDNS + Should not translated - A pesquisar no Windows + Pesquisar no Windows + Area Cortana SecureDNS + Should not translated - Centro de Segurança + Centro de segurança + Area Control Panel (legacy settings) - Processador de Segurança + Processador de segurança - Limpeza da sessão - - - Configurar um quiosque + Limpeza de sessões + Area SurfaceHub Página inicial de definições + Area Home, Overview-page for all areas of settings + + + Configurar um 'kiosk' + Area UserAccounts Experiências partilhadas - - - Wi-Fi + Area System Atalhos + + Wi-Fi + dont translate this, is a short term to find entries + Opções de início de sessão + Area UserAccounts Opções de início de sessão – Bloqueio dinâmico + Area UserAccounts Tamanho + Size for text and symbols Som + Area System Voz + Area EaseOfAccess Reconhecimento de voz + Area Control Panel (legacy settings) Escrita por voz Iniciar + Area Personalization Locais de início Aplicações de arranque + Area Apps + + + sticpl.cpl + File name, Should not translated Armazenamento + Area System Políticas de armazenamento + Area System - Sensor de Armazenamento + Sensor de armazenamento + Area System + + + nas + Example: Area "System" in System settings Centro de sincronização + Area Control Panel (legacy settings) - Sincronizar as suas definições + Sincronizar as definições + Area UserAccounts + + + sysdm.cpl + File name, Should not translated Sistema + Area Control Panel (legacy settings) - Propriedades do sistema e assistente para Adicionar Novo Hardware + Propriedades do sistema e assistente para adicionar hardware + Area Control Panel (legacy settings) Separador + Means the key "Tabulator" on the keyboard Modo tablet + Area System Definições do tablet PC + Area Control Panel (legacy settings) Conversa Falar com a Cortana + Area Cortana Barra de tarefas + Area Personalization Cor da barra de tarefas Tarefas + Area Privacy - Conferência de Equipa + Conferência de equipas + Area SurfaceHub - Gestão de dispositivos de equipa + Gestão de dispositivos da equipa + Area SurfaceHub Conversão de texto em voz + Area Control Panel (legacy settings) Temas + Area Personalization + + + themes.cpl + File name, Should not translated + + + timedate.cpl + File name, Should not translated - Linha cronológica + Cronologia Toque @@ -1171,130 +1537,174 @@ Feedback de toque - Touchpad + Painel de toque + Area Device Transparência + + tritanopia + Medical: Mean you don't can see yellow and blue colors + - Resolução de Problemas + Resolução de problemas + Area UpdateAndSecurity TruePlay + Area Gaming Escrita + Area Device Desinstalar + Area MixedReality, only available if the Mixed Reality Portal app is installed. USB + Area Device Contas de utilizador + Area Control Panel (legacy settings) Versão + Means The "Windows Version" Reprodução de vídeo + Area Apps Vídeos + Area Privacy - Ambientes de Trabalho Virtuais + Ambientes de trabalho virtuais Vírus + Means the virus in computers and software Ativação por voz + Area Privacy Volume VPN + Area NetworkAndInternet - Padrão de fundo + Papel de parede Cor mais quente Centro de boas-vindas + Area Control Panel (legacy settings) Ecrã de boas-vindas + Area SurfaceHub + + + wgpocpl.cpl + File name, Should not translated Roda + Area Device Wi-Fi + Area NetworkAndInternet, only available if Wi-Fi calling is enabled Chamadas Wi-Fi + Area NetworkAndInternet, only available if Wi-Fi calling is enabled - Definições de Wi-Fi + Definições Wi-Fi + "Wi-Fi" should not translated Limite da janela - Windows Anytime Upgrade + Atualizações Windows Anytime + Area Control Panel (legacy settings) Windows Anywhere + Area UserAccounts, device must be Windows Anywhere-capable Windows CardSpace + Area Control Panel (legacy settings) Windows Defender + Area Control Panel (legacy settings) Firewall do Windows + Area Control Panel (legacy settings) Configuração do Windows Hello – Face + Area UserAccounts Configuração do Windows Hello – Impressão digital + Area UserAccounts Programa Windows Insider + Area UpdateAndSecurity - Windows Mobility Center + Centro de mobilidade do Windows + Area Control Panel (legacy settings) - Windows search + Pesquisa Windows + Area Cortana Segurança do Windows + Area UpdateAndSecurity Windows Update + Area UpdateAndSecurity Windows Update – Opções avançadas + Area UpdateAndSecurity - Windows Update – Verificar se há atualizações + Windows Update – Procurar atualizações + Area UpdateAndSecurity Windows Update – Opções de reinício + Area UpdateAndSecurity Windows Update – Ver atualizações opcionais + Area UpdateAndSecurity Windows Update – Ver histórico de atualizações + Area UpdateAndSecurity Sem fios @@ -1304,107 +1714,26 @@ Aprovisionamento do local de trabalho + Area UserAccounts Definições IME Wubi + Area TimeAndLanguage, available if the Microsoft Wubi input method editor is installed Definições Wubi IME – UDP + Area TimeAndLanguage Rede Xbox + Area Gaming As suas informações + Area UserAccounts - Zoom - - - - - - - - - bpmf - - - chamadas - - - - - - deuteranopia - - - - - - - - - - - - - - - jpnime - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - protanopia - - - schedtasks - - - - - - - - - - - - - - - tritanopia - - - + Ampliar + Mean zooming of things via a magnifier \ No newline at end of file From d9529508941f60d5debe591e391d49ce543d4e5f Mon Sep 17 00:00:00 2001 From: DB p Date: Wed, 8 Dec 2021 17:56:06 +0900 Subject: [PATCH 610/625] remove comment --- .../Views/CustomBrowserSetting.xaml | 62 ------------------- 1 file changed, 62 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/CustomBrowserSetting.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/CustomBrowserSetting.xaml index 5b347805061..8a2a65f2612 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/CustomBrowserSetting.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/CustomBrowserSetting.xaml @@ -126,67 +126,5 @@ - From 932dea0ed3e29945a0d9642e47a37174cc369b16 Mon Sep 17 00:00:00 2001 From: DB p Date: Wed, 8 Dec 2021 18:27:26 +0900 Subject: [PATCH 611/625] Add Checkbox disable when no private arg --- Flow.Launcher/SelectBrowserWindow.xaml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Flow.Launcher/SelectBrowserWindow.xaml b/Flow.Launcher/SelectBrowserWindow.xaml index 22b5c8e98b6..85083fa5023 100644 --- a/Flow.Launcher/SelectBrowserWindow.xaml +++ b/Flow.Launcher/SelectBrowserWindow.xaml @@ -222,7 +222,17 @@ + IsChecked="{Binding EnablePrivate}"> + + + + From af2277de613f9ae7b140cfcd27e897f9f3f5ac04 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Wed, 8 Dec 2021 21:49:14 +1100 Subject: [PATCH 612/625] add backwards compatibility for open in new browser tab/window --- Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs | 16 ++++++++++++++-- Flow.Launcher/PublicAPIInstance.cs | 4 ++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs b/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs index fd1841ddab6..bd0c620e981 100644 --- a/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs +++ b/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs @@ -35,7 +35,7 @@ private static string GetDefaultBrowserPath() /// Opens search in a new browser. If no browser path is passed in then Chrome is used. /// Leave browser path blank to use Chrome. /// - public static void NewBrowserWindow(this string url, string browserPath = "", bool inPrivate = false, string privateArg = "") + public static void OpenInBrowserWindow(this string url, string browserPath = "", bool inPrivate = false, string privateArg = "") { browserPath = string.IsNullOrEmpty(browserPath) ? GetDefaultBrowserPath() : browserPath; @@ -71,10 +71,16 @@ public static void NewBrowserWindow(this string url, string browserPath = "", bo } } + [Obsolete("This is provided for backwards compatibility after 1.9.0 release, e.g. GitHub plugin. Use the new method instead")] + public static void NewBrowserWindow(this string url, string browserPath = "") + { + OpenInBrowserWindow(url, browserPath); + } + /// /// Opens search as a tab in the default browser chosen in Windows settings. /// - public static void NewTabInBrowser(this string url, string browserPath = "", bool inPrivate = false, string privateArg = "") + public static void OpenInBrowserTab(this string url, string browserPath = "", bool inPrivate = false, string privateArg = "") { browserPath = string.IsNullOrEmpty(browserPath) ? GetDefaultBrowserPath() : browserPath; @@ -105,5 +111,11 @@ public static void NewTabInBrowser(this string url, string browserPath = "", boo }); } } + + [Obsolete("This is provided for backwards compatibility after 1.9.0 release, e.g. GitHub plugin. Use the new method instead")] + public static void NewTabInBrowser(this string url, string browserPath = "") + { + OpenInBrowserTab(url, browserPath); + } } } \ No newline at end of file diff --git a/Flow.Launcher/PublicAPIInstance.cs b/Flow.Launcher/PublicAPIInstance.cs index 238a57cbc65..46f192a918c 100644 --- a/Flow.Launcher/PublicAPIInstance.cs +++ b/Flow.Launcher/PublicAPIInstance.cs @@ -217,10 +217,10 @@ public void OpenUrl(string url) if (browserInfo.OpenInTab) { - url.NewTabInBrowser(path, browserInfo.EnablePrivate, browserInfo.PrivateArg); + url.OpenInBrowserTab(path, browserInfo.EnablePrivate, browserInfo.PrivateArg); }else { - url.NewBrowserWindow(path, browserInfo.EnablePrivate, browserInfo.PrivateArg); + url.OpenInBrowserWindow(path, browserInfo.EnablePrivate, browserInfo.PrivateArg); } } From 05fd41a1047b47e626cfbeef4ef95e7d27c93095 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Wed, 8 Dec 2021 10:38:37 -0600 Subject: [PATCH 613/625] fix new tab not save issue --- .../UserSettings/CustomBrowserViewModel.cs | 1 + Flow.Launcher/SelectBrowserWindow.xaml | 6 +++--- Flow.Launcher/SelectBrowserWindow.xaml.cs | 12 ++++++------ 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs b/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs index 30b7c5a6836..83d5b14c9c1 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs @@ -18,6 +18,7 @@ public CustomBrowserViewModel Copy() { Name = Name, Path = Path, + OpenInTab = OpenInTab, PrivateArg = PrivateArg, EnablePrivate = EnablePrivate, Editable = Editable diff --git a/Flow.Launcher/SelectBrowserWindow.xaml b/Flow.Launcher/SelectBrowserWindow.xaml index 85083fa5023..594a4325d9b 100644 --- a/Flow.Launcher/SelectBrowserWindow.xaml +++ b/Flow.Launcher/SelectBrowserWindow.xaml @@ -107,7 +107,7 @@ Margin="10,0,0,0" Click="btnDelete_Click" Content="{DynamicResource delete}" - IsEnabled="{Binding CustomExplorer.Editable}" /> + IsEnabled="{Binding CustomBrowser.Editable}" /> @@ -197,7 +197,7 @@ VerticalAlignment="Center" Orientation="Horizontal"> New Tab - New Window + New Window selectedCustomExplorerIndex; set + get => selectedCustomBrowserIndex; set { - selectedCustomExplorerIndex = value; - PropertyChanged?.Invoke(this, new(nameof(CustomExplorer))); + selectedCustomBrowserIndex = value; + PropertyChanged?.Invoke(this, new(nameof(CustomBrowser))); } } public ObservableCollection CustomBrowsers { get; set; } - public CustomBrowserViewModel CustomExplorer => CustomBrowsers[SelectedCustomBrowserIndex]; + public CustomBrowserViewModel CustomBrowser => CustomBrowsers[SelectedCustomBrowserIndex]; public SelectBrowserWindow(Settings settings) { Settings = settings; @@ -54,7 +54,7 @@ private void btnDone_Click(object sender, RoutedEventArgs e) { Settings.CustomBrowserList = CustomBrowsers.ToList(); Settings.CustomBrowserIndex = SelectedCustomBrowserIndex; - Close(); + Cl ose(); } private void btnAdd_Click(object sender, RoutedEventArgs e) From 38a9b9a5cb5320895dfd5394ca62dd66ed06344d Mon Sep 17 00:00:00 2001 From: DB P Date: Thu, 9 Dec 2021 02:13:02 +0900 Subject: [PATCH 614/625] Update SelectBrowserWindow.xaml.cs fix close from cl ose --- Flow.Launcher/SelectBrowserWindow.xaml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/SelectBrowserWindow.xaml.cs b/Flow.Launcher/SelectBrowserWindow.xaml.cs index 9013d27566a..37f0c47aebe 100644 --- a/Flow.Launcher/SelectBrowserWindow.xaml.cs +++ b/Flow.Launcher/SelectBrowserWindow.xaml.cs @@ -54,7 +54,7 @@ private void btnDone_Click(object sender, RoutedEventArgs e) { Settings.CustomBrowserList = CustomBrowsers.ToList(); Settings.CustomBrowserIndex = SelectedCustomBrowserIndex; - Cl ose(); + Close(); } private void btnAdd_Click(object sender, RoutedEventArgs e) From 5ea8675c0262a7a69578519f8fa60f99a0989c38 Mon Sep 17 00:00:00 2001 From: Kevin Zhang <45326534+taooceros@users.noreply.github.com> Date: Wed, 8 Dec 2021 16:20:54 -0600 Subject: [PATCH 615/625] Update Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs Co-authored-by: Jeremy Wu --- Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs index 624c58dec0b..cde21507ec7 100644 --- a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs +++ b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs @@ -40,7 +40,7 @@ internal abstract class JsonRPCPlugin : IAsyncPlugin, IContextMenu, ISettingProv protected PluginInitContext context; public const string JsonRPC = "JsonRPC"; - /// /// The language this JsonRPCPlugin support /// public abstract string SupportedLanguage { get; set; } From 53f965f1f4e4c89e00dde95bf966aa9a256e36d5 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Wed, 8 Dec 2021 17:44:44 -0600 Subject: [PATCH 616/625] remove group to make sure everything static --- Flow.Launcher/SelectBrowserWindow.xaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/SelectBrowserWindow.xaml b/Flow.Launcher/SelectBrowserWindow.xaml index 594a4325d9b..3f0793c5322 100644 --- a/Flow.Launcher/SelectBrowserWindow.xaml +++ b/Flow.Launcher/SelectBrowserWindow.xaml @@ -196,8 +196,8 @@ HorizontalAlignment="Left" VerticalAlignment="Center" Orientation="Horizontal"> - New Tab - New Window + New Tab + New Window Date: Wed, 8 Dec 2021 17:51:35 -0600 Subject: [PATCH 617/625] ignore openinnewwindow --- .../UserSettings/CustomBrowserViewModel.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs b/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs index 83d5b14c9c1..24584115d8c 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs @@ -1,4 +1,5 @@ using Flow.Launcher.Plugin; +using System.Text.Json.Serialization; namespace Flow.Launcher.Infrastructure.UserSettings { @@ -9,6 +10,7 @@ public class CustomBrowserViewModel : BaseModel public string PrivateArg { get; set; } public bool EnablePrivate { get; set; } public bool OpenInTab { get; set; } = true; + [JsonIgnore] public bool OpenInNewWindow => !OpenInTab; public bool Editable { get; set; } = true; From 721a6580f6036c2e5ed5d3644ed6a3b3c7fb2036 Mon Sep 17 00:00:00 2001 From: Hongtao Zhang Date: Wed, 8 Dec 2021 19:45:38 -0600 Subject: [PATCH 618/625] Change Space Position for NewWindow --- Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs b/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs index bd0c620e981..6c4ac8ebf0a 100644 --- a/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs +++ b/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs @@ -49,7 +49,7 @@ public static void OpenInBrowserWindow(this string url, string browserPath = "", var browser = string.IsNullOrEmpty(browserExecutableName) ? "chrome" : browserPath; // Internet Explorer will open url in new browser window, and does not take the --new-window parameter - var browserArguements = (browserExecutableName == "iexplore.exe" ? "" : "--new-window ") + (inPrivate ? $" {privateArg}" : "") + url; + var browserArguements = (browserExecutableName == "iexplore.exe" ? "" : "--new-window ") + (inPrivate ? $"{privateArg} " : "") + url; var psi = new ProcessStartInfo { From 13ccd582cee87c4a5b06aabfa01164c0ed7b541c Mon Sep 17 00:00:00 2001 From: Hongtao Zhang Date: Wed, 8 Dec 2021 21:06:52 -0600 Subject: [PATCH 619/625] move url before options --- Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs b/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs index 6c4ac8ebf0a..a744864da3d 100644 --- a/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs +++ b/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs @@ -49,7 +49,7 @@ public static void OpenInBrowserWindow(this string url, string browserPath = "", var browser = string.IsNullOrEmpty(browserExecutableName) ? "chrome" : browserPath; // Internet Explorer will open url in new browser window, and does not take the --new-window parameter - var browserArguements = (browserExecutableName == "iexplore.exe" ? "" : "--new-window ") + (inPrivate ? $"{privateArg} " : "") + url; + var browserArguements = (browserExecutableName == "iexplore.exe" ? "" : url + " --new-window ") + (inPrivate ? $"{privateArg}" : ""); var psi = new ProcessStartInfo { @@ -66,7 +66,8 @@ public static void OpenInBrowserWindow(this string url, string browserPath = "", { Process.Start(new ProcessStartInfo { - FileName = url, UseShellExecute = true + FileName = url, + UseShellExecute = true }); } } @@ -93,7 +94,7 @@ public static void OpenInBrowserTab(this string url, string browserPath = "", bo if (!string.IsNullOrEmpty(browserPath)) { psi.FileName = browserPath; - psi.Arguments = (inPrivate ? $"{privateArg} " : "") + url; + psi.Arguments = url + (inPrivate ? $" {privateArg}" : ""); } else { @@ -107,7 +108,8 @@ public static void OpenInBrowserTab(this string url, string browserPath = "", bo { Process.Start(new ProcessStartInfo { - FileName = url, UseShellExecute = true + FileName = url, + UseShellExecute = true }); } } From 238d4df1097b23a6256a15705c1a4eab5530df0a Mon Sep 17 00:00:00 2001 From: Hongtao Zhang Date: Wed, 8 Dec 2021 21:17:51 -0600 Subject: [PATCH 620/625] Add using for File.OpenRead --- Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs index cde21507ec7..384418db974 100644 --- a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs +++ b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs @@ -328,7 +328,10 @@ public async Task InitSettingAsync() return; if (File.Exists(SettingPath)) - Settings = await JsonSerializer.DeserializeAsync>(File.OpenRead(SettingPath), options); + { + await using var fileStream = File.OpenRead(SettingPath); + Settings = await JsonSerializer.DeserializeAsync>(fileStream, options); + } var deserializer = new DeserializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance).Build(); _settingsTemplate = deserializer.Deserialize(await File.ReadAllTextAsync(SettingConfigurationPath)); From 581e84228ca446304eecb0460589f4ccc23abd6f Mon Sep 17 00:00:00 2001 From: Hongtao Zhang Date: Wed, 8 Dec 2021 21:06:52 -0600 Subject: [PATCH 621/625] Revert "move url before options" This reverts commit 13ccd582cee87c4a5b06aabfa01164c0ed7b541c. --- Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs b/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs index a744864da3d..6c4ac8ebf0a 100644 --- a/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs +++ b/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs @@ -49,7 +49,7 @@ public static void OpenInBrowserWindow(this string url, string browserPath = "", var browser = string.IsNullOrEmpty(browserExecutableName) ? "chrome" : browserPath; // Internet Explorer will open url in new browser window, and does not take the --new-window parameter - var browserArguements = (browserExecutableName == "iexplore.exe" ? "" : url + " --new-window ") + (inPrivate ? $"{privateArg}" : ""); + var browserArguements = (browserExecutableName == "iexplore.exe" ? "" : "--new-window ") + (inPrivate ? $"{privateArg} " : "") + url; var psi = new ProcessStartInfo { @@ -66,8 +66,7 @@ public static void OpenInBrowserWindow(this string url, string browserPath = "", { Process.Start(new ProcessStartInfo { - FileName = url, - UseShellExecute = true + FileName = url, UseShellExecute = true }); } } @@ -94,7 +93,7 @@ public static void OpenInBrowserTab(this string url, string browserPath = "", bo if (!string.IsNullOrEmpty(browserPath)) { psi.FileName = browserPath; - psi.Arguments = url + (inPrivate ? $" {privateArg}" : ""); + psi.Arguments = (inPrivate ? $"{privateArg} " : "") + url; } else { @@ -108,8 +107,7 @@ public static void OpenInBrowserTab(this string url, string browserPath = "", bo { Process.Start(new ProcessStartInfo { - FileName = url, - UseShellExecute = true + FileName = url, UseShellExecute = true }); } } From dbab7b6ab395a012e515416e6785a4c21349e0d9 Mon Sep 17 00:00:00 2001 From: Hongtao Zhang Date: Wed, 8 Dec 2021 21:39:31 -0600 Subject: [PATCH 622/625] Optional Inprivate argument & Comment --- Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs | 5 ++++- Flow.Launcher/PublicAPIInstance.cs | 11 ++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs index f87ca39696d..c5a5231c076 100644 --- a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs +++ b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs @@ -213,6 +213,9 @@ public interface IPublicAPI /// Extra FileName Info public void OpenDirectory(string DirectoryPath, string FileName = null); - public void OpenUrl(string url); + /// + /// Open Url in the configured default browser for Flow's Settings. + /// + public void OpenUrl(string url, bool? inPrivate = null); } } diff --git a/Flow.Launcher/PublicAPIInstance.cs b/Flow.Launcher/PublicAPIInstance.cs index 46f192a918c..f54bc23f0c0 100644 --- a/Flow.Launcher/PublicAPIInstance.cs +++ b/Flow.Launcher/PublicAPIInstance.cs @@ -114,7 +114,7 @@ public void ShellRun(string cmd, string filename = "cmd.exe") var startInfo = ShellCommand.SetProcessStartInfo(filename, arguments: args, createNoWindow: true); ShellCommand.Execute(startInfo); } - + public void CopyToClipboard(string text) { Clipboard.SetDataObject(text); @@ -209,7 +209,7 @@ public void OpenDirectory(string DirectoryPath, string FileName = null) explorer.Start(); } - public void OpenUrl(string url) + public void OpenUrl(string url, bool? inPrivate = null) { var browserInfo = _settingsVM.Settings.CustomBrowser; @@ -217,10 +217,11 @@ public void OpenUrl(string url) if (browserInfo.OpenInTab) { - url.OpenInBrowserTab(path, browserInfo.EnablePrivate, browserInfo.PrivateArg); - }else + url.OpenInBrowserTab(path, inPrivate ?? browserInfo.EnablePrivate, browserInfo.PrivateArg); + } + else { - url.OpenInBrowserWindow(path, browserInfo.EnablePrivate, browserInfo.PrivateArg); + url.OpenInBrowserWindow(path, inPrivate ?? browserInfo.EnablePrivate, browserInfo.PrivateArg); } } From 27d1796e486dafb9bc66de1165f2a7ecc0258965 Mon Sep 17 00:00:00 2001 From: Hongtao Zhang Date: Wed, 8 Dec 2021 21:48:27 -0600 Subject: [PATCH 623/625] Fix Suggestion Result Action --- Plugins/Flow.Launcher.Plugin.WebSearch/Main.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Main.cs b/Plugins/Flow.Launcher.Plugin.WebSearch/Main.cs index 1394e8c15dd..31d56c1085e 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Main.cs @@ -136,7 +136,7 @@ private async Task> SuggestionsAsync(string keyword, string ActionKeywordAssigned = searchSource.ActionKeyword == SearchSourceGlobalPluginWildCardSign ? string.Empty : searchSource.ActionKeyword, Action = c => { - searchSource.Url.Replace("{q}", Uri.EscapeDataString(o)); + _context.API.OpenUrl(searchSource.Url.Replace("{q}", Uri.EscapeDataString(o))); return true; } @@ -156,7 +156,7 @@ void Init() _settings = _context.API.LoadSettingJsonStorage(); _viewModel = new SettingsViewModel(_settings); - + var pluginDirectory = _context.CurrentPluginMetadata.PluginDirectory; var bundledImagesDirectory = Path.Combine(pluginDirectory, Images); From b3b85c1868dc464b875234832c81252f44492bb4 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 9 Dec 2021 19:45:11 +1100 Subject: [PATCH 624/625] update comment --- Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs index c5a5231c076..44265703108 100644 --- a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs +++ b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs @@ -214,7 +214,7 @@ public interface IPublicAPI public void OpenDirectory(string DirectoryPath, string FileName = null); /// - /// Open Url in the configured default browser for Flow's Settings. + /// Opens the url. The browser and mode used is based on what's configured in Flow's default browser settings. /// public void OpenUrl(string url, bool? inPrivate = null); } From a9844fdb68c74633b136d4fce6f84f5040c72054 Mon Sep 17 00:00:00 2001 From: DB P Date: Thu, 9 Dec 2021 19:00:34 +0900 Subject: [PATCH 625/625] Update readme (#865) updated readme --- Flow.Launcher/SettingWindow.xaml.cs | 2 +- README.md | 268 +++++++++++++++++++++++----- 2 files changed, 221 insertions(+), 49 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index ca5f2885526..f17c184415e 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -371,4 +371,4 @@ private void Window_StateChanged(object sender, EventArgs e) } } -} \ No newline at end of file +} diff --git a/README.md b/README.md index 9fda057c08d..690c848f634 100644 --- a/README.md +++ b/README.md @@ -1,86 +1,258 @@

+
- +

+
-![Maintenance](https://img.shields.io/maintenance/yes/3000) -[![Build status](https://ci.appveyor.com/api/projects/status/32r7s2skrgm9ubva?svg=true&retina=true)](https://ci.appveyor.com/project/JohnTheGr8/flow-launcher/branch/dev) -[![Github All Releases](https://img.shields.io/github/downloads/Flow-Launcher/Flow.Launcher/total.svg)](https://github.com/Flow-Launcher/Flow.Launcher/releases) -![GitHub Release Date](https://img.shields.io/github/release-date/Flow-Launcher/Flow.Launcher) -[![GitHub release (latest by date)](https://img.shields.io/github/v/release/Flow-Launcher/Flow.Launcher)](https://github.com/Flow-Launcher/Flow.Launcher/releases/latest) -[![Documentation](https://img.shields.io/badge/Documentation-7389D8)](https://flow-launcher.github.io/docs) -[![Discord](https://img.shields.io/discord/727828229250875472?color=7389D8&labelColor=6A7EC2&label=Community&logo=discord&logoColor=white)](https://discord.gg/AvgAQgh) +

+ + + +
+ + + + +

+ +

+Dedicated to making your workflow flow more seamless. Search everything from applications, files, bookmarks, YouTube, Twitter and more. Flow will continue to evolve, designed to be open and built with the community at heart. + +

Remember to star it, flow will love you more :)

+ +

SOFTPEDIA EDITOR'S PICK

-Flow Launcher. Dedicated to make your workflow flow more seamlessly. Aimed at being more than an app launcher, it searches, integrates and expands on functionalities. Flow will continue to evolve, designed to be open and built with the community at heart. + -Remember to star it, flow will love you more :) ---- +## 🎉 New Features in 1.9 + +![screenshot](https://user-images.githubusercontent.com/6903107/144855345-45535bc7-7777-4c5a-b8d9-d6ce8adc5e84.png) + +- All New Design. New Themes, New Setting Window. Animation & Sound Effect, Color Scheme aka Dark Mode. +- New Plugins, Plugin Store, Game Mode, Wizard window +- Full changelog + +

- Features • - Getting Started • + Getting StartedFeaturesPlugins • + HotkeysQuestions/SuggestionsDevelopment • - Documentation + Docs

---- + -## Features +## 🚗 Getting Started + +### Installation + +| [Windows 7+ installer](https://github.com/Flow-Launcher/Flow.Launcher/releases/latest/download/Flow-Launcher-Setup.exe) | [Portable](https://github.com/Flow-Launcher/Flow.Launcher/releases/latest/download/Flow-Launcher-Portable.zip) | `WinGet install "Flow Launcher"` | +| :----------------------------------------------------------: | :----------------------------------------------------------: | :------------------------------: | + +> Windows may complain about security due to code not being signed, this will be completed at a later stage. If you downloaded from this repo, you are good to continue the set up. + +And you can download early access version. + + + +## 🎁 Features + +### Applications & Files + + + + +- Search for files or their contents. + + -![The Flow](https://user-images.githubusercontent.com/26427004/82151677-fa9c7100-989f-11ea-9143-81de60aaf07d.gif) -- Search everything from applications, files, bookmarks, YouTube, Twitter and more. All from the comfort of your keyboard without ever touching the mouse. -- Search for file contents. -- Do mathematical calculations and copy the result to clipboard. - Support search using environment variable paths. + +### Web Search & Open URL + + + + + +### Browser Bookmarks + + + +### System Commands + + + +- Provides System related commands. shutdown, lock, settings, etc. +- System command list + +### Calculator + + + +- Do mathematical calculations and copy the result to clipboard. + +### Shell Command + + + - Run batch and PowerShell commands as Administrator or a different user. -- Support languages from Chinese to Italian and more. -- Support wide range of plugins. -- Prioritise the order of each plugin's results. +- Ctrl+Enter to Run as Administrator. + +### Explorer + + + - Save file or folder locations for quick access. -- Fully portable. -[ **SOFTPEDIA EDITOR'S PICK**](https://www.softpedia.com/get/System/Launchers-Shutdown-Tools/Flow-Launcher.shtml) +### Window Setting & Control Panel -## Getting Started + -### Installation +- Search within Window Settings & Control Panel. -| [Windows 7+ installer](https://github.com/Flow-Launcher/Flow.Launcher/releases/latest/download/Flow-Launcher-Setup.exe) | [Portable](https://github.com/Flow-Launcher/Flow.Launcher/releases/latest/download/Flow-Launcher-Portable.zip) | `WinGet install "Flow Launcher"` | -| --------------------------------- | --------------------------------- | --------------------------------- | -Windows may complain about security due to code not being signed, this will be completed at a later stage. If you downloaded from this repo, you are good to continue the set up. +### Priority + + + + +- Prioritise the order of each plugin's results. + +### Customization + +![Animation5](https://user-images.githubusercontent.com/6903107/144693887-1b92ed16-dca1-4b7e-8644-5e9524cdfb31.gif) + +- Window size adjustment, animation, and sound +- Color Scheme (aka Dark Mode) + +![themes](https://user-images.githubusercontent.com/6903107/144527796-7c06ca31-d933-4f6b-9eb0-4fb06fa94384.png) -### Usage -- Open flow's search window: Alt+Space is the default hotkey. -- Open context menu: on the selected result, press Ctrl+O/Shift+Enter. -- Cancel/Return to previous screen: Esc. -- Install/Uninstall/Update plugins: in the search window, type `pm` `install`/`uninstall`/`update` + the plugin name. +- There are various themes and you can make it yourself. + +### 💬 Language + +- Support languages from Chinese to Italian and more. +- Support Pinyin. +- Translation support this project in [Crowdin](https://crowdin.com/project/flow-launcher) + +### Portable + +- Fully portable. - Type `flow user data` to open your saved user settings folder. They are located at: - If using roaming: `%APPDATA%\FlowLauncher` - If using portable, by default: `%localappdata%\FlowLauncher\app-\UserData` -- Type `open log location` to open your logs folder, they are saved along with your user settings folder. + - Type `open log location` to open your logs folder, they are saved along with your user settings folder. + +### 🎮 Game Mode + + + +- Suspend the hotkey when you are playing games. + + + +## 📦 Plugins + +- Support wide range of plugins. Visit [here](https://flow-launcher.github.io/docs/#/plugins) for our plugin portfolio. +- If you are using Python plugins, flow will prompt to either select the location or allow Python (Embeddable) to be automatic downloaded for use. +- Create and publish your own plugin to flow! Take a look at our plugin development documentation for [C#](https://flow-launcher.github.io/docs/#/develop-dotnet-plugins) or [Python](https://flow-launcher.github.io/docs/#/develop-py-plugins) + +### Everything + + +### SpotifyPremium + + + +### Steam Search + + + +### Clipboard History + + +### Home Assistant Commander + + +### Colors + + + +### Github + + +### Windows Walker + + +......and more! + + + +### 🛒 Plugin Store + +![pluginstore](https://user-images.githubusercontent.com/6903107/144528115-3b6baa89-f53f-40db-8426-02c4db8dd2b5.png) + +- You can view the full plugin list or quickly install a plugin via the Plugin Store menu in Settings + +- or type `pm` `install`/`uninstall`/`update` + the plugin name in the search window, + + + + +## ⌨️ Hotkeys -[More tips](https://flow-launcher.github.io/docs/#/usage-tips) +| Hotkey | Description | +| ------------------------------------------------------------ | -------------------------------------------- | +| Alt+ Space | Open Search Box (Default and Configurable) | +| Enter | Execute | +| Ctrl+Shift+Enter | Run As Admin | +| | Scroll up & Down | +| | Back to Result / Open Context Menu | +| Ctrl +o , Shift +Enter | Open Context Menu | +| Tab | Autocomplete | +| Esc | Back to Result & Close | +| Ctrl +i | Open Setting Window | +| F5 | Reload All Plugin Data & Window Search Index | +| Ctrl + h | Open Query History | -### Plugins -Flow searches files and contents via Windows Index Search, to use **Everything**: `pm install everything`. +## System Command List -If you are using Python plugins, flow will prompt to either select the location or allow Python (Embeddable) to be automatic downloaded for use. +| Command | Description | +| ---------------------- | ------------------------------------------------------------ | +| Shutdown | Shutdown computer | +| Restart | Restart computer | +| Restart with advance | Restart the computer with Advanced Boot option for safe and debugging modes | +| Log off | Log off | +| Lock | Lock computer | +| Sleep | Put computer to sleep | +| Hibernate | Hibernate computer | +| Empty Recycle Bin | Empty recycle bin | +| Exit | Close Flow Launcher | +| Save Settings | Save all Flow Launcher settings | +| Restart Flow Launcher | Restart Flow Launcher | +| Settings | Tweak this app | +| Reload Plugin Data | Refreshes plugin data with new content | +| Check For Update | Check for new Flow Launcher update | +| Open Log Location | Open Flow Launcher's log location | +| Flow Launcher Tip | Visit Flow Launcher's documentation for more help and how to use tips | +| Flow Launcher UserData | Open the location where Flow Launcher's settings are stored | -Vist [here](https://flow-launcher.github.io/docs/#/plugins) for our plugin portfolio. +### 💁‍♂️ Tips -If you are keen to write your own plugin for flow, please take a look at our plugin development documentation for [C#](https://flow-launcher.github.io/docs/#/develop-dotnet-plugins) or [Python](https://flow-launcher.github.io/docs/#/develop-py-plugins) +- [More tips](https://flow-launcher.github.io/docs/#/usage-tips) -## Questions/Suggestions + -Yes please, let us know in the [Q&A](https://github.com/Flow-Launcher/Flow.Launcher/discussions/categories/q-a) section. +## ❔ Questions/Suggestions -**Join our community on [Discord](https://discord.gg/AvgAQgh)!** +Yes please, let us know in the [Q&A](https://github.com/Flow-Launcher/Flow.Launcher/discussions/categories/q-a) section. **Join our community on [Discord](https://discord.gg/AvgAQgh)!** ## Development @@ -98,8 +270,8 @@ Get in touch if you like to join the Flow-Launcher Team and help build this grea ### Developing/Debugging -Flow Launcher's target framework is .Net 5 +- Flow Launcher's target framework is .Net 5 -Install Visual Studio 2019 +- Install Visual Studio 2019 -Install .Net 5 SDK via Visual Studio installer or manually from [here](https://dotnet.microsoft.com/download/dotnet/thank-you/sdk-5.0.103-windows-x64-installer) +- Install .Net 5 SDK via Visual Studio installer or manually from [here](https://dotnet.microsoft.com/download/dotnet/thank-you/sdk-5.0.103-windows-x64-installer)