diff --git a/.github/ISSUE_TEMPLATE/bug-report.yaml b/.github/ISSUE_TEMPLATE/bug-report.yaml index a54671d06..294c06fc1 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yaml +++ b/.github/ISSUE_TEMPLATE/bug-report.yaml @@ -14,7 +14,9 @@ body: options: - label: > I have checked that this issue has not already been reported. - + - label: > + I am using the latest version of Flow Launcher. + - type: textarea attributes: label: Problem Description @@ -54,7 +56,6 @@ body: validations: required: true - - type: textarea id: logs attributes: diff --git a/.github/actions/spelling/allow.txt b/.github/actions/spelling/allow.txt index 494d4de93..00cc67ea0 100644 --- a/.github/actions/spelling/allow.txt +++ b/.github/actions/spelling/allow.txt @@ -2,3 +2,4 @@ github https ssh ubuntu +runcount diff --git a/.github/actions/spelling/expect.txt b/.github/actions/spelling/expect.txt index 2046057f5..78ae8476b 100644 --- a/.github/actions/spelling/expect.txt +++ b/.github/actions/spelling/expect.txt @@ -1,6 +1,7 @@ crowdin DWM workflows +Wpf wpf actionkeyword stackoverflow diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 5ec4b82c6..caac10c93 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -13,7 +13,7 @@ jobs: issues: write pull-requests: write steps: - - uses: actions/stale@v7 + - uses: actions/stale@v8 with: stale-issue-message: 'This issue is stale because it has been open 45 days with no activity. Remove stale label or comment or this will be closed in 5 days.' days-before-stale: 45 diff --git a/Flow.Launcher.Core/Plugin/PluginManager.cs b/Flow.Launcher.Core/Plugin/PluginManager.cs index 3b4a6e445..f8c9a3f17 100644 --- a/Flow.Launcher.Core/Plugin/PluginManager.cs +++ b/Flow.Launcher.Core/Plugin/PluginManager.cs @@ -48,6 +48,9 @@ namespace Flow.Launcher.Core.Plugin } } + /// + /// Save json and ISavable + /// public static void Save() { foreach (var plugin in AllPlugins) diff --git a/Flow.Launcher.Infrastructure/Constant.cs b/Flow.Launcher.Infrastructure/Constant.cs index ab5e4722b..7a95b52d5 100644 --- a/Flow.Launcher.Infrastructure/Constant.cs +++ b/Flow.Launcher.Infrastructure/Constant.cs @@ -19,7 +19,7 @@ namespace Flow.Launcher.Infrastructure public static readonly string RootDirectory = Directory.GetParent(ApplicationDirectory).ToString(); public static readonly string PreinstalledDirectory = Path.Combine(ProgramDirectory, Plugins); - public const string Issue = "https://github.com/Flow-Launcher/Flow.Launcher/issues/new"; + public const string IssuesUrl = "https://github.com/Flow-Launcher/Flow.Launcher/issues"; public static readonly string Version = FileVersionInfo.GetVersionInfo(Assembly.Location.NonNull()).ProductVersion; public static readonly string Dev = "Dev"; public const string Documentation = "https://flowlauncher.com/docs/#/usage-tips"; diff --git a/Flow.Launcher.Infrastructure/Exception/ExceptionFormatter.cs b/Flow.Launcher.Infrastructure/Exception/ExceptionFormatter.cs index 54c19c048..025109e58 100644 --- a/Flow.Launcher.Infrastructure/Exception/ExceptionFormatter.cs +++ b/Flow.Launcher.Infrastructure/Exception/ExceptionFormatter.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; -using System.Xml; using Microsoft.Win32; namespace Flow.Launcher.Infrastructure.Exception @@ -63,7 +62,7 @@ namespace Flow.Launcher.Infrastructure.Exception sb.AppendLine($"* Command Line: {Environment.CommandLine}"); sb.AppendLine($"* Timestamp: {DateTime.Now.ToString(CultureInfo.InvariantCulture)}"); sb.AppendLine($"* Flow Launcher version: {Constant.Version}"); - sb.AppendLine($"* OS Version: {Environment.OSVersion.VersionString}"); + sb.AppendLine($"* OS Version: {GetWindowsFullVersionFromRegistry()}"); sb.AppendLine($"* IntPtr Length: {IntPtr.Size}"); sb.AppendLine($"* x64: {Environment.Is64BitOperatingSystem}"); sb.AppendLine($"* Python Path: {Constant.PythonPath}"); @@ -173,5 +172,35 @@ namespace Flow.Launcher.Infrastructure.Exception } } + + public static string GetWindowsFullVersionFromRegistry() + { + try + { + var buildRevision = GetWindowsRevisionFromRegistry(); + var currentBuild = Environment.OSVersion.Version.Build; + return currentBuild.ToString() + "." + buildRevision; + } + catch + { + return Environment.OSVersion.VersionString; + } + } + + public static string GetWindowsRevisionFromRegistry() + { + try + { + using (RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\")) + { + var buildRevision = registryKey.GetValue("UBR").ToString(); + return buildRevision; + } + } + catch + { + return "0"; + } + } } } diff --git a/Flow.Launcher.Infrastructure/Image/ImageCache.cs b/Flow.Launcher.Infrastructure/Image/ImageCache.cs index e7b1f46f7..7a2b57637 100644 --- a/Flow.Launcher.Infrastructure/Image/ImageCache.cs +++ b/Flow.Launcher.Infrastructure/Image/ImageCache.cs @@ -28,7 +28,7 @@ namespace Flow.Launcher.Infrastructure.Image private const int permissibleFactor = 2; private SemaphoreSlim semaphore = new(1, 1); - public void Initialization(Dictionary<(string, bool), int> usage) + public void Initialize(Dictionary<(string, bool), int> usage) { foreach (var key in usage.Keys) { diff --git a/Flow.Launcher.Infrastructure/Image/ImageLoader.cs b/Flow.Launcher.Infrastructure/Image/ImageLoader.cs index 62524f03a..fee2c60bd 100644 --- a/Flow.Launcher.Infrastructure/Image/ImageLoader.cs +++ b/Flow.Launcher.Infrastructure/Image/ImageLoader.cs @@ -40,6 +40,8 @@ namespace Flow.Launcher.Infrastructure.Image var usage = LoadStorageToConcurrentDictionary(); + ImageCache.Initialize(usage.ToDictionary(x => x.Key, x => x.Value)); + foreach (var icon in new[] { Constant.DefaultIcon, Constant.MissingImgIcon @@ -269,7 +271,7 @@ namespace Flow.Launcher.Infrastructure.Image if (GuidToKey.TryGetValue(hash, out string key)) { // image already exists - img = ImageCache[key, false] ?? img; + img = ImageCache[key, loadFullImage] ?? img; } else { // new guid diff --git a/Flow.Launcher.Infrastructure/Logger/Log.cs b/Flow.Launcher.Infrastructure/Logger/Log.cs index b8f1408e7..53726ea64 100644 --- a/Flow.Launcher.Infrastructure/Logger/Log.cs +++ b/Flow.Launcher.Infrastructure/Logger/Log.cs @@ -5,11 +5,9 @@ using NLog; using NLog.Config; using NLog.Targets; using Flow.Launcher.Infrastructure.UserSettings; -using JetBrains.Annotations; using NLog.Fluent; using NLog.Targets.Wrappers; using System.Runtime.ExceptionServices; -using System.Text; namespace Flow.Launcher.Infrastructure.Logger { @@ -76,7 +74,6 @@ namespace Flow.Launcher.Infrastructure.Logger return valid; } - public static void Exception(string className, string message, System.Exception exception, [CallerMemberName] string methodName = "") { exception = exception.Demystify(); @@ -115,8 +112,6 @@ namespace Flow.Launcher.Infrastructure.Logger { var logger = LogManager.GetLogger(classAndMethod); - var messageBuilder = new StringBuilder(); - logger.Error(e, message); } @@ -136,7 +131,8 @@ namespace Flow.Launcher.Infrastructure.Logger } } - /// example: "|prefix|unprefixed" + /// Example: "|ClassName.MethodName|Message" + /// Example: "|ClassName.MethodName|Message" /// Exception public static void Exception(string message, System.Exception e) { @@ -158,7 +154,7 @@ namespace Flow.Launcher.Infrastructure.Logger #endif } - /// example: "|prefix|unprefixed" + /// Example: "|ClassName.MethodName|Message" public static void Error(string message) { LogInternal(message, LogLevel.Error); @@ -183,7 +179,7 @@ namespace Flow.Launcher.Infrastructure.Logger LogInternal(LogLevel.Debug, className, message, methodName); } - /// example: "|prefix|unprefixed" + /// Example: "|ClassName.MethodName|Message"" public static void Debug(string message) { LogInternal(message, LogLevel.Debug); @@ -194,7 +190,7 @@ namespace Flow.Launcher.Infrastructure.Logger LogInternal(LogLevel.Info, className, message, methodName); } - /// example: "|prefix|unprefixed" + /// Example: "|ClassName.MethodName|Message" public static void Info(string message) { LogInternal(message, LogLevel.Info); @@ -205,7 +201,7 @@ namespace Flow.Launcher.Infrastructure.Logger LogInternal(LogLevel.Warn, className, message, methodName); } - /// example: "|prefix|unprefixed" + /// Example: "|ClassName.MethodName|Message" public static void Warn(string message) { LogInternal(message, LogLevel.Warn); diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index bfd7e4b87..43a68a2a6 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -195,6 +195,17 @@ namespace Flow.Launcher.Infrastructure.UserSettings public double WindowLeft { get; set; } public double WindowTop { get; set; } + + /// + /// Custom left position on selected monitor + /// + public double CustomWindowLeft { get; set; } = 0; + + /// + /// Custom top position on selected monitor + /// + public double CustomWindowTop { get; set; } = 0; + public int MaxResultsToShow { get; set; } = 5; public int ActivateTimes { get; set; } @@ -227,7 +238,15 @@ namespace Flow.Launcher.Infrastructure.UserSettings } public bool LeaveCmdOpen { get; set; } public bool HideWhenDeactivated { get; set; } = true; - public SearchWindowPositions SearchWindowPosition { get; set; } = SearchWindowPositions.MouseScreenCenter; + + [JsonConverter(typeof(JsonStringEnumConverter))] + public SearchWindowScreens SearchWindowScreen { get; set; } = SearchWindowScreens.Cursor; + + [JsonConverter(typeof(JsonStringEnumConverter))] + public SearchWindowAligns SearchWindowAlign { get; set; } = SearchWindowAligns.Center; + + public int CustomScreenNumber { get; set; } = 1; + public bool IgnoreHotkeysOnFullscreen { get; set; } public HttpProxy Proxy { get; set; } = new HttpProxy(); @@ -253,12 +272,22 @@ namespace Flow.Launcher.Infrastructure.UserSettings Light, Dark } - public enum SearchWindowPositions + + public enum SearchWindowScreens { RememberLastLaunchLocation, - MouseScreenCenter, - MouseScreenCenterTop, - MouseScreenLeftTop, - MouseScreenRightTop + Cursor, + Focus, + Primary, + Custom + } + + public enum SearchWindowAligns + { + Center, + CenterTop, + LeftTop, + RightTop, + Custom } } diff --git a/Flow.Launcher.Plugin/ActionContext.cs b/Flow.Launcher.Plugin/ActionContext.cs index b9e499d2b..d898972da 100644 --- a/Flow.Launcher.Plugin/ActionContext.cs +++ b/Flow.Launcher.Plugin/ActionContext.cs @@ -1,4 +1,6 @@ -namespace Flow.Launcher.Plugin +using System.Windows.Input; + +namespace Flow.Launcher.Plugin { public class ActionContext { @@ -11,5 +13,13 @@ public bool ShiftPressed { get; set; } public bool AltPressed { get; set; } public bool WinPressed { get; set; } + + public ModifierKeys ToModifierKeys() + { + return (CtrlPressed ? ModifierKeys.Control : ModifierKeys.None) | + (ShiftPressed ? ModifierKeys.Shift : ModifierKeys.None) | + (AltPressed ? ModifierKeys.Alt : ModifierKeys.None) | + (WinPressed ? ModifierKeys.Windows : ModifierKeys.None); + } } -} \ No newline at end of file +} diff --git a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj index f3fc31ed8..28344cf46 100644 --- a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj +++ b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj @@ -14,10 +14,10 @@ - 4.0.0 - 4.0.0 - 4.0.0 - 4.0.0 + 4.0.1 + 4.0.1 + 4.0.1 + 4.0.1 Flow.Launcher.Plugin Flow-Launcher MIT diff --git a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs index 79d106ef2..19b69b015 100644 --- a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs +++ b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs @@ -20,8 +20,8 @@ namespace Flow.Launcher.Plugin /// /// query text /// - /// force requery By default, Flow Launcher will not fire query if your query is same with existing one. - /// Set this to true to force Flow Launcher requerying + /// Force requery. By default, Flow Launcher will not fire query if your query is same with existing one. + /// Set this to to force Flow Launcher requerying /// void ChangeQuery(string query, bool requery = false); @@ -233,8 +233,8 @@ namespace Flow.Launcher.Plugin /// Open directory in an explorer configured by user via Flow's Settings. The default is Windows Explorer /// /// Directory Path to open - /// Extra FileName Info - public void OpenDirectory(string DirectoryPath, string FileName = null); + /// Extra FileName Info + public void OpenDirectory(string DirectoryPath, string FileNameOrFilePath = null); /// /// Opens the URL with the given Uri object. diff --git a/Flow.Launcher.Plugin/Result.cs b/Flow.Launcher.Plugin/Result.cs index dc24872f5..1c4467762 100644 --- a/Flow.Launcher.Plugin/Result.cs +++ b/Flow.Launcher.Plugin/Result.cs @@ -178,7 +178,7 @@ namespace Flow.Launcher.Plugin /// public override string ToString() { - return Title + SubTitle; + return Title + SubTitle + Score; } /// diff --git a/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs b/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs index bd8d32ff5..dd4dcc7a4 100644 --- a/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs +++ b/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs @@ -14,8 +14,6 @@ namespace Flow.Launcher.Plugin.SharedCommands { private const string FileExplorerProgramName = "explorer"; - private const string FileExplorerProgramEXE = "explorer.exe"; - /// /// Copies the folder and all of its files and folders /// including subfolders to the target location @@ -151,7 +149,12 @@ namespace Flow.Launcher.Plugin.SharedCommands /// public static void OpenPath(string fileOrFolderPath) { - var psi = new ProcessStartInfo { FileName = FileExplorerProgramName, UseShellExecute = true, Arguments = '"' + fileOrFolderPath + '"' }; + var psi = new ProcessStartInfo + { + FileName = FileExplorerProgramName, + UseShellExecute = true, + Arguments = '"' + fileOrFolderPath + '"' + }; try { if (LocationExists(fileOrFolderPath) || FileExists(fileOrFolderPath)) @@ -168,12 +171,33 @@ namespace Flow.Launcher.Plugin.SharedCommands } /// - /// Open the folder that contains + /// Open a file with associated application /// - /// - public static void OpenContainingFolder(string path) + /// File path + /// Working directory + /// Open as Administrator + public static void OpenFile(string filePath, string workingDir = "", bool asAdmin = false) { - Process.Start(FileExplorerProgramEXE, $" /select,\"{path}\""); + var psi = new ProcessStartInfo + { + FileName = filePath, + UseShellExecute = true, + WorkingDirectory = workingDir, + Verb = asAdmin ? "runas" : string.Empty + }; + try + { + if (FileExists(filePath)) + Process.Start(psi); + } + catch (Exception) + { +#if DEBUG + throw; +#else + MessageBox.Show(string.Format("Unable to open the path {0}, please check if it exists", filePath)); +#endif + } } /// diff --git a/Flow.Launcher.Test/Flow.Launcher.Test.csproj b/Flow.Launcher.Test/Flow.Launcher.Test.csproj index 039947a9f..f5d9dea28 100644 --- a/Flow.Launcher.Test/Flow.Launcher.Test.csproj +++ b/Flow.Launcher.Test/Flow.Launcher.Test.csproj @@ -1,4 +1,4 @@ - + net7.0-windows10.0.19041.0 @@ -50,7 +50,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Flow.Launcher/ActionKeywords.xaml.cs b/Flow.Launcher/ActionKeywords.xaml.cs index 012c9ff4e..c89f82a3b 100644 --- a/Flow.Launcher/ActionKeywords.xaml.cs +++ b/Flow.Launcher/ActionKeywords.xaml.cs @@ -37,6 +37,7 @@ namespace Flow.Launcher var oldActionKeyword = plugin.Metadata.ActionKeywords[0]; var newActionKeyword = tbAction.Text.Trim(); newActionKeyword = newActionKeyword.Length > 0 ? newActionKeyword : "*"; + if (!PluginViewModel.IsActionKeywordRegistered(newActionKeyword)) { pluginViewModel.ChangeActionKeyword(newActionKeyword, oldActionKeyword); diff --git a/Flow.Launcher/Flow.Launcher.csproj b/Flow.Launcher/Flow.Launcher.csproj index 1143f7f72..02930fc25 100644 --- a/Flow.Launcher/Flow.Launcher.csproj +++ b/Flow.Launcher/Flow.Launcher.csproj @@ -1,4 +1,4 @@ - + WinExe @@ -90,7 +90,9 @@ - + + + all diff --git a/Flow.Launcher/Helper/ErrorReporting.cs b/Flow.Launcher/Helper/ErrorReporting.cs index a7ce7444c..b5da2efad 100644 --- a/Flow.Launcher/Helper/ErrorReporting.cs +++ b/Flow.Launcher/Helper/ErrorReporting.cs @@ -3,8 +3,6 @@ using System.Windows.Threading; using NLog; using Flow.Launcher.Infrastructure; using Flow.Launcher.Infrastructure.Exception; -using NLog.Fluent; -using Log = Flow.Launcher.Infrastructure.Logger.Log; namespace Flow.Launcher.Helper { @@ -31,11 +29,11 @@ namespace Flow.Launcher.Helper //prevent application exist, so the user can copy prompted error info e.Handled = true; } - + public static string RuntimeInfo() { var info = $"\nFlow Launcher version: {Constant.Version}" + - $"\nOS Version: {Environment.OSVersion.VersionString}" + + $"\nOS Version: {ExceptionFormatter.GetWindowsFullVersionFromRegistry()}" + $"\nIntPtr Length: {IntPtr.Size}" + $"\nx64: {Environment.Is64BitOperatingSystem}"; return info; diff --git a/Flow.Launcher/Helper/WindowsInteropHelper.cs b/Flow.Launcher/Helper/WindowsInteropHelper.cs index 4811eb224..16a96cd64 100644 --- a/Flow.Launcher/Helper/WindowsInteropHelper.cs +++ b/Flow.Launcher/Helper/WindowsInteropHelper.cs @@ -35,25 +35,25 @@ namespace Flow.Launcher.Helper } [DllImport("user32.dll", SetLastError = true)] - private static extern int GetWindowLong(IntPtr hWnd, int nIndex); + internal static extern int GetWindowLong(IntPtr hWnd, int nIndex); + + [DllImport("user32.dll")] + internal static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); [DllImport("user32.dll")] - private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); + internal static extern IntPtr GetForegroundWindow(); [DllImport("user32.dll")] - private static extern IntPtr GetForegroundWindow(); + internal static extern IntPtr GetDesktopWindow(); [DllImport("user32.dll")] - private static extern IntPtr GetDesktopWindow(); - - [DllImport("user32.dll")] - private static extern IntPtr GetShellWindow(); + internal static extern IntPtr GetShellWindow(); [DllImport("user32.dll", SetLastError = true)] - private static extern int GetWindowRect(IntPtr hwnd, out RECT rc); + internal static extern int GetWindowRect(IntPtr hwnd, out RECT rc); [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] - private static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount); + internal static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount); [DllImport("user32.DLL")] public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); diff --git a/Flow.Launcher/Languages/da.xaml b/Flow.Launcher/Languages/da.xaml index c6dfed1f3..62db18468 100644 --- a/Flow.Launcher/Languages/da.xaml +++ b/Flow.Launcher/Languages/da.xaml @@ -1,8 +1,5 @@ - - + + Kunne ikke registrere genvejstast: {0} Kunne ikke starte {0} @@ -39,11 +36,17 @@ Skjul Flow Launcher ved mistet fokus Vis ikke notifikationer om nye versioner Search Window Position - Remember Last Position - Mouse Focused Screen - Center - Mouse Focused Screen - Center Top - Mouse Focused Screen - Left Top - Mouse Focused Screen - Right Top + Remember Last Position + Monitor with Mouse Cursor + Monitor with Focused Window + Primary Monitor + Custom Monitor + Search Window Position on Monitor + Center + Center Top + Left Top + Right Top + Custom Position Sprog Last Query Style Show/Hide previous results when Flow Launcher is reactivated. @@ -109,7 +112,7 @@ Plugin Store New Release Recently Updated - Plugin + Plugins Installed Refresh Install @@ -344,7 +347,7 @@ Item Navigation Open Context Menu Open Containing Folder - Run as Admin + Run as Admin / Open Folder in Default File Manager Query History Back to Result in Context Menu Autocomplete diff --git a/Flow.Launcher/Languages/de.xaml b/Flow.Launcher/Languages/de.xaml index 5f9aee213..92cb4c88b 100644 --- a/Flow.Launcher/Languages/de.xaml +++ b/Flow.Launcher/Languages/de.xaml @@ -36,11 +36,17 @@ Verstecke Flow Launcher wenn der Fokus verloren geht Zeige keine Nachricht wenn eine neue Version vorhanden ist Search Window Position - Remember Last Position - Mouse Focused Screen - Center - Mouse Focused Screen - Center Top - Mouse Focused Screen - Left Top - Mouse Focused Screen - Right Top + Remember Last Position + Monitor with Mouse Cursor + Monitor with Focused Window + Primary Monitor + Custom Monitor + Search Window Position on Monitor + Center + Center Top + Left Top + Right Top + Custom Position Sprache Abfragestil auswählen Vorherige Ergebnisse ein-/ausblenden, wenn Flow Launcher wieder aktiviert wird. @@ -106,7 +112,7 @@ Erweiterungen laden New Release Recently Updated - Plugin + Plugins Installed Aktualisieren Installieren @@ -341,7 +347,7 @@ Item Navigation Open Context Menu Open Containing Folder - Run as Admin + Run as Admin / Open Folder in Default File Manager Query History Back to Result in Context Menu Autocomplete diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 9e86d9305..30c117378 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -38,11 +38,17 @@ Hide Flow Launcher when focus is lost Do not show new version notifications Search Window Position - Remember Last Position - Mouse Focused Screen - Center - Mouse Focused Screen - Center Top - Mouse Focused Screen - Left Top - Mouse Focused Screen - Right Top + Remember Last Position + Monitor with Mouse Cursor + Monitor with Focused Window + Primary Monitor + Custom Monitor + Search Window Position on Monitor + Center + Center Top + Left Top + Right Top + Custom Position Language Last Query Style Show/Hide previous results when Flow Launcher is reactivated. @@ -343,7 +349,7 @@ Item Navigation Open Context Menu Open Containing Folder - Run as Admin + Run as Admin / Open Folder in Default File Manager Query History Back to Result in Context Menu Autocomplete diff --git a/Flow.Launcher/Languages/es-419.xaml b/Flow.Launcher/Languages/es-419.xaml index ab3a09a73..f7b7319f7 100644 --- a/Flow.Launcher/Languages/es-419.xaml +++ b/Flow.Launcher/Languages/es-419.xaml @@ -1,4 +1,4 @@ - + Error al registrar la tecla de acceso directo: {0} @@ -36,11 +36,17 @@ Ocultar Flow Launcher cuando se pierde el enfoque No mostrar notificaciones de nuevas versiones Search Window Position - Remember Last Position - Mouse Focused Screen - Center - Mouse Focused Screen - Center Top - Mouse Focused Screen - Left Top - Mouse Focused Screen - Right Top + Remember Last Position + Monitor with Mouse Cursor + Monitor with Focused Window + Primary Monitor + Custom Monitor + Search Window Position on Monitor + Center + Center Top + Left Top + Right Top + Custom Position Idioma Estilo de la última consulta Mostrar/Ocultar resultados anteriores cuando Flow Launcher es reactivado. @@ -106,7 +112,7 @@ Tienda de Plugins New Release Recently Updated - Plugin + Plugins Installed Recargar Instalar @@ -341,7 +347,7 @@ Navegación de Elemento Abrir Menú Contextual Abrir Carpeta Contenedora - Ejecutar como administrador + Run as Admin / Open Folder in Default File Manager Historial de Consultas Volver al Resultado en el Menú Contextual Autocompletar diff --git a/Flow.Launcher/Languages/es.xaml b/Flow.Launcher/Languages/es.xaml index e28a7605b..abb0cc217 100644 --- a/Flow.Launcher/Languages/es.xaml +++ b/Flow.Launcher/Languages/es.xaml @@ -3,7 +3,7 @@ No se ha podido registrar el atajo de teclado: {0} No se ha podido iniciar {0} - Formato de archivo del plugin Flow Launcher no válido + Formato de archivo del complemento de Flow Launcher no válido Establecer como primer resultado en esta consulta Cancelar como primer resultado en esta consulta Ejecutar consulta: {0} @@ -36,11 +36,17 @@ Ocultar Flow Launcher cuando se pierde el foco No mostrar notificaciones de nuevas versiones Posición de la ventana de búsqueda - Recordar última posición - Centro de la pantalla enfocada con el ratón - Arriba en el centro de la pantalla enfocada con el ratón - Arriba a la izquierda de la pantalla enfocada con el ratón - Arriba a la derecha de la pantalla enfocada con el ratón + Recordar última posición + Monitor con cursor del ratón + Monitor con ventana enfocada + Monitor principal + Monitor personalizado + Posición de la ventana de búsqueda en el monitor + Centro + Arriba en el centro + Arriba a la izquierda + Arriba a la derecha + Posición personalizada Idioma Estilo de la última consulta Muestra/Oculta resultados anteriores cuando Flow Launcher es reactivado. @@ -50,7 +56,7 @@ Número máximo de resultados mostrados También puede ajustarlo rápidamente usando CTRL+Más y CTRL+Menos. Ignorar atajos de teclado en modo pantalla completa - Desactiva Flow Launcher cuando una aplicación de pantalla completa está activa (Recomendado para juegos). + No permite activar Flow Launcher con aplicaciones a pantalla completa (Recomendado para juegos). Administrador de archivos predeterminado Selecciona el administrador de archivos que se desea utilizar para abrir la carpeta. Navegador web predeterminado @@ -64,7 +70,7 @@ Actualización automática Seleccionar Ocultar Flow Launcher al inicio - Ocultar icono de la bandeja del sistema + Ocultar icono en la bandeja del sistema Cuando el icono está oculto en la bandeja del sistema, se puede abrir el menú de configuración haciendo clic con el botón derecho en la ventana de búsqueda. Precisión en la búsqueda de consultas Cambia la puntuación mínima requerida para la coincidencia de los resultados. @@ -79,7 +85,7 @@ Ctrl+F para buscar complementos No se han encontrado resultados Por favor, intente una búsqueda diferente. - Complementos + Complemento Complementos Buscar más complementos Activado @@ -104,10 +110,10 @@ Tienda de complementos - Nuevo lanzamiento - Actualizado recientemente + Nuevo(s) lanzamiento(s) + Actualizado(s) recientemente Complementos - Instalado + Instalado(s) Refrescar Instalar Desinstalar @@ -153,7 +159,7 @@ Fecha - Atajos de teclado + Atajo de teclado Atajos de teclado Atajo de teclado de Flow Launcher Introduzca el atajo de teclado para mostrar/ocultar Flow Launcher. @@ -341,7 +347,7 @@ Navegación entre elementos Abrir menú contextual Abrir carpeta contenedora - Ejecutar como administrador + Ejecutar como administrador / Abrir la carpeta en el administrador de archivos predeterminado Historial de consultas Volver al resultado en menú contextual Autocompletar diff --git a/Flow.Launcher/Languages/fr.xaml b/Flow.Launcher/Languages/fr.xaml index 9c52f52d6..7af15bfd4 100644 --- a/Flow.Launcher/Languages/fr.xaml +++ b/Flow.Launcher/Languages/fr.xaml @@ -36,11 +36,17 @@ Cacher Flow Launcher lors de la perte de focus Ne pas afficher les notifications lors d'une nouvelle version Search Window Position - Remember Last Position - Mouse Focused Screen - Center - Mouse Focused Screen - Center Top - Mouse Focused Screen - Left Top - Mouse Focused Screen - Right Top + Remember Last Position + Monitor with Mouse Cursor + Monitor with Focused Window + Primary Monitor + Custom Monitor + Search Window Position on Monitor + Center + Center Top + Left Top + Right Top + Custom Position Langue Style de la dernière requête Afficher/Masquer les résultats précédents lorsque Flow Launcher est réactivé. @@ -340,7 +346,7 @@ Item Navigation Ouvrir le Menu Contextuel Open Containing Folder - Exécuter en tant qu'Administrateur + Run as Admin / Open Folder in Default File Manager Historique des Recherches Retour au résultat dans le Menu Contextuel Auto-complétion diff --git a/Flow.Launcher/Languages/it.xaml b/Flow.Launcher/Languages/it.xaml index 2c33555fc..33870fb8d 100644 --- a/Flow.Launcher/Languages/it.xaml +++ b/Flow.Launcher/Languages/it.xaml @@ -1,4 +1,4 @@ - + Impossibile salvare il tasto di scelta rapida: {0} @@ -36,11 +36,17 @@ Nascondi Flow Launcher quando perde il focus Non mostrare le notifiche per una nuova versione Search Window Position - Remember Last Position - Mouse Focused Screen - Center - Mouse Focused Screen - Center Top - Mouse Focused Screen - Left Top - Mouse Focused Screen - Right Top + Remember Last Position + Monitor with Mouse Cursor + Monitor with Focused Window + Primary Monitor + Custom Monitor + Search Window Position on Monitor + Center + Center Top + Left Top + Right Top + Custom Position Lingua Comportamento ultima ricerca Mostra/nasconde i risultati precedenti quando Flow Launcher viene riattivato. @@ -341,7 +347,7 @@ Navigazione tra le voci Apri il menu di scelta rapida Apri cartella superiore - Esegui come amministratore + Run as Admin / Open Folder in Default File Manager Cronologia Query Torna al risultato nel menu contestuale Autocompleta diff --git a/Flow.Launcher/Languages/ja.xaml b/Flow.Launcher/Languages/ja.xaml index fd0431d7d..870d27293 100644 --- a/Flow.Launcher/Languages/ja.xaml +++ b/Flow.Launcher/Languages/ja.xaml @@ -36,11 +36,17 @@ フォーカスを失った時にFlow Launcherを隠す 最新版が入手可能であっても、アップグレードメッセージを表示しない Search Window Position - Remember Last Position - Mouse Focused Screen - Center - Mouse Focused Screen - Center Top - Mouse Focused Screen - Left Top - Mouse Focused Screen - Right Top + Remember Last Position + Monitor with Mouse Cursor + Monitor with Focused Window + Primary Monitor + Custom Monitor + Search Window Position on Monitor + Center + Center Top + Left Top + Right Top + Custom Position 言語 前回のクエリの扱い Show/Hide previous results when Flow Launcher is reactivated. @@ -341,7 +347,7 @@ Item Navigation Open Context Menu Open Containing Folder - Run as Admin + Run as Admin / Open Folder in Default File Manager Query History Back to Result in Context Menu Autocomplete diff --git a/Flow.Launcher/Languages/ko.xaml b/Flow.Launcher/Languages/ko.xaml index b9626b408..32b9db20e 100644 --- a/Flow.Launcher/Languages/ko.xaml +++ b/Flow.Launcher/Languages/ko.xaml @@ -36,11 +36,17 @@ 포커스 잃으면 Flow Launcher 숨김 새 버전 알림 끄기 검색 창 위치 - 마지막 위치 기억 - 마우스 위치 화면 - 중앙 - 마우스 위치 화면 - 중앙 상단 - 마우스 위치 화면 - 좌측 상단 - 마우스 위치 화면 - 우측 상단 + Remember Last Position + Monitor with Mouse Cursor + Monitor with Focused Window + Primary Monitor + Custom Monitor + Search Window Position on Monitor + Center + Center Top + Left Top + Right Top + Custom Position 언어 마지막 쿼리 스타일 쿼리박스를 열었을 때 쿼리 처리 방식 @@ -341,7 +347,7 @@ 아이템 이동 콘텍스트 메뉴 열기 포함된 폴더 열기 - 관리자 권한으로 실행 + Run as Admin / Open Folder in Default File Manager 검색 기록 콘텍스트 메뉴에서 뒤로 가기 자동완성 diff --git a/Flow.Launcher/Languages/nb.xaml b/Flow.Launcher/Languages/nb.xaml index 125aa5112..5d9a0aaa6 100644 --- a/Flow.Launcher/Languages/nb.xaml +++ b/Flow.Launcher/Languages/nb.xaml @@ -36,11 +36,17 @@ Hide Flow Launcher when focus is lost Do not show new version notifications Search Window Position - Remember Last Position - Mouse Focused Screen - Center - Mouse Focused Screen - Center Top - Mouse Focused Screen - Left Top - Mouse Focused Screen - Right Top + Remember Last Position + Monitor with Mouse Cursor + Monitor with Focused Window + Primary Monitor + Custom Monitor + Search Window Position on Monitor + Center + Center Top + Left Top + Right Top + Custom Position Language Last Query Style Show/Hide previous results when Flow Launcher is reactivated. @@ -163,9 +169,9 @@ Select a modifier key to open selected result via keyboard. Show Hotkey Show result selection hotkey with results. - Custom Query Hotkey - Custom Query Shortcut - Built-in Shortcut + Custom Query Hotkeys + Custom Query Shortcuts + Built-in Shortcuts Query Shortcut Expansion @@ -341,7 +347,7 @@ Item Navigation Open Context Menu Open Containing Folder - Run as Admin + Run as Admin / Open Folder in Default File Manager Query History Back to Result in Context Menu Autocomplete diff --git a/Flow.Launcher/Languages/nl.xaml b/Flow.Launcher/Languages/nl.xaml index a9525ad13..2a2741f08 100644 --- a/Flow.Launcher/Languages/nl.xaml +++ b/Flow.Launcher/Languages/nl.xaml @@ -1,4 +1,4 @@ - + Sneltoets registratie: {0} mislukt @@ -16,15 +16,15 @@ Kopiëren Knippen Plakken - Undo - Select All + Ongedaan maken + Alles selecteren Bestand Map Tekst Spelmodus Stop het gebruik van Sneltoetsen. - Position Reset - Reset search window position + Positie resetten + Positie zoekvenster resetten Instellingen @@ -32,15 +32,21 @@ Draagbare Modus Alle instellingen en gebruikersgegevens opslaan in één map (Nuttig bij het gebruik van verwijderbare schijven of cloud services). Start Flow Launcher als systeem opstart - Error setting launch on startup + Fout bij het instellen van uitvoeren bij opstarten Verberg Flow Launcher als focus verloren is Laat geen nieuwe versie notificaties zien - Search Window Position - Remember Last Position - Mouse Focused Screen - Center - Mouse Focused Screen - Center Top - Mouse Focused Screen - Left Top - Mouse Focused Screen - Right Top + Positie Zoekvenster + Laatste Positie Onthouden + Monitor met Muiscursor + Monitor met Gefocust Venster + Primaire Monitor + Aangepaste Monitor + Search Window Position on Monitor + Center + Center Top + Left Top + Right Top + Custom Position Taal Laatste Query Style Toon/Verberg vorige resultaten wanneer Flow Launcher wordt gereactiveerd. @@ -106,7 +112,7 @@ Plugin Winkel New Release Recently Updated - Plugin + Plugins Installed Vernieuwen Install @@ -203,7 +209,7 @@ Proxy connectie mislukt - About + Over Website GitHub Docs @@ -341,7 +347,7 @@ Item Navigation Open Context Menu Open Containing Folder - Run as Admin + Run as Admin / Open Folder in Default File Manager Query History Back to Result in Context Menu Autocomplete diff --git a/Flow.Launcher/Languages/pl.xaml b/Flow.Launcher/Languages/pl.xaml index 8ea9f121b..af5c53df7 100644 --- a/Flow.Launcher/Languages/pl.xaml +++ b/Flow.Launcher/Languages/pl.xaml @@ -36,11 +36,17 @@ Ukryj okno Flow Launcher kiedy przestanie ono być aktywne Nie pokazuj powiadomienia o nowej wersji Search Window Position - Remember Last Position - Mouse Focused Screen - Center - Mouse Focused Screen - Center Top - Mouse Focused Screen - Left Top - Mouse Focused Screen - Right Top + Remember Last Position + Monitor with Mouse Cursor + Monitor with Focused Window + Primary Monitor + Custom Monitor + Search Window Position on Monitor + Center + Center Top + Left Top + Right Top + Custom Position Język Last Query Style Show/Hide previous results when Flow Launcher is reactivated. @@ -341,7 +347,7 @@ Item Navigation Open Context Menu Open Containing Folder - Run as Admin + Run as Admin / Open Folder in Default File Manager Query History Back to Result in Context Menu Autocomplete diff --git a/Flow.Launcher/Languages/pt-br.xaml b/Flow.Launcher/Languages/pt-br.xaml index 44c3016d7..6827be837 100644 --- a/Flow.Launcher/Languages/pt-br.xaml +++ b/Flow.Launcher/Languages/pt-br.xaml @@ -1,4 +1,4 @@ - + Falha ao registrar atalho: {0} @@ -13,58 +13,64 @@ Sobre Sair Fechar - Copy + Copiar Cortar Colar Undo Select All File - Folder - Text + Pasta + Texto Modo Gamer - Suspend the use of Hotkeys. + Suspender o uso de Teclas de Atalho. Position Reset Reset search window position Configurações Geral - Portable Mode - Store all settings and user data in one folder (Useful when used with removable drives or cloud services). + Modo Portátil + Armazene todas as configurações e dados do usuário em uma pasta (útil quando usado com unidades removíveis ou serviços em nuvem). Iniciar Flow Launcher com inicialização do sistema Error setting launch on startup Esconder Flow Launcher quando foco for perdido Não mostrar notificações de novas versões Search Window Position - Remember Last Position - Mouse Focused Screen - Center - Mouse Focused Screen - Center Top - Mouse Focused Screen - Left Top - Mouse Focused Screen - Right Top + Remember Last Position + Monitor with Mouse Cursor + Monitor with Focused Window + Primary Monitor + Custom Monitor + Search Window Position on Monitor + Center + Center Top + Left Top + Right Top + Custom Position Idioma Estilo da Última Consulta - Show/Hide previous results when Flow Launcher is reactivated. + Mostrar/ocultar resultados anteriores quando o Lançador de Fluxos é reativado. Preservar Última Consulta Selecionar última consulta Limpar última consulta Máximo de resultados mostrados You can also quickly adjust this by using CTRL+Plus and CTRL+Minus. Ignorar atalhos em tela cheia - 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 Path - Node.js Path - Please select the Node.js executable + Desativar o Flow Launcher quando um aplicativo em tela cheia estiver ativado (recomendado para jogos). + Gerenciador de Arquivos Padrões + Selecione o gerenciador de arquivos para usar ao abrir a pasta. + Navegador da Web Padrão + Configuração para Nova Aba, Nova Janela, Modo Privado. + Caminho do Python + Caminho do Node.js + Selecione o executável do Node.js Please select pythonw.exe Always Start Typing in English Mode Temporarily change your input method to English mode when activating Flow. Atualizar Automaticamente Selecionar Esconder Flow Launcher na inicialização - Hide tray icon + Ocultar ícone da bandeja When the icon is hidden from the tray, the Settings menu can be opened by right-clicking on the search window. Query Search Precision Changes minimum match score required for results. @@ -72,50 +78,50 @@ Allows using Pinyin to search. Pinyin is the standard system of romanized spelling for translating Chinese. Always Preview Always open preview panel when Flow activates. Press {0} to toggle preview. - Shadow effect is not allowed while current theme has blur effect enabled + O efeito de sombra não é permitido enquanto o tema atual tem o efeito de desfoque ativado Search Plugin Ctrl+F to search plugins - No results found + Nenhum resultado encontrado Please try a different search. Plugin Plugins Encontrar mais plugins - On + Ativado Desabilitar Action keyword Setting Palavras-chave de ação Current action keyword New action keyword Change Action Keywords - Current Priority - New Priority - Priority + Prioridade atual + Nova Prioridade + Prioridade Change Plugin Results Priority Diretório de Plugins - by + por Tempo de inicialização: Tempo de consulta: Versão - Website + Site Desinstalar - Plugin Store - New Release + Loja de Plugins + Nova Versão Recently Updated - Plugin + Plugins Installed - Refresh - Install + Atualizar + Instalar Desinstalar Atualizar Plugin already installed - New Version - This plugin has been updated within the last 7 days - New Update is Available + Nova Versão + Este plugin foi atualizado nos últimos 7 dias + Nova Atualização Disponível @@ -123,9 +129,9 @@ Tema Appearance Ver mais temas - How to create a theme - Hi There - Explorer + Como criar um tema + Olá + Explorador Search for files, folders and file contents WebSearch Search the web with different search engine support @@ -137,18 +143,18 @@ Fonte do Resultado Modo Janela Opacidade - Theme {0} not exists, fallback to default theme - Fail to load theme {0}, fallback to default theme - Theme Folder - Open Theme Folder - Color Scheme - System Default - Light - Dark - Sound Effect - Play a small sound when the search window opens - Animation - Use Animation in UI + Tema {0} não existe, retorne para o tema padrão + Falha ao carregar tema {0}, retorne ao tema padrão + Pasta de Temas + Abrir Pasta de Temas + Paleta de Cores + Padrão do sistema + Claro + Escuro + Efeito Sonoro + Reproduzir um pequeno som ao abrir a janela de pesquisa + Animação + Utilizar Animação na Interface Clock Date @@ -156,20 +162,20 @@ Atalho Atalho Atalho do Flow Launcher - Enter shortcut to show/hide Flow Launcher. + Digite o atalho para exibir/ocultar o Flow Launcher. Preview Hotkey Enter shortcut to show/hide preview in search window. Modificadores de resultado aberto - Select a modifier key to open selected result via keyboard. + Selecione uma tecla modificadora para abrir o resultar selecionado pelo teclado. Mostrar tecla de atalho - Show result selection hotkey with results. + Exibir atalho de seleção de resultado com resultados. Atalho de Consulta Personalizada Custom Query Shortcut Built-in Shortcut - Query - Shortcut + Consulta + Atalho Expansion - Description + Descrição Apagar Editar Adicionar @@ -178,12 +184,12 @@ Are you sure you want to delete shortcut: {0} with expansion {1}? Get text from clipboard. Get path from active explorer. - Query window shadow effect + Efeito de sombra da janela de consulta Shadow effect has a substantial usage of GPU. Not recommended if your computer performance is limited. - Window Width Size + Largura da janela You can also quickly adjust this by using Ctrl+[ and Ctrl+]. - Use Segoe Fluent Icons - Use Segoe Fluent Icons for query results where supported + Usar Segoe Fluent Icons + Usar Segoe Fluent Icons para resultados da consulta quando suportado Press Key @@ -204,11 +210,11 @@ Sobre - Website + Site GitHub - Docs + Documentação Versão - Icons + Ícones Você ativou o Flow Launcher {0} vezes Procurar atualizações Become A Sponsor @@ -219,36 +225,36 @@ ou acesse https://github.com/Flow-Launcher/Flow.Launcher/releases para baixar manualmente. Notas de Versão: - Usage Tips - DevTools + Dicas de Uso + Ferramentas de Desenvolvedor Setting Folder Log Folder Clear Logs Are you sure you want to delete all logs? - Wizard + Assistente Select File Manager Please specify the file location of the file manager you using and add arguments if necessary. The default arguments are "%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 + Gerenciador de Arquivos Profile Name File Manager Path Arg For Folder Arg For File - Default Web Browser + Navegador da Web Padrão The default setting follows the OS default browser setting. If specified separately, flow uses that browser. - Browser - Browser Name + Navegador + Nome do Navegador Browser Path - New Window - New Tab + Nova Janela + Nova Aba Private Mode - Change Priority + Alterar Prioridade 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! @@ -261,7 +267,7 @@ A nova palavra-chave da ação não pode ser vazia A nova palavra-chave da ação já foi atribuída a outro plugin, por favor tente outra Sucesso - Completed successfully + Concluído com sucesso Use * se não quiser especificar uma palavra-chave de ação @@ -298,13 +304,13 @@ Flow Launcher apresentou um erro - Please wait... + Por favor, aguarde... - Checking for new update - You already have the latest Flow Launcher version - Update found - Updating... + Verificando por novas atualizações + Você já possui a versão mais recente do Flow Launcher + Atualização encontrada + Atualizando... 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} @@ -314,7 +320,7 @@ Ocorreu um erro ao tentar instalar atualizações do progama Atualizar Cancelar - Update Failed + Falha ao Atualizar Check your connection and try updating proxy settings to github-cloud.s3.amazonaws.com. Essa atualização reiniciará o Flow Launcher Os seguintes arquivos serão atualizados @@ -322,40 +328,40 @@ Atualizar descrição - Skip - Welcome to Flow Launcher + Pular + Bem-vindo ao Flow Launcher 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, go ahead and try it out now. To change it, click on the input and press the desired hotkey on the keyboard. - Hotkeys + Teclas de Atalho 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. Let's Start Flow Launcher - Finished. Enjoy Flow Launcher. Don't forget the hotkey to start :) + Finalizado. Aproveite o Flow Launcher. Não esqueça o atalho para iniciar :) - Back / Context Menu - Item Navigation - Open Context Menu + Voltar / Menu de Contexto + Item de Navegação + Abrir Menu de Contexto Open Containing Folder - Run as Admin - Query History + Run as Admin / Open Folder in Default File Manager + Histórico de Pesquisas Back to Result in Context Menu - Autocomplete - Open / Run Selected Item - Open Setting Window - Reload Plugin Data + Autocompletar + Abrir / Executar Item Selecionado + Abrir Janela de Configurações + Recarregar Dados de Plugin - Weather - Weather in Google Result + Clima + Clima no Resultado do Google > ping 8.8.8.8 - Shell Command + Comando de Console s Bluetooth Bluetooth in Windows Settings sn - Sticky Notes + Notas Autoadesivas diff --git a/Flow.Launcher/Languages/pt-pt.xaml b/Flow.Launcher/Languages/pt-pt.xaml index 62380da72..c45b5ebc7 100644 --- a/Flow.Launcher/Languages/pt-pt.xaml +++ b/Flow.Launcher/Languages/pt-pt.xaml @@ -36,11 +36,17 @@ Ocultar Flow Launcher ao perder o foco Não notificar acerca de novas versões Posição da janela de pesquisa - Memorizar última posição - Ecrã do rato - Centro - Ecrã do rato - Centro, cima - Ecrã do rato - Esquerda, cima - Ecrã do rato - Direita, cima + Memorizar última posição + Monitor com o cursor do rato + Monitor com a janela focada + Monitor principal + Monitor personalizado + Posição da janela de pesquisa no monitor + Centro + Centro, cima + Esquerda, cima + Direita, cima + Posição personalizada Idioma Estilo da última consulta Mostrar/ocultar resultados anteriores ao reiniciar Flow Launcher @@ -340,7 +346,7 @@ Queira por favor mover a pasta do seu perfil de {0} para {1} Navegação nos itens Abrir menu de contexto Abrir pasta do resultado - Executar como administrador + Executar como administrador/Abrir pasta no gestor de ficheiros Histórico de consultas Voltar aos resultados no menu de contexto Conclusão automática diff --git a/Flow.Launcher/Languages/ru.xaml b/Flow.Launcher/Languages/ru.xaml index fbc867d22..cb8bf5b22 100644 --- a/Flow.Launcher/Languages/ru.xaml +++ b/Flow.Launcher/Languages/ru.xaml @@ -12,179 +12,185 @@ Настройки О Flow Launcher Выйти - Close - Copy - Cut - Paste - Undo - Select All - File - Folder - Text - Game Mode - Suspend the use of Hotkeys. - Position Reset - Reset search window position + Закрыть + Копировать + Вырезать + Вставить + Отмена + Выбрать все + Файл + Папка + Текст + Игровой режим + Приостановить использование горячих клавиш. + Сброс положения + Сброс положения окна поиска Настройки Общие - Portable Mode - Store all settings and user data in one folder (Useful when used with removable drives or cloud services). + Портативный режим + Храните все настройки и данные пользователя в одной папке (полезно при использовании со съёмными дисками или облачными сервисами). Запускать Flow Launcher при запуске системы - Error setting launch on startup + Ошибка настройки запуска при запуске Скрывать Flow Launcher, если потерян фокуc Не отображать сообщение об обновлении, когда доступна новая версия - Search Window Position - Remember Last Position - Mouse Focused Screen - Center - Mouse Focused Screen - Center Top - Mouse Focused Screen - Left Top - Mouse Focused Screen - Right Top + Положение окна поиска + Запомнить последнее положение + Монитор с курсором мыши + Монитор с фокусированным окном + Основной монитор + Свой монитор + Положение окна поиска на мониторе + По центру + По центру сверху + Слева сверху + Справа сверху + Своё положение Язык - Last Query Style - Show/Hide previous results when Flow Launcher is reactivated. - Preserve Last Query - Select last Query - Empty last Query + Вид последнего запроса + Показать/скрыть предыдущие результаты при повторном запуске Flow Launcher. + Сохранение последнего запроса + Выбор последнего запроса + Очистить последний запрос Максимальное количество результатов - You can also quickly adjust this by using CTRL+Plus and CTRL+Minus. + Вы также можете быстро настроить это с помощью CTRL+плюс и CTRL+минус. Игнорировать горячие клавиши в полноэкранном режиме - 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 Path - Node.js Path - Please select the Node.js executable - Please select pythonw.exe - Always Start Typing in English Mode - Temporarily change your input method to English mode when activating Flow. - Auto Update - Select - Hide Flow Launcher on startup - Hide tray icon - When the icon is hidden from the tray, the Settings menu can be opened by right-clicking on the search window. - Query Search Precision - Changes minimum match score required for results. - Search with Pinyin - Allows using Pinyin to search. Pinyin is the standard system of romanized spelling for translating Chinese. - Always Preview - Always open preview panel when Flow activates. Press {0} to toggle preview. - Shadow effect is not allowed while current theme has blur effect enabled + Отключить запуск Flow Launcher при запущенном полноэкранном приложении (рекомендуется для игр). + Файловый менеджер по умолчанию + Выберите файловый менеджер, который будет использоваться при открытии папки. + Браузер по умолчанию + Настройки для новой вкладки, нового окна, приватного режима. + Путь к Python + Путь к Node.js + Пожалуйста, выберите исполняемый файл Node.js + Пожалуйста, выберите pythonw.exe + Всегда начинать печатать в английском режиме + Временно изменить способ ввода на английский при запуске Flow. + Автообновление + Выбор + Скрыть Flow Launcher при запуске + Скрыть значок в трее + Когда значок скрыт в трее, меню настройки можно открыть, щёлкнув правой кнопкой мыши на окне поиска. + Точность поиска запросов + Изменение минимального количества совпадений при поиске, необходимого для получения результатов. + Поиск с использованием пиньинь + Позволяет использовать пиньинь для поиска. Пиньинь - это стандартная система латинизированной орфографии для перевода китайского языка. + Всегда предпросмотр + Всегда открывать панель предварительного просмотра при запуске Flow. Нажмите {0}, чтобы переключить предварительный просмотр. + Эффект тени не допускается, если в текущей теме включён эффект размытия - Search Plugin - Ctrl+F to search plugins - No results found - Please try a different search. - Plugin + Поиск плагина + Ctrl+F для поиска плагинов + Результаты не найдены + Пожалуйста, попробуйте другой запрос. + Плагины Плагины Найти больше плагинов - On + Вкл. Отключить - Action keyword Setting + Настройка ключевого слова действия Горячая клавиша - Current action keyword - New action keyword - Change Action Keywords - Current Priority - New Priority - Priority - Change Plugin Results Priority + Ключевое слово текущего действия + Ключевое слово нового действия + Изменить ключевое слово действия + Текущий приоритет + Новый приоритет + Приоритет + Изменение приоритета результатов плагина Директория плагинов - by + автор Инициализация: Запрос: Версия - Website + Веб-сайт Удалить - Plugin Store - New Release - Recently Updated + Магазин плагинов + Новый выпуск + Недавно обновлено Плагины - Installed - Refresh - Install + Установлено + Обновить + Установить Удалить Обновить - Plugin already installed - New Version - This plugin has been updated within the last 7 days - New Update is Available + Плагин уже установлен + Новая версия + Этот плагин был обновлён за последние 7 дней + Доступно новое обновление Тема - Appearance + Внешний вид Найти больше тем - How to create a theme - Hi There - Explorer - Search for files, folders and file contents - WebSearch - Search the web with different search engine support - Program - Launch programs as admin or a different user - ProcessKiller - Terminate unwanted processes + Как создать тему + Привет + Проводник + Поиск файлов, папок и содержимого файлов + Веб-поиск + Поиск в Интернете с помощью различных поисковых систем + Программа + Запуск программ от имени администратора или другого пользователя + Удалятор процессов + Завершение нежелательных процессов Шрифт запросов Шрифт результатов Оконный режим Прозрачность - Theme {0} not exists, fallback to default theme - Fail to load theme {0}, fallback to default theme - Theme Folder - Open Theme Folder - Color Scheme - System Default - Light - Dark - Sound Effect - Play a small sound when the search window opens - Animation - Use Animation in UI - Clock - Date + Тема {0} не существует, откат к теме по умолчанию + Не удалось загрузить тему {0}, откат к теме по умолчанию + Папка тем + Открыть папку с темами + Цветовая схема + Системное по умолчанию + Светлая + Тёмная + Звуковой эффект + Воспроизведение небольшого звука при открытии окна поиска + Анимация + Использование анимации в меню + Часы + Дата Горячая клавиша Горячая клавиша Горячая клавиша Flow Launcher - Enter shortcut to show/hide Flow Launcher. - Preview Hotkey - Enter shortcut to show/hide preview in search window. + Введите ярлык, чтобы показать/скрыть Flow Launcher. + Просмотр горячей клавиши + Введите ярлык для показа/скрытия предварительного просмотра в окне поиска. Открыть ключ модификации результата - Select a modifier key to open selected result via keyboard. + Выберите клавишу-модификатор, чтобы открыть выбранный результат с помощью клавиатуры. Показать горячую клавишу - Show result selection hotkey with results. + Показать горячую клавишу выбора результата с результатами. Задаваемые горячие клавиши для запросов Custom Query Shortcut Built-in Shortcut - Query - Shortcut - Expansion - Description + Запрос + Ярлык + Расширение + Описание Удалить Редактировать Добавить Сначала выберите элемент Вы уверены что хотите удалить горячую клавишу для плагина {0}? - Are you sure you want to delete shortcut: {0} with expansion {1}? - Get text from clipboard. - Get path from active explorer. - Query window shadow effect - Shadow effect has a substantial usage of GPU. Not recommended if your computer performance is limited. - Window Width Size - You can also quickly adjust this by using Ctrl+[ and Ctrl+]. - Use Segoe Fluent Icons - Use Segoe Fluent Icons for query results where supported - Press Key + Вы уверены, что хотите удалить ярлык: {0} с расширением {1}? + Получение текста из буфера обмена. + Получение пути из активного проводника. + Эффект тени в окне запроса + Эффект тени существенно задействует ресурсы видеокарты. Не рекомендуется, если производительность вашего компьютера ограничена. + Размер ширины окна + Вы также можете быстро настроить это с помощью Ctrl+[ и Ctrl+]. + Использование значков Segoe Fluent + Использовать значки Segoe Fluent для результатов запросов, где они поддерживаются + Нажмите клавишу HTTP Прокси @@ -204,53 +210,53 @@ О Flow Launcher - Website + Веб-сайт GitHub - Docs + Документация Версия - Icons + Значки Вы воспользовались Flow Launcher уже {0} раз - Check for Updates - Become A Sponsor + Проверить наличие обновлений + Стать спонсором Доступна новая версия {0}. Вы хотите перезапустить Flow Launcher, чтобы использовать обновление? - Check updates failed, please check your connection and proxy settings to api.github.com. + Проверка обновлений не удалась, пожалуйста, проверьте настройки подключения и прокси-сервера к api.github.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. + Загрузка обновлений не удалась, пожалуйста, проверьте настройки соединения и прокси на github-cloud.s3.amazonaws.com, + или перейдите по адресу https://github.com/Flow-Launcher/Flow.Launcher/releases, чтобы загрузить обновления вручную. Список изменений - Usage Tips - DevTools - Setting Folder - Log Folder - Clear Logs - Are you sure you want to delete all logs? - Wizard + Советы по применению + Инструменты разработчика + Папка настроек + Папка журнала + Очистить журнал + Вы уверены, что хотите удалить все журналы? + Мастер - Select File Manager - Please specify the file location of the file manager you using and add arguments if necessary. The default arguments are "%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 - Arg For Folder - Arg For File + Выбор менеджера файлов + Укажите расположение файла в файловом менеджере, который вы используете, и добавьте аргументы, если необходимо. По умолчанию аргументами являются «%d», и путь вводится в этом месте. Например, если требуется команда, такая как «totalcmd.exe /A c:\windows», аргументом будет /A «%d». + «%f» - это аргумент, представляющий путь к файлу. Он используется для подчёркивания имени файла/папки при открытии определённого местоположения файла в стороннем файловом менеджере. Этот аргумент доступен только в пункте «Аргумент для файла». Если файловый менеджер не имеет такой функции, вы можете использовать «%d». + Файловый менеджер + Имя профиля + Путь к файловому менеджеру + Аргумент для папки + Аргумент для файла - 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 - Private Mode + Браузер по умолчанию + Настройка по умолчанию соответствует настройке браузера по умолчанию в ОС. Если указано отдельно, Flow использует этот браузер. + Браузер + Название браузера + Путь к браузеру + Новое окно + Новая вкладка + Приватный режим - 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! + Изменить приоритет + Чем больше число, тем выше будет оцениваться результат. Попробуйте установить значение 5. Если вы хотите, чтобы результаты были ниже, чем у любого другого плагина, укажите отрицательное число + Пожалуйста, укажите действительное целое число для приоритета! Текущая горячая клавиша @@ -261,22 +267,22 @@ Новая горячая клавиша не может быть пустой Новая горячая клавиша уже используется другим плагином. Пожалуйста, задайте новую Успешно - Completed successfully + Выполнено успешно Введите горячую клавишу, которое вы хотите использовать для запуска плагина. Используйте *, если вы не хотите ничего указывать, и плагин будет запускаться без каких-либо горячих клавиш. Задаваемые горячие клавиши для запросов - Press a custom hotkey to open Flow Launcher and input the specified query automatically. + Нажмите свою горячую клавишу, чтобы открыть Flow Launcher и автоматически ввести заданный запрос. Предпросмотр Горячая клавиша недоступна. Пожалуйста, задайте новую Недействительная горячая клавиша плагина Обновить - Custom Query Shortcut - Enter a shortcut that automatically expands to the specified query. - Shortcut already exists, please enter a new Shortcut or edit the existing one. - Shortcut and/or its expansion is empty. + Ярлык пользовательского запроса + Введите ярлык, который автоматически расширяется до указанного запроса. + Ярлык уже существует, пожалуйста, введите новый ярлык или измените существующий. + Ярлык и/или его расширение пусты. Горячая клавиша недоступна @@ -298,64 +304,64 @@ Произошёл сбой в Flow Launcher - Please wait... + Пожалуйста, подождите... - Checking for new update - You already have the latest Flow Launcher version - Update found - Updating... + Проверка наличия нового обновления + У вас уже установлена последняя версия Flow Launcher + Найдено обновление + Обновление... - 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 не смог переместить данные профиля пользователя в новую версию обновления. + Пожалуйста, вручную переместите папку с данными профиля из {0} в {1} - New Update + Новое обновление Доступна новая версия Flow Launcher {0} Произошла ошибка при попытке установить обновление Обновить Отменить - Update Failed - Check your connection and try updating proxy settings to github-cloud.s3.amazonaws.com. + Обновление не удалось + Проверьте соединение и попробуйте обновить настройки прокси на github-cloud.s3.amazonaws.com. Это обновление перезапустит Flow Launcher Следующие файлы будут обновлены Обновить файлы Обновить описание - Skip - Welcome to Flow Launcher - 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, 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. - Let's Start Flow Launcher - Finished. Enjoy Flow Launcher. Don't forget the hotkey to start :) + Пропустить + Добро пожаловать в Flow Launcher + Здравствуйте, вы впервые запускаете Flow Launcher! + Перед началом, этот мастер поможет настроить Flow Launcher. При желании его можно пропустить. Пожалуйста, выберите язык + Поиск и запуск всех файлов и приложений на вашем ПК + Ищите всё: приложения, файлы, закладки, YouTube, Твиттер и многое другое. И всё это с удобной клавиатуры, не прикасаясь к мыши. + Flow Launcher запускается с приведённой ниже горячей клавишей, попробуйте использовать её прямо сейчас. Чтобы изменить её, щёлкните на вводе и нажмите нужную горячую клавишу на клавиатуре. + Горячие клавиши + Ключевое слово и команды + Поиск в Интернете, запуск приложений или выполнение различных функций с помощью плагинов Flow Launcher. Некоторые функции начинаются с ключевого слова действия, и при необходимости их можно использовать без ключевых слов действия. Попробуйте выполнить приведённые ниже запросы в Flow Launcher. + Давайте запустим Flow Launcher + Готово. Наслаждайтесь Flow Launcher. Не забудьте про горячую клавишу для запуска :) - Back / Context Menu - Item Navigation - Open Context Menu - Open Containing Folder - Run as Admin - Query History - Back to Result in Context Menu - Autocomplete - Open / Run Selected Item - Open Setting Window - Reload Plugin Data + Назад / контекстное меню + Навигация по элементам + Открыть контекстное меню + Открыть папку с содержимым + Запустить от имени администратора / Открыть папку в файловом менеджере по умолчанию + История запросов + Вернуться к результату в контекстном меню + Автозаполнение + Открыть / Выполнить выбранный элемент + Открыть окно настроек + Перезагрузить данные плагинов - Weather - Weather in Google Result + Команда Weather + Погода в результатах Google > ping 8.8.8.8 - Shell Command - s Bluetooth - Bluetooth in Windows Settings - sn - Sticky Notes + Команда Shell + Команда s - Bluetooth + Bluetooth в настройках Windows + Команда sn + Заметки diff --git a/Flow.Launcher/Languages/sk.xaml b/Flow.Launcher/Languages/sk.xaml index e1b4fb611..8321ea6c5 100644 --- a/Flow.Launcher/Languages/sk.xaml +++ b/Flow.Launcher/Languages/sk.xaml @@ -36,11 +36,17 @@ Schovať Flow Launcher po strate fokusu Nezobrazovať upozornenia na novú verziu Pozícia vyhľadávacieho okna - Zapamätať si poslednú pozíciu - Obrazovka zameraná na myš – Stred - Obrazovka zameraná na myš – Hore v strede - Obrazovka zameraná na myš – Vľavo hore - Obrazovka zameraná na myš – Vpravo hore + Zapamätať si poslednú pozíciu + Monitor s kurzorom myši + Monitor s aktívnym oknom + Primárny monitor + Vlastný monitor + Poloha vyhľadávacieho okna na monitore + Stred + Hore v strede + Vľavo hore + Vpravo hore + Vlastná pozícia Jazyk Posledné vyhľadávanie Zobrazí/skryje predchádzajúce výsledky pri opätovnej aktivácii Flow Launchera. @@ -106,7 +112,7 @@ Repozitár pluginov Nová verzia Nedávno aktualizované - Plugin + Pluginy Nainštalované Obnoviť Inštalovať @@ -341,7 +347,7 @@ Navigácia medzi položkami Otvoriť kontextovú ponuku Otvoriť umiestnenie priečinka - Spustiť ako správca + Spustiť ako správca/Otvoriť priečinok v predvolenom správcovi súborov História dopytov Návrat na výsledky z kontextovej ponuky Automatické dokončovanie diff --git a/Flow.Launcher/Languages/sr.xaml b/Flow.Launcher/Languages/sr.xaml index 1ee7e1249..56cbbad66 100644 --- a/Flow.Launcher/Languages/sr.xaml +++ b/Flow.Launcher/Languages/sr.xaml @@ -1,4 +1,4 @@ - + Neuspešno registrovana prečica: {0} @@ -36,11 +36,17 @@ Sakri Flow Launcher kada se izgubi fokus Ne prikazuj obaveštenje o novoj verziji Search Window Position - Remember Last Position - Mouse Focused Screen - Center - Mouse Focused Screen - Center Top - Mouse Focused Screen - Left Top - Mouse Focused Screen - Right Top + Remember Last Position + Monitor with Mouse Cursor + Monitor with Focused Window + Primary Monitor + Custom Monitor + Search Window Position on Monitor + Center + Center Top + Left Top + Right Top + Custom Position Jezik Stil Poslednjeg upita Show/Hide previous results when Flow Launcher is reactivated. @@ -106,7 +112,7 @@ Plugin Store New Release Recently Updated - Plugin + Plugins Installed Refresh Install @@ -341,7 +347,7 @@ Item Navigation Open Context Menu Open Containing Folder - Run as Admin + Run as Admin / Open Folder in Default File Manager Query History Back to Result in Context Menu Autocomplete diff --git a/Flow.Launcher/Languages/tr.xaml b/Flow.Launcher/Languages/tr.xaml index 5928a43d0..a595d8f63 100644 --- a/Flow.Launcher/Languages/tr.xaml +++ b/Flow.Launcher/Languages/tr.xaml @@ -36,11 +36,17 @@ Odak pencereden ayrıldığında Flow Launcher'u gizle Güncelleme bildirimlerini gösterme Search Window Position - Remember Last Position - Mouse Focused Screen - Center - Mouse Focused Screen - Center Top - Mouse Focused Screen - Left Top - Mouse Focused Screen - Right Top + Remember Last Position + Monitor with Mouse Cursor + Monitor with Focused Window + Primary Monitor + Custom Monitor + Search Window Position on Monitor + Center + Center Top + Left Top + Right Top + Custom Position Dil Pencere açıldığında Flow Launcher yeniden etkinleştirildiğinde önceki sonuçları göster/gizle. @@ -341,7 +347,7 @@ Item Navigation Open Context Menu Open Containing Folder - Run as Admin + Run as Admin / Open Folder in Default File Manager Query History Back to Result in Context Menu Autocomplete diff --git a/Flow.Launcher/Languages/uk-UA.xaml b/Flow.Launcher/Languages/uk-UA.xaml index a7dad2516..b5ce6ead0 100644 --- a/Flow.Launcher/Languages/uk-UA.xaml +++ b/Flow.Launcher/Languages/uk-UA.xaml @@ -36,11 +36,17 @@ Сховати Flow Launcher, якщо втрачено фокус Не повідомляти про доступні нові версії Search Window Position - Remember Last Position - Mouse Focused Screen - Center - Mouse Focused Screen - Center Top - Mouse Focused Screen - Left Top - Mouse Focused Screen - Right Top + Remember Last Position + Monitor with Mouse Cursor + Monitor with Focused Window + Primary Monitor + Custom Monitor + Search Window Position on Monitor + Center + Center Top + Left Top + Right Top + Custom Position Мова Останній стиль запиту Показати/приховати попередні результати коли реактивований Flow Launcher знову. @@ -341,7 +347,7 @@ Item Navigation Open Context Menu Open Containing Folder - Run as Admin + Run as Admin / Open Folder in Default File Manager Query History Back to Result in Context Menu Autocomplete diff --git a/Flow.Launcher/Languages/zh-cn.xaml b/Flow.Launcher/Languages/zh-cn.xaml index 7890535bf..346077471 100644 --- a/Flow.Launcher/Languages/zh-cn.xaml +++ b/Flow.Launcher/Languages/zh-cn.xaml @@ -36,11 +36,17 @@ 失去焦点时自动隐藏 Flow Launcher 不显示新版本提示 搜索窗口位置 - 记住上次的位置 - 鼠标所在的屏幕 - 中央 - 鼠标所在的屏幕 - 顶部中央 - 鼠标所在的屏幕 - 左上角 - 鼠标所在的屏幕 - 右上角 + 记住上次的位置 + 鼠标光标所在显示器 + 聚焦窗口所在显示器 + 主显示器 + 自定义显示器 + 搜索窗口在显示器上的位置 + 中央 + 顶部居中 + 左上 + 右上 + 自定义位置 语言 再次激活时 重启 Flow Launcher 时显示/隐藏以前的结果。 @@ -341,7 +347,7 @@ 选项导航 打开上下文菜单 打开所在目录 - 以管理员身份运行 + 以管理员身份运行/在默认文件管理器中打开文件夹 查询历史 返回查询界面 自动补全 diff --git a/Flow.Launcher/Languages/zh-tw.xaml b/Flow.Launcher/Languages/zh-tw.xaml index ae7cf9811..96c64879a 100644 --- a/Flow.Launcher/Languages/zh-tw.xaml +++ b/Flow.Launcher/Languages/zh-tw.xaml @@ -17,35 +17,41 @@ 剪下 貼上 Undo - Select All + 全選 檔案 資料夾 文字 遊戲模式 暫停使用快捷鍵。 - Position Reset - Reset search window position + 重設位置 + 重設搜尋視窗位置 設定 一般 - Portable Mode - Store all settings and user data in one folder (Useful when used with removable drives or cloud services). + 便攜模式 + 將所有設定和使用者資料存儲在一個資料夾中(當與可移動磁碟或雲服務一起使用時很有用)。 開機時啟動 Error setting launch on startup 失去焦點時自動隱藏 Flow Launcher 不顯示新版本提示 - Search Window Position - Remember Last Position - Mouse Focused Screen - Center - Mouse Focused Screen - Center Top - Mouse Focused Screen - Left Top - Mouse Focused Screen - Right Top + 搜尋視窗位置 + 記住最後位置 + Monitor with Mouse Cursor + Monitor with Focused Window + Primary Monitor + Custom Monitor + 搜尋視窗在螢幕上的位置 + Center + Center Top + Left Top + Right Top + 自訂搜尋視窗位置 語言 - Last Query Style - Show/Hide previous results when Flow Launcher is reactivated. - Preserve Last Query - Select last Query + 最後查詢樣式 + 重啟 Flow Launcher 顯示/隱藏以前的結果。 + 保留上一個查詢 + 選擇上一個查詢 Empty last Query 最大結果顯示個數 You can also quickly adjust this by using CTRL+Plus and CTRL+Minus. @@ -55,23 +61,23 @@ 選擇開啟資料夾時要使用的檔案管理器。 預設瀏覽器 設定新增分頁、視窗和無痕模式。 - Python Path + Python 位置 Node.js Path Please select the Node.js executable - Please select pythonw.exe - Always Start Typing in English Mode - Temporarily change your input method to English mode when activating Flow. + 請選擇 pythonw.exe + 一律以英文模式開始輸入 + 啟動 Flow 時暫時將輸入法切換為英文模式。 自動更新 選擇 啟動時不顯示主視窗 - 隱藏任務欄圖標 - When the icon is hidden from the tray, the Settings menu can be opened by right-clicking on the search window. - 查詢搜索精確度 - Changes minimum match score required for results. - 拼音搜索 - 允許使用拼音來搜索. - Always Preview - Always open preview panel when Flow activates. Press {0} to toggle preview. + 隱藏任務欄圖示 + 當圖示從系統列隱藏時,可以透過在搜尋視窗上按右鍵來開啟設定選單。 + 查詢搜尋精確度 + 更改結果所需的最低匹配分數。 + 拼音搜尋 + 允許使用拼音來搜尋。拼音是將中文轉換為羅馬字母拼寫的標準系統。 + 一律預覽 + 當 Flow 啟動時,一律開啟預覽面板。按下 {0} 可切換預覽。 Shadow effect is not allowed while current theme has blur effect enabled @@ -93,7 +99,7 @@ 新增優先 優先 更改插件結果優先順序 - 外掛資料夾 + 插件資料夾 作者 載入耗時: 查詢耗時: @@ -103,7 +109,7 @@ - 外掛商店 + 插件商店 New Release Recently Updated 外掛 @@ -121,16 +127,16 @@ 主題 - Appearance + 外觀 瀏覽更多主題 如何創建一個主題 你好呀 檔案總管 - Search for files, folders and file contents - WebSearch + 搜尋檔案、資料夾和檔案內容 + 網路搜尋 Search the web with different search engine support 程式 - Launch programs as admin or a different user + 以系統管理員或其他使用者啟用應用程式 ProcessKiller Terminate unwanted processes 查詢框字體 @@ -146,45 +152,45 @@ 亮色系 暗色系 音效 - 搜索窗口打開時播放音效 + 搜尋窗口打開時播放音效 動畫 使用介面動畫 - Clock - Date + 時鐘 + 日期 快捷鍵 快捷鍵 Flow Launcher 快捷鍵 - 執行快捷鍵以顯示 / 隱藏 Flow Launcher。 - Preview Hotkey + 執行縮寫以顯示 / 隱藏 Flow Launcher。 + 預覽快捷鍵 Enter shortcut to show/hide preview in search window. 開放結果修飾符 Select a modifier key to open selected result via keyboard. 顯示快捷鍵 Show result selection hotkey with results. 自定義查詢快捷鍵 - Custom Query Shortcut - Built-in Shortcut + 自訂查詢縮寫 + 內建縮寫 查詢 - Shortcut - Expansion - 描述 + 縮寫 + 展開 + 簡介 刪除 編輯 新增 請選擇一項 確定要刪除外掛 {0} 的快捷鍵嗎? - Are you sure you want to delete shortcut: {0} with expansion {1}? - Get text from clipboard. - Get path from active explorer. + 你確定你要刪除縮寫:{0} 展開為 {1}? + 從剪貼簿取得文字。 + 從使用中的檔案總管獲得路徑。 查詢窗口陰影效果 陰影效果將佔用大量的 GPU 資源。如果你的電腦效能有限,不建議使用。 窗口寬度 You can also quickly adjust this by using Ctrl+[ and Ctrl+]. - 使用 Segoe Fluent 圖標 - 在支援的情況下,在查詢結果使用 Segoe Fluent 圖標 - Press Key + 使用 Segoe Fluent 圖示 + 在支援的情況下,在查詢結果使用 Segoe Fluent 圖示 + 按下按鍵 HTTP 代理 @@ -208,10 +214,10 @@ GitHub 文檔 版本 - Icons + 圖示 您已經啟動了 Flow Launcher {0} 次 檢查更新 - Become A Sponsor + 成為贊助者 發現有新版本 {0}, 請重新啟動 Flow Launcher。 檢查更新失敗,請檢查你對 api.github.com 的連線和代理設定。 @@ -223,8 +229,8 @@ 開發工具 設定資料夾 日誌資料夾 - Clear Logs - Are you sure you want to delete all logs? + 清除日誌 + 請確認要刪除所有日誌嗎? 嚮導 @@ -341,16 +347,16 @@ Item Navigation 打開選單 開啟檔案位置 - 以管理員身分執行 + Run as Admin / Open Folder in Default File Manager 查詢歷史 Back to Result in Context Menu - Autocomplete - Open / Run Selected Item + 自動完成 + 開啟/運行選擇項目 開啟視窗設定 - 重新載入外掛資料 + 重新載入插件資料 天氣 - Google 搜索的天氣結果 + Google 搜尋的天氣結果 > ping 8.8.8.8 Shell 指令 s 藍牙 diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index a9554da34..4a95834b5 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -335,11 +335,9 @@ - - + + + + diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 550648b24..43bd9fd35 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -17,13 +17,13 @@ using DragEventArgs = System.Windows.DragEventArgs; using KeyEventArgs = System.Windows.Input.KeyEventArgs; using NotifyIcon = System.Windows.Forms.NotifyIcon; using Flow.Launcher.Infrastructure; -using System.Windows.Media; using Flow.Launcher.Infrastructure.Hotkey; using Flow.Launcher.Plugin.SharedCommands; using System.Windows.Threading; using System.Windows.Data; using ModernWpf.Controls; using Key = System.Windows.Input.Key; +using System.Media; namespace Flow.Launcher { @@ -37,8 +37,8 @@ namespace Flow.Launcher private NotifyIcon _notifyIcon; private ContextMenu contextMenu; private MainViewModel _viewModel; - private readonly MediaPlayer animationSound = new(); private bool _animating; + SoundPlayer animationSound = new SoundPlayer(AppDomain.CurrentDomain.BaseDirectory + "Resources\\open.wav"); #endregion @@ -49,8 +49,7 @@ namespace Flow.Launcher _settings = settings; InitializeComponent(); - InitializePosition(); - animationSound.Open(new Uri(AppDomain.CurrentDomain.BaseDirectory + "Resources\\open.wav")); + InitializePosition(); } public MainWindow() @@ -70,13 +69,11 @@ namespace Flow.Launcher _viewModel.ResultCopy(QueryTextBox.SelectedText); } } - + private async void OnClosing(object sender, CancelEventArgs e) { - _settings.WindowTop = Top; - _settings.WindowLeft = Left; _notifyIcon.Visible = false; - _viewModel.Save(); + App.API.SaveAppAllSettings(); e.Cancel = true; await PluginManager.DisposePluginsAsync(); Notification.Uninstall(); @@ -114,7 +111,6 @@ namespace Flow.Launcher { if (_settings.UseSound) { - animationSound.Position = TimeSpan.Zero; animationSound.Play(); } UpdatePosition(); @@ -201,29 +197,39 @@ namespace Flow.Launcher private void InitializePosition() { - switch (_settings.SearchWindowPosition) + if (_settings.SearchWindowScreen == SearchWindowScreens.RememberLastLaunchLocation) { - case SearchWindowPositions.RememberLastLaunchLocation: - Top = _settings.WindowTop; - Left = _settings.WindowLeft; - break; - case SearchWindowPositions.MouseScreenCenter: - Left = HorizonCenter(); - Top = VerticalCenter(); - break; - case SearchWindowPositions.MouseScreenCenterTop: - Left = HorizonCenter(); - Top = 10; - break; - case SearchWindowPositions.MouseScreenLeftTop: - Left = 10; - Top = 10; - break; - case SearchWindowPositions.MouseScreenRightTop: - Left = HorizonRight(); - Top = 10; - break; + Top = _settings.WindowTop; + Left = _settings.WindowLeft; } + else + { + var screen = SelectedScreen(); + switch (_settings.SearchWindowAlign) + { + case SearchWindowAligns.Center: + Left = HorizonCenter(screen); + Top = VerticalCenter(screen); + break; + case SearchWindowAligns.CenterTop: + Left = HorizonCenter(screen); + Top = 10; + break; + case SearchWindowAligns.LeftTop: + Left = HorizonLeft(screen); + Top = 10; + break; + case SearchWindowAligns.RightTop: + Left = HorizonRight(screen); + Top = 10; + break; + case SearchWindowAligns.Custom: + Left = WindowsInteropHelper.TransformPixelsToDIP(this, screen.WorkingArea.X + _settings.CustomWindowLeft, 0).X; + Top = WindowsInteropHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Y + _settings.CustomWindowTop).Y; + break; + } + } + } private void UpdateNotifyIconText() @@ -340,8 +346,9 @@ namespace Flow.Launcher { _viewModel.Show(); await Task.Delay(300); // If don't give a time, Positioning will be weird. - Left = HorizonCenter(); - Top = VerticalCenter(); + var screen = SelectedScreen(); + Left = HorizonCenter(screen); + Top = VerticalCenter(screen); } private void InitProgressbarAnimation() @@ -503,7 +510,7 @@ namespace Flow.Launcher { if (_animating) return; - if (_settings.SearchWindowPosition == SearchWindowPositions.RememberLastLaunchLocation) + if (_settings.SearchWindowScreen == SearchWindowScreens.RememberLastLaunchLocation) { _settings.WindowLeft = Left; _settings.WindowTop = Top; @@ -523,30 +530,62 @@ namespace Flow.Launcher } } - public double HorizonCenter() + public Screen SelectedScreen() + { + Screen screen = null; + switch(_settings.SearchWindowScreen) + { + case SearchWindowScreens.Cursor: + screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position); + break; + case SearchWindowScreens.Primary: + screen = Screen.PrimaryScreen; + break; + case SearchWindowScreens.Focus: + IntPtr foregroundWindowHandle = WindowsInteropHelper.GetForegroundWindow(); + screen = Screen.FromHandle(foregroundWindowHandle); + break; + case SearchWindowScreens.Custom: + if (_settings.CustomScreenNumber <= Screen.AllScreens.Length) + screen = Screen.AllScreens[_settings.CustomScreenNumber - 1]; + else + screen = Screen.AllScreens[0]; + break; + default: + screen = Screen.AllScreens[0]; + break; + } + return screen ?? Screen.AllScreens[0]; + } + + public double HorizonCenter(Screen screen) { - var screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position); var dip1 = WindowsInteropHelper.TransformPixelsToDIP(this, screen.WorkingArea.X, 0); var dip2 = WindowsInteropHelper.TransformPixelsToDIP(this, screen.WorkingArea.Width, 0); var left = (dip2.X - ActualWidth) / 2 + dip1.X; return left; } - public double VerticalCenter() + public double VerticalCenter(Screen screen) { - 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 top = (dip2.Y - QueryTextBox.ActualHeight) / 4 + dip1.Y; return top; } - public double HorizonRight() + public double HorizonRight(Screen screen) { - var screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position); var dip1 = WindowsInteropHelper.TransformPixelsToDIP(this, screen.WorkingArea.X, 0); var dip2 = WindowsInteropHelper.TransformPixelsToDIP(this, screen.WorkingArea.Width, 0); - var left = (dip2.X - ActualWidth) - 10; + var left = (dip1.X + dip2.X - ActualWidth) - 10; + return left; + } + + public double HorizonLeft(Screen screen) + { + var dip1 = WindowsInteropHelper.TransformPixelsToDIP(this, screen.WorkingArea.X, 0); + var left = dip1.X + 10; return left; } diff --git a/Flow.Launcher/Notification.cs b/Flow.Launcher/Notification.cs index 64db5c213..ccbd005ef 100644 --- a/Flow.Launcher/Notification.cs +++ b/Flow.Launcher/Notification.cs @@ -55,19 +55,12 @@ namespace Flow.Launcher // Temporary fix for the Windows 11 notification issue // Possibly from 22621.1413 or 22621.1485, judging by post time of #2024 Log.Exception("Flow.Launcher.Notification|Notification InvalidOperationException Error", e); - if (Environment.OSVersion.Version.Build >= 22621) - { - return; - } - else - { - throw; - } + LegacyShow(title, subTitle, iconPath); } catch (Exception e) { Log.Exception("Flow.Launcher.Notification|Notification Error", e); - throw; + LegacyShow(title, subTitle, iconPath); } } diff --git a/Flow.Launcher/PublicAPIInstance.cs b/Flow.Launcher/PublicAPIInstance.cs index 96c2ced23..636699ad0 100644 --- a/Flow.Launcher/PublicAPIInstance.cs +++ b/Flow.Launcher/PublicAPIInstance.cs @@ -1,4 +1,4 @@ - using System; +using System; using System.Collections.Generic; using System.Linq; using System.Net; @@ -77,7 +77,7 @@ namespace Flow.Launcher public void SaveAppAllSettings() { - SavePluginSettings(); + PluginManager.Save(); _mainVM.Save(); _settingsVM.Save(); ImageLoader.Save(); @@ -158,6 +158,9 @@ namespace Flow.Launcher private readonly ConcurrentDictionary _pluginJsonStorages = new(); + /// + /// Save plugin settings. + /// public void SavePluginSettings() { foreach (var value in _pluginJsonStorages.Values) @@ -193,17 +196,21 @@ namespace Flow.Launcher ((PluginJsonStorage)_pluginJsonStorages[type]).Save(); } - public void OpenDirectory(string DirectoryPath, string FileName = null) + public void OpenDirectory(string DirectoryPath, string FileNameOrFilePath = null) { using var explorer = new Process(); var explorerInfo = _settingsVM.Settings.CustomExplorer; explorer.StartInfo = new ProcessStartInfo { FileName = explorerInfo.Path, - Arguments = FileName is null ? - explorerInfo.DirectoryArgument.Replace("%d", DirectoryPath) : - explorerInfo.FileArgument.Replace("%d", DirectoryPath).Replace("%f", - Path.IsPathRooted(FileName) ? FileName : Path.Combine(DirectoryPath, FileName)) + UseShellExecute = true, + Arguments = FileNameOrFilePath is null + ? explorerInfo.DirectoryArgument.Replace("%d", DirectoryPath) + : explorerInfo.FileArgument + .Replace("%d", DirectoryPath) + .Replace("%f", + Path.IsPathRooted(FileNameOrFilePath) ? FileNameOrFilePath : Path.Combine(DirectoryPath, FileNameOrFilePath) + ) }; explorer.Start(); } diff --git a/Flow.Launcher/ReportWindow.xaml.cs b/Flow.Launcher/ReportWindow.xaml.cs index 4899edc14..a2e7a8562 100644 --- a/Flow.Launcher/ReportWindow.xaml.cs +++ b/Flow.Launcher/ReportWindow.xaml.cs @@ -23,7 +23,7 @@ namespace Flow.Launcher SetException(exception); } - private static string GetIssueUrl(string website) + private static string GetIssuesUrl(string website) { if (!website.StartsWith("https://github.com")) { @@ -31,10 +31,10 @@ namespace Flow.Launcher } if(website.Contains("Flow-Launcher/Flow.Launcher")) { - return Constant.Issue; + return Constant.IssuesUrl; } var treeIndex = website.IndexOf("tree", StringComparison.Ordinal); - return treeIndex == -1 ? $"{website}/issues/new" : $"{website[..treeIndex]}/issues/new"; + return treeIndex == -1 ? $"{website}/issues" : $"{website[..treeIndex]}/issues"; } private void SetException(Exception exception) @@ -45,8 +45,8 @@ namespace Flow.Launcher var websiteUrl = exception switch { - FlowPluginException pluginException =>GetIssueUrl(pluginException.Metadata.Website), - _ => Constant.Issue + FlowPluginException pluginException =>GetIssuesUrl(pluginException.Metadata.Website), + _ => Constant.IssuesUrl }; @@ -86,4 +86,4 @@ namespace Flow.Launcher return paragraph; } } -} \ No newline at end of file +} diff --git a/Flow.Launcher/Resources/Dark.xaml b/Flow.Launcher/Resources/Dark.xaml index a5eec29ab..548a1f3a2 100644 --- a/Flow.Launcher/Resources/Dark.xaml +++ b/Flow.Launcher/Resources/Dark.xaml @@ -59,6 +59,7 @@ + diff --git a/Flow.Launcher/Resources/Light.xaml b/Flow.Launcher/Resources/Light.xaml index a78b14d65..517a5fd5d 100644 --- a/Flow.Launcher/Resources/Light.xaml +++ b/Flow.Launcher/Resources/Light.xaml @@ -51,7 +51,9 @@ + + diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 186bb2c41..665d16b8f 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -693,26 +693,135 @@ - - - - - - - -  - - + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + @@ -1932,9 +2041,25 @@ + + + + + +  + + + + + LostFocus="OnPreviewHotkeyControlFocusLost" + ValidateKeyGesture="True" /> diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index f39974142..b80208a0c 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -226,6 +226,7 @@ namespace Flow.Launcher settings.SettingWindowTop = Top; settings.SettingWindowLeft = Left; viewModel.Save(); + API.SavePluginSettings(); } private void OnCloseExecuted(object sender, ExecutedRoutedEventArgs e) diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index d0dbd6268..27809f67b 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -280,19 +280,16 @@ namespace Flow.Launcher.ViewModel }) .ConfigureAwait(false); - if (hideWindow) - { - Hide(); - } if (SelectedIsFromQueryResults()) { _userSelectedRecord.Add(result); _history.Add(result.OriginQuery.RawQuery); } - else + + if (hideWindow) { - SelectedResults = Results; + Hide(); } } @@ -469,7 +466,7 @@ namespace Flow.Launcher.ViewModel private void HidePreview() { - ResultAreaColumn = 2; + ResultAreaColumn = 3; PreviewVisible = false; } @@ -1014,6 +1011,10 @@ namespace Flow.Launcher.ViewModel // Trick for no delay MainWindowOpacity = 0; + if (!SelectedIsFromQueryResults()) + { + SelectedResults = Results; + } switch (Settings.LastQueryMode) { case LastQueryMode.Empty: diff --git a/Flow.Launcher/ViewModel/PluginStoreItemViewModel.cs b/Flow.Launcher/ViewModel/PluginStoreItemViewModel.cs index 622e41b1b..bc98efabc 100644 --- a/Flow.Launcher/ViewModel/PluginStoreItemViewModel.cs +++ b/Flow.Launcher/ViewModel/PluginStoreItemViewModel.cs @@ -26,13 +26,19 @@ namespace Flow.Launcher.ViewModel public string IcoPath => _plugin.IcoPath; public bool LabelInstalled => PluginManager.GetPluginForId(_plugin.ID) != null; - public bool LabelUpdate => LabelInstalled && _plugin.Version != PluginManager.GetPluginForId(_plugin.ID).Metadata.Version; + public bool LabelUpdate => LabelInstalled && VersionConvertor(_plugin.Version) > VersionConvertor(PluginManager.GetPluginForId(_plugin.ID).Metadata.Version); internal const string None = "None"; internal const string RecentlyUpdated = "RecentlyUpdated"; internal const string NewRelease = "NewRelease"; internal const string Installed = "Installed"; + public Version VersionConvertor(string version) + { + Version ResultVersion = new Version(version); + return ResultVersion; + } + public string Category { get diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs index 37587ce59..47a5cd672 100644 --- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs +++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs @@ -133,6 +133,9 @@ namespace Flow.Launcher.ViewModel } } + /// + /// Save Flow settings. Plugins settings are not included. + /// public void Save() { foreach (var vm in PluginViewModels) @@ -143,7 +146,6 @@ namespace Flow.Launcher.ViewModel Settings.PluginSettings.Plugins[id].Priority = vm.Priority; } - PluginManager.Save(); _storage.Save(); } @@ -463,23 +465,50 @@ namespace Flow.Launcher.ViewModel } } - public class SearchWindowPosition + public class SearchWindowScreen { public string Display { get; set; } - public SearchWindowPositions Value { get; set; } + public SearchWindowScreens Value { get; set; } } - public List SearchWindowPositions + public List SearchWindowScreens { get { - List modes = new List(); - var enums = (SearchWindowPositions[])Enum.GetValues(typeof(SearchWindowPositions)); + List modes = new List(); + var enums = (SearchWindowScreens[])Enum.GetValues(typeof(SearchWindowScreens)); foreach (var e in enums) { - var key = $"SearchWindowPosition{e}"; + var key = $"SearchWindowScreen{e}"; var display = _translater.GetTranslation(key); - var m = new SearchWindowPosition + var m = new SearchWindowScreen + { + Display = display, + Value = e, + }; + modes.Add(m); + } + return modes; + } + } + + public class SearchWindowAlign + { + public string Display { get; set; } + public SearchWindowAligns Value { get; set; } + } + + public List SearchWindowAligns + { + get + { + List modes = new List(); + var enums = (SearchWindowAligns[])Enum.GetValues(typeof(SearchWindowAligns)); + foreach (var e in enums) + { + var key = $"SearchWindowAlign{e}"; + var display = _translater.GetTranslation(key); + var m = new SearchWindowAlign { Display = display, Value = e, }; @@ -489,6 +518,20 @@ namespace Flow.Launcher.ViewModel } } + public List ScreenNumbers + { + get + { + var screens = System.Windows.Forms.Screen.AllScreens; + var screenNumbers = new List(); + for (int i = 1; i <= screens.Length; i++) + { + screenNumbers.Add(i); + } + return screenNumbers; + } + } + public List TimeFormatList { get; } = new() { "h:mm", diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/pt-br.xaml index d0628a611..18fed7cd7 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/pt-br.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/pt-br.xaml @@ -2,25 +2,25 @@ - Browser Bookmarks - Search your browser bookmarks + Favoritos do Navegador + Pesquisar favoritos do seu navegador - Bookmark Data - Open bookmarks in: - New window - New tab - Set browser from path: - Choose - Copy url - Copy the bookmark's url to clipboard - Load Browser From: - Browser Name - Data Directory Path + Dados de Favorito + Abrir favoritos em: + Nova janela + Nova aba + Definir navegador pelo caminho: + Escolha + Copiar link + Copiar o link do favorito para a área de transferência + Carregar navegador de: + Nome do Navegador + Caminho do Diretório de Dados Adicionar Editar Apagar - Browse + Navegar Others Browser Engine If you are not using Chrome, Firefox or Edge, or you are using their portable version, you need to add bookmarks data directory and select correct browser engine to make this plugin work. diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/ru.xaml index 36939f493..2ebb286a4 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/ru.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/ru.xaml @@ -2,27 +2,27 @@ - Browser Bookmarks - Search your browser bookmarks + Закладки браузера + Поиск закладок в браузере - Bookmark Data - Open bookmarks in: - New window - New tab - Set browser from path: - Choose - Copy url - Copy the bookmark's url to clipboard - Load Browser From: - Browser Name - Data Directory Path + Данные закладок + Открыть закладки в: + Новом окне + Новой вкладке + Установить браузер по пути: + Выбор + Скопировать URL-адрес + Скопируйте URL закладки в буфер обмена + Загрузить браузер из: + Название браузера + Путь к каталогу данных Добавить Редактировать Удалить - Browse - Others - Browser Engine - If you are not using Chrome, Firefox or Edge, or you are using their portable version, you need to add bookmarks data directory and select correct browser engine to make this plugin work. - For example: Brave's engine is Chromium; and its default bookmarks data location is: "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". For Firefox engine, the bookmarks directory is the userdata folder contains the places.sqlite file. + Обзор + Другое + Движок браузера + Если вы не используете Chrome, Firefox или Edge, или используете их портативную версию, вам необходимо добавить каталог данных закладок и выбрать правильный движок браузера, чтобы этот плагин работал. + Например: Движок Brave - Chromium; и его местоположение данных закладок по умолчанию: «%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData». Для движка Firefox каталог закладок находится в папке userdata и содержит файл places.sqlite. diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/zh-cn.xaml index c082d50a2..7b628702d 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/zh-cn.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/zh-cn.xaml @@ -23,6 +23,6 @@ 浏览 其他 浏览器引擎 - If you are not using Chrome, Firefox or Edge, or you are using their portable version, you need to add bookmarks data directory and select correct browser engine to make this plugin work. - For example: Brave's engine is Chromium; and its default bookmarks data location is: "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". For Firefox engine, the bookmarks directory is the userdata folder contains the places.sqlite file. + 如果你没有使用 Chrome、 Firefox 或 Edge,或者正在使用它们的绿色版, 那么你需要添加书签数据目录并选择正确的浏览器引擎才能使此插件正常工作。 + 例如:Brave 浏览器的引擎是 Chromium;其默认书签数据位置是 "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData"。 对于 Firefox 引擎的浏览器,书签目录是 places.sqlite 文件所在的用户数据文件夹。 diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/zh-tw.xaml index 50c23699f..95bca0684 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/zh-tw.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/zh-tw.xaml @@ -3,7 +3,7 @@ 瀏覽器書籤 - 搜索你的瀏覽器書籤 + 搜尋你的瀏覽器書籤 書籤資料 @@ -21,8 +21,8 @@ 編輯 刪除 瀏覽 - Others - Browser Engine - If you are not using Chrome, Firefox or Edge, or you are using their portable version, you need to add bookmarks data directory and select correct browser engine to make this plugin work. - For example: Brave's engine is Chromium; and its default bookmarks data location is: "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". For Firefox engine, the bookmarks directory is the userdata folder contains the places.sqlite file. + 其他 + 瀏覽器引擎 + 如果你沒有使用 Chrome、Firefox 或 Edge,或者使用它們的便攜版,你需要添加書籤資料位置並選擇正確的瀏覽器引擎,才能讓這個插件正常運作。 + 例如:Brave 瀏覽器的引擎是 Chromium;而它的預設書籤資料位置是「%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData」。對於 Firefox 瀏覽器引擎,書籤資料位置是包含 places.sqlite 檔案的 userdata 資料夾。 diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json index 99f2b78b4..38334aa50 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": "3.1.0", + "Version": "3.1.1", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.BrowserBookmark.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/pt-br.xaml index 15598118c..6dd903fa4 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/pt-br.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/pt-br.xaml @@ -1,15 +1,15 @@  - Calculator - Allows to do mathematical calculations.(Try 5*3-2 in Flow Launcher) - Not a number (NaN) - Expression wrong or incomplete (Did you forget some parentheses?) - Copy this number to the clipboard - Decimal separator - The decimal separator to be used in the output. + Calculadora + Permite fazer cálculos matemáticos.(Tente 5*3-2 no Flow Launcher) + Não é um número (NaN) + Expressão errada ou incompleta (Você esqueceu de adicionar parênteses?) + Copiar este numero para a área de transferência + Separador decimal + O separador decimal a ser usado no resultado. Use system locale - Comma (,) - Dot (.) + Vírgula (,) + Ponto (.) Max. decimal places diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/ru.xaml index 15598118c..30c557536 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/ru.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/ru.xaml @@ -1,15 +1,15 @@  - Calculator - Allows to do mathematical calculations.(Try 5*3-2 in Flow Launcher) - Not a number (NaN) - Expression wrong or incomplete (Did you forget some parentheses?) - Copy this number to the clipboard - Decimal separator - The decimal separator to be used in the output. - Use system locale - Comma (,) - Dot (.) - Max. decimal places + Калькулятор + Позволяет выполнять математические вычисления. (Попробуйте 5*3-2 в Flow Launcher) + Не является числом (NaN) + Выражение неправильное или неполное (Вы забыли скобки?) + Скопировать этот номер в буфер обмена + Десятичный разделитель + Десятичный разделитель, который будет использоваться в результате. + Использовать системный язык + Запятая (,) + Точка (.) + Макс. число знаков после запятой diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json b/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json index 5f27a088d..1f022d6bb 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json @@ -4,7 +4,7 @@ "Name": "Calculator", "Description": "Provide mathematical calculations.(Try 5*3-2 in Flow Launcher)", "Author": "cxfksword", - "Version": "3.0.1", + "Version": "3.0.2", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Caculator.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/da.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/da.xaml index 824a179af..ba2152e61 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/da.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/da.xaml @@ -16,6 +16,8 @@ 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 Explorer Alternative Error occurred during search: {0} + Could not open folder + Could not open file Slet @@ -32,6 +34,7 @@ Shell Path Index Search Excluded Paths Use search result's location as the working directory of the executable + Hit Enter to open folder in Default File Manager Use Index Search For Path Search Indexing Options Search: diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/de.xaml index d96ac6c94..dc97980fd 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/de.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/de.xaml @@ -16,6 +16,8 @@ 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 Explorer Alternative Error occurred during search: {0} + Could not open folder + Could not open file Löschen @@ -32,6 +34,7 @@ Shell Path Index Search Excluded Paths Verwenden Suchergebnis Standort als ausführbare Arbeitsverzeichnis + Hit Enter to open folder in Default File Manager Use Index Search For Path Search Indexing Options Suche: diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml index 58fe31dd6..d5352ef1e 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml @@ -18,6 +18,8 @@ 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 Explorer Alternative Error occurred during search: {0} + Could not open folder + Could not open file Delete @@ -34,6 +36,7 @@ Shell Path Index Search Excluded Paths Use search result's location as the working directory of the executable + Hit Enter to open folder in Default File Manager Use Index Search For Path Search Indexing Options Search: diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es-419.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es-419.xaml index 151879abf..ff1773c71 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es-419.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es-419.xaml @@ -16,6 +16,8 @@ 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 Explorer Alternative Error occurred during search: {0} + Could not open folder + Could not open file Eliminar @@ -32,6 +34,7 @@ Shell Path Index Search Excluded Paths Usar la ubicación de los resultados de búsqueda como directorio de trabajo ejecutable + Hit Enter to open folder in Default File Manager Use Index Search For Path Search Indexing Options Search: diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es.xaml index d31421b64..51b3e831b 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es.xaml @@ -16,6 +16,8 @@ El mensaje de advertencia se ha desactivado. Como alternativa para buscar archivos y carpetas, ¿desea instalar el complemento Everything?{0}{0}Seleccione 'Sí' para instalar el complemento Everything, o 'No' para volver Explorador alternativo Se ha producido un error durante la búsqueda: {0} + No se ha podido abrir la carpeta + No se ha podido abrir el archivo Eliminar @@ -32,6 +34,7 @@ Ruta del Shell Rutas excluídas del índice de búsqueda Usar la ubicación de los resultados de búsqueda como directorio de trabajo del ejecutable + Pulsar Entrar para abrir la carpeta en el administrador de archivos predeterminado Usar búsqueda indexada para buscar rutas Opciones de indexación Buscar: diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/fr.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/fr.xaml index 0c921dc3e..f4dd4e9d1 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/fr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/fr.xaml @@ -16,6 +16,8 @@ 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 Explorer Alternative Error occurred during search: {0} + Could not open folder + Could not open file Supprimer @@ -32,6 +34,7 @@ Shell Path Index Search Excluded Paths Use search result's location as the working directory of the executable + Hit Enter to open folder in Default File Manager Use Index Search For Path Search Indexing Options Search: diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/it.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/it.xaml index ba36b0078..30dfe71ed 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/it.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/it.xaml @@ -16,6 +16,8 @@ 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 Explorer Alternative Error occurred during search: {0} + Could not open folder + Could not open file Cancella @@ -32,6 +34,7 @@ Shell Path Index Search Excluded Paths Utilizza il percorso ottenuto dalla ricerca come cartella di lavoro + Hit Enter to open folder in Default File Manager Use Index Search For Path Search Indexing Options Search: diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ja.xaml index bca840028..bb831b003 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ja.xaml @@ -16,6 +16,8 @@ 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 Explorer Alternative Error occurred during search: {0} + Could not open folder + Could not open file 削除 @@ -32,6 +34,7 @@ Shell Path Index Search Excluded Paths Use search result's location as the working directory of the executable + Hit Enter to open folder in Default File Manager Use Index Search For Path Search Indexing Options Search: diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ko.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ko.xaml index 6c888de04..627338473 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ko.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ko.xaml @@ -16,6 +16,8 @@ 경고 메시지가 꺼졌습니다. 파일 및 폴더 검색을 위한 대안으로 Everything 플러그인을 설치하시겠습니까?{0}{0}Everything 플러그인을 설치하려면 '예'를 선택하고, 반환하려면 '아니오'를 선택하십시오 Explorer Alternative Error occurred during search: {0} + Could not open folder + Could not open file 삭제 @@ -32,6 +34,7 @@ 쉘 경로 색인 제외 경로 검색 결과위치를 실행 가능한 작업 디렉토리(Working Directory)로 사용 + Hit Enter to open folder in Default File Manager Use Index Search For Path Search 색인 옵션 검색: diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nb.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nb.xaml index c93b07bf3..0fe4db467 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nb.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nb.xaml @@ -16,6 +16,8 @@ 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 Explorer Alternative Error occurred during search: {0} + Could not open folder + Could not open file Delete @@ -32,6 +34,7 @@ Shell Path Index Search Excluded Paths Use search result's location as the working directory of the executable + Hit Enter to open folder in Default File Manager Use Index Search For Path Search Indexing Options Search: diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nl.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nl.xaml index f07c9f23a..3649a2308 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nl.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nl.xaml @@ -16,6 +16,8 @@ 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 Explorer Alternative Error occurred during search: {0} + Could not open folder + Could not open file Verwijder @@ -32,6 +34,7 @@ Shell Path Index Search Excluded Paths Use search result's location as the working directory of the executable + Hit Enter to open folder in Default File Manager Use Index Search For Path Search Indexing Options Search: diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pl.xaml index 58dc1d33b..d42f1067e 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pl.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pl.xaml @@ -16,6 +16,8 @@ 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 Explorer Alternative Error occurred during search: {0} + Could not open folder + Could not open file Usuń @@ -32,6 +34,7 @@ Shell Path Index Search Excluded Paths Use search result's location as the working directory of the executable + Hit Enter to open folder in Default File Manager Use Index Search For Path Search Indexing Options Search: diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-br.xaml index f1c227e4c..4b8865b84 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-br.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-br.xaml @@ -16,6 +16,8 @@ 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 Explorer Alternative Error occurred during search: {0} + Could not open folder + Could not open file Apagar @@ -23,7 +25,7 @@ Adicionar General Setting Customise Action Keywords - Quick Access Links + Links de Acesso Rápido Everything Setting Sort Option: Everything Path: @@ -32,9 +34,10 @@ Shell Path Index Search Excluded Paths Use search result's location as the working directory of the executable + Hit Enter to open folder in Default File Manager Use Index Search For Path Search Indexing Options - Search: + Pesquisar: Path Search: File Content Search: Index Search: @@ -55,7 +58,7 @@ Open Windows Index Option - Explorer + Explorador Find and manage files and folders via Windows Search or Everything @@ -65,13 +68,13 @@ Copy path Copy path of current item to clipboard - Copy + Copiar Copy current file to clipboard Copy current folder to clipboard Apagar Permanently delete current file Permanently delete current folder - Path: + Caminho: Delete the selected Run as different user Run the selected using a different user account @@ -108,7 +111,7 @@ Warning: Everything service is not running Error while querying Everything Sort By - Name + Nome Path Tamanho Extension diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml index 89939639b..b3d772498 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml @@ -16,6 +16,8 @@ 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 Ocorreu um erro ao pesquisar: {0} + Não foi possível abrir a pasta + Não foi possível abrir o ficheiro Eliminar @@ -32,6 +34,7 @@ Caminho da consola Caminhos excluídos do índice de pesquisa Utilizar localização do resultado da pesquisa como pasta de trabalho do executável + Toque Enter para abrir a pasta no gestor de ficheiros Utilizar índice de pesquisa para o caminho Opções de indexação Pesquisar: diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ru.xaml index 6f192d3c1..73bd620e9 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ru.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ru.xaml @@ -2,13 +2,13 @@ - Please make a selection first + Сначала отметьте что-нибудь Please select a folder link - Are you sure you want to delete {0}? - Are you sure you want to permanently delete this file? - Are you sure you want to permanently delete this file/folder? - Deletion successful - Successfully deleted {0} + Вы уверены, что хотите удалить {0}? + Вы действительно хотите безвозвратно удалить этот файл? + Вы действительно хотите безвозвратно удалить этот файл/папку? + Удаление завершено + Успешно удалено {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 @@ -16,6 +16,8 @@ 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 Explorer Alternative Error occurred during search: {0} + Could not open folder + Could not open file Удалить @@ -32,6 +34,7 @@ Shell Path Index Search Excluded Paths Use search result's location as the working directory of the executable + Hit Enter to open folder in Default File Manager Use Index Search For Path Search Indexing Options Search: diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml index ee6357eda..3de63546b 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml @@ -16,6 +16,8 @@ Upozornenie bolo vypnuté. Chceli by ste ako alternatívu na vyhľadávanie súborov a priečinkov nainštalovať plugin Everything?{0}{0}Ak chcete nainštalovať plugin Everything, zvoľte 'Áno', pre návrat zvoľte 'Nie' Alternatíva pre Prieskumníka Počas vyhľadávania došlo k chybe: {0} + Nepodarilo sa otvoriť priečinok + Nepodarilo sa otvoriť súbor Odstrániť @@ -32,6 +34,7 @@ Cesta k príkazovému riadku Vylúčené umiestnenia indexovania Použiť umiestnenie výsledku vyhľadávania ako pracovný priečinok spustiteľného súboru + Stlačením klávesu Enter otvoríte priečinok v predvolenom správcovi súborov Na vyhľadanie cesty použiť vyhľadávanie v indexe Možnosti indexovania Vyhľadávanie: diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr.xaml index 2e30fbce1..38aa39f94 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr.xaml @@ -16,6 +16,8 @@ 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 Explorer Alternative Error occurred during search: {0} + Could not open folder + Could not open file Obriši @@ -32,6 +34,7 @@ Shell Path Index Search Excluded Paths Use search result's location as the working directory of the executable + Hit Enter to open folder in Default File Manager Use Index Search For Path Search Indexing Options Search: diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/tr.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/tr.xaml index 8b4112dc3..b91297563 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/tr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/tr.xaml @@ -16,6 +16,8 @@ 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 Explorer Alternative Error occurred during search: {0} + Could not open folder + Could not open file Sil @@ -32,6 +34,7 @@ Shell Path Index Search Excluded Paths Programın çalışma klasörü olarak sonuç klasörünü kullan + Hit Enter to open folder in Default File Manager Use Index Search For Path Search Indexing Options Search: diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/uk-UA.xaml index a842939e3..6d5ca1bb4 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/uk-UA.xaml @@ -16,6 +16,8 @@ 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 Explorer Alternative Error occurred during search: {0} + Could not open folder + Could not open file Видалити @@ -32,6 +34,7 @@ Shell Path Index Search Excluded Paths Use search result's location as the working directory of the executable + Hit Enter to open folder in Default File Manager Use Index Search For Path Search Indexing Options Search: diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-cn.xaml index 4d451881b..15dc9cea4 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-cn.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-cn.xaml @@ -16,6 +16,8 @@ 警告消息已关闭。 作为搜索文件和文件夹的一个替代办法,你想要安装 Everything 插件吗?{0}{0}选择 '是'安装Everything插件',或者'否' 退出 资源管理器选项 搜索时发生错误:{0} + 无法打开文件夹 + 无法打开文件 删除 @@ -32,6 +34,7 @@ Shell 路径 索引搜索排除的路径 使用搜索结果的位置作为应用程序的工作目录 + 点击回车在默认文件管理器中打开文件夹 使用索引进行路径搜索 索引选项 搜索: diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml index e24b7288d..d04bd8edd 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml @@ -7,8 +7,8 @@ 你確認要刪除{0}嗎? Are you sure you want to permanently delete this file? Are you sure you want to permanently delete this file/folder? - Deletion successful - Successfully deleted {0} + 成功刪除 + 已成功刪除 {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 @@ -16,6 +16,8 @@ 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 Explorer Alternative Error occurred during search: {0} + Could not open folder + Could not open file 刪除 @@ -23,7 +25,7 @@ 新增 General Setting Customise Action Keywords - Quick Access Links + 快速訪問連結 Everything Setting Sort Option: Everything Path: @@ -32,13 +34,14 @@ Shell Path Index Search Excluded Paths 使用程式所在目錄作為工作目錄 + Hit Enter to open folder in Default File Manager Use Index Search For Path Search 索引選項 搜尋: Path Search: File Content Search: Index Search: - Quick Access: + 快速存取: Current Action Keyword 已啟用 @@ -56,10 +59,10 @@ 檔案總管 - Find and manage files and folders via Windows Search or Everything + 透過 Windows 搜尋或 Everything 搜尋和管理檔案和資料夾 - Ctrl + Enter to open the directory + Ctrl + Enter 以開啟該目錄。 Ctrl + Enter to open the containing folder @@ -88,13 +91,13 @@ Failed to open Windows Indexing Options Add to Quick Access Add current item to Quick Access - Successfully Added + 添加成功 Successfully added to Quick Access Successfully Removed Successfully removed from Quick Access Add to Quick Access so it can be opened with Explorer's Search Activation action keyword - Remove from Quick Access - Remove from Quick Access + 從快速訪問中移除 + 從快速訪問中移除 Remove current item from Quick Access Show Windows Context Menu @@ -133,7 +136,7 @@ 成功安裝 Everything 服務 Failed to automatically install Everything service. Please manually install it from https://www.voidtools.com 點此開始 - Unable to find an Everything installation, would you like to manually select a location?{0}{0}Click no and Everything will be automatically installed for you + 無法找到任何已安裝的 Everything,您想手動選擇位置嗎?{0}{0}點擊不 Everything 將會自動為您安裝。 Do you want to enable content search for Everything? It can be very slow without index (which is only supported in Everything v1.5+) diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingAPI.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingAPI.cs index 3efd09c4d..e618b5c36 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingAPI.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingAPI.cs @@ -17,7 +17,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything { private const int BufferSize = 4096; - private static SemaphoreSlim _semaphore = new(1, 1); + private static readonly SemaphoreSlim _semaphore = new(1, 1); // cached buffer to remove redundant allocations. private static readonly StringBuilder buffer = new(BufferSize); @@ -34,6 +34,9 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything InvalidCallError } + const uint EVERYTHING_REQUEST_FULL_PATH_AND_FILE_NAME = 0x00000004u; + const uint EVERYTHING_REQUEST_RUN_COUNT = 0x00000400u; + /// /// Checks whether the sort option is Fast Sort. /// @@ -78,7 +81,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything if (option.MaxCount < 0) throw new ArgumentOutOfRangeException(nameof(option.MaxCount), option.MaxCount, "MaxCount must be greater than or equal to 0"); - + await _semaphore.WaitAsync(token); @@ -112,6 +115,17 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything EverythingApiDllImport.Everything_SetSort(option.SortOption); EverythingApiDllImport.Everything_SetMatchPath(option.IsFullPathSearch); + + if (option.SortOption == SortOption.RUN_COUNT_DESCENDING) + { + EverythingApiDllImport.Everything_SetRequestFlags(EVERYTHING_REQUEST_FULL_PATH_AND_FILE_NAME | EVERYTHING_REQUEST_RUN_COUNT); + } + else + { + EverythingApiDllImport.Everything_SetRequestFlags(EVERYTHING_REQUEST_FULL_PATH_AND_FILE_NAME); + } + + if (token.IsCancellationRequested) yield break; @@ -132,10 +146,12 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything var result = new SearchResult { + // todo the types are wrong. Everything expects uint everywhere, but we send int just above/below. how to fix? Is EverythingApiDllImport autogenerated or handmade? FullPath = buffer.ToString(), Type = EverythingApiDllImport.Everything_IsFolderResult(idx) ? ResultType.Folder : EverythingApiDllImport.Everything_IsFileResult(idx) ? ResultType.File : - ResultType.Volume + ResultType.Volume, + Score = (int)EverythingApiDllImport.Everything_GetResultRunCount( (uint)idx) }; yield return result; @@ -172,5 +188,19 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything throw new ArgumentOutOfRangeException(); } } + + public static async Task IncrementRunCounterAsync(string fileOrFolder) + { + await _semaphore.WaitAsync(TimeSpan.FromSeconds(1)); + try + { + _ = EverythingApiDllImport.Everything_IncRunCountFromFileName(fileOrFolder); + } + catch (Exception) + { + /*ignored*/ + } + finally { _semaphore.Release(); } + } } } diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingSearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingSearchManager.cs index 344707892..2bb9a73c2 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingSearchManager.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingSearchManager.cs @@ -39,6 +39,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything Main.Context.API.GetTranslation("flowlauncher_plugin_everything_sdk_issue")); } } + private async ValueTask ClickToInstallEverythingAsync(ActionContext _) { var installedPath = await EverythingDownloadHelper.PromptDownloadIfNotInstallAsync(Settings.EverythingInstalledPath, Main.Context.API); @@ -68,8 +69,8 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything await foreach (var result in EverythingApi.SearchAsync(option, token)) yield return result; } - public async IAsyncEnumerable ContentSearchAsync(string plainSearch, - string contentSearch, + + public async IAsyncEnumerable ContentSearchAsync(string plainSearch, string contentSearch, [EnumeratorCancellation] CancellationToken token) { await ThrowIfEverythingNotAvailableAsync(token); @@ -93,8 +94,8 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything var option = new EverythingSearchOption(plainSearch, Settings.SortOption, - true, - contentSearch, + IsContentSearch: true, + ContentSearchKeyword: contentSearch, IsFullPathSearch: Settings.EverythingSearchFullPath); await foreach (var result in EverythingApi.SearchAsync(option, token)) @@ -102,6 +103,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything yield return result; } } + public async IAsyncEnumerable EnumerateAsync(string path, string search, bool recursive, [EnumeratorCancellation] CancellationToken token) { await ThrowIfEverythingNotAvailableAsync(token); @@ -116,9 +118,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything IsFullPathSearch: Settings.EverythingSearchFullPath); await foreach (var result in EverythingApi.SearchAsync(option, token)) - { yield return result; - } } } } diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/SortOption.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/SortOption.cs index 434afd1b4..c57e3fe4a 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/SortOption.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/SortOption.cs @@ -27,7 +27,6 @@ namespace Flow.Launcher.Plugin.Everything.Everything ATTRIBUTES_DESCENDING = 16u, FILE_LIST_FILENAME_ASCENDING = 17u, FILE_LIST_FILENAME_DESCENDING = 18u, - RUN_COUNT_ASCENDING = 19u, RUN_COUNT_DESCENDING = 20u, DATE_RECENTLY_CHANGED_ASCENDING = 21u, DATE_RECENTLY_CHANGED_DESCENDING = 22u, diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs index ed4f39735..83c173ac6 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs @@ -7,6 +7,8 @@ using System.IO; using System.Linq; using System.Threading.Tasks; using System.Windows; +using Flow.Launcher.Plugin.Explorer.Search.Everything; +using System.Windows.Input; namespace Flow.Launcher.Plugin.Explorer.Search { @@ -37,13 +39,13 @@ namespace Flow.Launcher.Plugin.Explorer.Search var keyword = usePathSearchActionKeyword ? pathSearchActionKeyword : searchActionKeyword; - var formatted_path = path; + var formattedPath = path; if (type == ResultType.Folder) // the separator is needed so when navigating the folder structure contents of the folder are listed - formatted_path = path.EndsWith(Constants.DirectorySeparator) ? path : path + Constants.DirectorySeparator; + formattedPath = path.EndsWith(Constants.DirectorySeparator) ? path : path + Constants.DirectorySeparator; - return $"{keyword}{formatted_path}"; + return $"{keyword}{formattedPath}"; } public static string GetAutoCompleteText(string title, Query query, string path, ResultType resultType) @@ -57,10 +59,10 @@ namespace Flow.Launcher.Plugin.Explorer.Search { return result.Type switch { - ResultType.Folder or ResultType.Volume => CreateFolderResult(Path.GetFileName(result.FullPath), - result.FullPath, result.FullPath, query, 0, result.WindowsIndexed), - ResultType.File => CreateFileResult( - result.FullPath, query, 0, result.WindowsIndexed), + ResultType.Folder or ResultType.Volume => + CreateFolderResult(Path.GetFileName(result.FullPath), result.FullPath, result.FullPath, query, result.Score, result.WindowsIndexed), + ResultType.File => + CreateFileResult(result.FullPath, query, result.Score, result.WindowsIndexed), _ => throw new ArgumentOutOfRangeException() }; } @@ -77,33 +79,61 @@ namespace Flow.Launcher.Plugin.Explorer.Search CopyText = path, Action = c => { - if (c.SpecialKeyState.CtrlPressed || (!Settings.PathSearchKeywordEnabled && !Settings.SearchActionKeywordEnabled)) + // open folder + if (c.SpecialKeyState.ToModifierKeys() == (ModifierKeys.Control | ModifierKeys.Shift)) { try { - Context.API.OpenDirectory(path); + OpenFolder(path); return true; } catch (Exception ex) { - MessageBox.Show(ex.Message, "Could not start " + path); + MessageBox.Show(ex.Message, Context.API.GetTranslation("plugin_explorer_opendir_error")); + return false; + } + } + // Open containing folder + if (c.SpecialKeyState.ToModifierKeys() == ModifierKeys.Control) + { + try + { + Context.API.OpenDirectory(Path.GetDirectoryName(path), path); + return true; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, Context.API.GetTranslation("plugin_explorer_opendir_error")); return false; } } - Context.API.ChangeQuery(GetPathWithActionKeyword(path, ResultType.Folder, query.ActionKeyword)); + // If path search is disabled just open it in file manager + if (Settings.DefaultOpenFolderInFileManager || (!Settings.PathSearchKeywordEnabled && !Settings.SearchActionKeywordEnabled)) + { + try + { + OpenFolder(path); + return true; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, Context.API.GetTranslation("plugin_explorer_opendir_error")); + return false; + } + } + else + { + // or make this folder the current query + Context.API.ChangeQuery(GetPathWithActionKeyword(path, ResultType.Folder, query.ActionKeyword)); + } return false; }, Score = score, TitleToolTip = InternationalizationManager.Instance.GetTranslation("plugin_explorer_plugin_ToolTipOpenDirectory"), SubTitleToolTip = path, - ContextData = new SearchResult - { - Type = ResultType.Folder, - FullPath = path, - WindowsIndexed = windowsIndexed - } + ContextData = new SearchResult { Type = ResultType.Folder, FullPath = path, WindowsIndexed = windowsIndexed } }; } @@ -112,7 +142,6 @@ namespace Flow.Launcher.Plugin.Explorer.Search var progressBarColor = "#26a0da"; var title = string.Empty; // hide title when use progress bar, var driveLetter = path[..1].ToUpper(); - var driveName = driveLetter + ":\\"; DriveInfo drv = new DriveInfo(driveLetter); var freespace = ToReadableSize(drv.AvailableFreeSpace, 2); var totalspace = ToReadableSize(drv.TotalSize, 2); @@ -133,19 +162,14 @@ namespace Flow.Launcher.Plugin.Explorer.Search Score = 500, ProgressBar = progressValue, ProgressBarColor = progressBarColor, - Action = c => + Action = _ => { - Context.API.OpenDirectory(path); + OpenFolder(path); return true; }, TitleToolTip = path, SubTitleToolTip = path, - ContextData = new SearchResult - { - Type = ResultType.Volume, - FullPath = path, - WindowsIndexed = windowsIndexed - } + ContextData = new SearchResult { Type = ResultType.Volume, FullPath = path, WindowsIndexed = windowsIndexed } }; } @@ -153,7 +177,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search { int mok = 0; double drvSize = pDrvSize; - string Space = "Byte"; + string uom = "Byte"; // Unit Of Measurement while (drvSize > 1024.0) { @@ -162,23 +186,23 @@ namespace Flow.Launcher.Plugin.Explorer.Search } if (mok == 1) - Space = "KB"; + uom = "KB"; else if (mok == 2) - Space = " MB"; + uom = " MB"; else if (mok == 3) - Space = " GB"; + uom = " GB"; else if (mok == 4) - Space = " TB"; + uom = " TB"; - var returnStr = $"{Convert.ToInt32(drvSize)}{Space}"; + var returnStr = $"{Convert.ToInt32(drvSize)}{uom}"; if (mok != 0) { returnStr = pi switch { - 1 => $"{drvSize:F1}{Space}", - 2 => $"{drvSize:F2}{Space}", - 3 => $"{drvSize:F3}{Space}", - _ => $"{Convert.ToInt32(drvSize)}{Space}" + 1 => $"{drvSize:F1}{uom}", + 2 => $"{drvSize:F2}{uom}", + 3 => $"{drvSize:F3}{uom}", + _ => $"{Convert.ToInt32(drvSize)}{uom}" }; } @@ -201,24 +225,18 @@ namespace Flow.Launcher.Plugin.Explorer.Search CopyText = folderPath, Action = _ => { - Context.API.OpenDirectory(folderPath); + OpenFolder(folderPath); return true; }, - ContextData = new SearchResult - { - Type = ResultType.Folder, - FullPath = folderPath, - WindowsIndexed = windowsIndexed - } + ContextData = new SearchResult { Type = ResultType.Folder, FullPath = folderPath, WindowsIndexed = windowsIndexed } }; } internal static Result CreateFileResult(string filePath, Query query, int score = 0, bool windowsIndexed = false) { - Result.PreviewInfo preview = IsMedia(Path.GetExtension(filePath)) ? new Result.PreviewInfo - { - IsMedia = true, PreviewImagePath = filePath, - } : Result.PreviewInfo.Default; + Result.PreviewInfo preview = IsMedia(Path.GetExtension(filePath)) + ? new Result.PreviewInfo { IsMedia = true, PreviewImagePath = filePath, } + : Result.PreviewInfo.Default; var title = Path.GetFileName(filePath); @@ -236,70 +254,59 @@ namespace Flow.Launcher.Plugin.Explorer.Search { try { - if (File.Exists(filePath) && c.SpecialKeyState.CtrlPressed && c.SpecialKeyState.ShiftPressed) + if (c.SpecialKeyState.ToModifierKeys() == (ModifierKeys.Control | ModifierKeys.Shift)) { - _ = Task.Run(() => - { - try - { - Process.Start(new ProcessStartInfo - { - FileName = filePath, - UseShellExecute = true, - WorkingDirectory = Settings.UseLocationAsWorkingDir ? Path.GetDirectoryName(filePath) : string.Empty, - Verb = "runas", - }); - } - catch (Exception e) - { - MessageBox.Show(e.Message, "Could not start " + filePath); - } - }); + OpenFile(filePath, Settings.UseLocationAsWorkingDir ? Path.GetDirectoryName(filePath) : string.Empty, true); } - else if (c.SpecialKeyState.CtrlPressed) + else if (c.SpecialKeyState.ToModifierKeys() == ModifierKeys.Control) { - Context.API.OpenDirectory(Path.GetDirectoryName(filePath), filePath); + OpenFolder(filePath, filePath); } else { - FilesFolders.OpenPath(filePath); + OpenFile(filePath, Settings.UseLocationAsWorkingDir ? Path.GetDirectoryName(filePath) : string.Empty); } } catch (Exception ex) { - MessageBox.Show(ex.Message, "Could not start " + filePath); + MessageBox.Show(ex.Message, Context.API.GetTranslation("plugin_explorer_openfile_error")); } return true; }, TitleToolTip = InternationalizationManager.Instance.GetTranslation("plugin_explorer_plugin_ToolTipOpenContainingFolder"), SubTitleToolTip = filePath, - ContextData = new SearchResult - { - Type = ResultType.File, - FullPath = filePath, - WindowsIndexed = windowsIndexed - } + ContextData = new SearchResult { Type = ResultType.File, FullPath = filePath, WindowsIndexed = windowsIndexed } }; return result; } - public static bool IsMedia(string extension) + private static bool IsMedia(string extension) { - if (string.IsNullOrEmpty(extension)) - { - return false; - } - else - { - return MediaExtensions.Contains(extension.ToLowerInvariant()); - } + if (string.IsNullOrEmpty(extension)) { return false; } + + return MediaExtensions.Contains(extension.ToLowerInvariant()); } - public static readonly string[] MediaExtensions = + private static void OpenFile(string filePath, string workingDir = "", bool asAdmin = false) { - ".jpg", ".png", ".avi", ".mkv", ".bmp", ".gif", ".wmv", ".mp3", ".flac", ".mp4" - }; + IncrementEverythingRunCounterIfNeeded(filePath); + FilesFolders.OpenFile(filePath, workingDir, asAdmin); + } + + private static void OpenFolder(string folderPath, string fileNameOrFilePath = null) + { + IncrementEverythingRunCounterIfNeeded(folderPath); + Context.API.OpenDirectory(folderPath, fileNameOrFilePath); + } + + private static void IncrementEverythingRunCounterIfNeeded(string fileOrFolder) + { + if (Settings.EverythingEnabled) + _ = Task.Run(() => EverythingApi.IncrementRunCounterAsync(fileOrFolder)); + } + + private static readonly string[] MediaExtensions = { ".jpg", ".png", ".avi", ".mkv", ".bmp", ".gif", ".wmv", ".mp3", ".flac", ".mp4" }; } public enum ResultType diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs index 51c4c3d9d..f58ac43e8 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs @@ -204,7 +204,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search { directoryResult = Settings.PathEnumerator.EnumerateAsync( - query.Search[..recursiveIndicatorIndex], + query.Search[..recursiveIndicatorIndex].Trim(), query.Search[(recursiveIndicatorIndex + 1)..], true, token); diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Settings.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Settings.cs index 339eaaaaa..4077e2fcc 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Settings.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Settings.cs @@ -32,6 +32,7 @@ namespace Flow.Launcher.Plugin.Explorer public bool ShowWindowsContextMenu { get; set; } = true; + public bool DefaultOpenFolderInFileManager { get; set; } = false; public string SearchActionKeyword { get; set; } = Query.GlobalPluginWildcardSign; diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml index d37772f7d..b0708b793 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml @@ -168,6 +168,11 @@ HorizontalAlignment="Left" Content="{DynamicResource plugin_explorer_use_location_as_working_dir}" IsChecked="{Binding Settings.UseLocationAsWorkingDir}" /> + @@ -178,7 +183,7 @@ - + + SelectedItem="{Binding SelectedIndexSearchEngine}" /> + SelectedItem="{Binding SelectedContentSearchEngine}" /> @@ -348,15 +353,11 @@ Header="{DynamicResource plugin_explorer_everything_setting_header}" Style="{DynamicResource ExplorerTabItem}"> - - - - - + @@ -547,4 +548,4 @@ - \ No newline at end of file + diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json b/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json index c53ebb888..cd6a0986b 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json @@ -10,7 +10,7 @@ "Name": "Explorer", "Description": "Find and manage files and folders via Windows Search or Everything", "Author": "Jeremy Wu", - "Version": "3.0.1", + "Version": "3.1.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Explorer.dll", diff --git a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/ru.xaml index 893948d3d..d0fbf1a95 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/ru.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/ru.xaml @@ -1,9 +1,9 @@  - Activate {0} plugin action keyword + Активировать {0} ключевое слово действия плагина - Plugin Indicator - Provides plugins action words suggestions + Индикатор плагинов + Предоставляет предложения слов действия плагинов diff --git a/Plugins/Flow.Launcher.Plugin.PluginIndicator/plugin.json b/Plugins/Flow.Launcher.Plugin.PluginIndicator/plugin.json index f4a21f8e8..e8219c9d1 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginIndicator/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.PluginIndicator/plugin.json @@ -4,7 +4,7 @@ "Name": "Plugin Indicator", "Description": "Provides plugin action keyword suggestions", "Author": "qianlifeng", - "Version": "3.0.0", + "Version": "3.0.1", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.PluginIndicator.dll", diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/ContextMenu.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/ContextMenu.cs index 37f0a126e..73627592a 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/ContextMenu.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/ContextMenu.cs @@ -53,7 +53,7 @@ namespace Flow.Launcher.Plugin.PluginsManager { // standard UrlSourceCode format in PluginsManifest's plugins.json file: https://github.com/jjw24/Flow.Launcher.Plugin.Putty/tree/master var link = pluginManifestInfo.UrlSourceCode.StartsWith("https://github.com") - ? Regex.Replace(pluginManifestInfo.UrlSourceCode, @"\/tree\/\w+$", "") + "/issues/new/choose" + ? Regex.Replace(pluginManifestInfo.UrlSourceCode, @"\/tree\/\w+$", "") + "/issues" : pluginManifestInfo.UrlSourceCode; Context.API.OpenUrl(link); diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-br.xaml index e1aa21eca..442079498 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-br.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-br.xaml @@ -21,7 +21,7 @@ {0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart. Plugin Update This plugin has an update, would you like to see it? - This plugin is already installed + Este plugin já está instalado Plugin Manifest Download Failed Please check if you can connect to github.com. This error means you may not be able to install or update plugins. Installing from an unknown source diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-tw.xaml index dd636ecef..d39754574 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-tw.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-tw.xaml @@ -17,7 +17,7 @@ 安裝外掛時發生錯誤 嘗試安裝 {0} 時發生錯誤 無可用更新 - All plugins are up to date + 所有插件均為最新版本 {0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart. 外掛更新 This plugin has an update, would you like to see it? diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json b/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json index 179add756..ccc219c7e 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": "3.0.1", + "Version": "3.0.2", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.PluginsManager.dll", diff --git a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/ru.xaml index c4cc85463..26963bddb 100644 --- a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/ru.xaml +++ b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/ru.xaml @@ -1,11 +1,11 @@  - Process Killer - Kill running processes from Flow Launcher + Удалятор процессов + Удаление запущенных процессов из Flow Launcher - kill all instances of "{0}" - kill {0} processes - kill all instances + удалить все экземпляры «{0}» + удалить {0} процессов + удалить все экземпляры diff --git a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Main.cs b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Main.cs index 19f96aea1..3eff7e398 100644 --- a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Main.cs @@ -1,12 +1,7 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Diagnostics; -using System.Dynamic; -using System.Runtime.InteropServices; using Flow.Launcher.Infrastructure; -using Flow.Launcher.Infrastructure.Logger; +using System.Threading.Tasks; namespace Flow.Launcher.Plugin.ProcessKiller { @@ -23,13 +18,7 @@ namespace Flow.Launcher.Plugin.ProcessKiller public List Query(Query query) { - var termToSearch = query.Search; - - var processlist = processHelper.GetMatchingProcesses(termToSearch); - - return !processlist.Any() - ? null - : CreateResultsFromProcesses(processlist, termToSearch); + return CreateResultsFromQuery(query); } public string GetTranslatedPluginTitle() @@ -50,7 +39,7 @@ namespace Flow.Launcher.Plugin.ProcessKiller // get all non-system processes whose file path matches that of the given result (processPath) var similarProcesses = processHelper.GetSimilarProcesses(processPath); - if (similarProcesses.Count() > 0) + if (similarProcesses.Any()) { menuOptions.Add(new Result { @@ -72,8 +61,16 @@ namespace Flow.Launcher.Plugin.ProcessKiller return menuOptions; } - private List CreateResultsFromProcesses(List processlist, string termToSearch) + private List CreateResultsFromQuery(Query query) { + string termToSearch = query.Search; + var processlist = processHelper.GetMatchingProcesses(termToSearch); + + if (!processlist.Any()) + { + return null; + } + var results = new List(); foreach (var pr in processlist) @@ -92,6 +89,7 @@ namespace Flow.Launcher.Plugin.ProcessKiller Action = (c) => { processHelper.TryKill(p); + _ = DelayAndReQueryAsync(query.RawQuery); // Re-query after killing process to refresh process list return true; } }); @@ -116,7 +114,7 @@ namespace Flow.Launcher.Plugin.ProcessKiller { processHelper.TryKill(p.Process); } - + _ = DelayAndReQueryAsync(query.RawQuery); // Re-query after killing process to refresh process list return true; } }); @@ -124,5 +122,11 @@ namespace Flow.Launcher.Plugin.ProcessKiller return sortedResults; } + + private static async Task DelayAndReQueryAsync(string query) + { + await Task.Delay(500); + _context.API.ChangeQuery(query, true); + } } } diff --git a/Plugins/Flow.Launcher.Plugin.ProcessKiller/ProcessHelper.cs b/Plugins/Flow.Launcher.Plugin.ProcessKiller/ProcessHelper.cs index 16a8687e6..0932955d6 100644 --- a/Plugins/Flow.Launcher.Plugin.ProcessKiller/ProcessHelper.cs +++ b/Plugins/Flow.Launcher.Plugin.ProcessKiller/ProcessHelper.cs @@ -79,7 +79,7 @@ namespace Flow.Launcher.Plugin.ProcessKiller } catch (Exception e) { - Log.Exception($"|ProcessKiller.CreateResultsFromProcesses|Failed to kill process {p.ProcessName}", e); + Log.Exception($"{nameof(ProcessHelper)}", $"Failed to kill process {p.ProcessName}", e); } } diff --git a/Plugins/Flow.Launcher.Plugin.ProcessKiller/plugin.json b/Plugins/Flow.Launcher.Plugin.ProcessKiller/plugin.json index 1a73d24e1..442724055 100644 --- a/Plugins/Flow.Launcher.Plugin.ProcessKiller/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.ProcessKiller/plugin.json @@ -4,7 +4,7 @@ "Name":"Process Killer", "Description":"Kill running processes from Flow", "Author":"Flow-Launcher", - "Version":"3.0.0", + "Version":"3.0.1", "Language":"csharp", "Website":"https://github.com/Flow-Launcher/Flow.Launcher.Plugin.ProcessKiller", "IcoPath":"Images\\app.png", diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/pt-br.xaml index f9cbcb9f9..b943ffe97 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/pt-br.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/pt-br.xaml @@ -6,15 +6,15 @@ Apagar Editar Adicionar - Name + Nome Enable Enabled - Disable + Desativar Status Enabled Disabled - Location - All Programs + Local + Todos os Programas File Type Reindex Indexing @@ -35,8 +35,8 @@ Suffixes Max Depth - Directory - Browse + Diretório + Navegar File Suffixes: Maximum Search Depth (-1 is unlimited): @@ -78,7 +78,7 @@ Invalid Path Customized Explorer - Args + Parâmetros You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is available. Enter the customized args you want to add for your customized explorer. %s for parent directory, %f for full path (which only works for win32). Check the explorer's website for details. diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/ru.xaml index d0ec4eee1..9fdb70d4f 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/ru.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/ru.xaml @@ -2,91 +2,91 @@ - Reset Default + Сбросить по умолчанию Удалить Редактировать Добавить - Name - Enable - Enabled - Disable - Status - Enabled - Disabled - Location - All Programs - File Type - Reindex - Indexing - Index Sources - Options - UWP Apps - When enabled, Flow will load UWP Applications - Start Menu - When enabled, Flow will load programs from the start menu - Registry - When enabled, Flow will load programs from the registry + Имя + Включить + Включён + Отключить + Состояние + Включён + Отключён + Расположение + Все программы + Тип файла + Повторная индексация + Индексация + Источники индексов + Параметры + Приложения UWP + При включении Flow будет загружать UWP-приложения + Меню «Пуск» + При включении Flow будет загружать программы из меню «Пуск» + Реестр + При включении Flow будет загружать программы из реестра PATH - When enabled, Flow will load programs from the PATH environment variable - Hide app path - For executable files such as UWP or lnk, hide the file path from being visible - Search in Program Description - Flow will search program's description - Suffixes - Max Depth + При включении Flow будет загружать программы из переменной среды PATH + Скрыть путь к приложению + Для исполняемых файлов, таких как UWP или lnk, скрыть путь к файлу от просмотра + Поиск в описании программы + Flow будет искать в описании программ + Суффиксы + Макс. глубина - Directory - Browse - File Suffixes: - Maximum Search Depth (-1 is unlimited): + Каталог + Обзор + Суффиксы файлов: + Максимальная глубина поиска (-1 = неограниченно): - Please select a program source - Are you sure you want to delete the selected program sources? - Another program source with the same location already exists. + Пожалуйста, выберите источник программы + Вы уверены, что хотите удалить выбранные источники программ? + Другой источник программы с таким же расположением уже существует. - Program Source - Edit directory and status of this program source. + Источник программы + Редактирование каталога и состояния этого источника программы. Обновить - Program Plugin will only index files with selected suffixes and .url files with selected protocols. - Successfully updated file suffixes - File suffixes can't be empty - Protocols can't be empty + Программный плагин будет индексировать только файлы с выбранными суффиксами и файлы .url с выбранными протоколами. + Обновление суффиксов файлов выполнено + Суффиксы файлов не могут быть пустыми + Протоколы не могут быть пустыми - File Suffixes - URL Protocols - Steam Games + Суффиксы файлов + Протоколы URL + Игры Steam Epic Games Http/Https - Custom URL Protocols - Custom File Suffixes + Пользовательские протоколы URL + Пользовательские суффиксы файлов - Insert file suffixes you want to index. Suffixes should be separated by ';'. (ex>bat;py) + Вставьте суффиксы файлов, которые вы хотите проиндексировать. Суффиксы должны быть разделены символом «;»,. (ex>bat;py) - Insert protocols of .url files you want to index. Protocols should be separated by ';', and should end with "://". (ex>ftp://;mailto://) + Вставьте протоколы .url файлов, которые вы хотите индексировать. Протоколы должны быть разделены символом «;» и заканчиваться символом «://». (ex>ftp://;mailto://) - Run As Different User - Run As Administrator - Open containing folder - Disable this program from displaying + Запустить от имени другого пользователя + Запустить от имени администратора + Открыть содержащую папку + Отключить отображение этой программы - Program - Search programs in Flow Launcher + Программа + Поиск программ в Flow Launcher - Invalid Path + Неверный путь - Customized Explorer - Args - You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is available. - Enter the customized args you want to add for your customized explorer. %s for parent directory, %f for full path (which only works for win32). Check the explorer's website for details. + Настраиваемый проводник + Аргументы + Вы можете настроить проводник, используемый для открытия папки контейнера, введя переменную окружения проводника, который вы хотите использовать. Будет полезно использовать командную строку для проверки доступности переменной среды. + Введите настраиваемые аргументы, которые вы хотите добавить для вашего настраиваемого проводника. %s для родительского каталога, %f для полного пути (работает только для win32). Подробности смотрите на сайте проводника. Успешно - Error - Successfully disabled this program from displaying in your query - This app is not intended to be run as administrator - Unable to run {0} + Ошибка + Выполнено отключение отображение этой программы в вашем запросе + Это приложение не предназначено для запуска от имени администратора + Не удалось запустить {0} diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs index 8ba3ba800..d5924ba28 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs @@ -14,6 +14,7 @@ using Flow.Launcher.Plugin.SharedModels; using System.Threading.Channels; using System.Xml; using Windows.ApplicationModel.Core; +using System.Windows.Input; namespace Flow.Launcher.Plugin.Program.Programs { @@ -422,12 +423,16 @@ namespace Flow.Launcher.Plugin.Program.Programs ContextData = this, Action = e => { - var elevated = ( - e.SpecialKeyState.CtrlPressed && - e.SpecialKeyState.ShiftPressed && - !e.SpecialKeyState.AltPressed && - !e.SpecialKeyState.WinPressed - ); + // Ctrl + Enter to open containing folder + bool openFolder = e.SpecialKeyState.ToModifierKeys() == ModifierKeys.Control; + if (openFolder) + { + Main.Context.API.OpenDirectory(Location); + return true; + } + + // Ctrl + Shift + Enter to run elevated + bool elevated = e.SpecialKeyState.ToModifierKeys() == (ModifierKeys.Control | ModifierKeys.Shift); bool shouldRunElevated = elevated && CanRunElevated; _ = Task.Run(() => Launch(shouldRunElevated)).ConfigureAwait(false); @@ -459,7 +464,8 @@ namespace Flow.Launcher.Plugin.Program.Programs return true; }, - IcoPath = "Images/folder.png" + IcoPath = "Images/folder.png", + Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\xe838"), } }; @@ -473,7 +479,8 @@ namespace Flow.Launcher.Plugin.Program.Programs Task.Run(() => Launch(true)).ConfigureAwait(false); return true; }, - IcoPath = "Images/cmd.png" + IcoPath = "Images/cmd.png", + Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\xe7ef") }); } diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs index 4afedb9e4..afde1ba1e 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs @@ -16,6 +16,7 @@ using System.Diagnostics.CodeAnalysis; using System.Threading.Channels; using Flow.Launcher.Plugin.Program.Views.Models; using IniParser; +using System.Windows.Input; namespace Flow.Launcher.Plugin.Program.Programs { @@ -169,12 +170,16 @@ namespace Flow.Launcher.Plugin.Program.Programs ContextData = this, Action = c => { - var runAsAdmin = ( - c.SpecialKeyState.CtrlPressed && - c.SpecialKeyState.ShiftPressed && - !c.SpecialKeyState.AltPressed && - !c.SpecialKeyState.WinPressed - ); + // Ctrl + Enter to open containing folder + bool openFolder = c.SpecialKeyState.ToModifierKeys() == ModifierKeys.Control; + if (openFolder) + { + Main.Context.API.OpenDirectory(ParentDirectory, FullPath); + return true; + } + + // Ctrl + Shift + Enter to run as admin + bool runAsAdmin = c.SpecialKeyState.ToModifierKeys() == (ModifierKeys.Control | ModifierKeys.Shift); var info = new ProcessStartInfo { @@ -461,7 +466,10 @@ namespace Flow.Launcher.Plugin.Program.Programs .SelectMany(p => EnumerateProgramsInDir(p, suffixes)) .Distinct(); + var startupPaths = GetStartupPaths(); + var programs = ExceptDisabledSource(allPrograms) + .Where(x => !startupPaths.Any(startup => FilesFolders.PathContains(startup, x))) .Select(x => GetProgramFromPath(x, protocols)); return programs; } @@ -603,13 +611,20 @@ namespace Flow.Launcher.Plugin.Program.Programs private static IEnumerable ProgramsHasher(IEnumerable programs) { + var startMenuPaths = GetStartMenuPaths(); return programs.GroupBy(p => p.ExecutablePath.ToLowerInvariant()) .AsParallel() .SelectMany(g => { + // is shortcut and in start menu + var startMenu = g.Where(g => g.LnkResolvedPath != null && startMenuPaths.Any(x => FilesFolders.PathContains(x, g.FullPath))).ToList(); + if (startMenu.Any()) + return startMenu.Take(1); + + // distinct by description var temp = g.Where(g => !string.IsNullOrEmpty(g.Description)).ToList(); if (temp.Any()) - return DistinctBy(temp, x => x.Description); + return temp.Take(1); return g.Take(1); }); } @@ -705,6 +720,14 @@ namespace Flow.Launcher.Plugin.Program.Programs return new[] { userStartMenu, commonStartMenu }; } + private static IEnumerable GetStartupPaths() + { + var userStartup = Environment.GetFolderPath(Environment.SpecialFolder.Startup); + var commonStartup = Environment.GetFolderPath(Environment.SpecialFolder.CommonStartup); + + return new[] { userStartup, commonStartup }; + } + public static void WatchProgramUpdate(Settings settings) { var paths = new List(); diff --git a/Plugins/Flow.Launcher.Plugin.Program/plugin.json b/Plugins/Flow.Launcher.Plugin.Program/plugin.json index 2acf255eb..f407dba85 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": "3.0.0", + "Version": "3.1.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Program.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/pt-br.xaml index 87eb96609..44981ee2f 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/pt-br.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/pt-br.xaml @@ -1,15 +1,15 @@  - Replace Win+R - Do not close Command Prompt after command execution - Always run as administrator + Substituir Win+R + Não feche o Prompt de Comando após a execução do comando + Sempre executar como administrador Run as different user - Shell + Console Allows to execute system commands from Flow Launcher. Commands should start with > this command has been executed {0} times execute command through command shell Run As Administrator - Copy the command + Copiar o comando Only show number of most used commands: diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/zh-tw.xaml index 0890e990f..8ca3f6dc7 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/zh-tw.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/zh-tw.xaml @@ -3,7 +3,7 @@ 取代 Win+R 執行後不關閉命令提示字元視窗 - Always run as administrator + 一律以系統管理員身分執行 Run as different user 命令提示字元 提供從 Flow Launcher 中執行命令提示字元的功能,指令應該以>開頭 diff --git a/Plugins/Flow.Launcher.Plugin.Shell/plugin.json b/Plugins/Flow.Launcher.Plugin.Shell/plugin.json index 6b9e2e5e7..64f257d80 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": "3.0.1", + "Version": "3.0.2", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Shell.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-br.xaml index 72cf8aac2..a78a71c56 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-br.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-br.xaml @@ -2,23 +2,23 @@ - Command - Description + Comando + Descrição - Shutdown Computer - Restart Computer + Desligar o Computador + Reiniciar o Computador 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 - Restart Flow Launcher + Encerrar sessão + Bloquear o computador + Fechar Flow Launcher + Reiniciar Flow Launcher Tweak Flow Launcher's settings Put computer to sleep Empty recycle bin Open recycle bin Indexing Options - Hibernate computer - Save all Flow Launcher settings + Hibernar computador + Salvar todas as configurações do Flow Launcher Refreshes plugin data with new content Open Flow Launcher's log location Check for new Flow Launcher update diff --git a/Plugins/Flow.Launcher.Plugin.Sys/plugin.json b/Plugins/Flow.Launcher.Plugin.Sys/plugin.json index 842229e8e..2d91bfedf 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": "3.0.1", + "Version": "3.0.2", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Sys.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Url/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.Url/Languages/pt-br.xaml index 418731021..b9b080852 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/Languages/pt-br.xaml +++ b/Plugins/Flow.Launcher.Plugin.Url/Languages/pt-br.xaml @@ -2,16 +2,16 @@ Open search in: - New Window - New Tab + Nova Janela + Nova Aba - Open url:{0} - Can't open url:{0} + Abrir link:{0} + Não é possível abrir o link:{0} URL Open the typed URL from Flow Launcher Please set your browser path: - Choose + Escolha Application(*.exe)|*.exe|All files|*.* diff --git a/Plugins/Flow.Launcher.Plugin.Url/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.Url/Languages/zh-tw.xaml index bf64f3604..3e5fc838c 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/Languages/zh-tw.xaml +++ b/Plugins/Flow.Launcher.Plugin.Url/Languages/zh-tw.xaml @@ -2,16 +2,16 @@ Open search in: - New Window - New Tab + 新增視窗 + 新索引標籤 開啟連結:{0} 無法開啟連結:{0} - URL + 網址 從 Flow Launcher 開啟連結 - Please set your browser path: + 請選擇你的瀏覽器位置: 選擇 - Application(*.exe)|*.exe|All files|*.* + 應用程式(*.exe)|*.exe|檔案|*.* diff --git a/Plugins/Flow.Launcher.Plugin.Url/plugin.json b/Plugins/Flow.Launcher.Plugin.Url/plugin.json index 105e10650..aad6cb0b7 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Url/plugin.json @@ -4,7 +4,7 @@ "Name": "URL", "Description": "Open the typed URL from Flow Launcher", "Author": "qianlifeng", - "Version": "3.0.1", + "Version": "3.0.2", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Url.dll", diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/da.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/da.xaml index b6b1c6f39..096abc5f1 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/da.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/da.xaml @@ -10,6 +10,7 @@ Slet Rediger Tilføj + Enabled Enabled Disabled Confirm diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/de.xaml index 42b432812..859111782 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/de.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/de.xaml @@ -10,6 +10,7 @@ Löschen Bearbeiten Hinzufügen + Aktiviert Aktiviert Disabled Confirm diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml index 1ebd1570b..db42aa7fc 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml @@ -12,6 +12,7 @@ Delete Edit Add + Enabled Enabled Disabled Confirm diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es-419.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es-419.xaml index 1f75685b2..6e992b944 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es-419.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es-419.xaml @@ -10,6 +10,7 @@ Eliminar Editar Añadir + Enabled Enabled Disabled Confirmar diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es.xaml index 63fdae4ee..fefbfaaee 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es.xaml @@ -10,6 +10,7 @@ Eliminar Editar Añadir + Activado Activado Desactivado Confirmar diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/fr.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/fr.xaml index 189c246ba..7f8e027ef 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/fr.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/fr.xaml @@ -10,6 +10,7 @@ Supprimer Modifier Ajouter + Enabled Enabled Disabled Confirm diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/it.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/it.xaml index af1be478e..ef3acd0e5 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/it.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/it.xaml @@ -10,6 +10,7 @@ Cancella Modifica Aggiungi + Enabled Enabled Disabled Confirm diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ja.xaml index 3713b68d8..b5d4df430 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ja.xaml @@ -10,6 +10,7 @@ 削除 編集 追加 + Enabled Enabled Disabled Confirm diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ko.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ko.xaml index 52cc648f7..1f43e20c2 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ko.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ko.xaml @@ -10,6 +10,7 @@ 삭제 편집 추가 + Disabled 확인 diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nb.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nb.xaml index 8a2f42548..62b2a7a4b 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nb.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nb.xaml @@ -10,6 +10,7 @@ Delete Edit Add + Enabled Enabled Disabled Confirm diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nl.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nl.xaml index fbab8b139..fb6fd4353 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nl.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nl.xaml @@ -10,6 +10,7 @@ Verwijder Bewerken Toevoegen + Enabled Enabled Disabled Confirm diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pl.xaml index 80a20d327..ac906df46 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pl.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pl.xaml @@ -10,6 +10,7 @@ Usuń Edytuj Dodaj + Enabled Enabled Disabled Confirm diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-br.xaml index 199ec35e5..b2dedeb60 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-br.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-br.xaml @@ -3,13 +3,14 @@ Search Source Setting Open search in: - New Window - New Tab - Set browser from path: - Choose + Nova Janela + Nova Aba + Definir navegador pelo caminho: + Escolha Apagar Editar Adicionar + Enabled Enabled Disabled Confirm diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-pt.xaml index ef82c822a..56d65e849 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-pt.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-pt.xaml @@ -10,6 +10,7 @@ Eliminar Editar Adicionar + Ativo Ativo Inativo Confirmar diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ru.xaml index fc9bab104..fab878992 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ru.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ru.xaml @@ -10,8 +10,9 @@ Удалить Редактировать Добавить + Enabled Enabled - Disabled + Отключён Confirm Action Keyword URL @@ -32,7 +33,7 @@ Title - Status + Состояние Select Icon Icon Отменить diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sk.xaml index 3ec98073f..e23d12a16 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sk.xaml @@ -10,7 +10,8 @@ Odstrániť Upraviť Pridať - Povolené + Povolené + Zapnuté Vypnuté Potvrdiť Aktivačný príkaz diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sr.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sr.xaml index 8c3d30f36..54ee24376 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sr.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sr.xaml @@ -10,6 +10,7 @@ Obriši Izmeni Dodaj + Enabled Enabled Disabled Confirm diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/tr.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/tr.xaml index d0142ce43..05f3de095 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/tr.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/tr.xaml @@ -10,6 +10,7 @@ Sil Düzenle Ekle + Enabled Enabled Disabled Onayla diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml index 54c76e75f..091102a0a 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml @@ -10,6 +10,7 @@ Видалити Редагувати Додати + Enabled Enabled Disabled Confirm diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/zh-cn.xaml index 98d2ee06b..cd05cf7b8 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/zh-cn.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/zh-cn.xaml @@ -10,6 +10,7 @@ 删除 编辑 添加 + 启用 已启用 已禁用 确认 diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/zh-tw.xaml index 40e789f25..d50d65867 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/zh-tw.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/zh-tw.xaml @@ -1,23 +1,24 @@  - Search Source Setting + 搜尋來源設定 Open search in: - New Window - New Tab + 新增視窗 + 新索引標籤 設定瀏覽器路徑: 選擇 刪除 編輯 新增 + 已啟用 已啟用 Disabled 確定 觸發關鍵字 - URL + 網址 搜尋 啟用搜尋建議 - Autocomplete Data from: + 從以下位置自動填入資料: 請選擇一項 你確認要刪除{0}嗎 If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSource.cs b/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSource.cs index caed3f16c..e489cb19f 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSource.cs +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSource.cs @@ -35,6 +35,9 @@ namespace Flow.Launcher.Plugin.WebSearch } public string Url { get; set; } + + [JsonIgnore] + public bool Status => Enabled; public bool Enabled { get; set; } public SearchSource DeepCopy() diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSourceSetting.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSourceSetting.xaml index 8e41540e1..3df50b3ed 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSourceSetting.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSourceSetting.xaml @@ -8,7 +8,7 @@ Title="{DynamicResource flowlauncher_plugin_websearch_window_title}" Width="550" d:DataContext="{d:DesignInstance vm:SearchSourceViewModel}" - Background="{DynamicResource PopuBGColor}" + Background="{DynamicResource PopupBGColor}" Foreground="{DynamicResource PopupTextColor}" ResizeMode="NoResize" SizeToContent="Height" @@ -179,7 +179,7 @@ HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="14" - Text="{DynamicResource flowlauncher_plugin_websearch_enabled}" /> + Text="{DynamicResource flowlauncher_plugin_websearch_enabled_label}" /> - - - - - - + Header="{DynamicResource flowlauncher_plugin_websearch_action_keyword}"/> - - - - - - + Header="{DynamicResource flowlauncher_plugin_websearch_title}"/> @@ -94,7 +82,7 @@