docs: finish 0.4.0 release notes

This commit is contained in:
CJ van den Berg 2025-07-17 14:26:36 +02:00
parent 987e7a114a
commit 2142011618
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9

View file

@ -1,295 +1,209 @@
- highlight columns Release 0.4.0
cj feat: BREAKING make highlight_columns a list of integers
cj feat: add highlight_columns_enabled config option and store it on toggle_highlight_columns
cj feat: add toggle_highlight_columns command (shift+f11)
cj feat: enable hightlight columns by default
cj feat: dynamically allocate highlight_columns
cj feat: use solid alpha dimmed background color for highlight column
cj feat: add highlight_columns initial basic implementation
- auto save Celebrating 1000 github stars!   
cj feat: add limit_auto_save_file_types config option
cj feat: save file if changed if auto save is enabled
cj feat: save and restore enable_auto_save in editor state
cj feat: add toggle_auto_save command
cj feat: add enable_auto_save configuration option
- format on save New Features:
cj feat: add toggle_format_on_save command
- make parent dirs - **File type configuration** - File types are now user configurable. Flow comes with a built-in
cj feat: create parent directories if needed when saving new files list of file types that you can now modify and save to the configuration directory with the
`Edit file type configuration` command. You can also create whole new file types simply by adding
new files to the configuration directory in the `file_type` folder. The file type configuration
defines the name, icon, description, formatter and language server, extensions and first line
matching rules for a file type.
- file type config - **Auto Save** - Enable auto save for the current buffer with the `Toggle auto save` command. This
cj feat: add support for configuring the file type syntax parser will automatically save the current buffer on every change. Debounce time is the currently
cj feat: merge configured and static file type lists configured frame rate. You can also enable auto save globally with the `enable_auto_save`
cj feat: port file type palette to use configurable file types configuration option, and limit which file type have auto save automatically enabled with the
cj feat: port list_languages command to use configurable file types `limit_auto_save_file_types` configuration option (which is a list of file types, e.g.
cj feat: make project_manager use configurable file types `["zig","rust"]`)
cj feat: port editor to use configurable file types
cj feat: complete loading of configurable file types
cj feat: add command to edit file type configuration files
cj feat: add support for arrays and hex color values in config files
cj feat: add functions for converting colors to/from hex values
- panic handling - **Highlight columns** - Use the `Toggle highlight columns` (`toggle_highlight_columns`) command
cj feat: more improvements to panic handling (bound to shift+f11 in flow mode) to enable a background dim effect at the configured column
cj feat: install signal crash handler to reset terminal before dumping stack traces positions. The columns to highlight are configured via the `highlight_columns` configuration
cj feat(flicker): avoid triggering initial render from branch widget option.
cj feat: stop rendering on panic
cj feat: add config option to enable jit-in-time debugging
- flow mode - **Smart insert & delete** - Brace pairs like (), [], {} and "" are now handled intelligently like
cj feat: add home/end keybindings to palette in most code editors. Also, leading whitespace is now intelligently deleted in `indent_size`
cj feat: add flow mode keybind to insert full iso date and time steps.
cj feat: add flow mode keybinding to reload_file
- vim mode - **Format on save toggle** - Format on save can now be toggled for the current buffer with the
pranavrk7 feat: add ctrl-c keybind to exit insert mode `Toggle format on save` command (`toggle_format_on_save`).
cj feat: add vim mode command to reload_file (:e!)
cj feat: add initial basic visual block vim mode
cj feat: add support for binding '<' and '>' in vim mode
dr.slate2 add vim bindings for swapping tabs
dr.slate2 added * command in vim mode
dr.slate2 add vim bindings for setting and goto'ing global marks
dr.slate2 begin supporting global marks
dr.slate2 add bindings for the rest of the mark manipulation commands
dr.slate2 began support vim mark system
dr.slate2 added join line binding for vim
dr.slate2 added cut_buffer_begin command and vim binding
dr.slate2 added goto buffer begin/end keybinds for vim mode
dr.slate2 added dG vim binding
ivel.santos feat: Vim mode: till_char (#224)
ivel.santos fix: move_next_word_end (#225)
cj feat: call pause/resume_undo_history on entering/exiting insert modes
cj feat: add per input mode init_command and deinit_command support
cj feat: add command palette bindings to vim visual modes
ingo.lohmar mv alt+R binding from project to normal
cj feat(vim): add N vim mode binding for goto_prev_match
cj feat(vim): add f and F keybindings for move_to_char
kekwm8 fix(vim): Remove 'jk' keybinding again and make select_line_vim work on multiple cursors
kekwm8 fix(vim): Removed unnecessary cancel commands in vim mode cut functions
kekwm8 feat(vim): Add word movement for visual mode, and complete vim mode cut to end of line
lunalght8 fix: remove 'jk' keybinding in insert mode
kekwm8 feat(vim): implement cut to end of line functionality in vim mode
kekwm8 feat(vim): enhance cut and delete commands in vim mode (still missing cut functionality in delete to end)
kekwm8 feat(vim): Add VISUAL line mode to vim mode, fix vertical movement behaviour
- helix mode - **Git support** - The status bar now shows a summary of the project's git status include current
ivel.santos Helix: fixing c keymap behavior branch, number of changed files and number of unpushed/unpulled/stashed commits. Also, Flow now
ivel.santos Helix: normal mode after delete respects all of git's file ignore machanisms. Diffs do not yet use git, but that is planned.
ivel.santos Fix insert_line
ivel.santos Fix pasting line
ivel.santos Correcting selection after paste
ivel.santos copy and paste improvs and inclusive selection correction
ivel.santos feat: Helix mode: move_next_word_end (#223)
ivel.santos feat: Helix & Vim mode: adding more commands (#218)
ivel.santos fix(helix): Making `d` and `c` work as expected in normal mode
ivel.santos Helix mode: find_file
ivel.santos Helix mode: move_cursor_word_left
ivel.santos Helix mode: move_next_word
ivel.santos Helix mode: move_to_char
ivel.santos Helix mode: adding file_picker_in_current_directory
ivel.santos Helix mode: adding extend_line_below
- emacs mode - **Auto create parent directories** - Flow will now automatically create parent directies if
cj feat: add legacy input encoding compatible undo keybinding in emacs mode necessary when creating new files.
- smart insert & delete - **Tilde expansion** - The `Open file` and `Save as` commands now correctly support expanding `~`
cj feat: smart delete leading whitespace to indent_size to the user's home directory.
cj feat: also add extra new line and indent for () and []
cj feat: indent and insert extra new line in smart_insert_line between braces
cj feat: add smart_delete_backward command for improved smart pair handling
cj feat: improve smart_insert_pair and add smart_insert_pair_close
cj feat: add smart_insert_pair command
- follow cursor - **Improved panic handling** - Flow now has much improved panic handling and will leave the
cj feat: add follow_cursor_on_buffer_switch option (default false) terminal in a known good state for all panics and segfaults. Additionally, release and nightly
builds are now available with full debug information that will produce fully detailed backtraces
on crash. This should help catch and fix those rare but pesky crashes. Please submit issues!
Additionally, there is a configuration option to automatically start and connect gdb to a
crashing flow instance. (linux only)
- restore last cursor position - **Terminal support** - Flow now supports the kitty explicit text width protocol. This improves
cj feat: add restore_last_cursor_position config option (default true) unicode character rendering on terminals that support it and superceeds `wcwidth` when available.
- language support - **Language server protocol** - Flow language server protocol backend is now fully asynchronous.
cj feat: add powershell language support This means that slow language servers cannot cause pauses while editing.
cj feat: add hurl language support
cj feat: add csharp formatter
cj feat: add rpmspec support
cj feat: add protobuf support
cj feat: update tree-sitter for uxntal, rpmspec and protobuf support
notchoc feat: support uxntal syntax
cj feat: add log as an extension for the conf file type
arianxdehghani Set php's default LSP to intelephense
- file browser - **Language support**
cj feat: add support for ~ expansion to open_file command and file_browser - Added powershell syntax highlighting
- Added hurl syntax highlighting
- Added rpmspec syntax highlighting
- Added protobuf syntax highlighting
- Added uxntal syntax highlighting
- Added protobuf syntax highlighting
- Added C# formatter (csharpier)
- Added PHP language server (intelephense)
- completion - **Themes**
cj feat(completion): store received completions in a buffer - Themes can now be customized with the `Customise theme` command
cj feat(completion): forward completion entries to current editor - Added the entire base16 theme collection
- Added the hypersubatomic theme
- themes - **Home screen** - The home screen text and list of commands can now be customized. Also, the
cj feat: update flow-themes to add base16 theme collection current build version and build type are now shown in the bottom right corner of the home screen.
- tree-sitter - **tree-sitter** - Queries are now biniary compiled and stored in the flow executable. This
cj feat: do a full reparse if tree-sitter reports syntax errors greatly improves load times and reduces binary size. Also, incremental tree-sitter parsing is
cj feat: add syntax.count_error_nodes function now checked for parsing errors and will fallback to a full re-parse if errors occur.
cj feat: add support for pre-generated tree-sitter error queries
cj feat: output total size of binary queries
cj feat: use binary tree-sitter queries created at compile time
cj feat: allow parallel loading of tree-sitter query cache entries
cj feat: add caching of tree-sitter query objects
- git status - **Integer arguments** - Flow now supports integer arguments to many commands similar to emacs and
cj feat: display mini git status in branch widget vim. Related bindings have been added to Flow, Emacs, Vim and Helix modes. Pending integer
cj feat: add status command to git client module arguments are shown in the status bar.
cj feat: add support for init/deinit functions in Button context values
cj feat: add branch widget to default config
cj feat: add some whitespace to branch widget
cj feat: load project file list from git if available
cj feat: add git.workspace_ignored_files function
cj feat: query project files via git (part 1)
cj feat: check we have a git repo in the branch widget
cj feat: add git.workspace_path function
cj feat: add git branch widget
cj feat: start git client module
- log view - **Vim mode improvements** - Insert mode now produces automic undo steps, much more like Vim. Many
cj feat: make logview include precision for small tdiff values vim mode bindings have been improved to more closely match Vim in their behaviour. Visual line
mode was added.
- commands - **Helix mode improvements** - Many helinx mode bindings have been improved to more closely match
cj feat: add copy_file_name command Helix in their behaviour.
cj feat: add reload_file command
cj feat: add find_file command as an alias for open_recent
cj feat: improve some command description strings
cj feat: detect and auto open file links in selection in open_file command
cj feat: add save_file_with_formatting command
gero.schwaericke feat: save file without formatting
cj feat: make join_next_line collapse whitespace
cj feat: improve shell_execute_stream_output to follow output tail only if cursor is at buffer end
- integer arguments - **New keybindings**
ivel.santos goto_line_vim: integer parameters - **Flow mode**
ivel.santos Extend_line_below: integer parameter `home`/`end` now work in palettes
ivel.santos add helix mode keybindings for setting integer argument `ctrl+shift+F5` => reload file
cj feat: add vim mode keybindings for setting integer argument
cj feat: add emacs mode keybindings for setting integer argument
cj feat: add support for repeat integer arguments to many commands
cj feat: add flow mode keybindings for setting integer argument
cj feat: display pending integer argument in keybind widget
cj feat: re-add support for integer command arguments
- themes & theme customization - **Vim mode**
cj feat: add `Customise theme` command `ctrl-c` => exit insert mode
cj feat: add hypersubatomic theme `:e!` => reload file
`gt` => next tab
`gT` => previous tab
`ctrl-v` => enter visual block mode
`<` => unindent
`>` => indent
'*' => find work at cursor
'J' => join line
'dgg' => cut to beginning of buffer
'dG' => cut to end of buffer
'f' => move/select forward to char
'F' => move/select backwards to char
't' => move/select forward until char
'T' => move/select backwards until char
'N' => goto previous match
'cc' => change whole line
'C' => change to end of line
'D' => delete to end of line
'cw' => change word right
'cb' => change word left
'zz' => scroll view to center
'w' => [VISUAL] select word right (vim)
'W' => [VISUAL] select word right
'e' => [VISUAL] select to end of word right (vim)
'b' => [VISUAL] select word left (vim)
'B' => [VISUAL] select word left
'gg' => [VISUAL] select to beginning of buffer
'G' => [VISUAL] select to end of buffer
'c' => [VISUAL] change word right
'C' => [VISUAL] change to end of line
'D' => [VISUAL] delete to end of line
- home screen & version info - **New & updated commands**
cj feat: add debug build warning to home screen - copy_file_name => [NEW] Copy the current buffer file name (and optionally line number) to the
cj feat: add build version to home screen clipboard.
cj feat: add some home screen customization - reload_file => [NEW] Reload the current file from disk (mainting undo).
cj feat: re-organize home screen - find_file => [NEW] Alias for open_recent.
cj feat(version): add timestamp of last commit to version info - save_file_with_formatting => [NEW] Format and save the current file. Independant of the current
cj feat(home): add build version info to home screen value of `enable_format_on_save`.
- save_file_without_formatting => [NEW] Save the current file without first formatting it.
Independant of the current value of `enable_format_on_save`.
- open_file => [UPDATED] Open file will now detect if the current selection contains a valid file
path, including optional line number. If it does, it will be opened immediately without first
prompting.
- join_next_line => [UPDATED] Join next line will now collapse whitespace.
- shell_execute_stream_output => [UPDATED] Will now follow output tail if cursor is at buffer
end.
- command line - **Command line improvements**
cj feat: add support for string args in --exec separated by colons - `--new-file` => Create a new file when starting Flow.
cj feat: add --new-file command line parameter - `--scratch` => Create a new scratch (ephemeral) buffer when starting Flow.
cj feat: add --scratch command line parameter - `--exec` => You can now pass string arguments to commands by separating them from the command
cj feat: don't ask for file type in create_new_file if we have a language override name with a colon.
cj feat: allow calling create_scratch_buffer with no parameters
- status bar, panel & widgets - **UI improvements** - Many minor usability and visual UI improvments
cj feat: close results pane if find_in_files mode is cancelled - The results pane now closes if `Find in files` mode is cancelled
cj feat: add clock widget digit style parameter - The clock widget now supports multiple digit styles
cj feat: add status bar widget parameter support with parameters for linenumber and spacer widgets - Status bar widgets can support parameters for width or style depending on the widget
cj feat: add config options to disable scrollbars and/or file icons - Scrollbars and file icons can be enabled/disabled via configuration options
cj feat: toggle inputview if showing in toggle_panel - Inline diagnostics (and gutter symbols) can now be toggled with the
cj feat: toggle gutter symbols along with inline diagnostics `Toggle display of diagnostics inline` command
cj feat: add configuration and command to toggle display of inline diagnostics - Line numbers can now be displayed in various styles (toggled via middle click and/or config)
cj feat: add line number styles
- LSP
cj feat: queue messages to LSP while waiting for initialize response
cj feat: make LSPs fully async
- terminal support Fixes:
cj feat(tui): add explicit width support - Add legacy input encoding compatible undo keybinding in emacs mode
- Allow .cmd along with .exe for Windows executables
- fixes - Fixed broken shifted keybinds for Helix mode
ArianDehghani feat: allow .cmd along with .exe for Windows paths (#187) - Fix palette crashing when its items's length is exceeded
Fixed broken shifted keybinds for Helix mode - Fix restoring of last_find_query from editor state
Single line fix for palette crashing when its items's length is exceeded. - Fix make keybind module respect command.suppressed_errors list
cj fix: restoring of last_find_query from editor state - Allow font names longer than 31 characters in win32
cj fix: bitrot in syntax.FileType.guess_static - Fix panic on extra long plane names
cj fix: make keybind module respect command.suppressed_errors list - Don't stop unindenting on blank or full unindented lines
cj fix: allow font names longer than 31 characters in win32 - Make sure to show_home if no files are opened via command line
cj fix: add parser parameters to prettier formatters - Add workaround for LSPs sending junk null messages (omnisharp)
cj fix: don't try to call thespian debugger signal handler on macos - Don't truncate scratch buffer names in tabs and terminal title
cj fix: update thespian to fix windows builds - Prevent unexpected message errors on missing LSP binary
cj fix: don't error loop if the configured file type parser is not found - Replace std.unicode.utf8Decode with safe function that cannot panic on invalid UTF-8 input
cj fix: file_type_config should not use syntax.FileType.get_all() - nudge_delete should handle cursor moving to same line as delete
cj fix: incorrect string encoding of color config values - Remove multithreaded buffer access in background async differ
cj fix: allow editing the current editor's file type - Remove multithreaded buffer access in project_manager
cj fix: panic on extra long plane names - Word/line wise dragging should keep the original word/line selected
cj fix: panic in color.to_string - Remove prefix from paths in ripgrep results
cj fix: don't stop unindenting on blank or full unindented lines - Use iso date format for default date instert keybind
cj fix: add back missing windows check for crash handler - Workaround broken dir.statFile on WSL1
cj fix: make sure to show_home if no files are opened via command line - Left an right movements jump to selection boundary
cj fix: add workaround for LSPs sending junk null messages (omnisharp) - Prefer targetSelectionRange over targeRange if both are provided by LSP
cj fix: don't truncate scratch buffer names in tabs and terminal title - Fix flicker: home screen should not load if we have a file to open
cj fix: prevent unexpected message errors on missing LSP binary - Update thespian to fix subprocess file descriptor race
cj fix: replace std.unicode.utf8Decode with safe function that cannot panic on invalid UTF-8 input - Force ripgrep to never try search stdin
cj fix: nudge_delete should handle cursor moving to same line as delete - Bracketed paste should check for ctrl+j and insert \n
cj fix: minor home screen fixes - Render control codes in mini buffer input with unicode control code symbols
cj fix: remove multithreaded buffer access in background async differ - Proactive close subprocesses on early exit in shell module
cj fix: remove multithreaded buffer access in project_manager - Fix paste in goto mode
cj fix: word/line wise dragging should keep the original word/line selected - Don't match against legacy unshifted keys when we have extended input text
cj fix: remove prefix from paths in ripgrep results - Remove blocking project manager call on startup
cj fix: use iso date format for default date instert keybind - Never double free LSP init queue
cj fix: workaround broken dir.statFile on WSL1 - Remove arbitrary limit to command buffer size
cj fix: left an right movements jump to selection boundary - Remove ctrl+p command palette binding
cj fix: prefer targetSelectionRange over targeRange if both are provided by LSP - Stop after removing widget in Widget.remove (fixes ReleaseFast crash)
cj fix(flicker): home screen should not load if we have a file to open - Fix potention dangling pointer in mainview on view list realloc
cj fix: update thespian to fix subprocess file descriptor race - MRU position should not override line numbers on command line
cj fix: force ripgrep to never try search stdin - Don't restore editor view rows and cols
cj fix: add missing bin_path module - Prevent task palette from being too short to show palette label
cj fix: re-render on branch widget update - Refresh hover on tab changes
cj fix: bracketed paste should check for ctrl+j and insert \n - Add workaround for conpty ul color escape sequence parser bug
cj fix: render control codes in mini buffer input with unicode control code symbols - get_mru_position should not hang if file not found in project
cj fix: date keybinding should instert - Fix row & column in get_mru_position
cj fix: proactive close subprocesses on early exit in shell module - Remove initial empty frame render on startup
cj fix: remove git.current_branch_cache - Make move_cursor_up/_down fallback to move_begin/_end
cj fix: add missing logger clean-up in shell module - Don't get stuck in an overlay mode if it is triggered from the command line
cj fix: paste in goto mode - Update cursor target column after nudge_insert/_delete
cj fix: check target
cj fix: side scrolling of highlight_columns
cj fix: insert right char on move failure in smart_insert_pair_close
cj fix: merge build failure in helix.move_next_word_end and add repeat support
cj fix: call configured init_commands for all mode types
cj fix: don't match against legacy unshifted keys when we have extended input text
cj fix: pause_/resume_undo_history should correctly store/restore an undo point
cj fix: win32 build
cj fix: remove blocking project manager call on startup
cj fix: never double free LSP init queue
cj fix: ts_bin_query_gen should be built for host for cross-compiling
cj fix: destroy QueryCache.CacheEntry objects on clean-up
cj fix: remove arbitrary limit to command buffer size
cj fix: don't reverse insert pairs when selection is reversed
cj fix: do not parse tree-sitter queries twice
cj fix: remove ctrl+p command palette binding
cj fix: merge build failure
cj fix: stop after removing widget in Widget.remove (fixes ReleaseFast crash)
cj fix: potention dangling pointer in mainview on view list realloc
cj fix: add Meta declarations post-merge
cj fix: mru position should not override line numbers on command line
cj fix: don't restore editor view rows and cols
cj fix: add missing Meta types
cj fix(tasks): prevent task palette from being too short to show palette label
cj fix(tabs): refresh hover on tab changes
cj fix: add workaround for conpty ul color escape sequence parser bug
cj fix: get_mru_position should not hang if file not found in project
cj fix: row & column in get_mru_position
cj fix: remove initial empty frame render on startup
cj fix: make move_cursor_up/_down fallback to move_begin/_end
cj fix: add missing Meta declarations pulled in by last master merge
cj fix: don't get stuck in an overlay mode if it is triggered from the command line
cj fix(editor): update cursor target column after nudge_insert/_delete