diff --git a/Flow.Launcher.Infrastructure/NativeMethods.txt b/Flow.Launcher.Infrastructure/NativeMethods.txt index 0e50420b0..2591506c8 100644 --- a/Flow.Launcher.Infrastructure/NativeMethods.txt +++ b/Flow.Launcher.Infrastructure/NativeMethods.txt @@ -57,3 +57,7 @@ LOCALE_TRANSIENT_KEYBOARD1 LOCALE_TRANSIENT_KEYBOARD2 LOCALE_TRANSIENT_KEYBOARD3 LOCALE_TRANSIENT_KEYBOARD4 + +SHParseDisplayName +SHOpenFolderAndSelectItems +CoTaskMemFree diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 024e727ce..0b2b042d4 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -50,6 +50,7 @@ namespace Flow.Launcher.Infrastructure.UserSettings public string SelectPrevPageHotkey { get; set; } = $"PageDown"; public string OpenContextMenuHotkey { get; set; } = $"Ctrl+O"; public string SettingWindowHotkey { get; set; } = $"Ctrl+I"; + public string OpenHistoryHotkey { get; set; } = $"Ctrl+H"; public string CycleHistoryUpHotkey { get; set; } = $"{KeyConstant.Alt} + Up"; public string CycleHistoryDownHotkey { get; set; } = $"{KeyConstant.Alt} + Down"; @@ -173,7 +174,20 @@ namespace Flow.Launcher.Infrastructure.UserSettings } } - public bool ShowHistoryResultsForHomePage { get; set; } = false; + private bool _showHistoryResultsForHomePage = false; + public bool ShowHistoryResultsForHomePage + { + get => _showHistoryResultsForHomePage; + set + { + if (_showHistoryResultsForHomePage != value) + { + _showHistoryResultsForHomePage = value; + OnPropertyChanged(); + } + } + } + public int MaxHistoryResultsToShowForHomePage { get; set; } = 5; public bool AutoRestartAfterChanging { get; set; } = false; @@ -215,8 +229,8 @@ namespace Flow.Launcher.Infrastructure.UserSettings new() { Name = "Files", - Path = "Files", - DirectoryArgument = "-select \"%d\"", + Path = "Files-Stable", + DirectoryArgument = "\"%d\"", FileArgument = "-select \"%f\"" } }; @@ -397,29 +411,31 @@ namespace Flow.Launcher.Infrastructure.UserSettings var list = FixedHotkeys(); // Customizeable hotkeys - if(!string.IsNullOrEmpty(Hotkey)) + if (!string.IsNullOrEmpty(Hotkey)) list.Add(new(Hotkey, "flowlauncherHotkey", () => Hotkey = "")); - if(!string.IsNullOrEmpty(PreviewHotkey)) + if (!string.IsNullOrEmpty(PreviewHotkey)) list.Add(new(PreviewHotkey, "previewHotkey", () => PreviewHotkey = "")); - if(!string.IsNullOrEmpty(AutoCompleteHotkey)) + if (!string.IsNullOrEmpty(AutoCompleteHotkey)) list.Add(new(AutoCompleteHotkey, "autoCompleteHotkey", () => AutoCompleteHotkey = "")); - if(!string.IsNullOrEmpty(AutoCompleteHotkey2)) + if (!string.IsNullOrEmpty(AutoCompleteHotkey2)) list.Add(new(AutoCompleteHotkey2, "autoCompleteHotkey", () => AutoCompleteHotkey2 = "")); - if(!string.IsNullOrEmpty(SelectNextItemHotkey)) + if (!string.IsNullOrEmpty(SelectNextItemHotkey)) list.Add(new(SelectNextItemHotkey, "SelectNextItemHotkey", () => SelectNextItemHotkey = "")); - if(!string.IsNullOrEmpty(SelectNextItemHotkey2)) + if (!string.IsNullOrEmpty(SelectNextItemHotkey2)) list.Add(new(SelectNextItemHotkey2, "SelectNextItemHotkey", () => SelectNextItemHotkey2 = "")); - if(!string.IsNullOrEmpty(SelectPrevItemHotkey)) + if (!string.IsNullOrEmpty(SelectPrevItemHotkey)) list.Add(new(SelectPrevItemHotkey, "SelectPrevItemHotkey", () => SelectPrevItemHotkey = "")); - if(!string.IsNullOrEmpty(SelectPrevItemHotkey2)) + if (!string.IsNullOrEmpty(SelectPrevItemHotkey2)) list.Add(new(SelectPrevItemHotkey2, "SelectPrevItemHotkey", () => SelectPrevItemHotkey2 = "")); - if(!string.IsNullOrEmpty(SettingWindowHotkey)) + if (!string.IsNullOrEmpty(SettingWindowHotkey)) list.Add(new(SettingWindowHotkey, "SettingWindowHotkey", () => SettingWindowHotkey = "")); - if(!string.IsNullOrEmpty(OpenContextMenuHotkey)) + if (!string.IsNullOrEmpty(OpenHistoryHotkey)) + list.Add(new(OpenHistoryHotkey, "OpenHistoryHotkey", () => OpenHistoryHotkey = "")); + if (!string.IsNullOrEmpty(OpenContextMenuHotkey)) list.Add(new(OpenContextMenuHotkey, "OpenContextMenuHotkey", () => OpenContextMenuHotkey = "")); - if(!string.IsNullOrEmpty(SelectNextPageHotkey)) + if (!string.IsNullOrEmpty(SelectNextPageHotkey)) list.Add(new(SelectNextPageHotkey, "SelectNextPageHotkey", () => SelectNextPageHotkey = "")); - if(!string.IsNullOrEmpty(SelectPrevPageHotkey)) + if (!string.IsNullOrEmpty(SelectPrevPageHotkey)) list.Add(new(SelectPrevPageHotkey, "SelectPrevPageHotkey", () => SelectPrevPageHotkey = "")); if (!string.IsNullOrEmpty(CycleHistoryUpHotkey)) list.Add(new(CycleHistoryUpHotkey, "CycleHistoryUpHotkey", () => CycleHistoryUpHotkey = "")); @@ -450,7 +466,6 @@ namespace Flow.Launcher.Infrastructure.UserSettings new("Alt+Home", "HotkeySelectFirstResult"), new("Alt+End", "HotkeySelectLastResult"), new("Ctrl+R", "HotkeyRequery"), - new("Ctrl+H", "ToggleHistoryHotkey"), new("Ctrl+OemCloseBrackets", "QuickWidthHotkey"), new("Ctrl+OemOpenBrackets", "QuickWidthHotkey"), new("Ctrl+OemPlus", "QuickHeightHotkey"), diff --git a/Flow.Launcher.Infrastructure/Win32Helper.cs b/Flow.Launcher.Infrastructure/Win32Helper.cs index 783ade14e..96d8e925b 100644 --- a/Flow.Launcher.Infrastructure/Win32Helper.cs +++ b/Flow.Launcher.Infrastructure/Win32Helper.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Globalization; +using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Threading; @@ -17,6 +18,7 @@ using Windows.Win32; using Windows.Win32.Foundation; using Windows.Win32.Graphics.Dwm; using Windows.Win32.UI.Input.KeyboardAndMouse; +using Windows.Win32.UI.Shell.Common; using Windows.Win32.UI.WindowsAndMessaging; using Point = System.Windows.Point; using SystemFonts = System.Windows.SystemFonts; @@ -753,5 +755,36 @@ namespace Flow.Launcher.Infrastructure } #endregion + + #region Explorer + + // https://learn.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shopenfolderandselectitems + + public static unsafe void OpenFolderAndSelectFile(string filePath) + { + ITEMIDLIST* pidlFolder = null; + ITEMIDLIST* pidlFile = null; + + var folderPath = Path.GetDirectoryName(filePath); + + try + { + var hrFolder = PInvoke.SHParseDisplayName(folderPath, null, out pidlFolder, 0, null); + if (hrFolder.Failed) throw new COMException("Failed to parse folder path", hrFolder); + + var hrFile = PInvoke.SHParseDisplayName(filePath, null, out pidlFile, 0, null); + if (hrFile.Failed) throw new COMException("Failed to parse file path", hrFile); + + var hrSelect = PInvoke.SHOpenFolderAndSelectItems(pidlFolder, 1, &pidlFile, 0); + if (hrSelect.Failed) throw new COMException("Failed to open folder and select item", hrSelect); + } + finally + { + if (pidlFile != null) PInvoke.CoTaskMemFree(pidlFile); + if (pidlFolder != null) PInvoke.CoTaskMemFree(pidlFolder); + } + } + + #endregion } } diff --git a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs index d4eb02a90..cb60251ed 100644 --- a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs +++ b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs @@ -88,6 +88,11 @@ namespace Flow.Launcher.Plugin /// Show the MainWindow when hiding /// void ShowMainWindow(); + + /// + /// Focus the query text box in the main window + /// + void FocusQueryTextBox(); /// /// Hide MainWindow diff --git a/Flow.Launcher/App.xaml.cs b/Flow.Launcher/App.xaml.cs index 942e94470..cedced181 100644 --- a/Flow.Launcher/App.xaml.cs +++ b/Flow.Launcher/App.xaml.cs @@ -32,7 +32,7 @@ namespace Flow.Launcher #region Public Properties public static IPublicAPI API { get; private set; } - public static bool Exiting => _mainWindow.CanClose; + public static bool LoadingOrExiting => _mainWindow == null || _mainWindow.CanClose; #endregion @@ -98,6 +98,10 @@ namespace Flow.Launcher .AddTransient() .AddTransient() .AddTransient() + // Use transient instance for dialog view models because + // settings will change and we need to recreate them + .AddTransient() + .AddTransient() ).Build(); Ioc.Default.ConfigureServices(host.Services); } diff --git a/Flow.Launcher/HotkeyControl.xaml.cs b/Flow.Launcher/HotkeyControl.xaml.cs index 262727127..e8961058c 100644 --- a/Flow.Launcher/HotkeyControl.xaml.cs +++ b/Flow.Launcher/HotkeyControl.xaml.cs @@ -100,6 +100,7 @@ namespace Flow.Launcher PreviewHotkey, OpenContextMenuHotkey, SettingWindowHotkey, + OpenHistoryHotkey, CycleHistoryUpHotkey, CycleHistoryDownHotkey, SelectPrevPageHotkey, @@ -130,6 +131,7 @@ namespace Flow.Launcher HotkeyType.PreviewHotkey => _settings.PreviewHotkey, HotkeyType.OpenContextMenuHotkey => _settings.OpenContextMenuHotkey, HotkeyType.SettingWindowHotkey => _settings.SettingWindowHotkey, + HotkeyType.OpenHistoryHotkey => _settings.OpenHistoryHotkey, HotkeyType.CycleHistoryUpHotkey => _settings.CycleHistoryUpHotkey, HotkeyType.CycleHistoryDownHotkey => _settings.CycleHistoryDownHotkey, HotkeyType.SelectPrevPageHotkey => _settings.SelectPrevPageHotkey, @@ -166,6 +168,9 @@ namespace Flow.Launcher case HotkeyType.SettingWindowHotkey: _settings.SettingWindowHotkey = value; break; + case HotkeyType.OpenHistoryHotkey: + _settings.OpenHistoryHotkey = value; + break; case HotkeyType.CycleHistoryUpHotkey: _settings.CycleHistoryUpHotkey = value; break; diff --git a/Flow.Launcher/Languages/ar.xaml b/Flow.Launcher/Languages/ar.xaml index b81c5c9b5..42cfdf3eb 100644 --- a/Flow.Launcher/Languages/ar.xaml +++ b/Flow.Launcher/Languages/ar.xaml @@ -371,6 +371,7 @@ اختر مدير الملفات + Learn more يرجى تحديد موقع ملف مدير الملفات الذي تستخدمه وإضافة الحجج حسب الحاجة. يمثل "%d" مسار الدليل المفتوح، ويستخدمه الحقل "الحجة للمجلد" للأوامر التي تفتح أدلة محددة. يمثل "%f" مسار الملف المفتوح، ويستخدمه الحقل "الحجة للملف" للأوامر التي تفتح ملفات محددة. على سبيل المثال، إذا كان مدير الملفات يستخدم أمرًا مثل "totalcmd.exe /A c:\windows" لفتح دليل c:\windows، فإن مسار مدير الملفات سيكون totalcmd.exe، وحجة المجلد ستكون /A "%d". قد تحتاج بعض مديري الملفات مثل QTTabBar فقط إلى توفير مسار، في هذه الحالة استخدم "%d" كمسار مدير الملفات واترك باقي الحقول فارغة. مدير الملفات @@ -378,6 +379,8 @@ مسار مدير الملفات حجة للمجلد حجة للملف + The file manager '{0}' could not be located at '{1}'. Would you like to continue? + File Manager Path Error متصفح الويب الافتراضي @@ -469,6 +472,14 @@ 1. Upload log file: {0} 2. Copy below exception message + + File Manager Error + + The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General. + + خطأ + An error occurred while opening the folder. {0} + يرجى الانتظار... diff --git a/Flow.Launcher/Languages/cs.xaml b/Flow.Launcher/Languages/cs.xaml index 71c9c8c6b..bfcd92360 100644 --- a/Flow.Launcher/Languages/cs.xaml +++ b/Flow.Launcher/Languages/cs.xaml @@ -371,6 +371,7 @@ Vybrat správce souborů + Learn more Please specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files. For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank. Správce souborů @@ -378,6 +379,8 @@ Cesta k správci souborů Argumenty pro složku Argumenty pro Soubor + The file manager '{0}' could not be located at '{1}'. Would you like to continue? + File Manager Path Error Výchozí prohlížeč @@ -469,6 +472,14 @@ Pokud před zkratku při zadávání přidáte znak "@", bude odpovíd 1. Upload log file: {0} 2. Copy below exception message + + File Manager Error + + The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General. + + Chyba + An error occurred while opening the folder. {0} + Počkejte prosím... diff --git a/Flow.Launcher/Languages/da.xaml b/Flow.Launcher/Languages/da.xaml index 37723dc9b..9a4cbc003 100644 --- a/Flow.Launcher/Languages/da.xaml +++ b/Flow.Launcher/Languages/da.xaml @@ -371,6 +371,7 @@ Select File Manager + Learn more Please specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files. For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank. Filhåndtering @@ -378,6 +379,8 @@ Sti til filhåndtering Arg for mappe Arg for fil + The file manager '{0}' could not be located at '{1}'. Would you like to continue? + File Manager Path Error Default Web Browser @@ -469,6 +472,14 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in 1. Upload log file: {0} 2. Copy below exception message + + File Manager Error + + The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General. + + Error + An error occurred while opening the folder. {0} + Please wait... diff --git a/Flow.Launcher/Languages/de.xaml b/Flow.Launcher/Languages/de.xaml index 895a2dab6..88c5b84d4 100644 --- a/Flow.Launcher/Languages/de.xaml +++ b/Flow.Launcher/Languages/de.xaml @@ -371,6 +371,7 @@ Dateimanager auswählen + Learn more Bitte geben Sie den Dateiort des von Ihnen verwendeten Dateimanagers an und fügen Sie bei Bedarf Argumente hinzu. Das „%d“ repräsentiert den dafür zu öffnenden Verzeichnispfad, der vom Feld Arg for Folder und für Befehle zum Öffnen bestimmter Verzeichnisse verwendet wird. Das „%f“ repräsentiert den dafür zu öffnenden Dateipfad, der vom Feld Arg for File und für Befehle zum Öffnen bestimmter Dateien verwendet wird. Zum Beispiel, wenn der Dateimanager einen Befehl wie „totalcmd.exe /A c:\windows“ verwendet, um das Verzeichnis c:\windows zu öffnen, lautet der Dateimanager-Pfad „totalcmd.exe“ und der Arg for Folder „/A %d“. Bestimmte Dateimanager wie QTTabBar kann nur die Angabe eines Pfades erfordern, in diesem Fall verwenden Sie „%d“ als den Dateimanager-Pfad und lassen den Rest der Felder blank. Dateimanager @@ -378,6 +379,8 @@ Dateimanager-Pfad Arg For Folder Arg For File + The file manager '{0}' could not be located at '{1}'. Would you like to continue? + File Manager Path Error Webbrowser per Default @@ -469,6 +472,14 @@ Wenn Sie bei der Eingabe eines Shortcuts ein '@'-Präfix hinzufügen, stimmt die 1. Logdatei hochladen: {0} 2. Kopieren Sie die Ausnahmemeldung unterhalb + + File Manager Error + + The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General. + + Fehler + An error occurred while opening the folder. {0} + Bitte warten Sie ... diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 2166bdd8c..7f00926f1 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -384,6 +384,7 @@ Select File Manager + Learn more Please specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files. For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank. File Manager @@ -391,6 +392,8 @@ File Manager Path Arg For Folder Arg For File + The file manager '{0}' could not be located at '{1}'. Would you like to continue? + File Manager Path Error Default Web Browser @@ -480,6 +483,14 @@ 1. Upload log file: {0} 2. Copy below exception message + + File Manager Error + + The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General. + + Error + An error occurred while opening the folder. {0} + Please wait... diff --git a/Flow.Launcher/Languages/es-419.xaml b/Flow.Launcher/Languages/es-419.xaml index 902811a56..b73a1ef12 100644 --- a/Flow.Launcher/Languages/es-419.xaml +++ b/Flow.Launcher/Languages/es-419.xaml @@ -371,6 +371,7 @@ Seleccionar Gestor de Archivos + Learn more Please specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files. For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank. Gestor de Archivos @@ -378,6 +379,8 @@ Ruta del Gestor de Archivos Arg para Carpeta Arg para Archivo + The file manager '{0}' could not be located at '{1}'. Would you like to continue? + File Manager Path Error Navegador Web Predeterminado @@ -469,6 +472,14 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in 1. Upload log file: {0} 2. Copy below exception message + + File Manager Error + + The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General. + + Error + An error occurred while opening the folder. {0} + Por favor espere... diff --git a/Flow.Launcher/Languages/es.xaml b/Flow.Launcher/Languages/es.xaml index 0dc6833af..2b6074f06 100644 --- a/Flow.Launcher/Languages/es.xaml +++ b/Flow.Launcher/Languages/es.xaml @@ -371,6 +371,7 @@ Seleccionar administrador de archivos + Learn more Especifique la ubicación del archivo del administrador de archivos que está utilizando y añada los argumentos necesarios. El argumento "%d" representa la ruta del directorio a abrir, utilizada por el campo Argumentos de la carpeta y por comandos que abren directorios específicos. El "%f" representa la ruta del archivo a abrir, utilizada por el campo Argumentos del archivo y por comandos que abren archivos específicos. Por ejemplo, si el administrador de archivos utiliza un comando como "totalcmd.exe /A c:\windows" para abrir el directorio c:\windows, la ruta del administrador de archivos será totalcmd.exe, y los Argumentos de la carpeta serán /A "%d". Ciertos administradores de archivos como QTTabBar pueden requerir solo la ruta, en este caso utilice "%d" como la ruta del administrador de archivos y deje el resto de los campos en blanco. Administrador de archivos @@ -378,6 +379,8 @@ Ruta del administrador de archivos Argumentos de la carpeta Argumentos del archivo + The file manager '{0}' could not be located at '{1}'. Would you like to continue? + File Manager Path Error Navegador web predeterminado @@ -469,6 +472,14 @@ Si añade un prefijo "@" al introducir un acceso directo, éste coinci 1. Subir archivo de registro: {0} 2. Copiar el siguiente mensaje de excepción + + File Manager Error + + The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General. + + Error + An error occurred while opening the folder. {0} + Por favor espere... diff --git a/Flow.Launcher/Languages/fr.xaml b/Flow.Launcher/Languages/fr.xaml index 41fdbaa51..cd6d8c01f 100644 --- a/Flow.Launcher/Languages/fr.xaml +++ b/Flow.Launcher/Languages/fr.xaml @@ -370,6 +370,7 @@ Sélectionner le gestionnaire de fichiers + Learn more Veuillez spécifier l'emplacement du fichier de l'explorateur de fichiers que vous utilisez et ajouter des arguments si nécessaire. Le "%d" représente le chemin du répertoire à ouvrir, utilisé par le champ Arg for Folder et pour les commandes ouvrant des répertoires spécifiques. Le "%f" représente le chemin du fichier à ouvrir, utilisé par le champ Arg for File et pour les commandes ouvrant des fichiers spécifiques. Par exemple, si l'explorateur de fichiers utilise une commande telle que "totalcmd.exe /A c:\windows" pour ouvrir le répertoire c:\windows, le chemin de l'explorateur de fichiers sera totalcmd.exe et l'argument Arg For Folder sera /A "%d"". Certains explorateurs de fichiers comme QTTabBar peuvent simplement nécessiter qu'un chemin soit fourni, dans ce cas, utilisez "%d" comme chemin de l'explorateur de fichiers et laissez le reste des fichiers vides. Gestionnaire de fichiers @@ -377,6 +378,8 @@ Chemin du gestionnaire de fichiers Arguments pour le répertoire Arguments pour le fichier + The file manager '{0}' could not be located at '{1}'. Would you like to continue? + File Manager Path Error Navigateur web par défaut @@ -468,6 +471,14 @@ Si vous ajoutez un préfixe "@" lors de la saisie d'un raccourci, celu 1. Télécharger le fichier journal : {0} 2. Copiez le message d’exception ci-dessous + + File Manager Error + + The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General. + + Erreur + An error occurred while opening the folder. {0} + Veuillez patienter... diff --git a/Flow.Launcher/Languages/he.xaml b/Flow.Launcher/Languages/he.xaml index 52eaf5e9f..b98c2ec73 100644 --- a/Flow.Launcher/Languages/he.xaml +++ b/Flow.Launcher/Languages/he.xaml @@ -370,6 +370,7 @@ בחר מנהל קבצים + Learn more אנא ציין את מיקום הקובץ של מנהל הקבצים שבו אתה משתמש והוסף ארגומנטים כנדרש. "%d" מייצג את נתיב התיקייה שיש לפתוח, ומשמש בשדה ארגומנט לתיקייה ובפקודות לפתיחת תיקיות מסוימות. "%f" מייצג את נתיב הקובץ שיש לפתוח, ומשמש בשדה ארגומנט לקובץ ובפקודות לפתיחת קבצים מסוימים. לדוגמה, אם מנהל הקבצים משתמש בפקודה כגון "totalcmd.exe /A c:\windows" כדי לפתוח את התיקייה c:\windows, נתיב מנהל הקבצים יהיה totalcmd.exe, והארגומנט לתיקייה יהיה /A "%d". מנהלי קבצים מסוימים, כגון QTTabBar, עשויים לדרוש רק ציון נתיב, במקרה כזה השתמש ב-"%d" כנתיב מנהל הקבצים והשאר את שאר השדות ריקים. מנהל קבצים @@ -377,6 +378,8 @@ נתיב מנהל קבצים ארגומנט לתיקייה ארגומנט לקובץ + The file manager '{0}' could not be located at '{1}'. Would you like to continue? + File Manager Path Error דפדפן ברירת מחדל @@ -468,6 +471,14 @@ 1. העלה קובץ יומן: {0} 2. העתק את הודעת החריגה למטה + + File Manager Error + + The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General. + + שגיאה + An error occurred while opening the folder. {0} + אנא המתן... diff --git a/Flow.Launcher/Languages/it.xaml b/Flow.Launcher/Languages/it.xaml index 1a356ad65..7ea797fa9 100644 --- a/Flow.Launcher/Languages/it.xaml +++ b/Flow.Launcher/Languages/it.xaml @@ -371,6 +371,7 @@ Seleziona Gestore File + Learn more Please specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files. For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank. Gestore File @@ -378,6 +379,8 @@ Percorso Gestore File Arg Per Cartella Arg Per Cartella + The file manager '{0}' could not be located at '{1}'. Would you like to continue? + File Manager Path Error Browser predefinito @@ -469,6 +472,14 @@ Se si aggiunge un prefisso '@' mentre si inserisce una scorciatoia, corrisponde 1. Upload log file: {0} 2. Copy below exception message + + File Manager Error + + The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General. + + Error + An error occurred while opening the folder. {0} + Attendere prego... diff --git a/Flow.Launcher/Languages/ja.xaml b/Flow.Launcher/Languages/ja.xaml index 949fe5c99..33673d60f 100644 --- a/Flow.Launcher/Languages/ja.xaml +++ b/Flow.Launcher/Languages/ja.xaml @@ -371,6 +371,7 @@ デフォルトのファイルマネージャー + Learn more Please specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files. For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank. File Manager @@ -378,6 +379,8 @@ File Manager Path Arg For Folder Arg For File + The file manager '{0}' could not be located at '{1}'. Would you like to continue? + File Manager Path Error デフォルトのウェブブラウザー @@ -469,6 +472,14 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in 1. Upload log file: {0} 2. Copy below exception message + + File Manager Error + + The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General. + + Error + An error occurred while opening the folder. {0} + Please wait... diff --git a/Flow.Launcher/Languages/ko.xaml b/Flow.Launcher/Languages/ko.xaml index 9ae2e0195..9e8f9a73b 100644 --- a/Flow.Launcher/Languages/ko.xaml +++ b/Flow.Launcher/Languages/ko.xaml @@ -362,6 +362,7 @@ 파일관리자 선택 + Learn more 사용 중인 파일 관리자의 파일 위치를 지정하고, 필요한 경우 인수를 추가하세요. "%d"는 열고자 하는 디렉터리 경로를 나타내며, 폴더용 인수 필드 및 특정 디렉터리를 여는 명령어에서 사용됩니다. "%f"는 열고자 하는 파일 경로를 나타내며, 파일용 인수 필드 및 특정 파일을 여는 명령어에서 사용됩니다. 예를 들어, 파일 관리자가 totalcmd.exe /A c:\windows와 같은 명령어로 c:\windows 디렉터리를 연다면, 파일 관리자 경로는 totalcmd.exe가 되고, 폴더용 인수는 /A "%d"가 됩니다. QTTabBar와 같은 일부 파일 관리자는 경로만 전달하면 되는 경우가 있으므로, 이 경우에는 파일 관리자 경로에 "%d"를 입력하고 나머지 필드는 비워두세요. 파일관리자 @@ -369,6 +370,8 @@ 파일관리자 경로 폴더경로 인수 파일경로 인수 + The file manager '{0}' could not be located at '{1}'. Would you like to continue? + File Manager Path Error 기본 웹 브라우저 @@ -460,6 +463,14 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in 1. Upload log file: {0} 2. Copy below exception message + + File Manager Error + + The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General. + + Error + An error occurred while opening the folder. {0} + 잠시 기다려주세요... diff --git a/Flow.Launcher/Languages/nb.xaml b/Flow.Launcher/Languages/nb.xaml index 58571a1c4..8d5ac7a94 100644 --- a/Flow.Launcher/Languages/nb.xaml +++ b/Flow.Launcher/Languages/nb.xaml @@ -371,6 +371,7 @@ Velg filbehandler + Learn more Vennligst spesifiser filplasseringen til filbehandleren du bruker, og legg til argumenter etter behov. "%d" representerer katalogbanen som skal åpnes for, brukt av Arg for mappe-feltet og for kommandoer som åpner spesifikke kataloger. "%f" representerer filbanen som skal åpnes for, brukt av Arg for fil-feltet og for kommandoer som åpner spesifikke filer. For eksempel, hvis filbehandleren bruker en kommando som "totalcmd.exe /A c:windows" for å åpne c:windows-katalogen, vil filbehandlingsbanen bli totalcmd.exe, og Arg For Folder vil være /A "%d". Enkelte filbehandlere som QTTabBar kan bare kreve at en bane oppgis, i dette tilfellet bruker du "%d" som filbehandlingsbane og lar resten av feltene stå tomme. Filbehandler @@ -378,6 +379,8 @@ Filbehandler sti Arg for mappe Arg for fil + The file manager '{0}' could not be located at '{1}'. Would you like to continue? + File Manager Path Error Standard nettleser @@ -469,6 +472,14 @@ Hvis du legger til et @-prefiks mens du legger inn en snarvei, samsvarer det med 1. Upload log file: {0} 2. Copy below exception message + + File Manager Error + + The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General. + + Feil + An error occurred while opening the folder. {0} + Vennligst vent... diff --git a/Flow.Launcher/Languages/nl.xaml b/Flow.Launcher/Languages/nl.xaml index 70a58e322..0f6ad436d 100644 --- a/Flow.Launcher/Languages/nl.xaml +++ b/Flow.Launcher/Languages/nl.xaml @@ -371,6 +371,7 @@ Bestandsbeheerder selecteren + Learn more Please specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files. For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank. Bestandsbeheerder @@ -378,6 +379,8 @@ Bestandsbeheerder pad Arg voor map Arg voor bestand + The file manager '{0}' could not be located at '{1}'. Would you like to continue? + File Manager Path Error Standaard webbrowser @@ -469,6 +472,14 @@ Als u een '@' voorvoegsel toevoegt tijdens het invoeren van een snelkoppeling, m 1. Upload log file: {0} 2. Copy below exception message + + File Manager Error + + The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General. + + Error + An error occurred while opening the folder. {0} + Please wait... diff --git a/Flow.Launcher/Languages/pl.xaml b/Flow.Launcher/Languages/pl.xaml index 081c8e90e..1397afa25 100644 --- a/Flow.Launcher/Languages/pl.xaml +++ b/Flow.Launcher/Languages/pl.xaml @@ -371,6 +371,7 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros Wybierz menedżer plików + Learn more Proszę określić lokalizację pliku menedżera plików, którego używasz i dodać argumenty według potrzeb. Symbol "%d" reprezentuje ścieżkę katalogu do otwarcia, używaną w polu Arg dla Folderu oraz dla poleceń otwierających konkretne katalogi. Symbol "%f" reprezentuje ścieżkę pliku do otwarcia, używaną w polu Arg dla Pliku oraz dla poleceń otwierających konkretne pliki. Na przykład, jeśli menedżer plików używa polecenia takiego jak „totalcmd.exe /A c:\windows" do otwarcia katalogu c:\windows, Ścieżka Menedżera Plików będzie totalcmd.exe, a Argument dla Folderu będzie /A "%d". Niektóre menedżery plików, takie jak QTTabBar, mogą wymagać jedynie podania ścieżki; w takim przypadku użyj "%d" jako Ścieżki Menedżera Plików, a pozostałe pola pozostaw puste. Menadżer plików @@ -378,6 +379,8 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros Ścieżka menedżera plików Arg dla folderu Arg dla pliku + The file manager '{0}' could not be located at '{1}'. Would you like to continue? + File Manager Path Error Domyślna przeglądarka @@ -469,6 +472,14 @@ Jeśli dodasz prefiks '@' podczas wprowadzania skrótu, będzie on pasował do d 1. Prześlij plik dziennika: {0} 2. Skopiuj poniższą wiadomość wyjątku + + File Manager Error + + The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General. + + Błąd + An error occurred while opening the folder. {0} + Proszę czekać... diff --git a/Flow.Launcher/Languages/pt-br.xaml b/Flow.Launcher/Languages/pt-br.xaml index bd74d1d5f..232134290 100644 --- a/Flow.Launcher/Languages/pt-br.xaml +++ b/Flow.Launcher/Languages/pt-br.xaml @@ -371,6 +371,7 @@ Selecione o Gerenciador de Arquivos + Learn more Please specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files. For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank. Gerenciador de Arquivos @@ -378,6 +379,8 @@ Caminho do Gerenciador de Arquivos Arg para Pasta Arg para Arquivo + The file manager '{0}' could not be located at '{1}'. Would you like to continue? + File Manager Path Error Navegador da Web Padrão @@ -469,6 +472,14 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in 1. Upload log file: {0} 2. Copy below exception message + + File Manager Error + + The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General. + + Error + An error occurred while opening the folder. {0} + Por favor, aguarde... diff --git a/Flow.Launcher/Languages/pt-pt.xaml b/Flow.Launcher/Languages/pt-pt.xaml index cf7312956..f98fdf64b 100644 --- a/Flow.Launcher/Languages/pt-pt.xaml +++ b/Flow.Launcher/Languages/pt-pt.xaml @@ -369,6 +369,7 @@ Selecione o gestor de ficheiros + Saber mais Por favor, especifique a localização do executável do seu gestor de ficheiros e adicione os argumentos necessários. "%d" representa o caminho do diretório a abrir, usado pelo argumento do campo Pasta e para comandos que abrem diretórios específicos. "%f" representa o caminho do ficheiro a abrir, usado pelo argumento do campo Ficheiro e para comandos que abrem ficheiros específicos. Por exemplo, se o gestor de ficheiros utilizar o comando "totalcmd.exe /A c:\windows" para abrir o diretório c:\windows , o caminho para o gestor de ficheiros será totalcmd. exe e os argumentos para a Pasta serão /A "%d". Alguns gestores de ficheiros, como QTTabBar podem apenas exigir que especifique o caminho. Para estes, deve utilizar "%d" como caminho para o gestor de ficheiros e deixar o resto dos campos em branco. Gestor de ficheiros @@ -376,6 +377,8 @@ Caminho do gestor de ficheiros Argumento para pasta Argumento para ficheiro + Não foi possível encontrar o gestor de ficheiros '{0}' em '{1}'. Deseja continuar? + Erro no caminho do gestor de ficheiros Navegador web padrão @@ -467,6 +470,14 @@ Se adicionar o prefixo '@' durante a introdução do atalho, será utilizada qua 1. Carregue o ficheiro de registos: {0} 2. Copie a mensagem abaixo + + Erro do gestor de ficheiros + + Não foi possível encontrar o gestor de ficheiros. Verifique a definição 'Gestor de ficheiros personalizado' em Definições -> Geral. + + Erro + Ocorreu um erro ao abrir a pasta: {0} + Por favor aguarde... diff --git a/Flow.Launcher/Languages/ru.xaml b/Flow.Launcher/Languages/ru.xaml index 69069c5ec..2a9b5c26b 100644 --- a/Flow.Launcher/Languages/ru.xaml +++ b/Flow.Launcher/Languages/ru.xaml @@ -371,6 +371,7 @@ Выбор менеджера файлов + Learn more Please specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files. For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank. Файловый менеджер @@ -378,6 +379,8 @@ Путь к файловому менеджеру Аргумент для папки Аргумент для файла + The file manager '{0}' could not be located at '{1}'. Would you like to continue? + File Manager Path Error Браузер по умолчанию @@ -469,6 +472,14 @@ 1. Upload log file: {0} 2. Copy below exception message + + File Manager Error + + The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General. + + Ошибка + An error occurred while opening the folder. {0} + Пожалуйста, подождите... diff --git a/Flow.Launcher/Languages/sk.xaml b/Flow.Launcher/Languages/sk.xaml index 88ed1c9df..934b0747a 100644 --- a/Flow.Launcher/Languages/sk.xaml +++ b/Flow.Launcher/Languages/sk.xaml @@ -371,6 +371,7 @@ Vyberte správcu súborov + Viac informácií Zadajte umiestnenie súboru správcu súborov, ktorý používate, a podľa potreby pridajte argumenty. "%d" predstavuje cestu k priečinku, ktorý sa má otvoriť, používa sa v poli Arg pre priečinok a pri príkazoch na otvorenie konkrétnych priečinkov. "%f" predstavuje cestu k súboru, ktorá sa má otvoriť a používa sa v poli Arg pre súbor a pri príkazoch na otvorenie konkrétnych súborov. Napríklad, ak správca súborov používa príkaz ako "totalcmd.exe /A c:\windows" na otvorenie priečinka c:\windows, cesta správcu súborov bude totalcmd.exe a Arg pre priečinok bude /A "%d". Niektorí správcovia súborov, ako napríklad QTTabBar, môžu vyžadovať len zadanie cesty, v tomto prípade použite "%d" ako cestu správcu súborov a zvyšok súborov nechajte prázdny. Správca súborov @@ -378,6 +379,8 @@ Cesta k správcovi súborov Arg. pre priečinok Arg. pre súbor + Správca súborov '{0}' sa nenachádza na '{1}'. Chcete pokračovať? + Chyba v ceste k správcovi súborov Predvolený webový prehliadač @@ -445,7 +448,7 @@ Ak pri zadávaní skratky pred ňu pridáte "@", bude sa zhodovať s Zrušiť Resetovať Odstrániť - Aktualizovať + OK Áno Nie Pozadie @@ -469,6 +472,14 @@ Ak pri zadávaní skratky pred ňu pridáte "@", bude sa zhodovať s 1. Nahrajte súbor logu: {0} 2. Skopírujte nižšie uvedenú správu o výnimke + + Chyba správcu súborov + + Zadaný správca súborov sa nenašiel. Skontrolujte nastavenie vlastného správcu súborov v Nastavenia > Všeobecné. + + Chyba + Počas otvárania priečinka sa vyskytla chyba. {0} + Čakajte, prosím... diff --git a/Flow.Launcher/Languages/sr.xaml b/Flow.Launcher/Languages/sr.xaml index 4b3e3bc0c..0d2c04513 100644 --- a/Flow.Launcher/Languages/sr.xaml +++ b/Flow.Launcher/Languages/sr.xaml @@ -371,6 +371,7 @@ Select File Manager + Learn more Please specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files. For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank. File Manager @@ -378,6 +379,8 @@ File Manager Path Arg For Folder Arg For File + The file manager '{0}' could not be located at '{1}'. Would you like to continue? + File Manager Path Error Default Web Browser @@ -469,6 +472,14 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in 1. Upload log file: {0} 2. Copy below exception message + + File Manager Error + + The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General. + + Error + An error occurred while opening the folder. {0} + Please wait... diff --git a/Flow.Launcher/Languages/tr.xaml b/Flow.Launcher/Languages/tr.xaml index 665694ace..ab9aa31e6 100644 --- a/Flow.Launcher/Languages/tr.xaml +++ b/Flow.Launcher/Languages/tr.xaml @@ -371,6 +371,7 @@ Dosya Yöneticisi Seçenekleri + Learn more Please specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files. For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank. Dosya Yöneticisi @@ -378,6 +379,8 @@ Dosya Yöneticisi Yolu Klasör Açarken Dosya Açarken + The file manager '{0}' could not be located at '{1}'. Would you like to continue? + File Manager Path Error İnternet Tarayıcı Seçenekleri @@ -467,6 +470,14 @@ 1. Upload log file: {0} 2. Copy below exception message + + File Manager Error + + The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General. + + Error + An error occurred while opening the folder. {0} + Lütfen bekleyin... diff --git a/Flow.Launcher/Languages/uk-UA.xaml b/Flow.Launcher/Languages/uk-UA.xaml index b3dc2cd16..f7cc7b0ed 100644 --- a/Flow.Launcher/Languages/uk-UA.xaml +++ b/Flow.Launcher/Languages/uk-UA.xaml @@ -371,6 +371,7 @@ Виберіть файловий менеджер + Learn more Please specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files. For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank. Файловий менеджер @@ -378,6 +379,8 @@ Шлях до файлового менеджера Аргумент для папки Аргумент для файлу + The file manager '{0}' could not be located at '{1}'. Would you like to continue? + File Manager Path Error Веб-браузер за замовчуванням @@ -469,6 +472,14 @@ 1. Upload log file: {0} 2. Copy below exception message + + File Manager Error + + The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General. + + Помилка + An error occurred while opening the folder. {0} + Будь ласка, зачекайте... diff --git a/Flow.Launcher/Languages/vi.xaml b/Flow.Launcher/Languages/vi.xaml index b7b56213b..95e43e297 100644 --- a/Flow.Launcher/Languages/vi.xaml +++ b/Flow.Launcher/Languages/vi.xaml @@ -373,6 +373,7 @@ Chọn trình quản lý tệp + Learn more Please specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files. For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank. Trình quản lý ngày tháng @@ -380,6 +381,8 @@ Đường dẫn quản lý tệp Đối số cho thư mục Đối số cho tệp + The file manager '{0}' could not be located at '{1}'. Would you like to continue? + File Manager Path Error Trình duyệt web tiêu chuẩn @@ -473,6 +476,14 @@ 1. Upload log file: {0} 2. Copy below exception message + + File Manager Error + + The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General. + + Lỗi + An error occurred while opening the folder. {0} + Cảnh báo nhỏ... diff --git a/Flow.Launcher/Languages/zh-cn.xaml b/Flow.Launcher/Languages/zh-cn.xaml index bd3142992..f6576070f 100644 --- a/Flow.Launcher/Languages/zh-cn.xaml +++ b/Flow.Launcher/Languages/zh-cn.xaml @@ -371,6 +371,7 @@ 默认文件管理器 + Learn more 请指定您使用的文件管理器的文件位置并根据需要添加参数。“%d”表示要打开的目录路径,由文件夹字段的参数和打开特定目录的命令使用。“%f”表示要打开的文件路径,由文件字段的参数和打开特定文件的命令使用。 例如,如果文件管理器使用诸如“totalcmd.exe /A c:\windows”之类的命令来打开 c:\windows 目录,则文件管理器路径将为 totalcmd.exe,文件夹参数将为 /A "%d"。某些文件管理器(如 QTTabBar)可能只需要提供路径,在本例中,使用“%d”作为文件管理器路径,其余字段留空。 文件管理器 @@ -378,6 +379,8 @@ 文件管理器路径 文件夹路径参数 选中文件路径参数 + The file manager '{0}' could not be located at '{1}'. Would you like to continue? + File Manager Path Error 默认浏览器 @@ -469,6 +472,14 @@ 1. Upload log file: {0} 2. Copy below exception message + + File Manager Error + + The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General. + + 错误 + An error occurred while opening the folder. {0} + 请稍等... diff --git a/Flow.Launcher/Languages/zh-tw.xaml b/Flow.Launcher/Languages/zh-tw.xaml index 1a71ae135..42810f590 100644 --- a/Flow.Launcher/Languages/zh-tw.xaml +++ b/Flow.Launcher/Languages/zh-tw.xaml @@ -371,6 +371,7 @@ 選擇檔案管理器 + Learn more Please specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files. For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank. 檔案管理器 @@ -378,6 +379,8 @@ 檔案管理器路徑 資料夾參數 檔案參數 + The file manager '{0}' could not be located at '{1}'. Would you like to continue? + File Manager Path Error 預設瀏覽器 @@ -469,6 +472,14 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in 1. Upload log file: {0} 2. Copy below exception message + + File Manager Error + + The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General. + + Error + An error occurred while opening the folder. {0} + 請稍後... diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index 31bc2ba50..9ff38a564 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -64,10 +64,6 @@ Key="R" Command="{Binding ReQueryCommand}" Modifiers="Ctrl" /> - + - + @@ -373,7 +373,7 @@ - + @@ -419,7 +419,7 @@ diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 7c324e7cc..0048c8aa9 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -113,7 +113,7 @@ namespace Flow.Launcher Win32Helper.DisableControlBox(this); } - private async void OnLoaded(object sender, RoutedEventArgs _) + private void OnLoaded(object sender, RoutedEventArgs _) { // Check first launch if (_settings.FirstLaunch) @@ -283,6 +283,7 @@ namespace Flow.Launcher InitializeContextMenu(); break; case nameof(Settings.ShowHomePage): + case nameof(Settings.ShowHistoryResultsForHomePage): if (_viewModel.QueryResultsSelected() && string.IsNullOrEmpty(_viewModel.QueryText)) { _viewModel.QueryResults(); @@ -294,14 +295,14 @@ namespace Flow.Launcher // QueryTextBox.Text change detection (modified to only work when character count is 1 or higher) QueryTextBox.TextChanged += (s, e) => UpdateClockPanelVisibility(); - // Detecting ContextMenu.Visibility changes + // Detecting ResultContextMenu.Visibility changes DependencyPropertyDescriptor - .FromProperty(VisibilityProperty, typeof(ContextMenu)) - .AddValueChanged(ContextMenu, (s, e) => UpdateClockPanelVisibility()); + .FromProperty(VisibilityProperty, typeof(ResultListBox)) + .AddValueChanged(ResultContextMenu, (s, e) => UpdateClockPanelVisibility()); // Detect History.Visibility changes DependencyPropertyDescriptor - .FromProperty(VisibilityProperty, typeof(StackPanel)) + .FromProperty(VisibilityProperty, typeof(ResultListBox)) .AddValueChanged(History, (s, e) => UpdateClockPanelVisibility()); // Initialize query state @@ -1015,7 +1016,7 @@ namespace Flow.Launcher private void UpdateClockPanelVisibility() { - if (QueryTextBox == null || ContextMenu == null || History == null || ClockPanel == null) + if (QueryTextBox == null || ResultContextMenu == null || History == null || ClockPanel == null) { return; } @@ -1030,20 +1031,20 @@ namespace Flow.Launcher }; var animationDuration = TimeSpan.FromMilliseconds(animationLength * 2 / 3); - // ✅ Conditions for showing ClockPanel (No query input & ContextMenu, History are closed) + // ✅ Conditions for showing ClockPanel (No query input / ResultContextMenu & History are closed) var shouldShowClock = QueryTextBox.Text.Length == 0 && - ContextMenu.Visibility != Visibility.Visible && + ResultContextMenu.Visibility != Visibility.Visible && History.Visibility != Visibility.Visible; - // ✅ 1. When ContextMenu opens, immediately set Visibility.Hidden (force hide without animation) - if (ContextMenu.Visibility == Visibility.Visible) + // ✅ 1. When ResultContextMenu opens, immediately set Visibility.Hidden (force hide without animation) + if (ResultContextMenu.Visibility == Visibility.Visible) { _viewModel.ClockPanelVisibility = Visibility.Hidden; _viewModel.ClockPanelOpacity = 0.0; // Set to 0 in case Opacity animation affects it return; } - // ✅ 2. When ContextMenu is closed, keep it Hidden if there's text in the query (remember previous state) + // ✅ 2. When ResultContextMenu is closed, keep it Hidden if there's text in the query (remember previous state) else if (QueryTextBox.Text.Length > 0) { _viewModel.ClockPanelVisibility = Visibility.Hidden; diff --git a/Flow.Launcher/MessageBoxEx.xaml.cs b/Flow.Launcher/MessageBoxEx.xaml.cs index a55aeb811..7296ff4ca 100644 --- a/Flow.Launcher/MessageBoxEx.xaml.cs +++ b/Flow.Launcher/MessageBoxEx.xaml.cs @@ -22,9 +22,6 @@ namespace Flow.Launcher InitializeComponent(); } - public static MessageBoxResult Show(string messageBoxText) - => Show(messageBoxText, string.Empty, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.OK); - public static MessageBoxResult Show( string messageBoxText, string caption = "", @@ -163,6 +160,7 @@ namespace Flow.Launcher private void KeyEsc_OnPress(object sender, ExecutedRoutedEventArgs e) { if (_button == MessageBoxButton.YesNo) + // Follow System.Windows.MessageBox behavior return; else if (_button == MessageBoxButton.OK) _result = MessageBoxResult.OK; @@ -191,6 +189,7 @@ namespace Flow.Launcher private void Button_Cancel(object sender, RoutedEventArgs e) { if (_button == MessageBoxButton.YesNo) + // Follow System.Windows.MessageBox behavior return; else if (_button == MessageBoxButton.OK) _result = MessageBoxResult.OK; diff --git a/Flow.Launcher/PublicAPIInstance.cs b/Flow.Launcher/PublicAPIInstance.cs index 796f65ae6..c06c56039 100644 --- a/Flow.Launcher/PublicAPIInstance.cs +++ b/Flow.Launcher/PublicAPIInstance.cs @@ -2,6 +2,7 @@ using System.Collections.Concurrent; using System.Collections.Generic; using System.Collections.Specialized; +using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Linq; @@ -37,6 +38,8 @@ namespace Flow.Launcher { public class PublicAPIInstance : IPublicAPI, IRemovable { + private static readonly string ClassName = nameof(PublicAPIInstance); + private readonly Settings _settings; private readonly MainViewModel _mainVM; @@ -90,6 +93,8 @@ namespace Flow.Launcher public void ShowMainWindow() => _mainVM.Show(); + public void FocusQueryTextBox() => _mainVM.FocusQueryTextBox(); + public void HideMainWindow() => _mainVM.Hide(); public bool IsMainWindowVisible() => _mainVM.MainWindowVisibilityStatus; @@ -313,45 +318,79 @@ namespace Flow.Launcher ((PluginJsonStorage)_pluginJsonStorages[type]).Save(); } - - public void OpenDirectory(string DirectoryPath, string FileNameOrFilePath = null) + + public void OpenDirectory(string directoryPath, string fileNameOrFilePath = null) { - using var explorer = new Process(); - var explorerInfo = _settings.CustomExplorer; - var explorerPath = explorerInfo.Path.Trim().ToLowerInvariant(); - var targetPath = FileNameOrFilePath is null - ? DirectoryPath - : Path.IsPathRooted(FileNameOrFilePath) - ? FileNameOrFilePath - : Path.Combine(DirectoryPath, FileNameOrFilePath); + try + { + var explorerInfo = _settings.CustomExplorer; + var explorerPath = explorerInfo.Path.Trim().ToLowerInvariant(); + var targetPath = fileNameOrFilePath is null + ? directoryPath + : Path.IsPathRooted(fileNameOrFilePath) + ? fileNameOrFilePath + : Path.Combine(directoryPath, fileNameOrFilePath); - if (Path.GetFileNameWithoutExtension(explorerPath) == "explorer") - { - // Windows File Manager - // We should ignore and pass only the path to Shell to prevent zombie explorer.exe processes - explorer.StartInfo = new ProcessStartInfo + if (Path.GetFileNameWithoutExtension(explorerPath) == "explorer") { - FileName = targetPath, // Not explorer, Only path. - UseShellExecute = true // Must be true to open folder - }; - } - else - { - // Custom File Manager - explorer.StartInfo = new ProcessStartInfo + // Windows File Manager + if (fileNameOrFilePath is null) + { + // Only Open the directory + using var explorer = new Process(); + explorer.StartInfo = new ProcessStartInfo + { + FileName = directoryPath, + UseShellExecute = true + }; + explorer.Start(); + } + else + { + // Open the directory and select the file + Win32Helper.OpenFolderAndSelectFile(targetPath); + } + } + else { - FileName = explorerInfo.Path.Replace("%d", DirectoryPath), - UseShellExecute = true, - Arguments = FileNameOrFilePath is null - ? explorerInfo.DirectoryArgument.Replace("%d", DirectoryPath) - : explorerInfo.FileArgument - .Replace("%d", DirectoryPath) - .Replace("%f", targetPath) - }; + // Custom File Manager + using var explorer = new Process(); + explorer.StartInfo = new ProcessStartInfo + { + FileName = explorerInfo.Path.Replace("%d", directoryPath), + UseShellExecute = true, + Arguments = fileNameOrFilePath is null + ? explorerInfo.DirectoryArgument.Replace("%d", directoryPath) + : explorerInfo.FileArgument + .Replace("%d", directoryPath) + .Replace("%f", targetPath) + }; + explorer.Start(); + } + } + catch (Win32Exception ex) when (ex.NativeErrorCode == 2) + { + LogError(ClassName, "File Manager not found"); + ShowMsgBox( + string.Format(GetTranslation("fileManagerNotFound"), ex.Message), + GetTranslation("fileManagerNotFoundTitle"), + MessageBoxButton.OK, + MessageBoxImage.Error + ); + } + catch (Exception ex) + { + LogException(ClassName, "Failed to open folder", ex); + ShowMsgBox( + string.Format(GetTranslation("folderOpenError"), ex.Message), + GetTranslation("errorTitle"), + MessageBoxButton.OK, + MessageBoxImage.Error + ); } - explorer.Start(); } + private void OpenUri(Uri uri, bool? inPrivate = null) { if (uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps) diff --git a/Flow.Launcher/SelectBrowserWindow.xaml b/Flow.Launcher/SelectBrowserWindow.xaml index 4a0928dc2..d51d597b7 100644 --- a/Flow.Launcher/SelectBrowserWindow.xaml +++ b/Flow.Launcher/SelectBrowserWindow.xaml @@ -6,10 +6,11 @@ xmlns:local="clr-namespace:Flow.Launcher" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:ui="http://schemas.modernwpf.com/2019" + xmlns:vm="clr-namespace:Flow.Launcher.ViewModel" Title="{DynamicResource defaultBrowserTitle}" Width="550" + d:DataContext="{d:DesignInstance vm:SelectBrowserViewModel}" Background="{DynamicResource PopuBGColor}" - DataContext="{Binding RelativeSource={RelativeSource Self}}" Foreground="{DynamicResource PopupTextColor}" ResizeMode="NoResize" SizeToContent="Height" @@ -97,11 +98,11 @@