diff --git a/content/devlog/2026.smd b/content/devlog/2026.smd deleted file mode 100644 index 7f153d7..0000000 --- a/content/devlog/2026.smd +++ /dev/null @@ -1,372 +0,0 @@ ---- -.title = "Devlog 2026", -.date = @date("2026-02-13"), -.author = "CJ van den Berg", -.layout = "devlog.shtml", -.draft = false, ---- - -[]($section.id('about')) -## About this Devlog - -I try to keep a log of major (and some minor) changes and new features -going into flow as I work on them. - -You can [subscribe to this page via -RSS]($link.page('devlog').alternative('rss')) and find more devlog entries -in the [archive](/devlog/). - -# [Release 0.7.0 🎉]($section.id("2026-02-13T09:21:56+01:00")) - -We kick off the new Year with a major release! - -[]($video.asset('2026-02-13_flow-0.7.0_teaser.mp4').controls(true)) - -## Completion - -Flow now has full **inline auto completion** support! There is a new -dropdown UI with support for insert and replace completion styles while -editing inline. An info popup box can display completion and hover -documentation and there are commands to toggle modes and styles -interactively. - -There are three completion trigger modes available: -- `manual` - completion is triggered via keybind to the `completion` command -- `automatic` - completion is triggered whenever a trigger character is inserted -- `every_keystroke` - completion is triggered on every insert operation - -Trigger characters are provided by the current document's LSP. Note that a -completion request may not always return results and in that case no -completion UI will be shown. Completion items that insert LSP snippets are -now supported and the next snippet tab stop can be selected with the `tab` -key. There are two keybind modes for inline completion. `standard` mode -will steal the `up/down` and `enter` keys from the main editor and -`noninvasive` mode that will not. `noninvasive` mode requires that you use -the alternate keybindings `ctrl+n`/`ctrl+p` to pick a completion item -and `tab` to select it. These keybindings also work in `standard` mode. - -The original palette style completion UI is also still available and may be -selected with the `toggle_completion_style` command. - -#### Keybinds: -- `ctrl+space` or `ctrl+.` - manually trigger completion -- `ctrl+space` (when completing) - toggle info box, info panel or no info -- `up`, `down`, `ctrl+p`, `ctrl+n` - pick a completion item from the list -- `enter`, `tab` - select and insert a completion -- `esc` - cancel completion -- `ctrl+k r` - toggle insert or replace completion mode -- `alt+f9` - select next completion dropdown UI widget style -- `shift+alt+f9` - select next info box widget style - -Configuration options: -- `completion_trigger` -- `completion_style` -- `completion_insert_mode` -- `completion_info_mode` -- `dropdown_keybinds` - `standard` or `noninvasive` -- `dropdown_limit` - - -## Vertical Splits - -Flow Control can now show multple editors in vertical, side by side, views. -Each split can have it's own tab bar and tabs may be moved between splits -with mouse or keyboard commands. Commands or palettes that navigate to -files now have an "alternate" mode that will open the file in a new split -if it is not already open. - -#### Keybinds: -- `ctrl+\` - add_split -- `ctrl+k w` - close_split -- `ctrl+1` to `ctrl+8` - focus_split -- `ctrl+page_down` - select tab right -- `ctrl+page_up` - select tab left -- `ctrl+shift+page_down` - move tab right -- `ctrl+shift+page_up` - move tab left -- `shift+enter` - (palette or command) navigate to file in a new split - - -## Centered View - -When only one split is open on a wide screen you can now center the view. -The width of the centered view is controllable with keybinds and/or the -`centered_view_width` configuration option. - -#### Keybinds: -- `ctrl+k x` - toggle centered view -- `alt+-` - shrink centered view -- `alt+=` - expand centered view - - -## Horizontal scrolling - -Horizontal scrolling with a horizontal mouse wheel is now supported. Also, -scrolling the regular vertical mouse wheel with the `shift` key pressed -will now scroll horizontally. Fast scroll (hold the 'alt' key) is also -supported for horizontal scrolling. - - -## Git Diffs - -Diff markers in the editor gutter are now based on the git HEAD commit if -the current project is a git repository. Also, the new commands -`goto_next_change` and `goto_prev_change` will move the primary cursor to -the next/previous marker in the gutter. - -#### Keybinds: -- `alt+f5` - goto_next_change -- `alt+shift+f5` - goto_prev_change - - -## Blame - -Git blame information for the current line is displayed in the remaining on -the line. This can be toggled with the `toggle_inline_vcs_blame` command. - -#### Keybinds: -- `ctrl+shift+g alt+b` - toggle_inline_vcs_blame - - -## Variable Expansions - -Tasks and `filter` bindings may now use variable expansions in their -arguments. Variable names to be expanded should be wrapped in `{{` and -`}}`. - -The following variables are available in this release: - -- `{{project}}` - The path to the current project directory -- `{{file}}` - The path to the current file -- `{{line}}` - The line number of the primary cursor -- `{{column}}` - The column of the primary cursor -- `{{selection}}` - The current selection of the primary cursor -- `{{selections}}` - All current selections seperated by NL characters -- `{{selectionsZ}}` - All current selections separated by NULL characters -- `{{indent_mode}}` - The current indent mode (`tabs` or `spaces`) -- `{{indent_size}}` - The current indent size (in columns) -- `{{blame_commit}}` - The blame commit ID for the line at the primary cursor (if there is one) - - -## Highlight References - -Added support for the LSP `textDocument/documentHighlight` request as the -`highlight_references` command. Flow will automatically mark the results of -this query as matches so you can use the the `goto_next_match` and -`goto_prev_match` commands to navigate them. `highlight_references` is also -available as an idle action for automatic reference highlighting (See the -Idle Actions secion below) - -#### Keybinds: -- `ctrl+k i` - - -## Auto Run Commands, Auto Backups & Session Saving - -`auto_run_commands` and `auto_run_time_seconds` can be used to configure -commands that will run automatically like a cron job. `save_session` and -`save_session_quiet` commands were also added to make auto run useful as a -backup tool. - -The default configuration for `auto_run_commands` is `save_session_quiet` -and the default for `auto_run_time_seconds` is 120, so in the (rare!) event -of a flow crash you can return to flow with minimal data loss with `flow ---restart-session`. - -The `save_session_and_quit` command was also added for when you want to -manuall exit and restart flow with `flow --restart-session`. - - -## Idle Actions & Commands - -Idle actions & commands run whenever the user pauses their interaction with -flow. Actions are specific functions designed to run on idle. At the moment -just `hover` and `highlight_references`. These actions have commands to -toggle them interactively. The idle timeout is configured with the -`input_idle_time_ms` option. - - -## Find Mode - -There are now three find modes. Exact match, case folded (insensitive) -and auto mode. Auto mode (the new default) selects to do an exact match -search or case folded search depending on whether the query term contains -case foldable characters or not. So if you enter a lowercase search term -you get a case insensitive search. Also, auto find mode (which searches as -soon as you select something) now has a command (and a keybind) to toggle -it on/off. - -#### Keybinds: -- `alt+c` (in find mode) - toggle exact or case folded search mode -- `alt+f3` - toggle auto find mode - - -## Key Hints - -There is a new key hints overlay that displays all currently available -keybindings. It can be explicitly activated with `alt+f1` or `ctrl+?`, and -will be automatically displayed when an incomplete keybinding sequence is -waiting for additional input. The key hints overlay is invisible to mouse -events and can be active in any flow input mode or submode. - -#### Keybinds: -- `alt+f1` or `ctrl+?` - show/hide the key hints overlay -- `shift+f1` or `ctrl+alt+?` - next key hints page -- `shift+alt+f9` - next widget style for key hints - - -## Restart with Sudo - -You can now restart the flow session with `sudo` to save files with root -permissions. The current session, with unsaved file content (but currently -not undo info), is first saved and then automatically restored when flow is -restarted by sudo. If the `sudo` command fails for any reason the saved -flow session can be reloaded as usual with `flow --restart-session`. Flow -now displays a red lock symbol in the status bar and a (configurable) -warning message on the home screen when running with root permissions. - - -## Symlinks - -Flow can now follow symlinks when writing files and scanning the project -tree. New options `retain_symlinks`, `follow_directory_symlinks` and -`maximum_symlink_depth` control symlink behavior. Symlink following on file -save (`retain_symlinks`) is now enabled by default. -`follow_directory_symlinks` when scanning the project tree is not enabled -by default. - - -## Symbols Palette - -Added support for the LSP `textDocument/documentSymbol` request with a -palette interface to browse and filter symbols in the current document. - -#### Keybinds: -- `ctrl+shift+o` - open the symbols palette -- `enter` - jump to the highlighted symbol -- `shift+enter` - select the highlighted symbol -- `up/down/pgup/pgdn/home/end` - browse the symbols list -- `anything else` - filter the symbols list with a fuzzy search -- `esc` - cancel and return to original document location - - -## Project switching - -Switching projects without exiting Flow Control (`ctrl+r`) now restores -open tabs and splits making for a much smoother multi-project workflow. - - -## Last Palette - -You can now re-open the last used palette with the `last_palette` command. -This restores the state of the palette when last used, which is very -useful, for example, for browsing through multiple files that match a fuzzy -query. - -#### Keybinds: -- `ctrl+,` - open lasted used palette -- [helix] `space '` - open lasted used palette - - -## Goto Matching Bracket - -Added the classic goto matching bracket command. - -#### Keybinds: -- flow - `ctrl+shift+\` -- emacs - `C-M-p C-M-n` -- vim - `%` -- helix - `mm` - - -## Reflow text - -The `reflow` command can soft wrap paragraphs of text. There is basic -detection of the line prefix to aid in reflowing indented or commented -blocks of text. Blank lines are preserved as paragraph boundaries. The -default line width for `reflow` is configured with the `reflow_width` -config option and can also be specified for the current, and any following, -`reflow` operation with an integer command parameter. (`alt+1`, etc.) - -#### Keybinds: -- `alt+q` - reflow paragraph - - -## LSP Configuration - -The `open_lsp_config_global` and `open_lsp_config_project` will open a json -file where you can add LSP configuration that is sent to the LSP on startup -via the LSP `initializationOptions` init request field. Project and global -configurations are not merged in anyway and project config overrides global -config entirely. The project (and global) LSP configuration is stored in -the flow configuration directory, even for project specific config. - - -## Language support changes - -- Set default lua formatter to stylua -- Set ty as default lsp for python -- Update ziggy and superhtml - - -## Helix mode - -- Added switch_to_lowercase -- Add cursors with selections for selected lines (Alt+s) -- maw and maW support -- miw and miW support - - -## Themes - -- Changed the default theme to the more modern ayu-mirage -- Added selenized theme -- Added ethereal theme - - -## Misc minor features and new commands - -- add gutter_width_mode and gutter_width_minimum/maximum config options -- add more modes to linenumstate status bar widget -- add uuidgen keybind -- add option to disable sgr pixel mode support -- add show_bottom_bar_grip config option -- make expand_selection and shrink_selection multicursor aware -- add option to align inline diagnostics to the left -- add toggle_command_logging command -- add select_to_line_vim command -- make goto in flow select mode select to line -- map kp_ movement keys as regular keys if the kp_ variants are not explicitly mapped -- add panel border to logview -- subscribe to keybind_match events in inputview and display them -- add ignore_filter_stderr config option -- add config option keybind_mode with workaround ignore_alt_text_modifiers -- add show_local_diagnostics_in_panel config option -- add whitespace_mode external -- add modes_can_change_cursor configuration option -- add results count to generic palette -- add results count to open_recent palette -- add scrollbar_auto_hide config option -- add pane_style config option -- add option to disable modal dim effect -- add switch_input_mode command to change keybind mode in a mini mode -- add value type descriptions to config files -- enable indent whitespace_mode by default -- bind open_config to alt+f5 -- add FLOW_CONFIG_DIR env var to override configuration directory -- propagate indent guides across blank lines -- add path segment completion to open_recent palette - - -## Contributors - -Many, many thanks to all who contributed to this release! - -- CJ van den Berg -- Igor Támara -- Miguel Granero -- Danylo Kondratiev -- Jakob Ingvast -- Palanix -- Ian Johnson -- Janne Hellsten -- xdBronch diff --git a/content/devlog/2026/2026-02-13_flow-0.7.0_teaser.mp4 b/content/devlog/2026/2026-02-13_flow-0.7.0_teaser.mp4 deleted file mode 100644 index e3df6a7..0000000 Binary files a/content/devlog/2026/2026-02-13_flow-0.7.0_teaser.mp4 and /dev/null differ diff --git a/content/docs/help.smd b/content/docs/help.smd index bc02684..9d435e0 100644 --- a/content/docs/help.smd +++ b/content/docs/help.smd @@ -25,25 +25,26 @@ individually. ## Searching Press ctrl+f to search this help file. Type a search term and press -ctrl+n/ctrl+p or f3/shift+f3 to jump through the matches. Press Enter to -exit find mode at the current match or Escape to return to your starting -point. +ctrl+n/ctrl+p or f3/shift+f3 to jump through the matches. Press Enter +to exit find mode at the current match or Escape to return to your +starting point. ## Messages and logs -Messages of issues regarding tasks that are not accomplished, like trying -to close flow with unsaved files, as well as other information are shown -briefly in the bottom status bar; most recent messages can be seen in the -log view too, to open it, use ctrl+shift+p > `View log`; it's possible to -make it taller dragging the toolbar with the mouse up or downwards. +Messages of issues regarding tasks that are not accomplished, like +trying to close flow with unsaved files, as well as other information +are shown briefly in the bottom status bar; most recent messages can +be seen in the log view too, to open it, use ctrl+shift+p > `View log`; +it's possible to make it taller dragging the toolbar with the mouse +up or downwards. ## Input Modes Flow Control supports multiple input modes that may be changed -interactively at runtime. The current input mode (and some other settings) -is persisted in the configuration file automatically. +interactively at runtime. The current input mode (and some other +settings) is persisted in the configuration file automatically. - f4 => Cycle major input modes (flow, emacs, vim, helix,...) @@ -51,9 +52,9 @@ The current input mode is displayed at the left side of the statusbar. - ctrl+shift+p or alt+x => Show the command palette -The command palette allows you to fuzzy search and select commands to run. -It also shows any available keybind that may be used to run the command -without opening the palette. +The command palette allows you to fuzzy search and select commands to run. It +also shows any available keybind that may be used to run the command without +opening the palette. - ctrl+f2 => Show all available commands and keybinds @@ -63,16 +64,16 @@ will insert the command name into the current document instead of executing it. This is very useful for editing keybinding definition files. Run the `Edit keybindings` command to save the current keybinding mode to a -file in the configuration `keys` directory and open it for editing. Save -your customized keybinds under a new name in the same directory to create -an entirely new keybinding mode that can be selected with `f4`. Delete the +file in the configuration `keys` directory and open it for editing. Save your +customized keybinds under a new name in the same directory to create an +entirely new keybinding mode that can be selected with `f4`. Delete the keybinding file from the configuration `keys` directory to revert the mode to it's built-in definition (if there is one). Changes to keybinding files will take effect on restart. -Keybinding modes may inherit all non-conflicting keybindings from another -mode by adding an `inherit` option to the `settings` section of the keybind -file like this: +Keybinding modes may inherit all non-conflicting keybindings from another mode +by adding an `inherit` option to the `settings` section of the keybind file +like this: ```json { @@ -86,9 +87,9 @@ file like this: This allows you to make only minor additions/changes to an existing builtin mode without copying the whole mode and is easier to keep up-to-date. -Additionally, individual sub-modes may inherit all non-conflicting -keybindings from another sub-mode of the same mode by adding an `inherit` -option to the sub-mode section like this: +Additionally, individual sub-modes may inherit all non-conflicting keybindings +from another sub-mode of the same mode by adding an `inherit` option to the +sub-mode section like this: ``` "normal": { @@ -107,44 +108,43 @@ Multiple inheritance is supported with the `inherits` options like this: ### Flow mode The default input mode, called just flow, is based on common GUI -programming editors. It most closely resembles Visual Studio Code, but also -takes some inspiration from Emacs and others. This mode focuses on powerful -multi cursor support with a find -> select -> modify cycle style of -editing. +programming editors. It most closely resembles Visual Studio Code, but +also takes some inspiration from Emacs and others. This mode focuses +on powerful multi cursor support with a find -> select -> modify +cycle style of editing. -See the `ctrl+f2` palette when flow mode is selected to see the full list -of keybindings for this mode. +See the `ctrl+f2` palette when flow mode is selected to see the full +list of keybindings for this mode. ### Vim mode -The vim modes, shown as NORMAL, INSERT or VISUAL in the status bar, follow -the basic modal editing style of vim. The basics follow vim closely, but -more advanced vim functions (e.g. macros and registers) are not supported -(yet). Keybindings from flow mode that do not conflict with vim keybindings -also work in vim mode. +The vim modes, shown as NORMAL, INSERT or VISUAL in the status bar, +follow the basic modal editing style of vim. The basics follow vim +closely, but more advanced vim functions (e.g. macros and registers) +are not supported (yet). Keybindings from flow mode that do not conflict +with vim keybindings also work in vim mode. ### Helix mode -The helix modes, shown as NOR, INS or SEL in the status bar, follow the -basic modal editing style of helix. The basics are being adapted closely, -more advanced functions (e.g. surround, macros, selections, registers) are -not supported (yet). Usual keybinding with LSPs are used for tasks like 'go -to definition', 'go to reference' and 'inline documentation' featuring -inline diagnostics. Keybindings from flow mode that do not conflict with -helix keybindings also work in helix mode. +The helix modes, shown as NOR, INS or SEL in the status bar, follow +the basic modal editing style of helix. The basics are being adapted +closely, more advanced functions (e.g. surround, macros, selections, +registers) are not supported (yet). Usual keybinding with LSPs are +used for tasks like 'go to definition', 'go to reference' and +'inline documentation' featuring inline diagnostics. Keybindings +from flow mode that do not conflict with helix keybindings also work in +helix mode. (work in progress) ## Mouse Commands -Mouse commands are NOT rebindable and are not listed in the command -palette. +Mouse commands are NOT rebindable and are not listed in the command palette. - Left Click => - Clear all cursors and selections and the place cursor at the mouse - pointer + Clear all cursors and selections and the place cursor at the mouse pointer - Double Left Click => Select word at mouse pointer @@ -182,10 +182,11 @@ palette. ## Configuration Configuration is stored in the standard location -`${XDG_CONFIG_HOME}/flow/config`. This is usually `~/.config/flow/config`. +`${XDG_CONFIG_HOME}/flow/config`. This is usually +`~/.config/flow/config`. -The default configuration will be written the first time Flow Control is -started and looks similar to this: +The default configuration will be written the first time +Flow Control is started and looks similar to this: ``` frame_rate 60 theme "default" @@ -202,22 +203,23 @@ animation_max_lag 150 Most of these options are fairly self explanatory. -`theme`, `input_mode` and `show_whitespace` are automatically persisted -when changed interactively with keybindings. +`theme`, `input_mode` and `show_whitespace` are automatically +persisted when changed interactively with keybindings. -`frame_rate` can be tuned to control the maximum number of frames rendered. +`frame_rate` can be tuned to control the maximum number +of frames rendered. -`animation_max_lag` controls the maximum amount of time allowed for -rendering scrolling animations. Set to 0 to disable scrolling animation -altogether. +`animation_max_lag` controls the maximum amount of time allowed +for rendering scrolling animations. Set to 0 to disable scrolling +animation altogether. -File types may be configured with the `Edit file type configuration` -command. You can also create a new file type by adding a new `.conf` file -to the `file_type` directory. Have a look at an existing file type to see -what options are available. +File types may be configured with the `Edit file type configuration` command. +You can also create a new file type by adding a new `.conf` file to the +`file_type` directory. Have a look at an existing file type to see what options +are available. ## Flags and options As every respectable terminal program, flow provide various invoking -options that among others, will allow you to inspect various aspects of the -running session. Feel free to run `flow --help` to explore them. +options that among others, will allow you to inspect various aspects of +the running session. Feel free to run `flow --help` to explore them. diff --git a/content/index.smd b/content/index.smd index e457061..9dfdc43 100644 --- a/content/index.smd +++ b/content/index.smd @@ -15,66 +15,48 @@ Flow Control is under active development, but very stable. ## 🚀 Features -- **Lightning Fast** TUI with ≤6ms frame times, **low latency** input - handling and smooth **animated scrolling** - -- Intuitive UI with **tabs**, **splits**, **scrollbars** and **palettes** - with full **mouse** support for all UI elements - +- **Lightning Fast** TUI with ≤6ms frame times, **low latency** input handling + and smooth **animated scrolling** +- Intuitive UI with **tabs**, **scrollbars** and **palettes** with full + **mouse** support for all UI elements - Support for more than **70 programming languages**, **zero configuration** needed, via **tree-sitter** powered syntax highlighting - -- **Language Server Protocol** pre configured support for most language - servers with support for inline auto completion, symbol lookup, goto - definition, highlight references, hover and more - +- **Language Server Protocol** pre configured support for most language servers - Powerful **multi-cursor** editing and integrated **clipboard history** - - Powerful configurable keybinding system that supports **modal** and **non-modal** editing styles - - Multiple pre-configured **keybinding modes** - Flow Control - GUI IDE style bindings (similar to vscode) - Emacs - Vim - Helix - User created - - Hybrid rope/piece-table buffer system, edit **very large files** with **thousands of cursors** - - Infinite **undo** (at least until you run out of ram) - -- Full **unicode** support, including support for the kitty text sizing - protocol - -- Plenty of **themes** included and support for vscode themes via the - flow-themes project - -- Runs on **Linux, FreeBSD, MacOS, Windows and Android** (under termux) - with easy **cross-compilation** to all supported targets +- Full **unicode** support, including support for the kitty text sizing protocol +- Plenty of **themes** included and support for vscode themes via the flow-themes project +- Runs on **Linux, FreeBSD, MacOS, Windows and Android** (under termux) with + easy **cross-compilation** to all supported targets ## Requirements - A modern terminal with **24bit color** and, ideally, **kitty keyboard - protocol** support. **Kitty**, **Foot** and **Ghostty** are the - recommended terminals at this time. **Zellij** also works well. Most - other terminals will work, but likely with reduced functionality. - -- **NerdFont** support. Either via terminal font fallback or a patched - font. - + protocol** support. **Kitty**, **Foot** and **Ghostty** are the recommended + terminals at this time. **Zellij** also works well. Most other terminals will + work, but likely with reduced functionality. +- **NerdFont** support. Either via terminal font fallback or a patched font. - A **UTF-8** locale ## 🛣️ Roadmap -See our [devlog](/devlog/2026) for on-going updates from the development -team. +See our [devlog](/devlog/2025) for on-going updates from the development team. ### In Development +- LSP completion support - Persistent undo/redo - File watcher integration