Compare commits
4 commits
faa41d83ca
...
efe7bdbb6d
| Author | SHA1 | Date | |
|---|---|---|---|
| efe7bdbb6d | |||
| 05d69f4364 | |||
| 8d9b1022c2 | |||
| 58571658e7 |
4 changed files with 464 additions and 76 deletions
372
content/devlog/2026.smd
Normal file
372
content/devlog/2026.smd
Normal file
|
|
@ -0,0 +1,372 @@
|
||||||
|
---
|
||||||
|
.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
|
||||||
BIN
content/devlog/2026/2026-02-13_flow-0.7.0_teaser.mp4
Normal file
BIN
content/devlog/2026/2026-02-13_flow-0.7.0_teaser.mp4
Normal file
Binary file not shown.
|
|
@ -25,26 +25,25 @@ individually.
|
||||||
## Searching
|
## Searching
|
||||||
|
|
||||||
Press ctrl+f to search this help file. Type a search term and press
|
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
|
ctrl+n/ctrl+p or f3/shift+f3 to jump through the matches. Press Enter to
|
||||||
to exit find mode at the current match or Escape to return to your
|
exit find mode at the current match or Escape to return to your starting
|
||||||
starting point.
|
point.
|
||||||
|
|
||||||
|
|
||||||
## Messages and logs
|
## Messages and logs
|
||||||
|
|
||||||
Messages of issues regarding tasks that are not accomplished, like
|
Messages of issues regarding tasks that are not accomplished, like trying
|
||||||
trying to close flow with unsaved files, as well as other information
|
to close flow with unsaved files, as well as other information are shown
|
||||||
are shown briefly in the bottom status bar; most recent messages can
|
briefly in the bottom status bar; most recent messages can be seen in the
|
||||||
be seen in the log view too, to open it, use ctrl+shift+p > `View log`;
|
log view too, to open it, use ctrl+shift+p > `View log`; it's possible to
|
||||||
it's possible to make it taller dragging the toolbar with the mouse
|
make it taller dragging the toolbar with the mouse up or downwards.
|
||||||
up or downwards.
|
|
||||||
|
|
||||||
|
|
||||||
## Input Modes
|
## Input Modes
|
||||||
|
|
||||||
Flow Control supports multiple input modes that may be changed
|
Flow Control supports multiple input modes that may be changed
|
||||||
interactively at runtime. The current input mode (and some other
|
interactively at runtime. The current input mode (and some other settings)
|
||||||
settings) is persisted in the configuration file automatically.
|
is persisted in the configuration file automatically.
|
||||||
|
|
||||||
- f4 => Cycle major input modes (flow, emacs, vim, helix,...)
|
- f4 => Cycle major input modes (flow, emacs, vim, helix,...)
|
||||||
|
|
||||||
|
|
@ -52,9 +51,9 @@ The current input mode is displayed at the left side of the statusbar.
|
||||||
|
|
||||||
- ctrl+shift+p or alt+x => Show the command palette
|
- ctrl+shift+p or alt+x => Show the command palette
|
||||||
|
|
||||||
The command palette allows you to fuzzy search and select commands to run. It
|
The command palette allows you to fuzzy search and select commands to run.
|
||||||
also shows any available keybind that may be used to run the command without
|
It also shows any available keybind that may be used to run the command
|
||||||
opening the palette.
|
without opening the palette.
|
||||||
|
|
||||||
- ctrl+f2 => Show all available commands and keybinds
|
- ctrl+f2 => Show all available commands and keybinds
|
||||||
|
|
||||||
|
|
@ -64,16 +63,16 @@ will insert the command name into the current document instead of executing
|
||||||
it. This is very useful for editing keybinding definition files.
|
it. This is very useful for editing keybinding definition files.
|
||||||
|
|
||||||
Run the `Edit keybindings` command to save the current keybinding mode to a
|
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
|
file in the configuration `keys` directory and open it for editing. Save
|
||||||
customized keybinds under a new name in the same directory to create an
|
your customized keybinds under a new name in the same directory to create
|
||||||
entirely new keybinding mode that can be selected with `f4`. Delete the
|
an entirely new keybinding mode that can be selected with `f4`. Delete the
|
||||||
keybinding file from the configuration `keys` directory to revert the mode
|
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
|
to it's built-in definition (if there is one). Changes to keybinding files
|
||||||
will take effect on restart.
|
will take effect on restart.
|
||||||
|
|
||||||
Keybinding modes may inherit all non-conflicting keybindings from another mode
|
Keybinding modes may inherit all non-conflicting keybindings from another
|
||||||
by adding an `inherit` option to the `settings` section of the keybind file
|
mode by adding an `inherit` option to the `settings` section of the keybind
|
||||||
like this:
|
file like this:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
|
|
@ -87,9 +86,9 @@ like this:
|
||||||
This allows you to make only minor additions/changes to an existing builtin
|
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.
|
mode without copying the whole mode and is easier to keep up-to-date.
|
||||||
|
|
||||||
Additionally, individual sub-modes may inherit all non-conflicting keybindings
|
Additionally, individual sub-modes may inherit all non-conflicting
|
||||||
from another sub-mode of the same mode by adding an `inherit` option to the
|
keybindings from another sub-mode of the same mode by adding an `inherit`
|
||||||
sub-mode section like this:
|
option to the sub-mode section like this:
|
||||||
|
|
||||||
```
|
```
|
||||||
"normal": {
|
"normal": {
|
||||||
|
|
@ -108,43 +107,44 @@ Multiple inheritance is supported with the `inherits` options like this:
|
||||||
### Flow mode
|
### Flow mode
|
||||||
|
|
||||||
The default input mode, called just flow, is based on common GUI
|
The default input mode, called just flow, is based on common GUI
|
||||||
programming editors. It most closely resembles Visual Studio Code, but
|
programming editors. It most closely resembles Visual Studio Code, but also
|
||||||
also takes some inspiration from Emacs and others. This mode focuses
|
takes some inspiration from Emacs and others. This mode focuses on powerful
|
||||||
on powerful multi cursor support with a find -> select -> modify
|
multi cursor support with a find -> select -> modify cycle style of
|
||||||
cycle style of editing.
|
editing.
|
||||||
|
|
||||||
See the `ctrl+f2` palette when flow mode is selected to see the full
|
See the `ctrl+f2` palette when flow mode is selected to see the full list
|
||||||
list of keybindings for this mode.
|
of keybindings for this mode.
|
||||||
|
|
||||||
|
|
||||||
### Vim mode
|
### Vim mode
|
||||||
|
|
||||||
The vim modes, shown as NORMAL, INSERT or VISUAL in the status bar,
|
The vim modes, shown as NORMAL, INSERT or VISUAL in the status bar, follow
|
||||||
follow the basic modal editing style of vim. The basics follow vim
|
the basic modal editing style of vim. The basics follow vim closely, but
|
||||||
closely, but more advanced vim functions (e.g. macros and registers)
|
more advanced vim functions (e.g. macros and registers) are not supported
|
||||||
are not supported (yet). Keybindings from flow mode that do not conflict
|
(yet). Keybindings from flow mode that do not conflict with vim keybindings
|
||||||
with vim keybindings also work in vim mode.
|
also work in vim mode.
|
||||||
|
|
||||||
|
|
||||||
### Helix mode
|
### Helix mode
|
||||||
|
|
||||||
The helix modes, shown as NOR, INS or SEL in the status bar, follow
|
The helix modes, shown as NOR, INS or SEL in the status bar, follow the
|
||||||
the basic modal editing style of helix. The basics are being adapted
|
basic modal editing style of helix. The basics are being adapted closely,
|
||||||
closely, more advanced functions (e.g. surround, macros, selections,
|
more advanced functions (e.g. surround, macros, selections, registers) are
|
||||||
registers) are not supported (yet). Usual keybinding with LSPs are
|
not supported (yet). Usual keybinding with LSPs are used for tasks like 'go
|
||||||
used for tasks like 'go to definition', 'go to reference' and
|
to definition', 'go to reference' and 'inline documentation' featuring
|
||||||
'inline documentation' featuring inline diagnostics. Keybindings
|
inline diagnostics. Keybindings from flow mode that do not conflict with
|
||||||
from flow mode that do not conflict with helix keybindings also work in
|
helix keybindings also work in helix mode.
|
||||||
helix mode.
|
|
||||||
|
|
||||||
(work in progress)
|
(work in progress)
|
||||||
|
|
||||||
## Mouse Commands
|
## 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 =>
|
- 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 =>
|
- Double Left Click =>
|
||||||
Select word at mouse pointer
|
Select word at mouse pointer
|
||||||
|
|
@ -182,11 +182,10 @@ Mouse commands are NOT rebindable and are not listed in the command palette.
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
Configuration is stored in the standard location
|
Configuration is stored in the standard location
|
||||||
`${XDG_CONFIG_HOME}/flow/config`. This is usually
|
`${XDG_CONFIG_HOME}/flow/config`. This is usually `~/.config/flow/config`.
|
||||||
`~/.config/flow/config`.
|
|
||||||
|
|
||||||
The default configuration will be written the first time
|
The default configuration will be written the first time Flow Control is
|
||||||
Flow Control is started and looks similar to this:
|
started and looks similar to this:
|
||||||
```
|
```
|
||||||
frame_rate 60
|
frame_rate 60
|
||||||
theme "default"
|
theme "default"
|
||||||
|
|
@ -203,23 +202,22 @@ animation_max_lag 150
|
||||||
|
|
||||||
Most of these options are fairly self explanatory.
|
Most of these options are fairly self explanatory.
|
||||||
|
|
||||||
`theme`, `input_mode` and `show_whitespace` are automatically
|
`theme`, `input_mode` and `show_whitespace` are automatically persisted
|
||||||
persisted when changed interactively with keybindings.
|
when changed interactively with keybindings.
|
||||||
|
|
||||||
`frame_rate` can be tuned to control the maximum number
|
`frame_rate` can be tuned to control the maximum number of frames rendered.
|
||||||
of frames rendered.
|
|
||||||
|
|
||||||
`animation_max_lag` controls the maximum amount of time allowed
|
`animation_max_lag` controls the maximum amount of time allowed for
|
||||||
for rendering scrolling animations. Set to 0 to disable scrolling
|
rendering scrolling animations. Set to 0 to disable scrolling animation
|
||||||
animation altogether.
|
altogether.
|
||||||
|
|
||||||
File types may be configured with the `Edit file type configuration` command.
|
File types may be configured with the `Edit file type configuration`
|
||||||
You can also create a new file type by adding a new `.conf` file to the
|
command. You can also create a new file type by adding a new `.conf` file
|
||||||
`file_type` directory. Have a look at an existing file type to see what options
|
to the `file_type` directory. Have a look at an existing file type to see
|
||||||
are available.
|
what options are available.
|
||||||
|
|
||||||
## Flags and options
|
## Flags and options
|
||||||
|
|
||||||
As every respectable terminal program, flow provide various invoking
|
As every respectable terminal program, flow provide various invoking
|
||||||
options that among others, will allow you to inspect various aspects of
|
options that among others, will allow you to inspect various aspects of the
|
||||||
the running session. Feel free to run `flow --help` to explore them.
|
running session. Feel free to run `flow --help` to explore them.
|
||||||
|
|
|
||||||
|
|
@ -15,48 +15,66 @@ Flow Control is under active development, but very stable.
|
||||||
|
|
||||||
## 🚀 Features
|
## 🚀 Features
|
||||||
|
|
||||||
- **Lightning Fast** TUI with ≤6ms frame times, **low latency** input handling
|
- **Lightning Fast** TUI with ≤6ms frame times, **low latency** input
|
||||||
and smooth **animated scrolling**
|
handling and smooth **animated scrolling**
|
||||||
- Intuitive UI with **tabs**, **scrollbars** and **palettes** with full
|
|
||||||
**mouse** support for all UI elements
|
- Intuitive UI with **tabs**, **splits**, **scrollbars** and **palettes**
|
||||||
|
with full **mouse** support for all UI elements
|
||||||
|
|
||||||
- Support for more than **70 programming languages**, **zero
|
- Support for more than **70 programming languages**, **zero
|
||||||
configuration** needed, via **tree-sitter** powered syntax highlighting
|
configuration** needed, via **tree-sitter** powered syntax highlighting
|
||||||
- **Language Server Protocol** pre configured support for most language servers
|
|
||||||
|
- **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
|
||||||
|
|
||||||
- Powerful **multi-cursor** editing and integrated **clipboard history**
|
- Powerful **multi-cursor** editing and integrated **clipboard history**
|
||||||
|
|
||||||
- Powerful configurable keybinding system that supports **modal** and
|
- Powerful configurable keybinding system that supports **modal** and
|
||||||
**non-modal** editing styles
|
**non-modal** editing styles
|
||||||
|
|
||||||
- Multiple pre-configured **keybinding modes**
|
- Multiple pre-configured **keybinding modes**
|
||||||
- Flow Control - GUI IDE style bindings (similar to vscode)
|
- Flow Control - GUI IDE style bindings (similar to vscode)
|
||||||
- Emacs
|
- Emacs
|
||||||
- Vim
|
- Vim
|
||||||
- Helix
|
- Helix
|
||||||
- User created
|
- User created
|
||||||
|
|
||||||
- Hybrid rope/piece-table buffer system, edit **very large files** with
|
- Hybrid rope/piece-table buffer system, edit **very large files** with
|
||||||
**thousands of cursors**
|
**thousands of cursors**
|
||||||
|
|
||||||
- Infinite **undo** (at least until you run out of ram)
|
- 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
|
- Full **unicode** support, including support for the kitty text sizing
|
||||||
- Runs on **Linux, FreeBSD, MacOS, Windows and Android** (under termux) with
|
protocol
|
||||||
easy **cross-compilation** to all supported targets
|
|
||||||
|
- 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
|
## Requirements
|
||||||
|
|
||||||
- A modern terminal with **24bit color** and, ideally, **kitty keyboard
|
- A modern terminal with **24bit color** and, ideally, **kitty keyboard
|
||||||
protocol** support. **Kitty**, **Foot** and **Ghostty** are the recommended
|
protocol** support. **Kitty**, **Foot** and **Ghostty** are the
|
||||||
terminals at this time. **Zellij** also works well. Most other terminals will
|
recommended terminals at this time. **Zellij** also works well. Most
|
||||||
work, but likely with reduced functionality.
|
other terminals will work, but likely with reduced functionality.
|
||||||
- **NerdFont** support. Either via terminal font fallback or a patched font.
|
|
||||||
|
- **NerdFont** support. Either via terminal font fallback or a patched
|
||||||
|
font.
|
||||||
|
|
||||||
- A **UTF-8** locale
|
- A **UTF-8** locale
|
||||||
|
|
||||||
|
|
||||||
## 🛣️ Roadmap
|
## 🛣️ Roadmap
|
||||||
|
|
||||||
See our [devlog](/devlog/2025) for on-going updates from the development team.
|
See our [devlog](/devlog/2026) for on-going updates from the development
|
||||||
|
team.
|
||||||
|
|
||||||
### In Development
|
### In Development
|
||||||
|
|
||||||
- LSP completion support
|
|
||||||
- Persistent undo/redo
|
- Persistent undo/redo
|
||||||
- File watcher integration
|
- File watcher integration
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue