├── .nojekyll ├── webcomponents ├── .gitignore ├── src │ ├── settings-generators │ │ ├── TypingGenerator.ts │ │ ├── index.ts │ │ ├── ts.ts │ │ ├── js.ts │ │ ├── py.ts │ │ └── yaml.ts │ ├── index.ts │ ├── components │ │ ├── PluginDisplay.svelte │ │ ├── PluginSpinner.svelte │ │ ├── inputs │ │ │ ├── SettingsButton.svelte │ │ │ ├── SettingsInput.svelte │ │ │ ├── SettingsCheckbox.svelte │ │ │ └── SettingsDropdown.svelte │ │ ├── CodeDisplay.svelte │ │ ├── PasteHandler.svelte │ │ └── SettingsCodeOutputDialog.svelte │ ├── theme-change-observer.ts │ ├── types.ts │ └── webcomponents │ │ └── SettingsComponentDemo.svelte ├── rollup.config.dev.js ├── package.json └── rollup.config.js ├── ci ├── envs │ └── requirements-plugin.txt └── src │ ├── _utils.py │ └── plugin_updater.py ├── assets ├── jsonrpc.png ├── explorer_1.png ├── explorer_1a.png ├── explorer_1b.png ├── explorer_1c.png ├── explorer_2.png ├── explorer_3.png ├── explorer_4.png ├── explorer_5.png ├── themelayout.png ├── Flow_smartscreen.png ├── Flow_settings_launch.png ├── Flow_settings_taskbar.png └── Flow_settings_launch_right_click.png ├── .vscode └── settings.json ├── plugins.md ├── .gitignore ├── cspell.json ├── py-release-project.md ├── nodejs-release-project.md ├── README.md ├── API-Reference ├── Flow.Launcher.Plugin │ ├── ISavable │ │ └── Save.md │ ├── Query │ │ ├── ToString.md │ │ ├── ActionKeyword.md │ │ ├── FirstSearch.md │ │ ├── SecondSearch.md │ │ ├── ThirdSearch.md │ │ ├── SearchTerms.md │ │ ├── TermSeparator.md │ │ ├── GlobalPluginWildcardSign.md │ │ ├── SecondToEndSearch.md │ │ ├── ActionKeywordSeparator.md │ │ ├── RawQuery.md │ │ ├── Search.md │ │ └── Query.md │ ├── Result │ │ ├── ToString.md │ │ ├── Equals.md │ │ ├── GetHashCode.md │ │ ├── Result.md │ │ ├── PluginID.md │ │ ├── Score.md │ │ ├── PluginDirectory.md │ │ ├── Title.md │ │ ├── SubTitle.md │ │ ├── TitleToolTip.md │ │ ├── Icon.md │ │ ├── SubTitleToolTip.md │ │ ├── ContextData.md │ │ ├── IcoPath.md │ │ ├── TitleHighlightData.md │ │ ├── Glyph.md │ │ ├── ActionKeywordAssigned.md │ │ ├── Action.md │ │ └── AutoCompleteText.md │ ├── GlyphInfo │ │ ├── Glyph.md │ │ ├── FontFamily.md │ │ └── GlyphInfo.md │ ├── IFeatures.md │ ├── IReloadable │ │ └── ReloadData.md │ ├── PluginMetadata │ │ ├── ID.md │ │ ├── Name.md │ │ ├── Author.md │ │ ├── Disabled.md │ │ ├── IcoPath.md │ │ ├── Priority.md │ │ ├── ToString.md │ │ ├── Version.md │ │ ├── Website.md │ │ ├── Language.md │ │ ├── QueryCount.md │ │ ├── AvgQueryTime.md │ │ ├── Description.md │ │ ├── ActionKeyword.md │ │ ├── ExecuteFilePath.md │ │ ├── PluginDirectory.md │ │ ├── ExecuteFileName.md │ │ ├── PluginMetadata.md │ │ ├── ActionKeywords.md │ │ └── InitTime.md │ ├── PluginPair │ │ ├── Equals.md │ │ ├── ToString.md │ │ ├── GetHashCode.md │ │ ├── PluginPair.md │ │ ├── Plugin.md │ │ └── Metadata.md │ ├── Result.IconDelegate.md │ ├── BaseModel │ │ ├── BaseModel.md │ │ ├── PropertyChanged.md │ │ └── OnPropertyChanged.md │ ├── AllowedLanguage │ │ ├── CSharp.md │ │ ├── FSharp.md │ │ ├── Python.md │ │ ├── Executable.md │ │ ├── IsAllowed.md │ │ └── IsDotNet.md │ ├── SpecialKeyState │ │ ├── AltPressed.md │ │ ├── WinPressed.md │ │ ├── CtrlPressed.md │ │ ├── ShiftPressed.md │ │ └── SpecialKeyState.md │ ├── IPublicAPI │ │ ├── RestartApp.md │ │ ├── OpenSettingDialog.md │ │ ├── ShowMainWindow.md │ │ ├── CheckForNewUpdate.md │ │ ├── SavePluginSettings.md │ │ ├── LogInfo.md │ │ ├── GetAllPlugins.md │ │ ├── LogWarn.md │ │ ├── SaveAppAllSettings.md │ │ ├── LogDebug.md │ │ ├── OpenUrl.md │ │ ├── CopyToClipboard.md │ │ ├── ReloadAllPluginData.md │ │ ├── GetTranslation.md │ │ ├── ShowMsgError.md │ │ ├── LogException.md │ │ ├── RemoveGlobalKeyboardCallback.md │ │ ├── RegisterGlobalKeyboardCallback.md │ │ ├── AddActionKeyword.md │ │ ├── OpenDirectory.md │ │ ├── RemoveActionKeyword.md │ │ ├── ChangeQuery.md │ │ ├── HttpGetStreamAsync.md │ │ ├── HttpGetStringAsync.md │ │ ├── HttpDownloadAsync.md │ │ ├── LoadSettingJsonStorage.md │ │ ├── FuzzySearch.md │ │ ├── ShellRun.md │ │ ├── SaveSettingJsonStorage.md │ │ └── ShowMsg.md │ ├── ActionContext │ │ ├── ActionContext.md │ │ └── SpecialKeyState.md │ ├── IAsyncReloadable │ │ └── ReloadDataAsync.md │ ├── IPluginI18n │ │ ├── GetTranslatedPluginTitle.md │ │ ├── GetTranslatedPluginDescription.md │ │ └── OnCultureInfoChanged.md │ ├── ISettingProvider │ │ └── CreateSettingPanel.md │ ├── ResultUpdatedEventArgs │ │ ├── Token.md │ │ ├── Query.md │ │ ├── Results.md │ │ └── ResultUpdatedEventArgs.md │ ├── FlowLauncherKeyDownEventArgs │ │ ├── Query.md │ │ ├── keyEventArgs.md │ │ └── FlowLauncherKeyDownEventArgs.md │ ├── ResultItemDropEventHandler.md │ ├── FlowLauncherQueryEventArgs │ │ ├── Query.md │ │ └── FlowLauncherQueryEventArgs.md │ ├── IContextMenu │ │ └── LoadContextMenus.md │ ├── ISettingProvider.md │ ├── AfterFlowLauncherQueryEventHandler.md │ ├── FlowLauncherKeyDownEventHandler.md │ ├── PluginInitContext │ │ ├── API.md │ │ ├── CurrentPluginMetadata.md │ │ └── PluginInitContext.md │ ├── IResultUpdated │ │ └── ResultsUpdated.md │ ├── IContextMenu.md │ ├── IResultUpdated.md │ ├── ResultUpdatedEventHandler.md │ ├── IPlugin │ │ ├── Init.md │ │ └── Query.md │ ├── ActionContext.md │ ├── GlyphInfo.md │ ├── IAsyncPlugin │ │ ├── InitAsync.md │ │ └── QueryAsync.md │ ├── FlowLauncherQueryEventArgs.md │ ├── IAsyncPlugin.md │ ├── BaseModel.md │ ├── ResultUpdatedEventArgs.md │ ├── FlowLauncherKeyDownEventArgs.md │ ├── PluginPair.md │ ├── PluginInitContext.md │ ├── ISavable.md │ ├── SpecialKeyState.md │ ├── AllowedLanguage.md │ ├── IPlugin.md │ ├── IPluginI18n.md │ ├── FlowLauncherGlobalKeyboardEventHandler.md │ ├── IAsyncReloadable.md │ ├── IReloadable.md │ ├── PluginMetadata.md │ ├── Query.md │ ├── Result.md │ └── IPublicAPI.md ├── Flow.Launcher.Plugin.SharedModels │ ├── MatchResult │ │ ├── RawScore.md │ │ ├── Success.md │ │ ├── IsSearchPrecisionScoreMet.md │ │ ├── MatchData.md │ │ ├── Score.md │ │ ├── SearchPrecision.md │ │ └── MatchResult.md │ ├── SearchPrecisionScore.md │ └── MatchResult.md └── Flow.Launcher.Plugin.SharedCommands │ ├── FilesFolders │ ├── OpenPath.md │ ├── FileExists.md │ ├── LocationExists.md │ ├── OpenContainingFolder.md │ ├── RemoveFolderIfExists.md │ ├── VerifyBothFolderFilesEqual.md │ ├── IsLocationPathString.md │ ├── CopyAll.md │ ├── GetPreviousExistingDirectory.md │ └── ReturnPreviousDirectoryIfIncompleteString.md │ ├── ShellCommand.EnumThreadDelegate.md │ ├── ShellCommand │ ├── RunAsDifferentUser.md │ ├── SetProcessStartInfo.md │ └── Execute.md │ ├── SearchWeb │ ├── OpenInBrowserTab.md │ └── OpenInBrowserWindow.md │ ├── SearchWeb.md │ ├── ShellCommand.md │ └── FilesFolders.md ├── nodejs-plugin-references.md ├── py-plugin-references.md ├── plugin-dev.md ├── _coverpage.md ├── settings.md ├── plugin-bookmark.md ├── json-rpc-visual-settingstemplate-editor.md ├── support.md ├── testing.md ├── filemanager.md ├── .github └── workflows │ └── plugin-updater.yml ├── _sidebar.md ├── plugin.json.md ├── port-plugins.md ├── nodejs-develop-plugins.md ├── installation.md ├── index.html ├── json-rpc.md ├── nodejs-setup-project.md ├── nodejs-write-code.md ├── py-setup-project.md ├── usage-tips.md ├── plugin-explorer.md └── py-write-code.md /.nojekyll: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /webcomponents/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .idea/ 3 | -------------------------------------------------------------------------------- /ci/envs/requirements-plugin.txt: -------------------------------------------------------------------------------- 1 | pygithub 2 | pytablewriter 3 | tqdm 4 | -------------------------------------------------------------------------------- /assets/jsonrpc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/docs/HEAD/assets/jsonrpc.png -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "cSpell.ignoreWords": [ 3 | "flowlauncher" 4 | ] 5 | } -------------------------------------------------------------------------------- /assets/explorer_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/docs/HEAD/assets/explorer_1.png -------------------------------------------------------------------------------- /assets/explorer_1a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/docs/HEAD/assets/explorer_1a.png -------------------------------------------------------------------------------- /assets/explorer_1b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/docs/HEAD/assets/explorer_1b.png -------------------------------------------------------------------------------- /assets/explorer_1c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/docs/HEAD/assets/explorer_1c.png -------------------------------------------------------------------------------- /assets/explorer_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/docs/HEAD/assets/explorer_2.png -------------------------------------------------------------------------------- /assets/explorer_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/docs/HEAD/assets/explorer_3.png -------------------------------------------------------------------------------- /assets/explorer_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/docs/HEAD/assets/explorer_4.png -------------------------------------------------------------------------------- /assets/explorer_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/docs/HEAD/assets/explorer_5.png -------------------------------------------------------------------------------- /assets/themelayout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/docs/HEAD/assets/themelayout.png -------------------------------------------------------------------------------- /assets/Flow_smartscreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/docs/HEAD/assets/Flow_smartscreen.png -------------------------------------------------------------------------------- /assets/Flow_settings_launch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/docs/HEAD/assets/Flow_settings_launch.png -------------------------------------------------------------------------------- /assets/Flow_settings_taskbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/docs/HEAD/assets/Flow_settings_taskbar.png -------------------------------------------------------------------------------- /assets/Flow_settings_launch_right_click.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/docs/HEAD/assets/Flow_settings_launch_right_click.png -------------------------------------------------------------------------------- /plugins.md: -------------------------------------------------------------------------------- 1 | 2 | The plugin directory has been moved from the docs to the [plugin store](https://www.flowlauncher.com/plugins/) on the main website. 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # cacahe 7 | .history 8 | 9 | # config 10 | .env 11 | -------------------------------------------------------------------------------- /webcomponents/src/settings-generators/TypingGenerator.ts: -------------------------------------------------------------------------------- 1 | import {ComponentData} from "../types"; 2 | 3 | export interface TypingGenerator { 4 | (data: ComponentData[]): string; 5 | } 6 | -------------------------------------------------------------------------------- /cspell.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2", 3 | "ignorePaths": [], 4 | "dictionaryDefinitions": [], 5 | "dictionaries": [], 6 | "words": [], 7 | "ignoreWords": [], 8 | "import": [] 9 | } 10 | -------------------------------------------------------------------------------- /webcomponents/src/index.ts: -------------------------------------------------------------------------------- 1 | import ComponentDemo from './webcomponents/SettingsComponentDemo.svelte'; 2 | import SettingsGenerator from './webcomponents/SettingsGenerator.svelte'; 3 | 4 | export { ComponentDemo, SettingsGenerator }; 5 | -------------------------------------------------------------------------------- /webcomponents/src/settings-generators/index.ts: -------------------------------------------------------------------------------- 1 | export {generateTypings as ts} from './ts'; 2 | export {generateTypings as js} from './js'; 3 | export {generateTypings as py} from './py'; 4 | export {generateSettingsTemplate} from './yaml'; 5 | -------------------------------------------------------------------------------- /py-release-project.md: -------------------------------------------------------------------------------- 1 | ### Release your plugin to Flow's Plugin Store 2 | When you are ready to release your plugin for people to enjoy, head over to Flow's [plugin repo](https://github.com/Flow-Launcher/Flow.Launcher.PluginsManifest) and follow the instructions there in the readme. 3 | -------------------------------------------------------------------------------- /nodejs-release-project.md: -------------------------------------------------------------------------------- 1 | ### Release your plugin to Flow's Plugin Store 2 | When you are ready to release your plugin for people to enjoy, head over to Flow's [plugin repo](https://github.com/Flow-Launcher/Flow.Launcher.PluginsManifest) and follow the instructions there in the readme. 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Welcome 2 | 3 | If you have just started using Flow, this documentation should help familiarise you with how to get to the settings to customise Flow to your liking, show you some usage tips to use Flow more effectively, as well as provide more detailed documentation for plugin authors. 4 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/ISavable/Save.md: -------------------------------------------------------------------------------- 1 | # ISavable.Save method 2 | 3 | ```csharp 4 | public void Save() 5 | ``` 6 | 7 | ## See Also 8 | 9 | * interface [ISavable](../ISavable.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Query/ToString.md: -------------------------------------------------------------------------------- 1 | # Query.ToString method 2 | 3 | ```csharp 4 | public override string ToString() 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [Query](../Query.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Result/ToString.md: -------------------------------------------------------------------------------- 1 | # Result.ToString method 2 | 3 | ```csharp 4 | public override string ToString() 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [Result](../Result.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Result/Equals.md: -------------------------------------------------------------------------------- 1 | # Result.Equals method 2 | 3 | ```csharp 4 | public override bool Equals(object obj) 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [Result](../Result.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/GlyphInfo/Glyph.md: -------------------------------------------------------------------------------- 1 | # GlyphInfo.Glyph property 2 | 3 | ```csharp 4 | public string Glyph { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * record [GlyphInfo](../GlyphInfo.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Result/GetHashCode.md: -------------------------------------------------------------------------------- 1 | # Result.GetHashCode method 2 | 3 | ```csharp 4 | public override int GetHashCode() 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [Result](../Result.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IFeatures.md: -------------------------------------------------------------------------------- 1 | # IFeatures interface 2 | 3 | Base Interface for Flow's special plugin feature interface 4 | 5 | ```csharp 6 | public interface IFeatures 7 | ``` 8 | 9 | ## See Also 10 | 11 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 12 | 13 | 14 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Result/Result.md: -------------------------------------------------------------------------------- 1 | # Result constructor 2 | 3 | The default constructor. 4 | 5 | ```csharp 6 | public Result() 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [Result](../Result.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IReloadable/ReloadData.md: -------------------------------------------------------------------------------- 1 | # IReloadable.ReloadData method 2 | 3 | ```csharp 4 | public void ReloadData() 5 | ``` 6 | 7 | ## See Also 8 | 9 | * interface [IReloadable](../IReloadable.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginMetadata/ID.md: -------------------------------------------------------------------------------- 1 | # PluginMetadata.ID property 2 | 3 | ```csharp 4 | public string ID { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [PluginMetadata](../PluginMetadata.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginPair/Equals.md: -------------------------------------------------------------------------------- 1 | # PluginPair.Equals method 2 | 3 | ```csharp 4 | public override bool Equals(object obj) 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [PluginPair](../PluginPair.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginPair/ToString.md: -------------------------------------------------------------------------------- 1 | # PluginPair.ToString method 2 | 3 | ```csharp 4 | public override string ToString() 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [PluginPair](../PluginPair.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Query/ActionKeyword.md: -------------------------------------------------------------------------------- 1 | # Query.ActionKeyword property 2 | 3 | ```csharp 4 | public string ActionKeyword { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [Query](../Query.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Result.IconDelegate.md: -------------------------------------------------------------------------------- 1 | # Result.IconDelegate delegate 2 | 3 | ```csharp 4 | public delegate ImageSource IconDelegate(); 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [Result](./Result.md) 10 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/GlyphInfo/FontFamily.md: -------------------------------------------------------------------------------- 1 | # GlyphInfo.FontFamily property 2 | 3 | ```csharp 4 | public string FontFamily { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * record [GlyphInfo](../GlyphInfo.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginMetadata/Name.md: -------------------------------------------------------------------------------- 1 | # PluginMetadata.Name property 2 | 3 | ```csharp 4 | public string Name { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [PluginMetadata](../PluginMetadata.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginPair/GetHashCode.md: -------------------------------------------------------------------------------- 1 | # PluginPair.GetHashCode method 2 | 3 | ```csharp 4 | public override int GetHashCode() 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [PluginPair](../PluginPair.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/BaseModel/BaseModel.md: -------------------------------------------------------------------------------- 1 | # BaseModel constructor 2 | 3 | The default constructor. 4 | 5 | ```csharp 6 | public BaseModel() 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [BaseModel](../BaseModel.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginMetadata/Author.md: -------------------------------------------------------------------------------- 1 | # PluginMetadata.Author property 2 | 3 | ```csharp 4 | public string Author { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [PluginMetadata](../PluginMetadata.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginMetadata/Disabled.md: -------------------------------------------------------------------------------- 1 | # PluginMetadata.Disabled property 2 | 3 | ```csharp 4 | public bool Disabled { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [PluginMetadata](../PluginMetadata.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginMetadata/IcoPath.md: -------------------------------------------------------------------------------- 1 | # PluginMetadata.IcoPath property 2 | 3 | ```csharp 4 | public string IcoPath { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [PluginMetadata](../PluginMetadata.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginMetadata/Priority.md: -------------------------------------------------------------------------------- 1 | # PluginMetadata.Priority property 2 | 3 | ```csharp 4 | public int Priority { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [PluginMetadata](../PluginMetadata.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginMetadata/ToString.md: -------------------------------------------------------------------------------- 1 | # PluginMetadata.ToString method 2 | 3 | ```csharp 4 | public override string ToString() 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [PluginMetadata](../PluginMetadata.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginMetadata/Version.md: -------------------------------------------------------------------------------- 1 | # PluginMetadata.Version property 2 | 3 | ```csharp 4 | public string Version { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [PluginMetadata](../PluginMetadata.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginMetadata/Website.md: -------------------------------------------------------------------------------- 1 | # PluginMetadata.Website property 2 | 3 | ```csharp 4 | public string Website { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [PluginMetadata](../PluginMetadata.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /nodejs-plugin-references.md: -------------------------------------------------------------------------------- 1 | ### Good references to follow 2 | 3 | Here are some plugins that could help you build out your own or serve as a reference point: 4 | - Plugin Template https://github.com/Joehoel/flow-launcher-plugin-template-node 5 | - Discord Timestamps https://github.com/Jessuhh/discord-timestamps-flowlauncher-plugin 6 | - NPM Search https://github.com/gabrielcarloto/flow-search-npm 7 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/AllowedLanguage/CSharp.md: -------------------------------------------------------------------------------- 1 | # AllowedLanguage.CSharp property 2 | 3 | ```csharp 4 | public static string CSharp { get; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [AllowedLanguage](../AllowedLanguage.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/AllowedLanguage/FSharp.md: -------------------------------------------------------------------------------- 1 | # AllowedLanguage.FSharp property 2 | 3 | ```csharp 4 | public static string FSharp { get; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [AllowedLanguage](../AllowedLanguage.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/AllowedLanguage/Python.md: -------------------------------------------------------------------------------- 1 | # AllowedLanguage.Python property 2 | 3 | ```csharp 4 | public static string Python { get; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [AllowedLanguage](../AllowedLanguage.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginMetadata/Language.md: -------------------------------------------------------------------------------- 1 | # PluginMetadata.Language property 2 | 3 | ```csharp 4 | public string Language { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [PluginMetadata](../PluginMetadata.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginMetadata/QueryCount.md: -------------------------------------------------------------------------------- 1 | # PluginMetadata.QueryCount property 2 | 3 | ```csharp 4 | public int QueryCount { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [PluginMetadata](../PluginMetadata.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginPair/PluginPair.md: -------------------------------------------------------------------------------- 1 | # PluginPair constructor 2 | 3 | The default constructor. 4 | 5 | ```csharp 6 | public PluginPair() 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [PluginPair](../PluginPair.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/SpecialKeyState/AltPressed.md: -------------------------------------------------------------------------------- 1 | # SpecialKeyState.AltPressed property 2 | 3 | ```csharp 4 | public bool AltPressed { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [SpecialKeyState](../SpecialKeyState.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/SpecialKeyState/WinPressed.md: -------------------------------------------------------------------------------- 1 | # SpecialKeyState.WinPressed property 2 | 3 | ```csharp 4 | public bool WinPressed { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [SpecialKeyState](../SpecialKeyState.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedModels/MatchResult/RawScore.md: -------------------------------------------------------------------------------- 1 | # MatchResult.RawScore property 2 | 3 | ```csharp 4 | public int RawScore { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [MatchResult](../MatchResult.md) 10 | * namespace [Flow.Launcher.Plugin.SharedModels](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedModels/MatchResult/Success.md: -------------------------------------------------------------------------------- 1 | # MatchResult.Success property 2 | 3 | ```csharp 4 | public bool Success { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [MatchResult](../MatchResult.md) 10 | * namespace [Flow.Launcher.Plugin.SharedModels](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/AllowedLanguage/Executable.md: -------------------------------------------------------------------------------- 1 | # AllowedLanguage.Executable property 2 | 3 | ```csharp 4 | public static string Executable { get; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [AllowedLanguage](../AllowedLanguage.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/AllowedLanguage/IsAllowed.md: -------------------------------------------------------------------------------- 1 | # AllowedLanguage.IsAllowed method 2 | 3 | ```csharp 4 | public static bool IsAllowed(string language) 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [AllowedLanguage](../AllowedLanguage.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/AllowedLanguage/IsDotNet.md: -------------------------------------------------------------------------------- 1 | # AllowedLanguage.IsDotNet method 2 | 3 | ```csharp 4 | public static bool IsDotNet(string language) 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [AllowedLanguage](../AllowedLanguage.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/BaseModel/PropertyChanged.md: -------------------------------------------------------------------------------- 1 | # BaseModel.PropertyChanged event 2 | 3 | ```csharp 4 | public event PropertyChangedEventHandler PropertyChanged; 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [BaseModel](../BaseModel.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/RestartApp.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.RestartApp method 2 | 3 | Restart Flow Launcher 4 | 5 | ```csharp 6 | public void RestartApp() 7 | ``` 8 | 9 | ## See Also 10 | 11 | * interface [IPublicAPI](../IPublicAPI.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginMetadata/AvgQueryTime.md: -------------------------------------------------------------------------------- 1 | # PluginMetadata.AvgQueryTime property 2 | 3 | ```csharp 4 | public long AvgQueryTime { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [PluginMetadata](../PluginMetadata.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginMetadata/Description.md: -------------------------------------------------------------------------------- 1 | # PluginMetadata.Description property 2 | 3 | ```csharp 4 | public string Description { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [PluginMetadata](../PluginMetadata.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Result/PluginID.md: -------------------------------------------------------------------------------- 1 | # Result.PluginID property 2 | 3 | Plugin ID that generated this result 4 | 5 | ```csharp 6 | public string PluginID { get; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [Result](../Result.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Result/Score.md: -------------------------------------------------------------------------------- 1 | # Result.Score property 2 | 3 | Priority of the current result default: 0 4 | 5 | ```csharp 6 | public int Score { get; set; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [Result](../Result.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/SpecialKeyState/CtrlPressed.md: -------------------------------------------------------------------------------- 1 | # SpecialKeyState.CtrlPressed property 2 | 3 | ```csharp 4 | public bool CtrlPressed { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [SpecialKeyState](../SpecialKeyState.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/ActionContext/ActionContext.md: -------------------------------------------------------------------------------- 1 | # ActionContext constructor 2 | 3 | The default constructor. 4 | 5 | ```csharp 6 | public ActionContext() 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [ActionContext](../ActionContext.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IAsyncReloadable/ReloadDataAsync.md: -------------------------------------------------------------------------------- 1 | # IAsyncReloadable.ReloadDataAsync method 2 | 3 | ```csharp 4 | public Task ReloadDataAsync() 5 | ``` 6 | 7 | ## See Also 8 | 9 | * interface [IAsyncReloadable](../IAsyncReloadable.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginMetadata/ActionKeyword.md: -------------------------------------------------------------------------------- 1 | # PluginMetadata.ActionKeyword property 2 | 3 | ```csharp 4 | public string ActionKeyword { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [PluginMetadata](../PluginMetadata.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginMetadata/ExecuteFilePath.md: -------------------------------------------------------------------------------- 1 | # PluginMetadata.ExecuteFilePath property 2 | 3 | ```csharp 4 | public string ExecuteFilePath { get; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [PluginMetadata](../PluginMetadata.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginMetadata/PluginDirectory.md: -------------------------------------------------------------------------------- 1 | # PluginMetadata.PluginDirectory property 2 | 3 | ```csharp 4 | public string PluginDirectory { get; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [PluginMetadata](../PluginMetadata.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Result/PluginDirectory.md: -------------------------------------------------------------------------------- 1 | # Result.PluginDirectory property 2 | 3 | Plugin directory 4 | 5 | ```csharp 6 | public string PluginDirectory { get; set; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [Result](../Result.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/SpecialKeyState/ShiftPressed.md: -------------------------------------------------------------------------------- 1 | # SpecialKeyState.ShiftPressed property 2 | 3 | ```csharp 4 | public bool ShiftPressed { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [SpecialKeyState](../SpecialKeyState.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginMetadata/ExecuteFileName.md: -------------------------------------------------------------------------------- 1 | # PluginMetadata.ExecuteFileName property 2 | 3 | ```csharp 4 | public string ExecuteFileName { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [PluginMetadata](../PluginMetadata.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginMetadata/PluginMetadata.md: -------------------------------------------------------------------------------- 1 | # PluginMetadata constructor 2 | 3 | The default constructor. 4 | 5 | ```csharp 6 | public PluginMetadata() 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [PluginMetadata](../PluginMetadata.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Result/Title.md: -------------------------------------------------------------------------------- 1 | # Result.Title property 2 | 3 | The title of the result. This is always required. 4 | 5 | ```csharp 6 | public string Title { get; set; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [Result](../Result.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPluginI18n/GetTranslatedPluginTitle.md: -------------------------------------------------------------------------------- 1 | # IPluginI18n.GetTranslatedPluginTitle method 2 | 3 | ```csharp 4 | public string GetTranslatedPluginTitle() 5 | ``` 6 | 7 | ## See Also 8 | 9 | * interface [IPluginI18n](../IPluginI18n.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginMetadata/ActionKeywords.md: -------------------------------------------------------------------------------- 1 | # PluginMetadata.ActionKeywords property 2 | 3 | ```csharp 4 | public List ActionKeywords { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [PluginMetadata](../PluginMetadata.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Query/FirstSearch.md: -------------------------------------------------------------------------------- 1 | # Query.FirstSearch property 2 | 3 | Return first search split by space if it has 4 | 5 | ```csharp 6 | public string FirstSearch { get; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [Query](../Query.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Query/SecondSearch.md: -------------------------------------------------------------------------------- 1 | # Query.SecondSearch property 2 | 3 | Return second search split by space if it has 4 | 5 | ```csharp 6 | public string SecondSearch { get; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [Query](../Query.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Query/ThirdSearch.md: -------------------------------------------------------------------------------- 1 | # Query.ThirdSearch property 2 | 3 | Return third search split by space if it has 4 | 5 | ```csharp 6 | public string ThirdSearch { get; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [Query](../Query.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/OpenSettingDialog.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.OpenSettingDialog method 2 | 3 | Open setting dialog 4 | 5 | ```csharp 6 | public void OpenSettingDialog() 7 | ``` 8 | 9 | ## See Also 10 | 11 | * interface [IPublicAPI](../IPublicAPI.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/ShowMainWindow.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.ShowMainWindow method 2 | 3 | Show the MainWindow when hiding 4 | 5 | ```csharp 6 | public void ShowMainWindow() 7 | ``` 8 | 9 | ## See Also 10 | 11 | * interface [IPublicAPI](../IPublicAPI.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/ISettingProvider/CreateSettingPanel.md: -------------------------------------------------------------------------------- 1 | # ISettingProvider.CreateSettingPanel method 2 | 3 | ```csharp 4 | public Control CreateSettingPanel() 5 | ``` 6 | 7 | ## See Also 8 | 9 | * interface [ISettingProvider](../ISettingProvider.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginPair/Plugin.md: -------------------------------------------------------------------------------- 1 | # PluginPair.Plugin property 2 | 3 | ```csharp 4 | public IAsyncPlugin Plugin { get; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * interface [IAsyncPlugin](../IAsyncPlugin.md) 10 | * class [PluginPair](../PluginPair.md) 11 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 12 | 13 | 14 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Query/SearchTerms.md: -------------------------------------------------------------------------------- 1 | # Query.SearchTerms property 2 | 3 | The search string split into a string array. 4 | 5 | ```csharp 6 | public string[] SearchTerms { get; set; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [Query](../Query.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/SpecialKeyState/SpecialKeyState.md: -------------------------------------------------------------------------------- 1 | # SpecialKeyState constructor 2 | 3 | The default constructor. 4 | 5 | ```csharp 6 | public SpecialKeyState() 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [SpecialKeyState](../SpecialKeyState.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedCommands/FilesFolders/OpenPath.md: -------------------------------------------------------------------------------- 1 | # FilesFolders.OpenPath method 2 | 3 | ```csharp 4 | public static void OpenPath(string fileOrFolderPath) 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [FilesFolders](../FilesFolders.md) 10 | * namespace [Flow.Launcher.Plugin.SharedCommands](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Query/TermSeparator.md: -------------------------------------------------------------------------------- 1 | # Query.TermSeparator field 2 | 3 | Query can be splitted into multiple terms by whitespace 4 | 5 | ```csharp 6 | public const string TermSeparator; 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [Query](../Query.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/ResultUpdatedEventArgs/Token.md: -------------------------------------------------------------------------------- 1 | # ResultUpdatedEventArgs.Token property 2 | 3 | ```csharp 4 | public CancellationToken Token { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [ResultUpdatedEventArgs](../ResultUpdatedEventArgs.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedCommands/FilesFolders/FileExists.md: -------------------------------------------------------------------------------- 1 | # FilesFolders.FileExists method 2 | 3 | ```csharp 4 | public static bool FileExists(this string filePath) 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [FilesFolders](../FilesFolders.md) 10 | * namespace [Flow.Launcher.Plugin.SharedCommands](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/BaseModel/OnPropertyChanged.md: -------------------------------------------------------------------------------- 1 | # BaseModel.OnPropertyChanged method 2 | 3 | ```csharp 4 | protected void OnPropertyChanged([CallerMemberName] string propertyName = null) 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [BaseModel](../BaseModel.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginPair/Metadata.md: -------------------------------------------------------------------------------- 1 | # PluginPair.Metadata property 2 | 3 | ```csharp 4 | public PluginMetadata Metadata { get; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [PluginMetadata](../PluginMetadata.md) 10 | * class [PluginPair](../PluginPair.md) 11 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 12 | 13 | 14 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Query/GlobalPluginWildcardSign.md: -------------------------------------------------------------------------------- 1 | # Query.GlobalPluginWildcardSign field 2 | 3 | '*' is used for System Plugin 4 | 5 | ```csharp 6 | public const string GlobalPluginWildcardSign; 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [Query](../Query.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Result/SubTitle.md: -------------------------------------------------------------------------------- 1 | # Result.SubTitle property 2 | 3 | Provides additional details for the result. This is optional 4 | 5 | ```csharp 6 | public string SubTitle { get; set; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [Result](../Result.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Result/TitleToolTip.md: -------------------------------------------------------------------------------- 1 | # Result.TitleToolTip property 2 | 3 | Show message as ToolTip on result Title hover over 4 | 5 | ```csharp 6 | public string TitleToolTip { get; set; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [Result](../Result.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/ResultUpdatedEventArgs/Query.md: -------------------------------------------------------------------------------- 1 | # ResultUpdatedEventArgs.Query field 2 | 3 | ```csharp 4 | public Query Query; 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [Query](../Query.md) 10 | * class [ResultUpdatedEventArgs](../ResultUpdatedEventArgs.md) 11 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 12 | 13 | 14 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedCommands/FilesFolders/LocationExists.md: -------------------------------------------------------------------------------- 1 | # FilesFolders.LocationExists method 2 | 3 | ```csharp 4 | public static bool LocationExists(this string path) 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [FilesFolders](../FilesFolders.md) 10 | * namespace [Flow.Launcher.Plugin.SharedCommands](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/FlowLauncherKeyDownEventArgs/Query.md: -------------------------------------------------------------------------------- 1 | # FlowLauncherKeyDownEventArgs.Query property 2 | 3 | ```csharp 4 | public string Query { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [FlowLauncherKeyDownEventArgs](../FlowLauncherKeyDownEventArgs.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPluginI18n/GetTranslatedPluginDescription.md: -------------------------------------------------------------------------------- 1 | # IPluginI18n.GetTranslatedPluginDescription method 2 | 3 | ```csharp 4 | public string GetTranslatedPluginDescription() 5 | ``` 6 | 7 | ## See Also 8 | 9 | * interface [IPluginI18n](../IPluginI18n.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/CheckForNewUpdate.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.CheckForNewUpdate method 2 | 3 | Check for new Flow Launcher update 4 | 5 | ```csharp 6 | public void CheckForNewUpdate() 7 | ``` 8 | 9 | ## See Also 10 | 11 | * interface [IPublicAPI](../IPublicAPI.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/SavePluginSettings.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.SavePluginSettings method 2 | 3 | Save all Flow's plugins settings 4 | 5 | ```csharp 6 | public void SavePluginSettings() 7 | ``` 8 | 9 | ## See Also 10 | 11 | * interface [IPublicAPI](../IPublicAPI.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Result/Icon.md: -------------------------------------------------------------------------------- 1 | # Result.Icon field 2 | 3 | Delegate to Get Image Source 4 | 5 | ```csharp 6 | public IconDelegate Icon; 7 | ``` 8 | 9 | ## See Also 10 | 11 | * delegate [IconDelegate](../Result.IconDelegate.md) 12 | * class [Result](../Result.md) 13 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 14 | 15 | 16 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedModels/MatchResult/IsSearchPrecisionScoreMet.md: -------------------------------------------------------------------------------- 1 | # MatchResult.IsSearchPrecisionScoreMet method 2 | 3 | ```csharp 4 | public bool IsSearchPrecisionScoreMet() 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [MatchResult](../MatchResult.md) 10 | * namespace [Flow.Launcher.Plugin.SharedModels](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Query/SecondToEndSearch.md: -------------------------------------------------------------------------------- 1 | # Query.SecondToEndSearch property 2 | 3 | strings from second search (including) to last search 4 | 5 | ```csharp 6 | public string SecondToEndSearch { get; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [Query](../Query.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedModels/MatchResult/MatchData.md: -------------------------------------------------------------------------------- 1 | # MatchResult.MatchData property 2 | 3 | Matched data to highlight. 4 | 5 | ```csharp 6 | public List MatchData { get; set; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [MatchResult](../MatchResult.md) 12 | * namespace [Flow.Launcher.Plugin.SharedModels](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Result/SubTitleToolTip.md: -------------------------------------------------------------------------------- 1 | # Result.SubTitleToolTip property 2 | 3 | Show message as ToolTip on result SubTitle hover over 4 | 5 | ```csharp 6 | public string SubTitleToolTip { get; set; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [Result](../Result.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/ResultUpdatedEventArgs/Results.md: -------------------------------------------------------------------------------- 1 | # ResultUpdatedEventArgs.Results field 2 | 3 | ```csharp 4 | public List Results; 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [Result](../Result.md) 10 | * class [ResultUpdatedEventArgs](../ResultUpdatedEventArgs.md) 11 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 12 | 13 | 14 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedCommands/FilesFolders/OpenContainingFolder.md: -------------------------------------------------------------------------------- 1 | # FilesFolders.OpenContainingFolder method 2 | 3 | ```csharp 4 | public static void OpenContainingFolder(string path) 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [FilesFolders](../FilesFolders.md) 10 | * namespace [Flow.Launcher.Plugin.SharedCommands](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginMetadata/InitTime.md: -------------------------------------------------------------------------------- 1 | # PluginMetadata.InitTime property 2 | 3 | Init time include both plugin load time and init time 4 | 5 | ```csharp 6 | public long InitTime { get; set; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [PluginMetadata](../PluginMetadata.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Query/ActionKeywordSeparator.md: -------------------------------------------------------------------------------- 1 | # Query.ActionKeywordSeparator field 2 | 3 | User can set multiple action keywords separated by ';' 4 | 5 | ```csharp 6 | public const string ActionKeywordSeparator; 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [Query](../Query.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedCommands/FilesFolders/RemoveFolderIfExists.md: -------------------------------------------------------------------------------- 1 | # FilesFolders.RemoveFolderIfExists method 2 | 3 | ```csharp 4 | public static void RemoveFolderIfExists(this string path) 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [FilesFolders](../FilesFolders.md) 10 | * namespace [Flow.Launcher.Plugin.SharedCommands](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/ResultItemDropEventHandler.md: -------------------------------------------------------------------------------- 1 | # ResultItemDropEventHandler delegate 2 | 3 | ```csharp 4 | public delegate void ResultItemDropEventHandler(Result result, IDataObject dropObject, 5 | DragEventArgs e); 6 | ``` 7 | 8 | ## See Also 9 | 10 | * class [Result](./Result.md) 11 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 12 | 13 | 14 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedCommands/ShellCommand.EnumThreadDelegate.md: -------------------------------------------------------------------------------- 1 | # ShellCommand.EnumThreadDelegate delegate 2 | 3 | ```csharp 4 | public delegate bool EnumThreadDelegate(IntPtr hwnd, IntPtr lParam); 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [ShellCommand](./ShellCommand.md) 10 | * namespace [Flow.Launcher.Plugin.SharedCommands](../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/FlowLauncherQueryEventArgs/Query.md: -------------------------------------------------------------------------------- 1 | # FlowLauncherQueryEventArgs.Query property 2 | 3 | ```csharp 4 | public Query Query { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [Query](../Query.md) 10 | * class [FlowLauncherQueryEventArgs](../FlowLauncherQueryEventArgs.md) 11 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 12 | 13 | 14 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IContextMenu/LoadContextMenus.md: -------------------------------------------------------------------------------- 1 | # IContextMenu.LoadContextMenus method 2 | 3 | ```csharp 4 | public List LoadContextMenus(Result selectedResult) 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [Result](../Result.md) 10 | * interface [IContextMenu](../IContextMenu.md) 11 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 12 | 13 | 14 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/LogInfo.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.LogInfo method 2 | 3 | Log info message 4 | 5 | ```csharp 6 | public void LogInfo(string className, string message, [CallerMemberName] string methodName = "") 7 | ``` 8 | 9 | ## See Also 10 | 11 | * interface [IPublicAPI](../IPublicAPI.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Result/ContextData.md: -------------------------------------------------------------------------------- 1 | # Result.ContextData property 2 | 3 | Additional data associated with this result As external information for ContextMenu 4 | 5 | ```csharp 6 | public object ContextData { get; set; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [Result](../Result.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/ResultUpdatedEventArgs/ResultUpdatedEventArgs.md: -------------------------------------------------------------------------------- 1 | # ResultUpdatedEventArgs constructor 2 | 3 | The default constructor. 4 | 5 | ```csharp 6 | public ResultUpdatedEventArgs() 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [ResultUpdatedEventArgs](../ResultUpdatedEventArgs.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/FlowLauncherKeyDownEventArgs/keyEventArgs.md: -------------------------------------------------------------------------------- 1 | # FlowLauncherKeyDownEventArgs.keyEventArgs property 2 | 3 | ```csharp 4 | public KeyEventArgs keyEventArgs { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [FlowLauncherKeyDownEventArgs](../FlowLauncherKeyDownEventArgs.md) 10 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/GetAllPlugins.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.GetAllPlugins method 2 | 3 | Get all loaded plugins 4 | 5 | ```csharp 6 | public List GetAllPlugins() 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [PluginPair](../PluginPair.md) 12 | * interface [IPublicAPI](../IPublicAPI.md) 13 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 14 | 15 | 16 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/LogWarn.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.LogWarn method 2 | 3 | Log warning message 4 | 5 | ```csharp 6 | public void LogWarn(string className, string message, [CallerMemberName] string methodName = "") 7 | ``` 8 | 9 | ## See Also 10 | 11 | * interface [IPublicAPI](../IPublicAPI.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Result/IcoPath.md: -------------------------------------------------------------------------------- 1 | # Result.IcoPath property 2 | 3 | Image Displayed on the result Relative Path to the Image FileGlyphInfo is prioritized if not null 4 | 5 | ```csharp 6 | public string IcoPath { get; set; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [Result](../Result.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Result/TitleHighlightData.md: -------------------------------------------------------------------------------- 1 | # Result.TitleHighlightData property 2 | 3 | A list of indexes for the characters to be highlighted in Title 4 | 5 | ```csharp 6 | public IList TitleHighlightData { get; set; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [Result](../Result.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedCommands/ShellCommand/RunAsDifferentUser.md: -------------------------------------------------------------------------------- 1 | # ShellCommand.RunAsDifferentUser method 2 | 3 | ```csharp 4 | public static Process RunAsDifferentUser(ProcessStartInfo processStartInfo) 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [ShellCommand](../ShellCommand.md) 10 | * namespace [Flow.Launcher.Plugin.SharedCommands](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedModels/MatchResult/Score.md: -------------------------------------------------------------------------------- 1 | # MatchResult.Score property 2 | 3 | The final score of the match result with search precision filters applied. 4 | 5 | ```csharp 6 | public int Score { get; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [MatchResult](../MatchResult.md) 12 | * namespace [Flow.Launcher.Plugin.SharedModels](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/ActionContext/SpecialKeyState.md: -------------------------------------------------------------------------------- 1 | # ActionContext.SpecialKeyState property 2 | 3 | ```csharp 4 | public SpecialKeyState SpecialKeyState { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [SpecialKeyState](../SpecialKeyState.md) 10 | * class [ActionContext](../ActionContext.md) 11 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 12 | 13 | 14 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/SaveAppAllSettings.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.SaveAppAllSettings method 2 | 3 | Save everything, all of Flow Launcher and plugins' data and settings 4 | 5 | ```csharp 6 | public void SaveAppAllSettings() 7 | ``` 8 | 9 | ## See Also 10 | 11 | * interface [IPublicAPI](../IPublicAPI.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/ISettingProvider.md: -------------------------------------------------------------------------------- 1 | # ISettingProvider interface 2 | 3 | ```csharp 4 | public interface ISettingProvider 5 | ``` 6 | 7 | ## Members 8 | 9 | | name | description | 10 | | --- | --- | 11 | | [CreateSettingPanel](ISettingProvider/CreateSettingPanel.md)() | | 12 | 13 | ## See Also 14 | 15 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 16 | 17 | 18 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/AfterFlowLauncherQueryEventHandler.md: -------------------------------------------------------------------------------- 1 | # AfterFlowLauncherQueryEventHandler delegate 2 | 3 | ```csharp 4 | public delegate void AfterFlowLauncherQueryEventHandler(FlowLauncherQueryEventArgs e); 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [FlowLauncherQueryEventArgs](./FlowLauncherQueryEventArgs.md) 10 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/FlowLauncherKeyDownEventHandler.md: -------------------------------------------------------------------------------- 1 | # FlowLauncherKeyDownEventHandler delegate 2 | 3 | ```csharp 4 | public delegate void FlowLauncherKeyDownEventHandler(FlowLauncherKeyDownEventArgs e); 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [FlowLauncherKeyDownEventArgs](./FlowLauncherKeyDownEventArgs.md) 10 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/FlowLauncherQueryEventArgs/FlowLauncherQueryEventArgs.md: -------------------------------------------------------------------------------- 1 | # FlowLauncherQueryEventArgs constructor 2 | 3 | The default constructor. 4 | 5 | ```csharp 6 | public FlowLauncherQueryEventArgs() 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [FlowLauncherQueryEventArgs](../FlowLauncherQueryEventArgs.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginInitContext/API.md: -------------------------------------------------------------------------------- 1 | # PluginInitContext.API property 2 | 3 | Public APIs for plugin invocation 4 | 5 | ```csharp 6 | public IPublicAPI API { get; set; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * interface [IPublicAPI](../IPublicAPI.md) 12 | * class [PluginInitContext](../PluginInitContext.md) 13 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 14 | 15 | 16 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedCommands/FilesFolders/VerifyBothFolderFilesEqual.md: -------------------------------------------------------------------------------- 1 | # FilesFolders.VerifyBothFolderFilesEqual method 2 | 3 | ```csharp 4 | public static bool VerifyBothFolderFilesEqual(this string fromPath, string toPath) 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [FilesFolders](../FilesFolders.md) 10 | * namespace [Flow.Launcher.Plugin.SharedCommands](../../Flow.Launcher.Plugin.md) 11 | 12 | 13 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPluginI18n/OnCultureInfoChanged.md: -------------------------------------------------------------------------------- 1 | # IPluginI18n.OnCultureInfoChanged method 2 | 3 | The method will be invoked when language of flow changed 4 | 5 | ```csharp 6 | public void OnCultureInfoChanged(CultureInfo newCulture) 7 | ``` 8 | 9 | ## See Also 10 | 11 | * interface [IPluginI18n](../IPluginI18n.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Result/Glyph.md: -------------------------------------------------------------------------------- 1 | # Result.Glyph property 2 | 3 | Information for Glyph Icon (Prioritized than IcoPath/Icon if user enable Glyph Icons) 4 | 5 | ```csharp 6 | public GlyphInfo Glyph { get; set; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * record [GlyphInfo](../GlyphInfo.md) 12 | * class [Result](../Result.md) 13 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 14 | 15 | 16 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/FlowLauncherKeyDownEventArgs/FlowLauncherKeyDownEventArgs.md: -------------------------------------------------------------------------------- 1 | # FlowLauncherKeyDownEventArgs constructor 2 | 3 | The default constructor. 4 | 5 | ```csharp 6 | public FlowLauncherKeyDownEventArgs() 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [FlowLauncherKeyDownEventArgs](../FlowLauncherKeyDownEventArgs.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IResultUpdated/ResultsUpdated.md: -------------------------------------------------------------------------------- 1 | # IResultUpdated.ResultsUpdated event 2 | 3 | ```csharp 4 | public event ResultUpdatedEventHandler ResultsUpdated; 5 | ``` 6 | 7 | ## See Also 8 | 9 | * delegate [ResultUpdatedEventHandler](../ResultUpdatedEventHandler.md) 10 | * interface [IResultUpdated](../IResultUpdated.md) 11 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 12 | 13 | 14 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginInitContext/CurrentPluginMetadata.md: -------------------------------------------------------------------------------- 1 | # PluginInitContext.CurrentPluginMetadata property 2 | 3 | ```csharp 4 | public PluginMetadata CurrentPluginMetadata { get; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * class [PluginMetadata](../PluginMetadata.md) 10 | * class [PluginInitContext](../PluginInitContext.md) 11 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 12 | 13 | 14 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Query/RawQuery.md: -------------------------------------------------------------------------------- 1 | # Query.RawQuery property 2 | 3 | Raw query, this includes action keyword if it has We didn't recommend use this property directly. You should always use Search property. 4 | 5 | ```csharp 6 | public string RawQuery { get; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [Query](../Query.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /py-plugin-references.md: -------------------------------------------------------------------------------- 1 | ### Good references to follow 2 | 3 | Here are some plugins that could help you build out your own or serve as a reference point: 4 | - IsPrime https://github.com/lvonkacsoh/Flow.Launcher.Plugin.IsPrime 5 | - RollDice https://github.com/lvonkacsoh/Flow.Launcher.RollDice 6 | - FancyEmoji https://github.com/Ma-ve/Flow.Launcher.Plugin.FancyEmoji 7 | - Steam Search https://github.com/Garulf/Steam-Search 8 | - Currency Converter https://github.com/deefrawley/Flow.Launcher.Plugin.Currency 9 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedModels/MatchResult/SearchPrecision.md: -------------------------------------------------------------------------------- 1 | # MatchResult.SearchPrecision property 2 | 3 | ```csharp 4 | public SearchPrecisionScore SearchPrecision { get; set; } 5 | ``` 6 | 7 | ## See Also 8 | 9 | * enum [SearchPrecisionScore](../SearchPrecisionScore.md) 10 | * class [MatchResult](../MatchResult.md) 11 | * namespace [Flow.Launcher.Plugin.SharedModels](../../Flow.Launcher.Plugin.md) 12 | 13 | 14 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IContextMenu.md: -------------------------------------------------------------------------------- 1 | # IContextMenu interface 2 | 3 | ```csharp 4 | public interface IContextMenu : IFeatures 5 | ``` 6 | 7 | ## Members 8 | 9 | | name | description | 10 | | --- | --- | 11 | | [LoadContextMenus](IContextMenu/LoadContextMenus.md)(…) | | 12 | 13 | ## See Also 14 | 15 | * interface [IFeatures](./IFeatures.md) 16 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 17 | 18 | 19 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/LogDebug.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.LogDebug method 2 | 3 | Log debug message Message will only be logged in Debug mode 4 | 5 | ```csharp 6 | public void LogDebug(string className, string message, [CallerMemberName] string methodName = "") 7 | ``` 8 | 9 | ## See Also 10 | 11 | * interface [IPublicAPI](../IPublicAPI.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/OpenUrl.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.OpenUrl method 2 | 3 | Opens the url. The browser and mode used is based on what's configured in Flow's default browser settings. 4 | 5 | ```csharp 6 | public void OpenUrl(string url, bool? inPrivate = null) 7 | ``` 8 | 9 | ## See Also 10 | 11 | * interface [IPublicAPI](../IPublicAPI.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedModels/SearchPrecisionScore.md: -------------------------------------------------------------------------------- 1 | # SearchPrecisionScore enumeration 2 | 3 | ```csharp 4 | public enum SearchPrecisionScore 5 | ``` 6 | 7 | ## Values 8 | 9 | | name | value | description | 10 | | --- | --- | --- | 11 | | Regular | `50` | | 12 | | Low | `20` | | 13 | | None | `0` | | 14 | 15 | ## See Also 16 | 17 | * namespace [Flow.Launcher.Plugin.SharedModels](../Flow.Launcher.Plugin.md) 18 | 19 | 20 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IResultUpdated.md: -------------------------------------------------------------------------------- 1 | # IResultUpdated interface 2 | 3 | ```csharp 4 | public interface IResultUpdated : IFeatures 5 | ``` 6 | 7 | ## Members 8 | 9 | | name | description | 10 | | --- | --- | 11 | | event [ResultsUpdated](IResultUpdated/ResultsUpdated.md) | | 12 | 13 | ## See Also 14 | 15 | * interface [IFeatures](./IFeatures.md) 16 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 17 | 18 | 19 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/ResultUpdatedEventHandler.md: -------------------------------------------------------------------------------- 1 | # ResultUpdatedEventHandler delegate 2 | 3 | ```csharp 4 | public delegate void ResultUpdatedEventHandler(IResultUpdated sender, ResultUpdatedEventArgs e); 5 | ``` 6 | 7 | ## See Also 8 | 9 | * interface [IResultUpdated](./IResultUpdated.md) 10 | * class [ResultUpdatedEventArgs](./ResultUpdatedEventArgs.md) 11 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 12 | 13 | 14 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPlugin/Init.md: -------------------------------------------------------------------------------- 1 | # IPlugin.Init method 2 | 3 | Initialize plugin 4 | 5 | ```csharp 6 | public void Init(PluginInitContext context) 7 | ``` 8 | 9 | | parameter | description | 10 | | --- | --- | 11 | | context | | 12 | 13 | ## See Also 14 | 15 | * class [PluginInitContext](../PluginInitContext.md) 16 | * interface [IPlugin](../IPlugin.md) 17 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 18 | 19 | 20 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/CopyToClipboard.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.CopyToClipboard method 2 | 3 | Copy Text to clipboard 4 | 5 | ```csharp 6 | public void CopyToClipboard(string text) 7 | ``` 8 | 9 | | parameter | description | 10 | | --- | --- | 11 | | Text | Text to save on clipboard | 12 | 13 | ## See Also 14 | 15 | * interface [IPublicAPI](../IPublicAPI.md) 16 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 17 | 18 | 19 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Result/ActionKeywordAssigned.md: -------------------------------------------------------------------------------- 1 | # Result.ActionKeywordAssigned property 2 | 3 | This holds the action keyword that triggered the result. If result is triggered by global keyword: *, this should be empty. 4 | 5 | ```csharp 6 | public string ActionKeywordAssigned { get; set; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [Result](../Result.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/ReloadAllPluginData.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.ReloadAllPluginData method 2 | 3 | Reloads any Plugins that have the IReloadable implemented. It refreshes Plugin's in memory data with new content added by user. 4 | 5 | ```csharp 6 | public Task ReloadAllPluginData() 7 | ``` 8 | 9 | ## See Also 10 | 11 | * interface [IPublicAPI](../IPublicAPI.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/ActionContext.md: -------------------------------------------------------------------------------- 1 | # ActionContext class 2 | 3 | ```csharp 4 | public class ActionContext 5 | ``` 6 | 7 | ## Public Members 8 | 9 | | name | description | 10 | | --- | --- | 11 | | [ActionContext](ActionContext/ActionContext.md)() | The default constructor. | 12 | | [SpecialKeyState](ActionContext/SpecialKeyState.md) { get; set; } | | 13 | 14 | ## See Also 15 | 16 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 17 | 18 | 19 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/GlyphInfo/GlyphInfo.md: -------------------------------------------------------------------------------- 1 | # GlyphInfo constructor 2 | 3 | Text with FontFamily specified 4 | 5 | ```csharp 6 | public GlyphInfo(string FontFamily, string Glyph) 7 | ``` 8 | 9 | | parameter | description | 10 | | --- | --- | 11 | | FontFamily | Font Family of this Glyph | 12 | | Glyph | Text/Unicode of the Glyph | 13 | 14 | ## See Also 15 | 16 | * record [GlyphInfo](../GlyphInfo.md) 17 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 18 | 19 | 20 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Result/Action.md: -------------------------------------------------------------------------------- 1 | # Result.Action property 2 | 3 | Delegate. An action to take in the form of a function call when the result has been selected true to hide flowlauncher after select result 4 | 5 | ```csharp 6 | public Func Action { get; set; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [ActionContext](../ActionContext.md) 12 | * class [Result](../Result.md) 13 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 14 | 15 | 16 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedCommands/ShellCommand/SetProcessStartInfo.md: -------------------------------------------------------------------------------- 1 | # ShellCommand.SetProcessStartInfo method 2 | 3 | ```csharp 4 | public static ProcessStartInfo SetProcessStartInfo(this string fileName, 5 | string workingDirectory = "", string arguments = "", string verb = "", 6 | bool createNoWindow = false) 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [ShellCommand](../ShellCommand.md) 12 | * namespace [Flow.Launcher.Plugin.SharedCommands](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedCommands/SearchWeb/OpenInBrowserTab.md: -------------------------------------------------------------------------------- 1 | # SearchWeb.OpenInBrowserTab method 2 | 3 | Opens search as a tab in the default browser chosen in Windows settings. 4 | 5 | ```csharp 6 | public static void OpenInBrowserTab(this string url, string browserPath = "", 7 | bool inPrivate = false, string privateArg = "") 8 | ``` 9 | 10 | ## See Also 11 | 12 | * class [SearchWeb](../SearchWeb.md) 13 | * namespace [Flow.Launcher.Plugin.SharedCommands](../../Flow.Launcher.Plugin.md) 14 | 15 | 16 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/GetTranslation.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.GetTranslation method 2 | 3 | Get translation of current language You need to implement IPluginI18n if you want to support multiple languages for your plugin 4 | 5 | ```csharp 6 | public string GetTranslation(string key) 7 | ``` 8 | 9 | | parameter | description | 10 | | --- | --- | 11 | | key | | 12 | 13 | ## See Also 14 | 15 | * interface [IPublicAPI](../IPublicAPI.md) 16 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 17 | 18 | 19 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedCommands/FilesFolders/IsLocationPathString.md: -------------------------------------------------------------------------------- 1 | # FilesFolders.IsLocationPathString method 2 | 3 | This checks whether a given string is a directory path or network location string. It does not check if location actually exists. 4 | 5 | ```csharp 6 | public static bool IsLocationPathString(this string querySearchString) 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [FilesFolders](../FilesFolders.md) 12 | * namespace [Flow.Launcher.Plugin.SharedCommands](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/ShowMsgError.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.ShowMsgError method 2 | 3 | Show the error message using Flow's standard error icon. 4 | 5 | ```csharp 6 | public void ShowMsgError(string title, string subTitle = "") 7 | ``` 8 | 9 | | parameter | description | 10 | | --- | --- | 11 | | title | Message title | 12 | | subTitle | Optional message subtitle | 13 | 14 | ## See Also 15 | 16 | * interface [IPublicAPI](../IPublicAPI.md) 17 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 18 | 19 | 20 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/GlyphInfo.md: -------------------------------------------------------------------------------- 1 | # GlyphInfo record 2 | 3 | Text with FontFamily specified 4 | 5 | ```csharp 6 | public record GlyphInfo 7 | ``` 8 | 9 | ## Public Members 10 | 11 | | name | description | 12 | | --- | --- | 13 | | [GlyphInfo](GlyphInfo/GlyphInfo.md)(…) | Text with FontFamily specified | 14 | | [FontFamily](GlyphInfo/FontFamily.md) { get; set; } | | 15 | | [Glyph](GlyphInfo/Glyph.md) { get; set; } | | 16 | 17 | ## See Also 18 | 19 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 20 | 21 | 22 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IAsyncPlugin/InitAsync.md: -------------------------------------------------------------------------------- 1 | # IAsyncPlugin.InitAsync method 2 | 3 | Initialize plugin asynchronously (will still wait finish to continue) 4 | 5 | ```csharp 6 | public Task InitAsync(PluginInitContext context) 7 | ``` 8 | 9 | | parameter | description | 10 | | --- | --- | 11 | | context | | 12 | 13 | ## See Also 14 | 15 | * class [PluginInitContext](../PluginInitContext.md) 16 | * interface [IAsyncPlugin](../IAsyncPlugin.md) 17 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 18 | 19 | 20 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/FlowLauncherQueryEventArgs.md: -------------------------------------------------------------------------------- 1 | # FlowLauncherQueryEventArgs class 2 | 3 | ```csharp 4 | public class FlowLauncherQueryEventArgs 5 | ``` 6 | 7 | ## Public Members 8 | 9 | | name | description | 10 | | --- | --- | 11 | | [FlowLauncherQueryEventArgs](FlowLauncherQueryEventArgs/FlowLauncherQueryEventArgs.md)() | The default constructor. | 12 | | [Query](FlowLauncherQueryEventArgs/Query.md) { get; set; } | | 13 | 14 | ## See Also 15 | 16 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 17 | 18 | 19 | -------------------------------------------------------------------------------- /ci/src/_utils.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | ghtoken = os.getenv("GH_TOKEN") 4 | repository = os.getenv("REPOSITORY") 5 | 6 | plugin_markdown = os.getenv("PLUGIN_MARKDOWN") 7 | plugin_json = os.getenv("PLUGIN_JSON") 8 | 9 | plugin_name = os.getenv("PLUGIN_NAME") 10 | plugin_author = os.getenv("PLUGIN_AUTHOR") 11 | plugin_description = os.getenv("PLUGIN_DESCRIPTION") 12 | plugin_version = os.getenv("PLUGIN_VERSION") 13 | plugin_website = os.getenv("PLUGIN_WEBSITE") 14 | 15 | START_COMMENT = "" 16 | END_COMMENT = "" 17 | plugin_md_reg = f"{START_COMMENT}[\\s\\S]+{END_COMMENT}" 18 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Query/Search.md: -------------------------------------------------------------------------------- 1 | # Query.Search property 2 | 3 | Search part of a query. This will not include action keyword if exclusive plugin gets it, otherwise it should be same as RawQuery. Since we allow user to switch a exclusive plugin to generic plugin, so this property will always give you the "real" query part of the query 4 | 5 | ```csharp 6 | public string Search { get; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [Query](../Query.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IAsyncPlugin.md: -------------------------------------------------------------------------------- 1 | # IAsyncPlugin interface 2 | 3 | Asynchronous Plugin Model for Flow Launcher 4 | 5 | ```csharp 6 | public interface IAsyncPlugin 7 | ``` 8 | 9 | ## Members 10 | 11 | | name | description | 12 | | --- | --- | 13 | | [InitAsync](IAsyncPlugin/InitAsync.md)(…) | Initialize plugin asynchronously (will still wait finish to continue) | 14 | | [QueryAsync](IAsyncPlugin/QueryAsync.md)(…) | Asynchronous Querying | 15 | 16 | ## See Also 17 | 18 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 19 | 20 | 21 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/LogException.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.LogException method 2 | 3 | Log an Exception. Will throw if in debug mode so developer will be aware, otherwise logs the error message. This is the primary logging method used for Flow 4 | 5 | ```csharp 6 | public void LogException(string className, string message, Exception e, 7 | [CallerMemberName] string methodName = "") 8 | ``` 9 | 10 | ## See Also 11 | 12 | * interface [IPublicAPI](../IPublicAPI.md) 13 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 14 | 15 | 16 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedCommands/FilesFolders/CopyAll.md: -------------------------------------------------------------------------------- 1 | # FilesFolders.CopyAll method 2 | 3 | Copies the folder and all of its files and folders including subfolders to the target location 4 | 5 | ```csharp 6 | public static void CopyAll(this string sourcePath, string targetPath) 7 | ``` 8 | 9 | | parameter | description | 10 | | --- | --- | 11 | | sourcePath | | 12 | | targetPath | | 13 | 14 | ## See Also 15 | 16 | * class [FilesFolders](../FilesFolders.md) 17 | * namespace [Flow.Launcher.Plugin.SharedCommands](../../Flow.Launcher.Plugin.md) 18 | 19 | 20 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedCommands/SearchWeb/OpenInBrowserWindow.md: -------------------------------------------------------------------------------- 1 | # SearchWeb.OpenInBrowserWindow method 2 | 3 | Opens search in a new browser. If no browser path is passed in then Chrome is used. Leave browser path blank to use Chrome. 4 | 5 | ```csharp 6 | public static void OpenInBrowserWindow(this string url, string browserPath = "", 7 | bool inPrivate = false, string privateArg = "") 8 | ``` 9 | 10 | ## See Also 11 | 12 | * class [SearchWeb](../SearchWeb.md) 13 | * namespace [Flow.Launcher.Plugin.SharedCommands](../../Flow.Launcher.Plugin.md) 14 | 15 | 16 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/RemoveGlobalKeyboardCallback.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.RemoveGlobalKeyboardCallback method 2 | 3 | Remove a callback for Global Keyboard Event 4 | 5 | ```csharp 6 | public void RemoveGlobalKeyboardCallback(Func callback) 7 | ``` 8 | 9 | | parameter | description | 10 | | --- | --- | 11 | | callback | | 12 | 13 | ## See Also 14 | 15 | * class [SpecialKeyState](../SpecialKeyState.md) 16 | * interface [IPublicAPI](../IPublicAPI.md) 17 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 18 | 19 | 20 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/RegisterGlobalKeyboardCallback.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.RegisterGlobalKeyboardCallback method 2 | 3 | Register a callback for Global Keyboard Event 4 | 5 | ```csharp 6 | public void RegisterGlobalKeyboardCallback(Func callback) 7 | ``` 8 | 9 | | parameter | description | 10 | | --- | --- | 11 | | callback | | 12 | 13 | ## See Also 14 | 15 | * class [SpecialKeyState](../SpecialKeyState.md) 16 | * interface [IPublicAPI](../IPublicAPI.md) 17 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 18 | 19 | 20 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPlugin/Query.md: -------------------------------------------------------------------------------- 1 | # IPlugin.Query method 2 | 3 | Querying when user's search changes 4 | 5 | This method will be called within a Task.Run, so please avoid synchronously wait for long. 6 | 7 | ```csharp 8 | public List Query(Query query) 9 | ``` 10 | 11 | | parameter | description | 12 | | --- | --- | 13 | | query | Query to search | 14 | 15 | ## See Also 16 | 17 | * class [Result](../Result.md) 18 | * class [Query](../Query.md) 19 | * interface [IPlugin](../IPlugin.md) 20 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 21 | 22 | 23 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Result/AutoCompleteText.md: -------------------------------------------------------------------------------- 1 | # Result.AutoCompleteText property 2 | 3 | This holds the text which can be provided by plugin to help Flow autocomplete text for user on the plugin result. If autocomplete action for example is tab, pressing tab will have the default constructed autocomplete text (result's Title), or the text provided here if not empty. 4 | 5 | ```csharp 6 | public string AutoCompleteText { get; set; } 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [Result](../Result.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IAsyncPlugin/QueryAsync.md: -------------------------------------------------------------------------------- 1 | # IAsyncPlugin.QueryAsync method 2 | 3 | Asynchronous Querying 4 | 5 | ```csharp 6 | public Task> QueryAsync(Query query, CancellationToken token) 7 | ``` 8 | 9 | | parameter | description | 10 | | --- | --- | 11 | | query | Query to search | 12 | | token | Cancel when querying job is obsolete | 13 | 14 | ## See Also 15 | 16 | * class [Result](../Result.md) 17 | * class [Query](../Query.md) 18 | * interface [IAsyncPlugin](../IAsyncPlugin.md) 19 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 20 | 21 | 22 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/AddActionKeyword.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.AddActionKeyword method 2 | 3 | Add ActionKeyword for specific plugin 4 | 5 | ```csharp 6 | public void AddActionKeyword(string pluginId, string newActionKeyword) 7 | ``` 8 | 9 | | parameter | description | 10 | | --- | --- | 11 | | pluginId | ID for plugin that needs to add action keyword | 12 | | newActionKeyword | The actionkeyword that is supposed to be added | 13 | 14 | ## See Also 15 | 16 | * interface [IPublicAPI](../IPublicAPI.md) 17 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 18 | 19 | 20 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/OpenDirectory.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.OpenDirectory method 2 | 3 | Open directory in an explorer configured by user via Flow's Settings. The default is Windows Explorer 4 | 5 | ```csharp 6 | public void OpenDirectory(string DirectoryPath, string FileName = null) 7 | ``` 8 | 9 | | parameter | description | 10 | | --- | --- | 11 | | DirectoryPath | Directory Path to open | 12 | | FileName | Extra FileName Info | 13 | 14 | ## See Also 15 | 16 | * interface [IPublicAPI](../IPublicAPI.md) 17 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 18 | 19 | 20 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedCommands/FilesFolders/GetPreviousExistingDirectory.md: -------------------------------------------------------------------------------- 1 | # FilesFolders.GetPreviousExistingDirectory method 2 | 3 | Gets the previous level directory from a path string. Checks that previous level directory exists and returns it as a path string, or empty string if doesn't exist 4 | 5 | ```csharp 6 | public static string GetPreviousExistingDirectory(Func locationExists, string path) 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [FilesFolders](../FilesFolders.md) 12 | * namespace [Flow.Launcher.Plugin.SharedCommands](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /plugin-dev.md: -------------------------------------------------------------------------------- 1 | # Get Started 2 | 3 | Welcome to the comprehensive guide to plugin development in Flow Launcher. 4 | 5 | ## Types of plugin implementation 6 | 7 | While Flow Launcher is written in C#, plugins can be written natively or in other languages. 8 | 9 | ### Natively (no integration needed) 10 | 11 | - [**C# (.NET framework)**](/develop-dotnet-plugins.md) 12 | 13 | ### Using JSON-RPC 14 | 15 | For other languages, Flow launcher communicates with the plugin via [JSON-RPC](/json-rpc.md). 16 | 17 | Currently supported languages are: 18 | 19 | - [**Python**](/py-develop-plugins.md) 20 | - [**JavaScript / TypeScript (NodeJS)**](/nodejs-develop-plugins.md) 21 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/BaseModel.md: -------------------------------------------------------------------------------- 1 | # BaseModel class 2 | 3 | ```csharp 4 | public class BaseModel : INotifyPropertyChanged 5 | ``` 6 | 7 | ## Public Members 8 | 9 | | name | description | 10 | | --- | --- | 11 | | [BaseModel](BaseModel/BaseModel.md)() | The default constructor. | 12 | | event [PropertyChanged](BaseModel/PropertyChanged.md) | | 13 | 14 | ## Protected Members 15 | 16 | | name | description | 17 | | --- | --- | 18 | | [OnPropertyChanged](BaseModel/OnPropertyChanged.md)(…) | | 19 | 20 | ## See Also 21 | 22 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 23 | 24 | 25 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/RemoveActionKeyword.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.RemoveActionKeyword method 2 | 3 | Remove ActionKeyword for specific plugin 4 | 5 | ```csharp 6 | public void RemoveActionKeyword(string pluginId, string oldActionKeyword) 7 | ``` 8 | 9 | | parameter | description | 10 | | --- | --- | 11 | | pluginId | ID for plugin that needs to remove action keyword | 12 | | newActionKeyword | The actionkeyword that is supposed to be removed | 13 | 14 | ## See Also 15 | 16 | * interface [IPublicAPI](../IPublicAPI.md) 17 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 18 | 19 | 20 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedCommands/FilesFolders/ReturnPreviousDirectoryIfIncompleteString.md: -------------------------------------------------------------------------------- 1 | # FilesFolders.ReturnPreviousDirectoryIfIncompleteString method 2 | 3 | Returns the previous level directory if path incomplete (does not end with '\'). Does not check if previous level directory exists. Returns passed in string if is complete path 4 | 5 | ```csharp 6 | public static string ReturnPreviousDirectoryIfIncompleteString(string path) 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [FilesFolders](../FilesFolders.md) 12 | * namespace [Flow.Launcher.Plugin.SharedCommands](../../Flow.Launcher.Plugin.md) 13 | 14 | 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/ChangeQuery.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.ChangeQuery method 2 | 3 | Change Flow.Launcher query 4 | 5 | ```csharp 6 | public void ChangeQuery(string query, bool requery = false) 7 | ``` 8 | 9 | | parameter | description | 10 | | --- | --- | 11 | | query | query text | 12 | | requery | 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 | 13 | 14 | ## See Also 15 | 16 | * interface [IPublicAPI](../IPublicAPI.md) 17 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 18 | 19 | 20 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/HttpGetStreamAsync.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.HttpGetStreamAsync method 2 | 3 | Http download the specific url and return as stream 4 | 5 | ```csharp 6 | public Task HttpGetStreamAsync(string url, CancellationToken token = default) 7 | ``` 8 | 9 | | parameter | description | 10 | | --- | --- | 11 | | url | URL to call Http Get | 12 | | token | Cancellation Token | 13 | 14 | ## Return Value 15 | 16 | Task to get stream result 17 | 18 | ## See Also 19 | 20 | * interface [IPublicAPI](../IPublicAPI.md) 21 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 22 | 23 | 24 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/HttpGetStringAsync.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.HttpGetStringAsync method 2 | 3 | Http download the specific url and return as string 4 | 5 | ```csharp 6 | public Task HttpGetStringAsync(string url, CancellationToken token = default) 7 | ``` 8 | 9 | | parameter | description | 10 | | --- | --- | 11 | | url | URL to call Http Get | 12 | | token | Cancellation Token | 13 | 14 | ## Return Value 15 | 16 | Task to get string result 17 | 18 | ## See Also 19 | 20 | * interface [IPublicAPI](../IPublicAPI.md) 21 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 22 | 23 | 24 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/HttpDownloadAsync.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.HttpDownloadAsync method 2 | 3 | Download the specific url to a certain file path 4 | 5 | ```csharp 6 | public Task HttpDownloadAsync(string url, string filePath, CancellationToken token = default) 7 | ``` 8 | 9 | | parameter | description | 10 | | --- | --- | 11 | | url | URL to download file | 12 | | token | place to store file | 13 | 14 | ## Return Value 15 | 16 | Task showing the progress 17 | 18 | ## See Also 19 | 20 | * interface [IPublicAPI](../IPublicAPI.md) 21 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 22 | 23 | 24 | -------------------------------------------------------------------------------- /webcomponents/src/settings-generators/ts.ts: -------------------------------------------------------------------------------- 1 | import type { TypingGenerator } from './TypingGenerator'; 2 | 3 | export const generateTypings = (data => { 4 | return `interface Settings { 5 | ${data 6 | .filter(v => v.type !== 'textBlock') 7 | .map(input => { 8 | if (input.type !== 'dropdown') 9 | return `${input.attributes.name}: ${input.attributes.defaultValue ? `string` : `string | undefined`};`; 10 | else { 11 | const options = input.attributes.options 12 | ?.map(option => `"${option.replace(/"/g, '\\"')}"`) 13 | .join(' | '); 14 | return `${input.attributes.name}: ${options};`; 15 | } 16 | }) 17 | .join('\n\t') 18 | } 19 | }`; 20 | }) satisfies TypingGenerator; 21 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/ResultUpdatedEventArgs.md: -------------------------------------------------------------------------------- 1 | # ResultUpdatedEventArgs class 2 | 3 | ```csharp 4 | public class ResultUpdatedEventArgs : EventArgs 5 | ``` 6 | 7 | ## Public Members 8 | 9 | | name | description | 10 | | --- | --- | 11 | | [ResultUpdatedEventArgs](ResultUpdatedEventArgs/ResultUpdatedEventArgs.md)() | The default constructor. | 12 | | [Token](ResultUpdatedEventArgs/Token.md) { get; set; } | | 13 | | [Query](ResultUpdatedEventArgs/Query.md) | | 14 | | [Results](ResultUpdatedEventArgs/Results.md) | | 15 | 16 | ## See Also 17 | 18 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 19 | 20 | 21 | -------------------------------------------------------------------------------- /_coverpage.md: -------------------------------------------------------------------------------- 1 | 2 | Flow Launcher logo 7 | 8 | 9 | # Flow Launcher 10 | 11 | > Launch apps with greater control, search files effortlessly and extend features with community plugins. 12 | 13 | > Fast and fluid productivity tool of choice that helps your workflow. 14 | 15 | - Search Everything 16 | - Plugin Support 17 | - Native Shell Support 18 | 19 | [GitHub](https://github.com/Flow-Launcher/Flow.Launcher) 20 | [Getting Started](#welcome) 21 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/FlowLauncherKeyDownEventArgs.md: -------------------------------------------------------------------------------- 1 | # FlowLauncherKeyDownEventArgs class 2 | 3 | ```csharp 4 | public class FlowLauncherKeyDownEventArgs 5 | ``` 6 | 7 | ## Public Members 8 | 9 | | name | description | 10 | | --- | --- | 11 | | [FlowLauncherKeyDownEventArgs](FlowLauncherKeyDownEventArgs/FlowLauncherKeyDownEventArgs.md)() | The default constructor. | 12 | | [keyEventArgs](FlowLauncherKeyDownEventArgs/keyEventArgs.md) { get; set; } | | 13 | | [Query](FlowLauncherKeyDownEventArgs/Query.md) { get; set; } | | 14 | 15 | ## See Also 16 | 17 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 18 | 19 | 20 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/LoadSettingJsonStorage.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.LoadSettingJsonStorage<T> method 2 | 3 | Load JsonStorage for current plugin's setting. This is the method used to load settings from json in Flow. When the file is not exist, it will create a new instance for the specific type. 4 | 5 | ```csharp 6 | public T LoadSettingJsonStorage() 7 | where T : new() 8 | ``` 9 | 10 | | parameter | description | 11 | | --- | --- | 12 | | T | Type for deserialization | 13 | 14 | ## See Also 15 | 16 | * interface [IPublicAPI](../IPublicAPI.md) 17 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 18 | 19 | 20 | -------------------------------------------------------------------------------- /settings.md: -------------------------------------------------------------------------------- 1 | ### Settings 2 | 3 | The settings allow you to configure and customise Flow and its plugins, and gives visual access to the Plugin Store. 4 | 5 | 6 | Settings can be accessed three ways: 7 | 8 | 1. Type `settings` in the Flow Launcher search bar and choose "Tweak Flow Launcher's settings". 9 | 10 | ![Settings via search bar](/assets/Flow_settings_launch.png) 11 | 12 | 2. Right-click on the Flow Launcher taskbar icon and choose "Settings". 13 | 14 | ![Settings via taskbar](/assets/Flow_settings_taskbar.png) 15 | 16 | 3. Activate Flow Launcher and right-click anywhere in the search bar and choose "Settings". 17 | 18 | ![Settings via search bar right-click](/assets/Flow_settings_launch_right_click.png) 19 | 20 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginPair.md: -------------------------------------------------------------------------------- 1 | # PluginPair class 2 | 3 | ```csharp 4 | public class PluginPair 5 | ``` 6 | 7 | ## Public Members 8 | 9 | | name | description | 10 | | --- | --- | 11 | | [PluginPair](PluginPair/PluginPair.md)() | The default constructor. | 12 | | [Metadata](PluginPair/Metadata.md) { get; } | | 13 | | [Plugin](PluginPair/Plugin.md) { get; } | | 14 | | override [Equals](PluginPair/Equals.md)(…) | | 15 | | override [GetHashCode](PluginPair/GetHashCode.md)() | | 16 | | override [ToString](PluginPair/ToString.md)() | | 17 | 18 | ## See Also 19 | 20 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 21 | 22 | 23 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginInitContext.md: -------------------------------------------------------------------------------- 1 | # PluginInitContext class 2 | 3 | ```csharp 4 | public class PluginInitContext 5 | ``` 6 | 7 | ## Public Members 8 | 9 | | name | description | 10 | | --- | --- | 11 | | [PluginInitContext](PluginInitContext/PluginInitContext.md)() | The default constructor. | 12 | | [PluginInitContext](PluginInitContext/PluginInitContext.md)(…) | | 13 | | [API](PluginInitContext/API.md) { get; set; } | Public APIs for plugin invocation | 14 | | [CurrentPluginMetadata](PluginInitContext/CurrentPluginMetadata.md) { get; } | | 15 | 16 | ## See Also 17 | 18 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 19 | 20 | 21 | -------------------------------------------------------------------------------- /webcomponents/src/settings-generators/js.ts: -------------------------------------------------------------------------------- 1 | import type { TypingGenerator } from './TypingGenerator'; 2 | 3 | export const generateTypings = (data => { 4 | return `/** 5 | * @typedef {object} Settings 6 | ${data 7 | .filter(v => v.type !== 'textBlock') 8 | .map(input => { 9 | if (input.type !== 'dropdown') 10 | return `* @property {${input.attributes.defaultValue ? `string` : `string | undefined`}} ${input.attributes.name}`; 11 | else { 12 | const options = input.attributes.options 13 | ?.map(option => `"${option.replace(/"/g, '\\"')}"`) 14 | .join(' | '); 15 | return `* @property {${options}} ${input.attributes.name}`; 16 | } 17 | }) 18 | .join('\n ') 19 | } 20 | */`; 21 | }) satisfies TypingGenerator; 22 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedCommands/SearchWeb.md: -------------------------------------------------------------------------------- 1 | # SearchWeb class 2 | 3 | ```csharp 4 | public static class SearchWeb 5 | ``` 6 | 7 | ## Public Members 8 | 9 | | name | description | 10 | | --- | --- | 11 | | static [OpenInBrowserTab](SearchWeb/OpenInBrowserTab.md)(…) | Opens search as a tab in the default browser chosen in Windows settings. | 12 | | static [OpenInBrowserWindow](SearchWeb/OpenInBrowserWindow.md)(…) | Opens search in a new browser. If no browser path is passed in then Chrome is used. Leave browser path blank to use Chrome. | 13 | 14 | ## See Also 15 | 16 | * namespace [Flow.Launcher.Plugin.SharedCommands](../Flow.Launcher.Plugin.md) 17 | 18 | 19 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Query/Query.md: -------------------------------------------------------------------------------- 1 | # Query constructor (1 of 2) 2 | 3 | The default constructor. 4 | 5 | ```csharp 6 | public Query() 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [Query](../Query.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | --- 15 | 16 | # Query constructor (2 of 2) 17 | 18 | to allow unit tests for plug ins 19 | 20 | ```csharp 21 | public Query(string rawQuery, string search, string[] terms, string[] searchTerms, 22 | string actionKeyword = "") 23 | ``` 24 | 25 | ## See Also 26 | 27 | * class [Query](../Query.md) 28 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 29 | 30 | 31 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/ISavable.md: -------------------------------------------------------------------------------- 1 | # ISavable interface 2 | 3 | Save additional plugin data. Inherit this interface if additional data e.g. cache needs to be saved, Otherwise if LoadSettingJsonStorage or SaveSettingJsonStorage has been called, plugin settings will be automatically saved (see Flow.Launcher/PublicAPIInstance.SavePluginSettings) by Flow 4 | 5 | ```csharp 6 | public interface ISavable : IFeatures 7 | ``` 8 | 9 | ## Members 10 | 11 | | name | description | 12 | | --- | --- | 13 | | [Save](ISavable/Save.md)() | | 14 | 15 | ## See Also 16 | 17 | * interface [IFeatures](./IFeatures.md) 18 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 19 | 20 | 21 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/SpecialKeyState.md: -------------------------------------------------------------------------------- 1 | # SpecialKeyState class 2 | 3 | ```csharp 4 | public class SpecialKeyState 5 | ``` 6 | 7 | ## Public Members 8 | 9 | | name | description | 10 | | --- | --- | 11 | | [SpecialKeyState](SpecialKeyState/SpecialKeyState.md)() | The default constructor. | 12 | | [AltPressed](SpecialKeyState/AltPressed.md) { get; set; } | | 13 | | [CtrlPressed](SpecialKeyState/CtrlPressed.md) { get; set; } | | 14 | | [ShiftPressed](SpecialKeyState/ShiftPressed.md) { get; set; } | | 15 | | [WinPressed](SpecialKeyState/WinPressed.md) { get; set; } | | 16 | 17 | ## See Also 18 | 19 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 20 | 21 | 22 | -------------------------------------------------------------------------------- /webcomponents/rollup.config.dev.js: -------------------------------------------------------------------------------- 1 | import svelte from "rollup-plugin-svelte"; 2 | import resolve from "@rollup/plugin-node-resolve"; 3 | import sveltePreprocess from "svelte-preprocess"; 4 | import typescript from "@rollup/plugin-typescript"; 5 | 6 | export default { 7 | input: 'src/index.ts', 8 | output: { 9 | sourcemap: false, 10 | file: 'dist/flow-launcher-docs-web-components.js', 11 | }, 12 | plugins: [ 13 | svelte({ 14 | compilerOptions: { 15 | customElement: true, 16 | }, 17 | preprocess: sveltePreprocess({typescript: true}), 18 | }), 19 | resolve({ 20 | browser: true, 21 | dedupe: ["svelte"] 22 | }), 23 | typescript(), 24 | ], 25 | watch: { 26 | clearScreen: false, 27 | }, 28 | }; 29 | -------------------------------------------------------------------------------- /webcomponents/src/components/PluginDisplay.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 15 | 16 | {plugin.Description ?? ""} 17 | {plugin.Author ?? ""} 18 | {plugin.Version ?? ""} 19 | 20 | 21 | 33 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedCommands/ShellCommand.md: -------------------------------------------------------------------------------- 1 | # ShellCommand class 2 | 3 | ```csharp 4 | public static class ShellCommand 5 | ``` 6 | 7 | ## Public Members 8 | 9 | | name | description | 10 | | --- | --- | 11 | | static [Execute](ShellCommand/Execute.md)(…) | Runs a windows command using the provided ProcessStartInfo (2 methods) | 12 | | static [RunAsDifferentUser](ShellCommand/RunAsDifferentUser.md)(…) | | 13 | | static [SetProcessStartInfo](ShellCommand/SetProcessStartInfo.md)(…) | | 14 | | delegate [EnumThreadDelegate](ShellCommand.EnumThreadDelegate.md) | | 15 | 16 | ## See Also 17 | 18 | * namespace [Flow.Launcher.Plugin.SharedCommands](../Flow.Launcher.Plugin.md) 19 | 20 | 21 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/AllowedLanguage.md: -------------------------------------------------------------------------------- 1 | # AllowedLanguage class 2 | 3 | ```csharp 4 | public static class AllowedLanguage 5 | ``` 6 | 7 | ## Public Members 8 | 9 | | name | description | 10 | | --- | --- | 11 | | static [CSharp](AllowedLanguage/CSharp.md) { get; } | | 12 | | static [Executable](AllowedLanguage/Executable.md) { get; } | | 13 | | static [FSharp](AllowedLanguage/FSharp.md) { get; } | | 14 | | static [Python](AllowedLanguage/Python.md) { get; } | | 15 | | static [IsAllowed](AllowedLanguage/IsAllowed.md)(…) | | 16 | | static [IsDotNet](AllowedLanguage/IsDotNet.md)(…) | | 17 | 18 | ## See Also 19 | 20 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 21 | 22 | 23 | -------------------------------------------------------------------------------- /webcomponents/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "flow-launcher-docs-web-components", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "type": "module", 7 | "scripts": { 8 | "build": "rollup -c", 9 | "dev": "rollup -c rollup.config.dev.js -w" 10 | }, 11 | "author": "", 12 | "license": "ISC", 13 | "devDependencies": { 14 | "@rollup/plugin-node-resolve": "^15.2.3", 15 | "@rollup/plugin-terser": "^0.4.4", 16 | "@rollup/plugin-typescript": "^11.1.6", 17 | "@types/js-yaml": "^4.0.9", 18 | "js-yaml": "^4.1.0", 19 | "rollup": "^4.12.0", 20 | "rollup-plugin-svelte": "^7.1.6", 21 | "svelte": "^4.2.12", 22 | "svelte-preprocess": "^5.1.3", 23 | "tslib": "^2.6.2", 24 | "typescript": "^5.3.3" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPlugin.md: -------------------------------------------------------------------------------- 1 | # IPlugin interface 2 | 3 | Synchronous Plugin Model for Flow Launcher 4 | 5 | If the Querying or Init method requires high IO transmission or performing CPU intense jobs (performing better with cancellation), please try the IAsyncPlugin interface 6 | 7 | ```csharp 8 | public interface IPlugin : IAsyncPlugin 9 | ``` 10 | 11 | ## Members 12 | 13 | | name | description | 14 | | --- | --- | 15 | | [Init](IPlugin/Init.md)(…) | Initialize plugin | 16 | | [Query](IPlugin/Query.md)(…) | Querying when user's search changes | 17 | 18 | ## See Also 19 | 20 | * interface [IAsyncPlugin](./IAsyncPlugin.md) 21 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 22 | 23 | 24 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPluginI18n.md: -------------------------------------------------------------------------------- 1 | # IPluginI18n interface 2 | 3 | Represent plugins that support internationalization 4 | 5 | ```csharp 6 | public interface IPluginI18n : IFeatures 7 | ``` 8 | 9 | ## Members 10 | 11 | | name | description | 12 | | --- | --- | 13 | | [GetTranslatedPluginDescription](IPluginI18n/GetTranslatedPluginDescription.md)() | | 14 | | [GetTranslatedPluginTitle](IPluginI18n/GetTranslatedPluginTitle.md)() | | 15 | | [OnCultureInfoChanged](IPluginI18n/OnCultureInfoChanged.md)(…) | The method will be invoked when language of flow changed | 16 | 17 | ## See Also 18 | 19 | * interface [IFeatures](./IFeatures.md) 20 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 21 | 22 | 23 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/FuzzySearch.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.FuzzySearch method 2 | 3 | Fuzzy Search the string with the given query. This is the core search mechanism Flow uses 4 | 5 | ```csharp 6 | public MatchResult FuzzySearch(string query, string stringToCompare) 7 | ``` 8 | 9 | | parameter | description | 10 | | --- | --- | 11 | | query | Query string | 12 | | stringToCompare | The string that will be compared against the query | 13 | 14 | ## Return Value 15 | 16 | Match results 17 | 18 | ## See Also 19 | 20 | * class [MatchResult](../../Flow.Launcher.Plugin.SharedModels/MatchResult.md) 21 | * interface [IPublicAPI](../IPublicAPI.md) 22 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 23 | 24 | 25 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/FlowLauncherGlobalKeyboardEventHandler.md: -------------------------------------------------------------------------------- 1 | # FlowLauncherGlobalKeyboardEventHandler delegate 2 | 3 | Global keyboard events 4 | 5 | ```csharp 6 | public delegate bool FlowLauncherGlobalKeyboardEventHandler(int keyevent, int vkcode, 7 | SpecialKeyState state); 8 | ``` 9 | 10 | | parameter | description | 11 | | --- | --- | 12 | | keyevent | WM_KEYDOWN = 256,WM_KEYUP = 257,WM_SYSKEYUP = 261,WM_SYSKEYDOWN = 260 | 13 | | vkcode | | 14 | | state | | 15 | 16 | ## Return Value 17 | 18 | return true to continue handling, return false to intercept system handling 19 | 20 | ## See Also 21 | 22 | * class [SpecialKeyState](./SpecialKeyState.md) 23 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 24 | 25 | 26 | -------------------------------------------------------------------------------- /webcomponents/rollup.config.js: -------------------------------------------------------------------------------- 1 | import svelte from "rollup-plugin-svelte"; 2 | import resolve from "@rollup/plugin-node-resolve"; 3 | import terser from "@rollup/plugin-terser"; 4 | import sveltePreprocess from "svelte-preprocess"; 5 | import typescript from "@rollup/plugin-typescript"; 6 | 7 | export default { 8 | input: 'src/index.ts', 9 | output: { 10 | sourcemap: false, 11 | file: 'dist/flow-launcher-docs-web-components.js', 12 | }, 13 | plugins: [ 14 | svelte({ 15 | compilerOptions: { 16 | customElement: true, 17 | }, 18 | preprocess: sveltePreprocess({typescript: true}), 19 | }), 20 | resolve({ 21 | browser: true, 22 | dedupe: ["svelte"] 23 | }), 24 | typescript(), 25 | terser(), 26 | ], 27 | watch: { 28 | clearScreen: false, 29 | }, 30 | }; 31 | -------------------------------------------------------------------------------- /webcomponents/src/components/PluginSpinner.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 |
8 | 9 | 33 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/ShellRun.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.ShellRun method 2 | 3 | Run a shell command 4 | 5 | ```csharp 6 | public void ShellRun(string cmd, string filename = "cmd.exe") 7 | ``` 8 | 9 | | parameter | description | 10 | | --- | --- | 11 | | cmd | The command or program to run | 12 | | filename | the shell type to run, e.g. powershell.exe | 13 | 14 | ## Exceptions 15 | 16 | | exception | condition | 17 | | --- | --- | 18 | | FileNotFoundException | Thrown when unable to find the file specified in the command | 19 | | !:Win32Exception | Thrown when error occurs during the execution of the command | 20 | 21 | ## See Also 22 | 23 | * interface [IPublicAPI](../IPublicAPI.md) 24 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 25 | 26 | 27 | -------------------------------------------------------------------------------- /webcomponents/src/settings-generators/py.ts: -------------------------------------------------------------------------------- 1 | import type { TypingGenerator } from './TypingGenerator'; 2 | 3 | export const generateTypings = (data => { 4 | const hasLiteral = data.some(v => v.type === 'dropdown'); 5 | return `from typing import TypedDict${hasLiteral ? ', Literal' : ''} 6 | 7 | 8 | Settings = TypedDict('Settings', { 9 | ${data 10 | .filter(v => v.type !== 'textBlock') 11 | .map(input => { 12 | if (input.type !== 'dropdown') 13 | return `'${input.attributes.name}': ${input.attributes.defaultValue ? `str` : `str | None`}`; 14 | else { 15 | const options = input.attributes.options 16 | ?.map(option => `"${option.replace(/"/g, '\\"')}"`) 17 | .join(', '); 18 | return `'${input.attributes.name}': Literal[${options}]`; 19 | } 20 | }) 21 | .join(',\n\t') 22 | } 23 | })`; 24 | }) satisfies TypingGenerator; 25 | -------------------------------------------------------------------------------- /plugin-bookmark.md: -------------------------------------------------------------------------------- 1 | ## Bookmark Plugin 2 | 3 | ### Custom location list 4 | 5 | This page contains the information for setting custom browser locations for the Bookmark plugin that are not included by default. 6 | - These locations may not be the exact path, but they are the typical bookmark location for each browser; you can use them as a reference guide. 7 | - If you are using a browser not listed here, please update this document. It will help others. 8 | 9 | ---- 10 | 11 | **Brave** 12 | - Chromium Engine 13 | - C:\Users\username\AppData\Local\BraveSoftware\Brave-Browser\User Data\ 14 | 15 | 16 | **LibreWolf** 17 | - Firefox Engine 18 | - C:\Users\username\AppData\Roaming\librewolf\Profiles\1tyx98jn.default-default 19 | 20 | **Zen Browser (Twilight)** 21 | - Firefox Engine 22 | - C:\Users\username\AppData\Roaming\zen\Profiles\profile.Default (twilight) 23 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginInitContext/PluginInitContext.md: -------------------------------------------------------------------------------- 1 | # PluginInitContext constructor (1 of 2) 2 | 3 | The default constructor. 4 | 5 | ```csharp 6 | public PluginInitContext() 7 | ``` 8 | 9 | ## See Also 10 | 11 | * class [PluginInitContext](../PluginInitContext.md) 12 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 13 | 14 | --- 15 | 16 | # PluginInitContext constructor (2 of 2) 17 | 18 | ```csharp 19 | public PluginInitContext(PluginMetadata currentPluginMetadata, IPublicAPI api) 20 | ``` 21 | 22 | ## See Also 23 | 24 | * class [PluginMetadata](../PluginMetadata.md) 25 | * interface [IPublicAPI](../IPublicAPI.md) 26 | * class [PluginInitContext](../PluginInitContext.md) 27 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 28 | 29 | 30 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/SaveSettingJsonStorage.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.SaveSettingJsonStorage<T> method 2 | 3 | Save JsonStorage for current plugin's setting. This is the method used to save settings to json in Flow.Launcher This method will save the original instance loaded with LoadJsonStorage. This API call is for manually Save. Flow will automatically save all setting type that has called LoadSettingJsonStorage or SaveSettingJsonStorage previously. 4 | 5 | ```csharp 6 | public void SaveSettingJsonStorage() 7 | where T : new() 8 | ``` 9 | 10 | | parameter | description | 11 | | --- | --- | 12 | | T | Type for Serialization | 13 | 14 | ## See Also 15 | 16 | * interface [IPublicAPI](../IPublicAPI.md) 17 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 18 | 19 | 20 | -------------------------------------------------------------------------------- /json-rpc-visual-settingstemplate-editor.md: -------------------------------------------------------------------------------- 1 | ## SettingsTemplate.yaml editor 2 | 3 | Note that data in the editor below is not persisted. It will be lost once you close your browser. Remember to press "Generate SettingsTemplate.yaml" and save the result if you want to keep it. 4 | 5 | If you already have a SettingsTemplate.yaml file and would like to try editing it here, just copy its contents and paste it on this page. 6 | 7 | 8 | 9 | 19 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedModels/MatchResult/MatchResult.md: -------------------------------------------------------------------------------- 1 | # MatchResult constructor (1 of 2) 2 | 3 | ```csharp 4 | public MatchResult(bool success, SearchPrecisionScore searchPrecision) 5 | ``` 6 | 7 | ## See Also 8 | 9 | * enum [SearchPrecisionScore](../SearchPrecisionScore.md) 10 | * class [MatchResult](../MatchResult.md) 11 | * namespace [Flow.Launcher.Plugin.SharedModels](../../Flow.Launcher.Plugin.md) 12 | 13 | --- 14 | 15 | # MatchResult constructor (2 of 2) 16 | 17 | ```csharp 18 | public MatchResult(bool success, SearchPrecisionScore searchPrecision, List matchData, 19 | int rawScore) 20 | ``` 21 | 22 | ## See Also 23 | 24 | * enum [SearchPrecisionScore](../SearchPrecisionScore.md) 25 | * class [MatchResult](../MatchResult.md) 26 | * namespace [Flow.Launcher.Plugin.SharedModels](../../Flow.Launcher.Plugin.md) 27 | 28 | 29 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedModels/MatchResult.md: -------------------------------------------------------------------------------- 1 | # MatchResult class 2 | 3 | ```csharp 4 | public class MatchResult 5 | ``` 6 | 7 | ## Public Members 8 | 9 | | name | description | 10 | | --- | --- | 11 | | [MatchResult](MatchResult/MatchResult.md)(…) | (2 constructors) | 12 | | [MatchData](MatchResult/MatchData.md) { get; set; } | Matched data to highlight. | 13 | | [RawScore](MatchResult/RawScore.md) { get; set; } | | 14 | | [Score](MatchResult/Score.md) { get; } | The final score of the match result with search precision filters applied. | 15 | | [SearchPrecision](MatchResult/SearchPrecision.md) { get; set; } | | 16 | | [Success](MatchResult/Success.md) { get; set; } | | 17 | | [IsSearchPrecisionScoreMet](MatchResult/IsSearchPrecisionScoreMet.md)() | | 18 | 19 | ## See Also 20 | 21 | * namespace [Flow.Launcher.Plugin.SharedModels](../Flow.Launcher.Plugin.md) 22 | 23 | 24 | -------------------------------------------------------------------------------- /support.md: -------------------------------------------------------------------------------- 1 | ### Support 2 | 3 | Flow Launcher is an open source project that is updated and maintained by a team of volunteers. If you have any issues or questions, the Flow Launcher team and other users can help in the following ways: 4 | 5 | - For any errors or bug reports raise an issue in the GitHub Repository. Please follow the new issue template and try to describe in as much detail as you can what you were doing when the error occurred. If it is determined the error is with a third party plugin, you may be directed to open the issue in the plugin author's repository so they can investigate. 6 | 7 | **Github** 8 | 9 | https://github.com/Flow-Launcher/Flow.Launcher/issues 10 | 11 | - For problems, suggestions, hints, tips, help with plugin dev, or just to connect with other Flow Launcher users world-wide, pop in and say hello on 12 | 13 | **Discord:** 14 | 15 | https://discord.gg/AvgAQgh 16 | 17 | **Reddit:** 18 | 19 | https://www.reddit.com/r/FlowLauncher/ 20 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IAsyncReloadable.md: -------------------------------------------------------------------------------- 1 | # IAsyncReloadable interface 2 | 3 | This interface is to indicate and allow plugins to asynchronously reload their in memory data cache or other mediums when user makes a new change that is not immediately captured. For example, for BrowserBookmark and Program plugin does not automatically detect when a user added a new bookmark or program, so this interface's function is exposed to allow user manually do the reloading after those new additions. The command that allows user to manual reload is exposed via Plugin.Sys, and it will call the plugins that have implemented this interface. 4 | 5 | ```csharp 6 | public interface IAsyncReloadable : IFeatures 7 | ``` 8 | 9 | ## Members 10 | 11 | | name | description | 12 | | --- | --- | 13 | | [ReloadDataAsync](IAsyncReloadable/ReloadDataAsync.md)() | | 14 | 15 | ## See Also 16 | 17 | * interface [IFeatures](./IFeatures.md) 18 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 19 | 20 | 21 | -------------------------------------------------------------------------------- /webcomponents/src/theme-change-observer.ts: -------------------------------------------------------------------------------- 1 | import {onMount} from 'svelte'; 2 | import type {Theme} from "./types"; 3 | 4 | export function useThemeChangeObserver(theme: Theme | undefined, updateTheme: (theme: Theme) => void) { 5 | // If the theme was set manually, don't do anything 6 | if (theme) return; 7 | 8 | // Do this once before onMount to prevent flickering 9 | const link: HTMLLinkElement = document.querySelector('head > link[rel="stylesheet"][title="light"]'); 10 | updateTheme(link?.disabled ? 'dark' : 'light'); 11 | 12 | onMount(() => { 13 | if (theme) return; 14 | const link: HTMLLinkElement = document.querySelector('head > link[rel="stylesheet"][title="light"]'); 15 | 16 | updateTheme(link?.disabled ? 'dark' : 'light'); 17 | 18 | if (!link) return; 19 | 20 | const observer = new MutationObserver(() => { 21 | updateTheme(link?.disabled ? 'dark' : 'light'); 22 | }); 23 | 24 | observer.observe(link, { 25 | attributes: true, 26 | childList: false, 27 | }); 28 | 29 | return () => observer.disconnect(); 30 | }); 31 | } 32 | -------------------------------------------------------------------------------- /testing.md: -------------------------------------------------------------------------------- 1 | ### Testing your plugin 2 | 3 | After successfully building a plugin, it can be tested locally by moving the output files into Flow Launcher's `FlowLauncher\Plugins` directory accessible via the `userdata` command in Flow Launcher. Alternatively, if you are building .NET (C# or F#) plugins, you can have your IDE build the artifact directly to that location (remember not to check this build output path into Git though). 4 | 5 | 6 | ### Detail Steps 7 | 8 | 1. Execute `userdata` in Flow Launcher. 9 | 2. Navigate into the `Plugins` folder. 10 | 3. Move existing plugin with the same `Plugin ID` as specify in `plugin.json` away from the folder (_**if more than one plugin have the same `Plugin ID`, none of them will be loaded**_). 11 | 4. Copy and paste the newly built plugin folder into this folder. 12 | 5. Execute `Restart Flow Launcher` to reload the new plugin. 13 | 14 | Tip: .NET plugins (e.g. C# and F#) will require you to restart flow every time you make a change and build a new artifact to reload the plugin, but Python and JS/TS plugins you can edit the plugin directly. 15 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IReloadable.md: -------------------------------------------------------------------------------- 1 | # IReloadable interface 2 | 3 | This interface is to indicate and allow plugins to synchronously reload their in memory data cache or other mediums when user makes a new change that is not immediately captured. For example, for BrowserBookmark and Program plugin does not automatically detect when a user added a new bookmark or program, so this interface's function is exposed to allow user manually do the reloading after those new additions. The command that allows user to manual reload is exposed via Plugin.Sys, and it will call the plugins that have implemented this interface. 4 | 5 | If requiring reloading data asynchronously, please use the IAsyncReloadable interface 6 | 7 | ```csharp 8 | public interface IReloadable : IFeatures 9 | ``` 10 | 11 | ## Members 12 | 13 | | name | description | 14 | | --- | --- | 15 | | [ReloadData](IReloadable/ReloadData.md)() | | 16 | 17 | ## See Also 18 | 19 | * interface [IFeatures](./IFeatures.md) 20 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 21 | 22 | 23 | -------------------------------------------------------------------------------- /filemanager.md: -------------------------------------------------------------------------------- 1 | ## Custom File Manager 2 | If you want to use a file manager other than the default Windows File Explorer, you need to set it under Settings > General > Custom File Manager. The default values for each file manager are listed below. 3 | 4 | %d represents the directory path, and %f is the argument used when opening a file. -select is an option supported by some file managers that allows the selected file to be highlighted or scrolled into view when opening its location. 5 | 6 | ### Files 7 | docs: https://files.community/docs/contributing/updates 8 | ``` 9 | Path : Files or Files-stable 10 | Arg For Folder : "%d" 11 | Arg For File : -select "%f" 12 | ``` 13 | 14 | ### Directory Opus 15 | docs: https://www.gpsoft.com.au/help/opus11/index.html#!Documents/Go1.htm 16 | ``` 17 | Path : (installed path)dopusrt.exe 18 | Arg For Folder : /cmd Go "%d" NEW 19 | Arg For File : /cmd Go "%f" NEW 20 | ``` 21 | 22 | ### Total Commander 23 | docs: https://www.ghisler.ch/wiki/index.php/Command_line_parameters 24 | ``` 25 | Path : (installed path)TOTALCMD64.exe 26 | Arg For Folder : /O /A /S /T "%d" 27 | Arg For File : /O /A /S /T "%f" 28 | ``` -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI/ShowMsg.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI.ShowMsg method (1 of 2) 2 | 3 | Show message box 4 | 5 | ```csharp 6 | public void ShowMsg(string title, string subTitle = "", string iconPath = "") 7 | ``` 8 | 9 | | parameter | description | 10 | | --- | --- | 11 | | title | Message title | 12 | | subTitle | Message subtitle | 13 | | iconPath | Message icon path (relative path to your plugin folder) | 14 | 15 | ## See Also 16 | 17 | * interface [IPublicAPI](../IPublicAPI.md) 18 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 19 | 20 | --- 21 | 22 | # IPublicAPI.ShowMsg method (2 of 2) 23 | 24 | Show message box 25 | 26 | ```csharp 27 | public void ShowMsg(string title, string subTitle, string iconPath, 28 | bool useMainWindowAsOwner = true) 29 | ``` 30 | 31 | | parameter | description | 32 | | --- | --- | 33 | | title | Message title | 34 | | subTitle | Message subtitle | 35 | | iconPath | Message icon path (relative path to your plugin folder) | 36 | | useMainWindowAsOwner | when true will use main windows as the owner | 37 | 38 | ## See Also 39 | 40 | * interface [IPublicAPI](../IPublicAPI.md) 41 | * namespace [Flow.Launcher.Plugin](../../Flow.Launcher.Plugin.md) 42 | 43 | 44 | -------------------------------------------------------------------------------- /webcomponents/src/types.ts: -------------------------------------------------------------------------------- 1 | export type ComponentType = 2 | | 'textBlock' 3 | | 'input' 4 | | 'inputWithFileBtn' 5 | | 'inputWithFolderBtn' 6 | | 'textarea' 7 | | 'passwordBox' 8 | | 'dropdown' 9 | | 'checkbox'; 10 | 11 | export interface ComponentAttributes { 12 | name?: string; 13 | label?: string; 14 | description?: string; 15 | options?: string[]; 16 | defaultValue?: string | boolean; 17 | } 18 | export interface ComponentData { 19 | id?: string; 20 | type: ComponentType; 21 | attributes: ComponentAttributes; 22 | } 23 | export interface FileData { 24 | body?: ComponentData[]; 25 | } 26 | 27 | export interface ComponentDataWithId extends ComponentData { 28 | id?: string; 29 | } 30 | 31 | export type Theme = 'light' | 'dark'; 32 | 33 | export interface FlowPlugin { 34 | defaultIndex: number; 35 | ID: string; 36 | Name: string; 37 | Description: string; 38 | Author: string; 39 | Version: string; 40 | Language: 'csharp' | 'fsharp' | 'executable' | `${'javascript'|'typescript'|'python'}${'_v2'|''}`; 41 | UrlDownload: string; 42 | UrlSourceCode: string; 43 | IcoPath: string; 44 | DateAdded: string; 45 | LatestReleaseDate?: string; 46 | } 47 | 48 | declare global { 49 | interface Window { 50 | Prism: { 51 | highlightElement(el: HTMLElement): void; 52 | }; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /webcomponents/src/settings-generators/yaml.ts: -------------------------------------------------------------------------------- 1 | import type { TypingGenerator } from './TypingGenerator'; 2 | import type {ComponentDataWithId} from '../types'; 3 | import { dump } from 'js-yaml'; 4 | 5 | export const generateSettingsTemplate = (data => { 6 | const json: ComponentDataWithId[] = JSON.parse(JSON.stringify(data)); 7 | for (const element of json) { 8 | delete element.id; 9 | if (element.attributes.defaultValue == null) delete element.attributes.defaultValue; 10 | if (element.type !== 'dropdown') delete element.attributes.options; 11 | if (!element.attributes.label) delete element.attributes.label; 12 | if (!element.attributes.description) delete element.attributes.description; 13 | if (element.type === 'textBlock') element.attributes = { description: element.attributes.description }; 14 | if (element.type === 'checkbox') { 15 | element.attributes.defaultValue = element.attributes.defaultValue === 'true' ? 'true' : 'false'; 16 | } else { 17 | if (!element.attributes.defaultValue?.toString().trim()) delete element.attributes.defaultValue; 18 | } 19 | 20 | // Always put the `attributes` property after the `type` property for readability 21 | const attributes = element.attributes; 22 | delete element.attributes; 23 | element.attributes = attributes; 24 | } 25 | return dump({ body: json }); 26 | }) satisfies TypingGenerator; 27 | -------------------------------------------------------------------------------- /webcomponents/src/components/inputs/SettingsButton.svelte: -------------------------------------------------------------------------------- 1 | 11 | 12 | 15 | 16 | 61 | -------------------------------------------------------------------------------- /.github/workflows/plugin-updater.yml: -------------------------------------------------------------------------------- 1 | name: Plugin Updater 2 | 3 | on: 4 | workflow_dispatch: 5 | push: 6 | branches: 7 | - main 8 | paths: 9 | - webcomponents/**.js 10 | - webcomponents/**.ts 11 | - webcomponents/**.json 12 | - webcomponents/**.svelte 13 | - "!webcomponents/dist/**" 14 | 15 | jobs: 16 | build-webcomponents: 17 | name: Build web components 18 | runs-on: ubuntu-latest 19 | steps: 20 | - uses: actions/checkout@v4 21 | with: 22 | token: ${{ secrets.UPDATER }} 23 | - name: Setup Node 24 | uses: actions/setup-node@v4 25 | with: 26 | node-version: 20 27 | - name: Get version 28 | id: version 29 | run: | 30 | version=$(jq -r .version webcomponents/package.json) 31 | echo "version=$version" >> $GITHUB_OUTPUT 32 | - name: Build 33 | run: | 34 | cd webcomponents 35 | npm install 36 | npm run build 37 | git config --local user.name "github-actions[bot]" 38 | git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" 39 | git add dist 40 | git commit -m "Update web components build artifact" 41 | - name: Put new build into the repo 42 | uses: ad-m/github-push-action@master 43 | with: 44 | github_token: ${{ secrets.UPDATER }} 45 | branch: ${{ github.ref }} 46 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedCommands/ShellCommand/Execute.md: -------------------------------------------------------------------------------- 1 | # ShellCommand.Execute method (1 of 2) 2 | 3 | Runs a windows command using the provided ProcessStartInfo 4 | 5 | ```csharp 6 | public static void Execute(ProcessStartInfo info) 7 | ``` 8 | 9 | ## Exceptions 10 | 11 | | exception | condition | 12 | | --- | --- | 13 | | !:FileNotFoundException | Thrown when unable to find the file specified in the command | 14 | | !:Win32Exception | Thrown when error occurs during the execution of the command | 15 | 16 | ## See Also 17 | 18 | * class [ShellCommand](../ShellCommand.md) 19 | * namespace [Flow.Launcher.Plugin.SharedCommands](../../Flow.Launcher.Plugin.md) 20 | 21 | --- 22 | 23 | # ShellCommand.Execute method (2 of 2) 24 | 25 | Runs a windows command using the provided ProcessStartInfo using a custom execute command function 26 | 27 | ```csharp 28 | public static void Execute(Func startProcess, ProcessStartInfo info) 29 | ``` 30 | 31 | | parameter | description | 32 | | --- | --- | 33 | | Func startProcessstartProcess | allows you to pass in a custom command execution function | 34 | 35 | ## Exceptions 36 | 37 | | exception | condition | 38 | | --- | --- | 39 | | !:FileNotFoundException | Thrown when unable to find the file specified in the command | 40 | | !:Win32Exception | Thrown when error occurs during the execution of the command | 41 | 42 | ## See Also 43 | 44 | * class [ShellCommand](../ShellCommand.md) 45 | * namespace [Flow.Launcher.Plugin.SharedCommands](../../Flow.Launcher.Plugin.md) 46 | 47 | 48 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin.SharedCommands/FilesFolders.md: -------------------------------------------------------------------------------- 1 | # FilesFolders class 2 | 3 | ```csharp 4 | public static class FilesFolders 5 | ``` 6 | 7 | ## Public Members 8 | 9 | | name | description | 10 | | --- | --- | 11 | | static [CopyAll](FilesFolders/CopyAll.md)(…) | Copies the folder and all of its files and folders including subfolders to the target location | 12 | | static [FileExists](FilesFolders/FileExists.md)(…) | | 13 | | static [GetPreviousExistingDirectory](FilesFolders/GetPreviousExistingDirectory.md)(…) | Gets the previous level directory from a path string. Checks that previous level directory exists and returns it as a path string, or empty string if doesn't exist | 14 | | static [IsLocationPathString](FilesFolders/IsLocationPathString.md)(…) | This checks whether a given string is a directory path or network location string. It does not check if location actually exists. | 15 | | static [LocationExists](FilesFolders/LocationExists.md)(…) | | 16 | | static [OpenContainingFolder](FilesFolders/OpenContainingFolder.md)(…) | | 17 | | static [OpenPath](FilesFolders/OpenPath.md)(…) | | 18 | | static [RemoveFolderIfExists](FilesFolders/RemoveFolderIfExists.md)(…) | | 19 | | static [ReturnPreviousDirectoryIfIncompleteString](FilesFolders/ReturnPreviousDirectoryIfIncompleteString.md)(…) | Returns the previous level directory if path incomplete (does not end with '\'). Does not check if previous level directory exists. Returns passed in string if is complete path | 20 | | static [VerifyBothFolderFilesEqual](FilesFolders/VerifyBothFolderFilesEqual.md)(…) | | 21 | 22 | ## See Also 23 | 24 | * namespace [Flow.Launcher.Plugin.SharedCommands](../Flow.Launcher.Plugin.md) 25 | 26 | 27 | -------------------------------------------------------------------------------- /_sidebar.md: -------------------------------------------------------------------------------- 1 | - [**Introduction**](/README.md) 2 | - [**Installation**](/installation.md) 3 | - [**Settings**](/settings.md) 4 | - [**File Manager**](/filemanager.md) 5 | - [**Usage Tips**](/usage-tips.md) 6 | - [**Support**](/support.md) 7 | - [**Plugin Store**](https://www.flowlauncher.com/plugins/) 8 | - [**Explorer Plugin**](/plugin-explorer.md) 9 | - [**Bookmark Plugin**](/plugin-bookmark.md) 10 | - [**Plugin Development**](/plugin-dev.md) 11 | - [**plugin.json**](/plugin.json.md) 12 | - Dotnet Plugins 13 | - [**Development Guide**](/develop-dotnet-plugins.md) 14 | - [**API Reference**](/API-Reference/Flow.Launcher.Plugin.md) 15 | - Python Plugins 16 | - [**Before you start**](/py-develop-plugins.md) 17 | - [**Set up your project**](/py-setup-project.md) 18 | - [**Write the code**](/py-write-code.md) 19 | - [**Add your plugin to Flow**](/py-release-project.md) 20 | - [**Plugin references**](/py-plugin-references.md) 21 | - JavaScript/TypeScript Plugins 22 | - [**Before you start**](/nodejs-develop-plugins.md) 23 | - [**Set up your project**](/nodejs-setup-project.md) 24 | - [**Write the code**](/nodejs-write-code.md) 25 | - [**Add your plugin to Flow**](/nodejs-release-project.md) 26 | - [**Plugin references**](/nodejs-plugin-references.md) 27 | - Testing Plugins 28 | - [**Testing Guide**](/testing.md) 29 | - JSON-RPC 30 | - [**Introduction**](/json-rpc.md) 31 | - [**Plugin Settings**](/json-rpc-settings.md) 32 | - [**Visual SettingsTemplate.yaml editor**](/json-rpc-visual-settingstemplate-editor.md) 33 | - Porting Plugins 34 | - [**Porting Plugins Guide**](/port-plugins.md) 35 | - [**How To Create A Theme**](/how-to-create-a-theme.md) 36 | -------------------------------------------------------------------------------- /plugin.json.md: -------------------------------------------------------------------------------- 1 | # plugin.json 2 | 3 | `plugin.json` is the manifest files of your plugin. It is required for Flow to understand how to communicate with your plugin. 4 | It must be in the plugin root directory. 5 | 6 | ```js 7 | { 8 | "ID":"", //Plugin ID,32 bit UUID 9 | "ActionKeyword":"", //Plugin default action keyword (* means no specific action keyword) 10 | "Name":"", //Plugin name 11 | "Description":"", //Plugin description 12 | "Author":"", //Plugin Author 13 | "Version":"", //Plugin version (e.g. 1.0.0). It is important for plugin update checking. 14 | "Language":"", //Plugin language,available fields are csharp, fsharp, python, javascript, typescript and executable. Make sure you put the correct field for your plugin language, this is important so that the required runtime environment can be setup automatically. 15 | "Website":"", //Plugin website or author website 16 | "IcoPath": "", //Plugin icon, relative path to the plugin folder 17 | "ExecuteFileName":"" //Execution entry. dll extension for C#/F# plugin, .py for python plugin, .js/.ts for JS/TS plugins and .exe or other executable for executable plugin. Path examples include "main.py" or "./dist/main.js" 18 | } 19 | ``` 20 | 21 | ## JSON Schema 22 | Additionally, you can add a property called `$schema` to enable validation and auto-completion in your IDE. This works in JetBrains IDEs (i.e., WebStorm, PhpStorm, Rider, etc.), Visual Studio, and Visual Studio Code. Add this property to the top of the JSON file: 23 | 24 | ```js 25 | { 26 | "$schema": "https://www.flowlauncher.com/schemas/plugin.schema.json", 27 | // the rest of the plugin.json file 28 | // ... 29 | } 30 | ``` 31 | 32 | Now you should have auto-completion and file validation available for you in your IDE. 33 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/PluginMetadata.md: -------------------------------------------------------------------------------- 1 | # PluginMetadata class 2 | 3 | ```csharp 4 | public class PluginMetadata : BaseModel 5 | ``` 6 | 7 | ## Public Members 8 | 9 | | name | description | 10 | | --- | --- | 11 | | [PluginMetadata](PluginMetadata/PluginMetadata.md)() | The default constructor. | 12 | | [ActionKeyword](PluginMetadata/ActionKeyword.md) { get; set; } | | 13 | | [ActionKeywords](PluginMetadata/ActionKeywords.md) { get; set; } | | 14 | | [Author](PluginMetadata/Author.md) { get; set; } | | 15 | | [AvgQueryTime](PluginMetadata/AvgQueryTime.md) { get; set; } | | 16 | | [Description](PluginMetadata/Description.md) { get; set; } | | 17 | | [Disabled](PluginMetadata/Disabled.md) { get; set; } | | 18 | | [ExecuteFileName](PluginMetadata/ExecuteFileName.md) { get; set; } | | 19 | | [ExecuteFilePath](PluginMetadata/ExecuteFilePath.md) { get; } | | 20 | | [IcoPath](PluginMetadata/IcoPath.md) { get; set; } | | 21 | | [ID](PluginMetadata/ID.md) { get; set; } | | 22 | | [InitTime](PluginMetadata/InitTime.md) { get; set; } | Init time include both plugin load time and init time | 23 | | [Language](PluginMetadata/Language.md) { get; set; } | | 24 | | [Name](PluginMetadata/Name.md) { get; set; } | | 25 | | [PluginDirectory](PluginMetadata/PluginDirectory.md) { get; } | | 26 | | [Priority](PluginMetadata/Priority.md) { get; set; } | | 27 | | [QueryCount](PluginMetadata/QueryCount.md) { get; set; } | | 28 | | [Version](PluginMetadata/Version.md) { get; set; } | | 29 | | [Website](PluginMetadata/Website.md) { get; set; } | | 30 | | override [ToString](PluginMetadata/ToString.md)() | | 31 | 32 | ## See Also 33 | 34 | * class [BaseModel](./BaseModel.md) 35 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 36 | 37 | 38 | -------------------------------------------------------------------------------- /webcomponents/src/components/CodeDisplay.svelte: -------------------------------------------------------------------------------- 1 | 20 | 21 |
22 | {#if displayFilename} 23 |
{filename}
24 | {/if} 25 |
26 |
{code}
27 |
28 |
29 | 30 | 74 | -------------------------------------------------------------------------------- /webcomponents/src/components/inputs/SettingsInput.svelte: -------------------------------------------------------------------------------- 1 | 15 | 16 | {#if !multiline} 17 | 18 | {#if password} 19 | 20 | {:else} 21 | 22 | {/if} 23 | {:else} 24 | 25 | {/if} 26 | 27 | 65 | -------------------------------------------------------------------------------- /webcomponents/src/components/inputs/SettingsCheckbox.svelte: -------------------------------------------------------------------------------- 1 | 12 | 13 | 16 | 17 | 85 | -------------------------------------------------------------------------------- /webcomponents/src/components/PasteHandler.svelte: -------------------------------------------------------------------------------- 1 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Query.md: -------------------------------------------------------------------------------- 1 | # Query class 2 | 3 | ```csharp 4 | public class Query 5 | ``` 6 | 7 | ## Public Members 8 | 9 | | name | description | 10 | | --- | --- | 11 | | [Query](Query/Query.md)() | The default constructor. | 12 | | [Query](Query/Query.md)(…) | to allow unit tests for plug ins | 13 | | [ActionKeyword](Query/ActionKeyword.md) { get; set; } | | 14 | | [FirstSearch](Query/FirstSearch.md) { get; } | Return first search split by space if it has | 15 | | [RawQuery](Query/RawQuery.md) { get; } | Raw query, this includes action keyword if it has We didn't recommend use this property directly. You should always use Search property. | 16 | | [Search](Query/Search.md) { get; } | Search part of a query. This will not include action keyword if exclusive plugin gets it, otherwise it should be same as RawQuery. Since we allow user to switch a exclusive plugin to generic plugin, so this property will always give you the "real" query part of the query | 17 | | [SearchTerms](Query/SearchTerms.md) { get; set; } | The search string split into a string array. | 18 | | [SecondSearch](Query/SecondSearch.md) { get; } | Return second search split by space if it has | 19 | | [SecondToEndSearch](Query/SecondToEndSearch.md) { get; } | strings from second search (including) to last search | 20 | | [ThirdSearch](Query/ThirdSearch.md) { get; } | Return third search split by space if it has | 21 | | override [ToString](Query/ToString.md)() | | 22 | | const [ActionKeywordSeparator](Query/ActionKeywordSeparator.md) | User can set multiple action keywords separated by ';' | 23 | | const [GlobalPluginWildcardSign](Query/GlobalPluginWildcardSign.md) | '*' is used for System Plugin | 24 | | const [TermSeparator](Query/TermSeparator.md) | Query can be splitted into multiple terms by whitespace | 25 | 26 | ## See Also 27 | 28 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 29 | 30 | 31 | -------------------------------------------------------------------------------- /port-plugins.md: -------------------------------------------------------------------------------- 1 | ## Wox/PowerToys Run C# Plugins 2 | 3 | ### Notes 4 | 5 | - When porting, please keep the author's commit history 6 | - Flow Launcher targets minimum .NET 5, so older plugins should be upgraded to keep the continuity of their future developments 7 | - All dll libraries used by the plugin should be outputted and included in the final build, to do this, set the attribute CopyLocalLockFileAssemblies in your project file to true 8 | 9 | ### Steps 10 | 11 | 1. To start off, you can fork/create a new repo, either way the project's commit history must be kept. If it's forked, you can just start updating it. If it's a new repo, do this by first cloning the repo, then add your new repo as a new repo remote, remove the original remote and then push to it 12 | 2. Use `try-convert` tool from https://github.com/dotnet/try-convert 13 | 3. `try-convert -w path-to-folder-or-solution-or-project` 14 | 4. May need to fix on the project file, a good template to follow is the [Explorer plugin](https://github.com/Flow-Launcher/Flow.Launcher/blob/dev/Plugins/Flow.Launcher.Plugin.Explorer/Flow.Launcher.Plugin.Explorer.csproj) project: 15 | - fix `` to `net5.0-windows` 16 | - set the output location as `Output\Release\` 17 | - add `true` and `false` to the csproj file 18 | - bump version to 2.0.0 and fix up any missing attributes if necessary 19 | 5. Update code and fix plugin's setting layout if necessary 20 | 6. Update readme to indicate where this port is from and the original author of the project 21 | 22 | ## Wox Python Plugins 23 | 24 | ### Notes 25 | 26 | - When porting, please keep the author's commit history 27 | 28 | ### Steps 29 | 30 | 1. Change the import from Wox to import from flowlauncher 31 | 2. The class should inherit from FlowLauncher instead of Wox 32 | 3. Install the flowlauncher python package 33 | -------------------------------------------------------------------------------- /nodejs-develop-plugins.md: -------------------------------------------------------------------------------- 1 | ### About Flow's TypeScript/JavaScript plugins 2 | 3 | Plugins written in TypeScript/JavaScript use the [JSON-RPC](https://flow-launcher.github.io/docs/#/json-rpc) protocol to communicate with Flow via JSON structured calls. 4 | 5 | Although not a hard requirement, this guide will use Node.js to run the TypeScript/JavaScript. We will refer to TypeScript/JavaScript plugin as Node.js plugin from here on. 6 | 7 | When building a Node.js plugin, there are several things to be mindful of: 8 | 9 | * The most important thing is we do not expect users to have to manually install the dependencies via npm because we aim to provide a seamless experience for them. This can be achieved by adding the following three things to your project: 10 | 1. Add a GitHub workflow — use a GitHub workflow that will install all your plugin's dependencies including the modules inside a folder called `node_modules`. 11 | 2. Publish all as a zip — zip up your project including a lib directory that contains the modules and publish it to GitHub Releases page. 12 | 3. Point your module path to the node_modules directory — reference all the modules to that directory. 13 | 14 | * Users can use their system-installed Node.js with Flow Launcher, but in most circumstances, they will most likely be using Flow Launcher's download of [Node.js](https://nodejs.org/dist/v16.18.0/node-v16.18.0-win-x64.zip). This download of portable Node.js version is isolated from the user's system and can be simply removed. 15 | 16 | ### Simple Example 17 | Have a look at this simple example plugin [here](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.HelloWorldNodeJS), notice it has a folder called `.github/workflows` and a file called `Publish Release.yml`. This is the workflow file that GitHub Workflow uses to run the CI/CD for the project. Moving out of that folder, you can go into the [main.js](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.HelloWorldNodeJS/blob/main/main.js) file; this is the entry file for your plugin. 18 | -------------------------------------------------------------------------------- /installation.md: -------------------------------------------------------------------------------- 1 | ### Installation 2 | 3 | Flow Launcher can be installed several ways, including Windows package managers Winget, Scoop, and Chocolatey. The most popular method is to download the installer file from the main Flow Launcher website. This downloads the latest release package from the Flow Launcher GitHub repository (repo). 4 | 5 | #### Security 6 | 7 | When installing Flow Launcher, you will get the Microsoft Defender SmartScreen installer window warning: 8 | 9 | ![MS SmartScreen install warning](/assets/Flow_smartscreen.png) 10 | 11 | This appears as Flow Launcher has not been downloaded enough times, or users have not flagged this as "safe", for Microsoft to yet allow the installer to run without this warning. Over time we are hoping this becomes a trusted app with Microsoft; however this does not mean Flow Launcher is dangerous or malicious. As you should do with all software, you should be satisfied of the pedigree of the installation executable. For Flow Launcher you should ensure you download from flowlauncher.com, or the official repo. Flow Launcher is open source so anyone can download and review the source code. Any issues or concerns are welcome in the Issues part of the repo. 12 | 13 | You may also get false positives from third-party antivirus and antimalware applications. As above, once you are sure you have downloaded the installer from an official source, and asked any questions you have with GitHub Issues, we ask that you submit a false-positive report to the AV vendor. 14 | 15 | #### Plugins 16 | 17 | Flow Launcher installs with a set of "core" plugins that are maintained by the Flow Launcher team. These are: 18 | 19 | - Browser Bookmarks 20 | - Calculator 21 | - Explorer 22 | - Plugin Indicator 23 | - Plugins Manager 24 | - Process Killer 25 | - Program 26 | - Shell 27 | - System Commands 28 | - URL 29 | - Web Searches 30 | - Window Settings 31 | 32 | There are also over 200 third-party plugins that extend Flow Launcher's functionality and these can be browsed and installed in the Plugin Store settings page. 33 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Flow Launcher - Documentation 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /json-rpc.md: -------------------------------------------------------------------------------- 1 | ## Introduction 2 | 3 | > [JSON-RPC](https://en.wikipedia.org/wiki/JSON-RPC) is a remote procedure call protocol encoded in JSON. 4 | 5 | In Flow Launcher, we use JSON-RPC as a **local** procedure call protocol to bind Flow and other program languages ([**Python plugin**](/py-develop-plugins.md) and [**JavaScript/TypeScript plugin**](/nodejs-develop-plugins.md)). 6 | 7 | So we need to build a **common API** between Flow and Plugin. 8 | 9 | ![JSON-RPC](/assets/jsonrpc.png) 10 | 11 | ### Example 12 | 13 | - `-->` denotes data sent to FLow. 14 | - `<--` denotes data coming from Flow. 15 | 16 | ```js 17 | --> {"method": "query", "parameters": [""]} 18 | <-- {"Title": "title", "SubTitle": "sub title", "IconPath": "favicon.ico"} 19 | ``` 20 | 21 | ## Flow Launcher API 22 | 23 | API is located [here](/API-Reference/Flow.Launcher.Plugin/IPublicAPI.md) 24 | 25 | ### API List 26 | 27 | - `Flow.Launcher.ChangeQuery`: change flow launcher query 28 | - `Flow.Launcher.RestartApp`: restart Flow Launcher 29 | - `Flow.Launcher.SaveAppAllSettings`: save all Flow Launcher settings 30 | - `Flow.Launcher.CheckForNewUpdate`: check for new Flow Launcher update 31 | - `Flow.Launcher.ShellRun`: run shell commands 32 | - `Flow.Launcher.CloseApp`: close flow launcher 33 | - `Flow.Launcher.HideApp`: hide flow launcher 34 | - `Flow.Launcher.ShowApp`: show flow launcher 35 | - `Flow.Launcher.ShowMsg`: show messagebox 36 | - `Flow.Launcher.GetTranslation`: get translation of current language 37 | - `Flow.Launcher.OpenSettingDialog`: open setting dialog 38 | - `Flow.Launcher.GetAllPlugins`: get all loaded plugins 39 | - `Flow.Launcher.StartLoadingBar`: start loading animation in flow launcher 40 | - `Flow.Launcher.StopLoadingBar`: stop loading animation in flow launcher 41 | - `Flow.Launcher.ReloadAllPluginData`: reload all flow launcher plugins 42 | 43 | ### JSON RPC Formatting 44 | 45 | ```js 46 | { 47 | "method": "Flow Launcher API Name", 48 | "parameters": [] 49 | } 50 | ``` 51 | 52 | #### `Flow.Launcher.ChangeQuery` 53 | 54 | - `query`, string 55 | - `requery`, bool 56 | 57 | ```js 58 | { 59 | "method": "Flow.Launcher.ChangeQuery", 60 | "parameters": [query, requery] 61 | } 62 | ``` 63 | 64 | #### `Flow.Launcher.ShellRun` 65 | 66 | - `cmd`, string 67 | 68 | ```js 69 | { 70 | "method": "Flow.Launcher.ShellRun", 71 | "parameters": [cmd] 72 | } 73 | ``` 74 | 75 | #### `Flow.Launcher.ShowMsg` 76 | 77 | - `title`, string 78 | - `sub_title`, string 79 | - `ico_path`, string(path) 80 | 81 | ```js 82 | { 83 | "method": "Flow.Launcher.ShowMsg", 84 | "parameters": [title, sub_title, ico_path] 85 | } 86 | ``` 87 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/Result.md: -------------------------------------------------------------------------------- 1 | # Result class 2 | 3 | ```csharp 4 | public class Result 5 | ``` 6 | 7 | ## Public Members 8 | 9 | | name | description | 10 | | --- | --- | 11 | | [Result](Result/Result.md)() | The default constructor. | 12 | | [Action](Result/Action.md) { get; set; } | Delegate. An action to take in the form of a function call when the result has been selected true to hide flowlauncher after select result | 13 | | [ActionKeywordAssigned](Result/ActionKeywordAssigned.md) { get; set; } | This holds the action keyword that triggered the result. If result is triggered by global keyword: *, this should be empty. | 14 | | [AutoCompleteText](Result/AutoCompleteText.md) { get; set; } | This holds the text which can be provided by plugin to help Flow autocomplete text for user on the plugin result. If autocomplete action for example is tab, pressing tab will have the default constructed autocomplete text (result's Title), or the text provided here if not empty. | 15 | | [ContextData](Result/ContextData.md) { get; set; } | Additional data associated with this result As external information for ContextMenu | 16 | | [Glyph](Result/Glyph.md) { get; set; } | Information for Glyph Icon (Prioritized than IcoPath/Icon if user enable Glyph Icons) | 17 | | [IcoPath](Result/IcoPath.md) { get; set; } | Image Displayed on the result Relative Path to the Image FileGlyphInfo is prioritized if not null | 18 | | [PluginDirectory](Result/PluginDirectory.md) { get; set; } | Plugin directory | 19 | | [PluginID](Result/PluginID.md) { get; } | Plugin ID that generated this result | 20 | | [Score](Result/Score.md) { get; set; } | Priority of the current result default: 0 | 21 | | [SubTitle](Result/SubTitle.md) { get; set; } | Provides additional details for the result. This is optional | 22 | | [SubTitleToolTip](Result/SubTitleToolTip.md) { get; set; } | Show message as ToolTip on result SubTitle hover over | 23 | | [Title](Result/Title.md) { get; set; } | The title of the result. This is always required. | 24 | | [TitleHighlightData](Result/TitleHighlightData.md) { get; set; } | A list of indexes for the characters to be highlighted in Title | 25 | | [TitleToolTip](Result/TitleToolTip.md) { get; set; } | Show message as ToolTip on result Title hover over | 26 | | [Icon](Result/Icon.md) | Delegate to Get Image Source | 27 | | override [Equals](Result/Equals.md)(…) | | 28 | | override [GetHashCode](Result/GetHashCode.md)() | | 29 | | override [ToString](Result/ToString.md)() | | 30 | | delegate [IconDelegate](Result.IconDelegate.md) | | 31 | 32 | ## See Also 33 | 34 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 35 | 36 | 37 | -------------------------------------------------------------------------------- /ci/src/plugin_updater.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import re 3 | import sys 4 | from json import loads as json_loads 5 | from typing import Dict, List 6 | 7 | from github import Github, GithubException 8 | from pytablewriter import MarkdownTableWriter 9 | from tqdm import tqdm 10 | 11 | from _utils import ( 12 | END_COMMENT, 13 | START_COMMENT, 14 | ghtoken, 15 | plugin_author, 16 | plugin_description, 17 | plugin_json, 18 | plugin_markdown, 19 | plugin_md_reg, 20 | plugin_name, 21 | plugin_version, 22 | plugin_website, 23 | repository, 24 | ) 25 | 26 | 27 | def plugin_reader() -> str: 28 | with open(plugin_markdown, "r", encoding="utf-8") as f: 29 | return f.read() 30 | 31 | 32 | def plugin_writer(content: str): 33 | with open(plugin_markdown, "w", encoding="utf-8") as f: 34 | f.write(content) 35 | 36 | 37 | def decode_content(data: str) -> str: 38 | decoded_bytes = base64.b64decode(data) 39 | return str(decoded_bytes, "utf-8") 40 | 41 | 42 | def gen_link(name: str, website: str) -> str: 43 | return f"[{name}]({website})" 44 | 45 | 46 | def gen_plugin_list(mainifests: List[Dict[str, str]]) -> List[List[str]]: 47 | return [ 48 | [ 49 | gen_link(m[plugin_name], m[plugin_website]), 50 | m[plugin_description], 51 | m[plugin_author], 52 | m[plugin_version], 53 | ] 54 | for m in tqdm(mainifests) 55 | ] 56 | 57 | 58 | def gen_md_new_from_old(mdlist_new: str, mdlist_old: str) -> str: 59 | mdlist_new = f"{START_COMMENT}\n{mdlist_new}\n{END_COMMENT}" 60 | return re.sub(plugin_md_reg, mdlist_new, mdlist_old) 61 | 62 | 63 | if __name__ == "__main__": 64 | g = Github(ghtoken) 65 | try: 66 | repo = g.get_repo(repository) 67 | except GithubException: 68 | print( 69 | "Authentication Error." 70 | "Try saving a GitHub Token in your Repo Secrets or " 71 | "Use the GitHub Actions Token," 72 | "which is automatically used by the action." 73 | ) 74 | sys.exit(1) 75 | 76 | mainifests = repo.get_contents(plugin_json) 77 | mainifests = decode_content(mainifests.content) 78 | mainifests = json_loads(mainifests) 79 | 80 | infolist = gen_plugin_list(mainifests) 81 | mdtable_writer = MarkdownTableWriter( 82 | headers=[ 83 | plugin_name, 84 | plugin_description, 85 | plugin_author, 86 | plugin_version, 87 | ], 88 | value_matrix=infolist, 89 | ) 90 | mdlist_new = mdtable_writer.dumps() 91 | 92 | mdlist_old = plugin_reader() 93 | mdlist_new = gen_md_new_from_old(mdlist_new, mdlist_old) 94 | plugin_writer(mdlist_new) 95 | -------------------------------------------------------------------------------- /webcomponents/src/components/inputs/SettingsDropdown.svelte: -------------------------------------------------------------------------------- 1 | 13 | 14 |
15 | 30 |
31 | 32 | 110 | -------------------------------------------------------------------------------- /nodejs-setup-project.md: -------------------------------------------------------------------------------- 1 | ### 1. Add GitHub workflow 2 | The workflow [file](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.HelloWorldNodeJS/blob/main/.github/workflows/Publish%20Release.yml) will help build and deploy your project, it does the following things: 3 | 1. `workflow_dispatch:` gives you the option to manually run your workflow from the Actions section of your project 4 | 5 | 2. On pushes to main, it will kick off the workflow but ignore the push if it's only changes made to the workflow file. 6 | 7 | ```yml 8 | push: 9 | branches: [ main ] 10 | paths-ignore: 11 | - .github/workflows/* 12 | ``` 13 | 14 | 3. It specifies the Node.js version that will be used for building your project: 15 | 16 | ```yml 17 | - name: Set up Node.Js 18 | uses: actions/setup-node@v2 19 | with: 20 | node-version: '17.3.0' 21 | ``` 22 | 23 | 4. The project's release version is obtained from your plugin.json automatically by the CI, so when built, it will be appended to the zip file later: 24 | 25 | ```yml 26 | - name: get version 27 | id: version 28 | uses: notiz-dev/github-action-json-property@release 29 | with: 30 | path: 'plugin.json' 31 | prop_path: 'Version' 32 | ``` 33 | 34 | 5. The **Install dependencies** section is where you will do most of your CI work. It will run `npm install`, which will output all the dependencies specified in package.json into the 'node_modules' directory. The workflow will then zip them up along with your project using `zip -r Flow.Launcher.Plugin.HelloWorldNodeJS.zip . -x '*.git*'`, where you replace this `Flow.Launcher.Plugin.HelloWorldNodeJS` with the name of your plugin. 35 | 36 | ```yml 37 | - name: Install dependencies 38 | run: | 39 | npm install 40 | zip -r Flow.Launcher.Plugin.HelloWorldNodeJS.zip . -x '*.git*' 41 | ``` 42 | 43 | ### 2. Publish as zip 44 | The final step to the workflow file is this **Publish** section, which will publish the zip file you generated, upload to GitHub Releases page and tag with the version generated from the previous step from your plugin.json file. Remember again to replace `Flow.Launcher.Plugin.HelloWorldNodeJS` with the name of your plugin. 45 | 46 | ```yml 47 | - name: Publish 48 | uses: softprops/action-gh-release@v1 49 | with: 50 | files: 'Flow.Launcher.Plugin.HelloWorldNodeJS.zip' 51 | tag_name: "v${{steps.version.outputs.prop}}" 52 | env: 53 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 54 | ``` 55 | 56 | Feel free to also have a read of this [blog post](https://blog.ipswitch.com/how-to-build-your-first-github-actions-workflow) which does a simple explanation of how to use GitHub Actions Workflow. 57 | 58 | ### 3. Use node_modules directory 59 | Once the `node_modules` folder is included in your zip release, it can then be used without needing the user to manually npm install the plugin's dependencies. You just have to tell the plugin during runtime to find those modules in your local node_modules directory. Do this by using this exact copy of the following code block in your [main.js](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.HelloWorldNodeJS/blob/main/main.js): 60 | ```javascript 61 | const open = require('./node_modules/open'); 62 | ``` 63 | -------------------------------------------------------------------------------- /nodejs-write-code.md: -------------------------------------------------------------------------------- 1 | ### 1. Start with a branch 2 | Since we have created a CI for your plugin in the [previous step](https://flow-launcher.github.io/docs/#/nodejs-setup-project), which includes creating a release when you push/merge to the 'main' branch, it is then necessary to create another git branch separate to your 'main' branch so you can continue to work on your plugin with git commits and pushes without creating a new release each time. 3 | 4 | It is a good practice that you create a branch for each of the new feature/fixes you are releasing for your plugin, if you are not sure how to do so then follow this [video tutorial](https://www.gitkraken.com/learn/git/problems/create-git-branch). Once you have fully finished developing your plugin with your new branch, then you can merge it into the 'main' branch, which will consequently create a new release for your plugin with a version from your `plugin.json`. 5 | 6 | ### 2. main.js 7 | your main.js should look something like below: 8 | ```js 9 | const open = require('./node_modules/open'); 10 | 11 | const { method, parameters, settings } = JSON.parse(process.argv[2]); 12 | 13 | if (method === "query") { 14 | console.log(JSON.stringify( 15 | { 16 | "result": [{ 17 | "Title": "Hello World Typescript", 18 | "Subtitle": "Showing your query parameters: " + parameters + ". Click to open Flow's website", 19 | "JsonRPCAction": { 20 | "method": "do_something_for_query", 21 | "parameters": ["https://github.com/Flow-Launcher/Flow.Launcher"] 22 | }, 23 | "IcoPath": "Images\\app.png", 24 | "score" : 0 25 | }] 26 | } 27 | )); 28 | } 29 | 30 | if (method === "do_something_for_query") { 31 | url = parameters[0]; 32 | do_something_for_query(url); 33 | } 34 | 35 | function do_something_for_query(url) { 36 | open(url); 37 | } 38 | ``` 39 | 40 |
41 | 42 | ### 3. Query entry point 43 | **if (method === "query")** 44 | 45 | This if statement captures the args passed via JSON-RPC defined as `const { method, parameters } = JSON.parse(process.argv[2])`, so if `method` is `'query'` then the console.log's code block will be run. As the `result` property is an array, you can also specify a single or multiple results. 46 | 47 | ### 4. Assigning an action to your results 48 | **JsonRPCAction** 49 | 50 | This is where you specify the method that will be executed when the user selects on the result. 51 | In this example, if the user selects the result, the `do_something_for_query` method will be called with the url parameter which opens the Flow Launcher GitHub repo. 52 | 53 | ### 5. node.bat 54 | The [node.bat](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.HelloWorldNodeJS/blob/main/node.bat) file is the entry Flow uses to call main.js, it will set the working directory to the plugin's own location before calling main.js with node. 55 | ``` 56 | @echo off 57 | SET plugin_dir=%~dp0% 58 | node "%plugin_dir%/main.js" %* 59 | ``` 60 | 61 | ### 6 Result score 62 | The `score` field provides the ability to assign a weight to your score; the higher the score is, the higher the result from the plugin would show in flow's result list. The range in which you assign the score is usually between 0–100. You can keep it as 0 if your plugin generally uses an action keyword to trigger, but if you are using a global action keyword - `*` then the average weight for a plugin would be 50. Additionally, users can tweak the score via Flow's plugin setting as well. 63 | 64 | ### 7. Your plugin.json 65 | You will also need to, if not yet already, create a plugin.json file that will instruct Flow on how to load your plugin. 66 | 67 | This file should be placed in the top level folder. 68 | 69 | To revisit what to include in your plugin.json, visit [here](/plugin.json.md) 70 | -------------------------------------------------------------------------------- /webcomponents/src/webcomponents/SettingsComponentDemo.svelte: -------------------------------------------------------------------------------- 1 | 12 | 13 | 40 | 41 |
42 |
43 | {#if type !== 'textBlock'} 44 |
{label}
45 | {/if} 46 |
{description}
47 |
48 | {#if type !== 'textBlock'} 49 |
54 | {#if type === 'input'} 55 | 56 | {:else if type === 'inputWithFileBtn' || type === 'inputWithFolderBtn'} 57 | 58 | Browse 59 | {:else if type === 'passwordBox'} 60 | 61 | {:else if type === 'textarea'} 62 | 63 | {:else if type === 'dropdown'} 64 | 65 | {:else if type === 'checkbox'} 66 | 67 | {/if} 68 |
69 | {/if} 70 |
71 | 72 | 132 | -------------------------------------------------------------------------------- /py-setup-project.md: -------------------------------------------------------------------------------- 1 | ### 1. Add GitHub workflow 2 | The workflow [file](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.HelloWorldPython/blob/main/.github/workflows/Publish%20Release.yml) will help build and deploy your project, it does the following things: 3 | 1. `workflow_dispatch:` gives you the option to manually run your workflow from the Actions section of your project 4 | 5 | 2. On pushes to main, it will kick off the workflow but ignore the push if it's only changes made to the workflow file. 6 | 7 | ```yml 8 | push: 9 | branches: [ main ] 10 | paths-ignore: 11 | - .github/workflows/* 12 | ``` 13 | 14 | 3. It specifies the python version that will be used for building your project: 15 | 16 | ```yml 17 | env: 18 | python_ver: 3.11 19 | ``` 20 | 21 | 4. The project's release version is obtained from your plugin.json automatically by the CI, so when built, it will be appended to the zip file later: 22 | 23 | ```yml 24 | - name: get version 25 | id: version 26 | uses: notiz-dev/github-action-json-property@release 27 | with: 28 | path: 'plugin.json' 29 | prop_path: 'Version' 30 | ``` 31 | 32 | 5. The **Install dependencies** section is where you will do most of your CI work. Notice it installs the requirements.txt and outputs it with the `-t` parameter to the `./lib` folder. This tells pip to dump all the installed modules to the local lib folder which you will zip up along with your project using the `zip -r Flow.Launcher.Plugin.HelloWorldPython.zip . -x '*.git*'`, where you replace this `Flow.Launcher.Plugin.HelloWorldPython` with the name of your plugin. 33 | 34 | You can also add additional steps here to unpack/install any additional dependencies your plugin requires, for example, compiling additional translation files like [this](https://github.com/deefrawley/Flow.Launcher.Plugin.Currency/blob/23770ee929af059b1b1b7f9b5f3327b692ac9587/.github/workflows/Publish%20Release.yml#L34) 35 | 36 | ```yml 37 | - name: Install dependencies 38 | run: | 39 | python -m pip install --upgrade pip 40 | pip install -r ./requirements.txt -t ./lib 41 | zip -r Flow.Launcher.Plugin.HelloWorldPython.zip . -x '*.git*' 42 | ``` 43 | 44 | ### 2. Publish as zip 45 | The final step to the workflow file is this **Publish** section, which will publish the zip file you generated, upload to GitHub Releases page and tag with the version generated from the previous step from your plugin.json file. Remember again to replace `Flow.Launcher.Plugin.HelloWorldPython` with the name of your plugin. 46 | ```yml 47 | - name: Publish 48 | if: success() 49 | uses: softprops/action-gh-release@v1 50 | with: 51 | files: 'Flow.Launcher.Plugin.HelloWorldPython.zip' 52 | tag_name: "v${{steps.version.outputs.prop}}" 53 | env: 54 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 55 | ``` 56 | 57 | Feel free to also have a read of this [blog post](https://blog.ipswitch.com/how-to-build-your-first-github-actions-workflow) which does a simple explanation of how to use GitHub Actions Workflow. 58 | 59 | ### 3. Use lib directory 60 | Once the lib folder is included in your zip release, it can then be used without needing the user to manually pip install. You just have to tell during runtime to find those modules in your local lib folder. Do this by using this exact copy of the following code block: 61 | ```python 62 | import sys 63 | from pathlib import Path 64 | 65 | plugindir = Path.absolute(Path(__file__).parent) 66 | paths = (".", "lib", "plugin") 67 | sys.path = [str(plugindir / p) for p in paths] + sys.path 68 | 69 | ``` 70 | Add the above code into your init file at the top, usually this is the [main.py](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.HelloWorldPython/blob/main/main.py) file. This block of code appends the path of your lib and plugin directories on the user's machine to `sys.path`. `sys.path` is a built-in variable within the sys module, which contains a list of directories that the Python interpreter will search in for the required module. Effectively, we are telling the interpreter if the required modules in your plugin are not found among its built-in modules then look through the list of directories defined by `sys.path`, which should have all the modules installed by your GitHub workflow in the 'lib' folder. 71 | -------------------------------------------------------------------------------- /API-Reference/Flow.Launcher.Plugin/IPublicAPI.md: -------------------------------------------------------------------------------- 1 | # IPublicAPI interface 2 | 3 | Public APIs that plugin can use 4 | 5 | ```csharp 6 | public interface IPublicAPI 7 | ``` 8 | 9 | ## Members 10 | 11 | | name | description | 12 | | --- | --- | 13 | | [AddActionKeyword](IPublicAPI/AddActionKeyword.md)(…) | Add ActionKeyword for specific plugin | 14 | | [ChangeQuery](IPublicAPI/ChangeQuery.md)(…) | Change Flow.Launcher query | 15 | | [CheckForNewUpdate](IPublicAPI/CheckForNewUpdate.md)() | Check for new Flow Launcher update | 16 | | [CopyToClipboard](IPublicAPI/CopyToClipboard.md)(…) | Copy Text to clipboard | 17 | | [FuzzySearch](IPublicAPI/FuzzySearch.md)(…) | Fuzzy Search the string with the given query. This is the core search mechanism Flow uses | 18 | | [GetAllPlugins](IPublicAPI/GetAllPlugins.md)() | Get all loaded plugins | 19 | | [GetTranslation](IPublicAPI/GetTranslation.md)(…) | Get translation of current language You need to implement IPluginI18n if you want to support multiple languages for your plugin | 20 | | [HttpDownloadAsync](IPublicAPI/HttpDownloadAsync.md)(…) | Download the specific url to a certain file path | 21 | | [HttpGetStreamAsync](IPublicAPI/HttpGetStreamAsync.md)(…) | Http download the specific url and return as stream | 22 | | [HttpGetStringAsync](IPublicAPI/HttpGetStringAsync.md)(…) | Http download the specific url and return as string | 23 | | [LoadSettingJsonStorage<T>](IPublicAPI/LoadSettingJsonStorage.md)() | Load JsonStorage for current plugin's setting. This is the method used to load settings from json in Flow. When the file is not exist, it will create a new instance for the specific type. | 24 | | [LogDebug](IPublicAPI/LogDebug.md)(…) | Log debug message Message will only be logged in Debug mode | 25 | | [LogException](IPublicAPI/LogException.md)(…) | Log an Exception. Will throw if in debug mode so developer will be aware, otherwise logs the error message. This is the primary logging method used for Flow | 26 | | [LogInfo](IPublicAPI/LogInfo.md)(…) | Log info message | 27 | | [LogWarn](IPublicAPI/LogWarn.md)(…) | Log warning message | 28 | | [OpenDirectory](IPublicAPI/OpenDirectory.md)(…) | Open directory in an explorer configured by user via Flow's Settings. The default is Windows Explorer | 29 | | [OpenSettingDialog](IPublicAPI/OpenSettingDialog.md)() | Open setting dialog | 30 | | [OpenUrl](IPublicAPI/OpenUrl.md)(…) | Opens the url. The browser and mode used is based on what's configured in Flow's default browser settings. | 31 | | [RegisterGlobalKeyboardCallback](IPublicAPI/RegisterGlobalKeyboardCallback.md)(…) | Register a callback for Global Keyboard Event | 32 | | [ReloadAllPluginData](IPublicAPI/ReloadAllPluginData.md)() | Reloads any Plugins that have the IReloadable implemented. It refreshes Plugin's in memory data with new content added by user. | 33 | | [RemoveActionKeyword](IPublicAPI/RemoveActionKeyword.md)(…) | Remove ActionKeyword for specific plugin | 34 | | [RemoveGlobalKeyboardCallback](IPublicAPI/RemoveGlobalKeyboardCallback.md)(…) | Remove a callback for Global Keyboard Event | 35 | | [RestartApp](IPublicAPI/RestartApp.md)() | Restart Flow Launcher | 36 | | [SaveAppAllSettings](IPublicAPI/SaveAppAllSettings.md)() | Save everything, all of Flow Launcher and plugins' data and settings | 37 | | [SavePluginSettings](IPublicAPI/SavePluginSettings.md)() | Save all Flow's plugins settings | 38 | | [SaveSettingJsonStorage<T>](IPublicAPI/SaveSettingJsonStorage.md)() | Save JsonStorage for current plugin's setting. This is the method used to save settings to json in Flow.Launcher This method will save the original instance loaded with LoadJsonStorage. This API call is for manually Save. Flow will automatically save all setting type that has called LoadSettingJsonStorage or SaveSettingJsonStorage previously. | 39 | | [ShellRun](IPublicAPI/ShellRun.md)(…) | Run a shell command | 40 | | [ShowMainWindow](IPublicAPI/ShowMainWindow.md)() | Show the MainWindow when hiding | 41 | | [ShowMsg](IPublicAPI/ShowMsg.md)(…) | Show message box (2 methods) | 42 | | [ShowMsgError](IPublicAPI/ShowMsgError.md)(…) | Show the error message using Flow's standard error icon. | 43 | 44 | ## See Also 45 | 46 | * namespace [Flow.Launcher.Plugin](../Flow.Launcher.Plugin.md) 47 | 48 | 49 | -------------------------------------------------------------------------------- /webcomponents/src/components/SettingsCodeOutputDialog.svelte: -------------------------------------------------------------------------------- 1 | 51 | 52 | 53 | 54 | 55 |
56 | 57 | 58 |
59 |
Typings for your programming language:
60 |
61 | 65 | 69 | 73 |
74 |
75 | 76 |
77 | 84 |
85 | 86 |
87 | 94 |
95 | 96 |
97 | 104 |
105 | 106 |
107 | Close 108 |
109 |
110 |
111 | 112 | 169 | -------------------------------------------------------------------------------- /usage-tips.md: -------------------------------------------------------------------------------- 1 | ### Usage Tips 2 | 3 | #### Installation 4 | - Flow is published as a self-contained app, this means on Windows machines (7 and up) Flow can run straight away without needing to install .NET runtime and framework. Coupled with portable mode, it can be stored on Dropbox or cloud storage provider and run on any Windows machines. The slight drawback is that the installed package size is slightly bigger at around 250 MB because it needs to bundle the required .NET components together. 5 | #### Searching 6 | - Search for items using: 7 | - Acronyms e.g. `gk` or `gp` for GitKraken Preview. 8 | - Fuzzy e.g. `acr` or `rea` for Acrobat Reader DC. 9 | - Single word e.g. `code` or `visual` for Visual Studio Code. 10 | - Right-click with the mouse, or press right-arrow on the keyboard, on a result to access the context menu for additional actions. The context menu is specific to the plugin providing the result 11 | 12 | #### Plugins 13 | - Typing `?` in the search bar will show you the keywords currently active. This can be refined by typing the first letter or two of the keywords you are after. 14 | - The plugin results order can be prioritised. This can be done by going to the plugin's settings page. Under the plugin's title and the description, click the number next to 'Priority'; this is where you can assign weight to the plugin's result. The higher the weight is, the higher the selected plugin's results will be in Flow's result list. 15 | - Press `F5` while in the query window or type `reload plugin data` to reload all plugin data. 16 | - Both Program and Bookmarks plugin will automatically detect new changes, so your newly installed apps or bookmarks will be available soon after they are added. 17 | - If your plugin is not triggering, open Flow's settings, navigate to the Plugins tab, and check if the plugin is set to a specific action keyword. Note that sometimes a dedicated keyword is used to limit the number of results and avoid cluttering the list.. 18 | - For Explorer plugin results, you can press `Ctrl + Enter` to open the folder directly instead of navigating into the folder. 19 | - You can save your frequently used or favourite files/folder locations via Explorer plugin. Navigate to the file/location you want to save, then go to the context menu and select `Add to Quick Access`. It will be particularly handy if you have set a custom action keyword instead of the default '*', which when used will display your list of saved Quick Access files and folders. You can change the default action keyword via the plugin's settings page. 20 | - Press ctrl + enter/click on a Shell plugin command will run it directly as admin. 21 | - In the plugins download list, you can press ctrl + enter/click to open the plugin's url. 22 | - Explorer's Search action keyword combines both Path and Index search, so you can use it without worrying about which action keyword to use for what, put in what you need to search for. Path (searches a specific path) and Index (search a file or folder name) search allows users to do just their specific searches and are disabled by default. 23 | - Whilst in the query window and searching inside a directory, pressing `Ctrl + Backspace` will go back up one level in the directory tree. 24 | 25 | #### Settings 26 | - Flow's settings including installed plugins are located at: 27 | - If using roaming: `%APPDATA%\FlowLauncher` 28 | - If using portable, by default: `%localappdata%\FlowLauncher\app-\UserData` 29 | - To back up your Flow's settings including installed plugins, back up your UserData folder. You can locate it quickly via querying `flow launcher userdata` in the search bar. 30 | - To restore your saved settings, ensure Flow is exited, delete the current UserData folder and copy yours in. Start Flow and all your settings will be set up. One exception, however, is your saved Quick Access files and folder paths in the Explorer plugin you may need to update if the locations have changed. 31 | - When migrating from a system with a high screen resolution to one with a lower resolution, it may be necessary to adjust "SettingWindowWidth", "SettingWindowHeight" "SettingWindowTop" and "SettingWindowLeft" as the settings may otherwise appear outside the visible area. Default values for 1920x1080: 1000, 700, 0, 0. 32 | - Resetting Flow back to default settings is also easy, move/delete the UserData folder after closing the app, and the defaults will be recreated. 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /plugin-explorer.md: -------------------------------------------------------------------------------- 1 | ## Explorer Plugin 2 | 3 | The Explorer plugin is a default plugin that installs with Flow Launcher. Previously there was an Explorer Plugin and an Everything Plugin, but these were merged, and you can now choose which search engine will search for what through Flow. If you don't already have the Everything search tool from Voidtools installed, Flow will automatically download and install it if you choose it as your search index engine. To trigger automatic install, fire a search and click the "Warning: Everything is not running" result. Flow Launcher currently only supports v1.4.x of Everything and not the 1.5 alpha branch. (For 1.5 alpha support, please refer to [this](https://github.com/Flow-Launcher/Flow.Launcher/issues/1716) link) 4 | 5 | Here is how to configure this plugin: 6 | 7 | #### General Setting tab 8 | ---- 9 | ![General Setting tab](/assets/explorer_1.png) 10 | 11 | - *Use search result's location as the working directory of the executable* : tick this so Flow will set the working directory of any application you run through the Explorer plugin to the directory of the executable 12 | - *Hit enter to open folder in Default File Manager* : tick this box to have the ENTER key open the current directory in the default file manager rather than have Flow go into this directory for further browsing. 13 | - *File editor path* and *Folder editor path* : These two options allow you to set a program to open either files or folders, when you right mouse click / SHIFT + ENTER context menu a search result. Note these options will only appear in the context menu if you have set them here. 14 | For example, to set up this plugin, so you can open any directory in Visual Studio Code, first add the path to your Visual Studio Code install in the Folder editor path setting: 15 | 16 | ![Folder editor path option](/assets/explorer_1a.png) 17 | 18 | then search for a folder, and then right mouse click / SHIFT + ENTER: 19 | 20 | ![Example folder search](/assets/explorer_1b.png) 21 | 22 | and then choose the *Open With Editor* option 23 | 24 | ![Context menu example](/assets/explorer_1c.png) 25 | 26 | - *Shell path* : set the executable shell to be launched when the right mouse click / SHIFT + ENTER is chosen. This defaults to the Windows `cmd` 27 | - *Index search engine*, *Content search engine* and *Directory recursive search engine*: These three options let you choose whether Windows Index or Everything (if you have it installed) for specific tasks. The Index is for general filename search, the Content is for searching within text files and the Directory recursive is for listing subdirectories within a directory. 28 | - *Open Windows index option*: this opens the Windows Indexing system setting, so you can see and adjust exactly what the Windows Index service is doing. 29 | #### Everything Setting tab 30 | ---- 31 | ![Everything Setting tab](/assets/explorer_2.png) 32 | 33 | - *Search full path* : use the Everything option to search the full path and not just the filename. Equivalent to the `path:` modifier within Everything. 34 | - *Sort Option* : dropdown list to show how the search results are sorted. 35 | - *Everything Path* : If you have Everything installed, Flow Launcher will try and find the installation to use, but if you are having issues, or it is installed in a non-standard directory, you can specify it explicitly here. 36 | #### Customised Action Keywords tab 37 | ---- 38 | ![Customise Action Keywords tab](/assets/explorer_3.png) 39 | 40 | - For each option here you can choose a custom keyword to trigger that specific type of search. Anything with a `*` is searched for when you type anything in Flow Launcher or if you give the Explorer plugin a global keyword. For example, the default to search within documents is set to `doc:` (this is done as searching the contents of documents is slow and so should only trigger when that is definitely what you want to do). If you don't care about exactly what type of search is executed, just use the 'Search' keyword. 41 | 42 | #### Quick Access Links tab 43 | ---- 44 | ![Quick Access Links tab](/assets/explorer_4.png) 45 | 46 | - Here you can add directories that you often work with, and would like to be returned as soon as you start typing their source location. Directories can also be added and removed from this list with the right mouse click / SHIFT + ENTER context menu from any search result that is a directory. 47 | #### Index Search Excluded Paths tab 48 | ---- 49 | ![Index Search Excluded Paths tab](/assets/explorer_5.png) 50 | 51 | - Adding a directory here will exclude it from the Flow Launcher search, over-riding any settings you maye have in Windows Indexing or Everything. 52 | 53 | ### Using Everything 54 | 55 | If you do choose to use Everything to search, [these Everything commands](https://www.voidtools.com/support/everything/searching/) may be useful to reference. 56 | -------------------------------------------------------------------------------- /py-write-code.md: -------------------------------------------------------------------------------- 1 | ### 1. Start with a branch 2 | Since we have created a CI for your plugin in the [previous step](/py-setup-project.md), which includes creating a release when you push/merge to the 'main' branch, it is then necessary to create another git branch separate to your `main` branch, so you can continue to work on your plugin with git commits and pushes without creating a new release each time. 3 | 4 | It is a good practice that you create a branch for each of the new feature/fixes you are releasing for your plugin, if you are not sure how to do so, then follow this [video tutorial](https://www.gitkraken.com/learn/git/problems/create-git-branch). Once you have fully finished developing your plugin with your new branch, then you can merge it into the 'main' branch, which will consequently create a new release for your plugin with a version from your `plugin.json`. 5 | 6 | ### 2. main.py 7 | your `main.py` should look something like below: 8 | 9 | ```python 10 | import sys,os 11 | parent_folder_path = os.path.abspath(os.path.dirname(__file__)) 12 | sys.path.append(parent_folder_path) 13 | sys.path.append(os.path.join(parent_folder_path, 'lib')) 14 | sys.path.append(os.path.join(parent_folder_path, 'plugin')) 15 | 16 | from flowlauncher import FlowLauncher 17 | import webbrowser 18 | 19 | 20 | class HelloWorld(FlowLauncher): 21 | 22 | def query(self, query): 23 | return [ 24 | { 25 | "title": "Hello World, this is where title goes. {}".format(('Your query is: ' + query , query)[query == '']), 26 | "subTitle": "This is where your subtitle goes, press enter to open Flow's url", 27 | "icoPath": "Images/app.png", 28 | "jsonRPCAction": { 29 | "method": "open_url", 30 | "parameters": ["https://github.com/Flow-Launcher/Flow.Launcher"] 31 | }, 32 | "score": 0 33 | } 34 | ] 35 | 36 | def context_menu(self, data): 37 | return [ 38 | { 39 | "title": "Hello World Python's Context menu", 40 | "subTitle": "Press enter to open Flow the plugin's repo in GitHub", 41 | "icoPath": "Images/app.png", # related path to the image 42 | "jsonRPCAction": { 43 | "method": "open_url", 44 | "parameters": ["https://github.com/Flow-Launcher/Flow.Launcher.Plugin.HelloWorldPython"] 45 | }, 46 | "score" : 0 47 | } 48 | ] 49 | 50 | def open_url(self, url): 51 | webbrowser.open(url) 52 | 53 | if __name__ == "__main__": 54 | HelloWorld() 55 | 56 | ``` 57 | 58 |
59 | 60 | ### 3. Query entry point 61 | **def query(self, query):** 62 | 63 | This is the main entry to your plugin, and the return block will be a list of the results that your plugin returns, which could be a single or many results. 64 | 65 | ### 4. Assigning an action to your results 66 | **JsonRPCAction** 67 | 68 | This is where you specify the method that will be executed when the user selects on the result. 69 | In this example, if the user selects the result, the `open_url` method will be called with the url parameter that opens the Flow Launcher GitHub repo. 70 | 71 | ### 5. Create an additional context menu 72 | **def context_menu(self, data):** 73 | 74 | This method creates a context menu for your results, where the user can carry out additional tasks when they go to the context menu via pressing `Shift + Enter`. A context menu could be helpful if you want some tasks specific to your returned results. For example, the Explorer plugin would return a list of file results, and when going to the context menu of one of the result users can select to copy the file. 75 | 76 | To attach a method to your context menu result, do the same as for normal results where you define a JsonRPCAction item with the method and parameters you want to call and pass through. In this case, the context menu will simply open the HelloWorldPython plugin's GitHub repo. 77 | 78 | ### 6 Result score 79 | The `score` field provides the ability to assign a weight to your score; the higher the score is, the higher the result from the plugin would show in flow's result list. The range in which you assign the score is usually between 0–100. You can keep it as 0 if your plugin generally uses an action keyword to trigger, but if you are using a global action keyword (`*`) then the average weight for a plugin would be 50. Additionally, users can tweak the score via Flow's plugin setting as well. 80 | 81 | ### 7. Your plugin.json 82 | 83 | You will also need to, if not yet already, create a plugin.json file that will instruct Flow on how to load your plugin. 84 | 85 | This file should be placed in the top level folder. 86 | 87 | To revisit what to include in your plugin.json, visit [here](/plugin.json.md) 88 | --------------------------------------------------------------------------------