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
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
Release 0.4.0
- auto save
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
Celebrating 1000 github stars!   
- format on save
cj feat: add toggle_format_on_save command
New Features:
- make parent dirs
cj feat: create parent directories if needed when saving new files
- **File type configuration** - File types are now user configurable. Flow comes with a built-in
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
cj feat: add support for configuring the file type syntax parser
cj feat: merge configured and static file type lists
cj feat: port file type palette to use configurable file types
cj feat: port list_languages command to use configurable file types
cj feat: make project_manager use configurable file types
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
- **Auto Save** - Enable auto save for the current buffer with the `Toggle auto save` command. This
will automatically save the current buffer on every change. Debounce time is the currently
configured frame rate. You can also enable auto save globally with the `enable_auto_save`
configuration option, and limit which file type have auto save automatically enabled with the
`limit_auto_save_file_types` configuration option (which is a list of file types, e.g.
`["zig","rust"]`)
- panic handling
cj feat: more improvements to panic handling
cj feat: install signal crash handler to reset terminal before dumping stack traces
cj feat(flicker): avoid triggering initial render from branch widget
cj feat: stop rendering on panic
cj feat: add config option to enable jit-in-time debugging
- **Highlight columns** - Use the `Toggle highlight columns` (`toggle_highlight_columns`) command
(bound to shift+f11 in flow mode) to enable a background dim effect at the configured column
positions. The columns to highlight are configured via the `highlight_columns` configuration
option.
- flow mode
cj feat: add home/end keybindings to palette
cj feat: add flow mode keybind to insert full iso date and time
cj feat: add flow mode keybinding to reload_file
- **Smart insert & delete** - Brace pairs like (), [], {} and "" are now handled intelligently like
in most code editors. Also, leading whitespace is now intelligently deleted in `indent_size`
steps.
- vim mode
pranavrk7 feat: add ctrl-c keybind to exit insert mode
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
- **Format on save toggle** - Format on save can now be toggled for the current buffer with the
`Toggle format on save` command (`toggle_format_on_save`).
- helix mode
ivel.santos Helix: fixing c keymap behavior
ivel.santos Helix: normal mode after delete
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
- **Git support** - The status bar now shows a summary of the project's git status include current
branch, number of changed files and number of unpushed/unpulled/stashed commits. Also, Flow now
respects all of git's file ignore machanisms. Diffs do not yet use git, but that is planned.
- emacs mode
cj feat: add legacy input encoding compatible undo keybinding in emacs mode
- **Auto create parent directories** - Flow will now automatically create parent directies if
necessary when creating new files.
- smart insert & delete
cj feat: smart delete leading whitespace to indent_size
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
- **Tilde expansion** - The `Open file` and `Save as` commands now correctly support expanding `~`
to the user's home directory.
- follow cursor
cj feat: add follow_cursor_on_buffer_switch option (default false)
- **Improved panic handling** - Flow now has much improved panic handling and will leave the
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
cj feat: add restore_last_cursor_position config option (default true)
- **Terminal support** - Flow now supports the kitty explicit text width protocol. This improves
unicode character rendering on terminals that support it and superceeds `wcwidth` when available.
- language support
cj feat: add powershell language support
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
- **Language server protocol** - Flow language server protocol backend is now fully asynchronous.
This means that slow language servers cannot cause pauses while editing.
- file browser
cj feat: add support for ~ expansion to open_file command and file_browser
- **Language support**
- 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
cj feat(completion): store received completions in a buffer
cj feat(completion): forward completion entries to current editor
- **Themes**
- Themes can now be customized with the `Customise theme` command
- Added the entire base16 theme collection
- Added the hypersubatomic theme
- themes
cj feat: update flow-themes to add base16 theme collection
- **Home screen** - The home screen text and list of commands can now be customized. Also, the
current build version and build type are now shown in the bottom right corner of the home screen.
- tree-sitter
cj feat: do a full reparse if tree-sitter reports syntax errors
cj feat: add syntax.count_error_nodes function
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
- **tree-sitter** - Queries are now biniary compiled and stored in the flow executable. This
greatly improves load times and reduces binary size. Also, incremental tree-sitter parsing is
now checked for parsing errors and will fallback to a full re-parse if errors occur.
- git status
cj feat: display mini git status in branch widget
cj feat: add status command to git client module
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
- **Integer arguments** - Flow now supports integer arguments to many commands similar to emacs and
vim. Related bindings have been added to Flow, Emacs, Vim and Helix modes. Pending integer
arguments are shown in the status bar.
- log view
cj feat: make logview include precision for small tdiff values
- **Vim mode improvements** - Insert mode now produces automic undo steps, much more like Vim. Many
vim mode bindings have been improved to more closely match Vim in their behaviour. Visual line
mode was added.
- commands
cj feat: add copy_file_name command
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
- **Helix mode improvements** - Many helinx mode bindings have been improved to more closely match
Helix in their behaviour.
- integer arguments
ivel.santos goto_line_vim: integer parameters
ivel.santos Extend_line_below: integer parameter
ivel.santos add helix mode keybindings for setting integer argument
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
- **New keybindings**
- **Flow mode**
`home`/`end` now work in palettes
`ctrl+shift+F5` => reload file
- themes & theme customization
cj feat: add `Customise theme` command
cj feat: add hypersubatomic theme
- **Vim mode**
`ctrl-c` => exit insert mode
`: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
cj feat: add debug build warning to home screen
cj feat: add build version to home screen
cj feat: add some home screen customization
cj feat: re-organize home screen
cj feat(version): add timestamp of last commit to version info
cj feat(home): add build version info to home screen
- **New & updated commands**
- copy_file_name => [NEW] Copy the current buffer file name (and optionally line number) to the
clipboard.
- reload_file => [NEW] Reload the current file from disk (mainting undo).
- find_file => [NEW] Alias for open_recent.
- save_file_with_formatting => [NEW] Format and save the current file. Independant of the current
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
cj feat: add support for string args in --exec separated by colons
cj feat: add --new-file command line parameter
cj feat: add --scratch command line parameter
cj feat: don't ask for file type in create_new_file if we have a language override
cj feat: allow calling create_scratch_buffer with no parameters
- **Command line improvements**
- `--new-file` => Create a new file when starting Flow.
- `--scratch` => Create a new scratch (ephemeral) buffer when starting Flow.
- `--exec` => You can now pass string arguments to commands by separating them from the command
name with a colon.
- status bar, panel & widgets
cj feat: close results pane if find_in_files mode is cancelled
cj feat: add clock widget digit style parameter
cj feat: add status bar widget parameter support with parameters for linenumber and spacer widgets
cj feat: add config options to disable scrollbars and/or file icons
cj feat: toggle inputview if showing in toggle_panel
cj feat: toggle gutter symbols along with inline diagnostics
cj feat: add configuration and command to toggle display of inline diagnostics
cj feat: add line number styles
- **UI improvements** - Many minor usability and visual UI improvments
- The results pane now closes if `Find in files` mode is cancelled
- The clock widget now supports multiple digit styles
- Status bar widgets can support parameters for width or style depending on the widget
- Scrollbars and file icons can be enabled/disabled via configuration options
- Inline diagnostics (and gutter symbols) can now be toggled with the
`Toggle display of diagnostics inline` command
- Line numbers can now be displayed in various styles (toggled via middle click and/or config)
- LSP
cj feat: queue messages to LSP while waiting for initialize response
cj feat: make LSPs fully async
- terminal support
cj feat(tui): add explicit width support
- fixes
ArianDehghani feat: allow .cmd along with .exe for Windows paths (#187)
Fixed broken shifted keybinds for Helix mode
Single line fix for palette crashing when its items's length is exceeded.
cj fix: restoring of last_find_query from editor state
cj fix: bitrot in syntax.FileType.guess_static
cj fix: make keybind module respect command.suppressed_errors list
cj fix: allow font names longer than 31 characters in win32
cj fix: add parser parameters to prettier formatters
cj fix: don't try to call thespian debugger signal handler on macos
cj fix: update thespian to fix windows builds
cj fix: don't error loop if the configured file type parser is not found
cj fix: file_type_config should not use syntax.FileType.get_all()
cj fix: incorrect string encoding of color config values
cj fix: allow editing the current editor's file type
cj fix: panic on extra long plane names
cj fix: panic in color.to_string
cj fix: don't stop unindenting on blank or full unindented lines
cj fix: add back missing windows check for crash handler
cj fix: make sure to show_home if no files are opened via command line
cj fix: add workaround for LSPs sending junk null messages (omnisharp)
cj fix: don't truncate scratch buffer names in tabs and terminal title
cj fix: prevent unexpected message errors on missing LSP binary
cj fix: replace std.unicode.utf8Decode with safe function that cannot panic on invalid UTF-8 input
cj fix: nudge_delete should handle cursor moving to same line as delete
cj fix: minor home screen fixes
cj fix: remove multithreaded buffer access in background async differ
cj fix: remove multithreaded buffer access in project_manager
cj fix: word/line wise dragging should keep the original word/line selected
cj fix: remove prefix from paths in ripgrep results
cj fix: use iso date format for default date instert keybind
cj fix: workaround broken dir.statFile on WSL1
cj fix: left an right movements jump to selection boundary
cj fix: prefer targetSelectionRange over targeRange if both are provided by LSP
cj fix(flicker): home screen should not load if we have a file to open
cj fix: update thespian to fix subprocess file descriptor race
cj fix: force ripgrep to never try search stdin
cj fix: add missing bin_path module
cj fix: re-render on branch widget update
cj fix: bracketed paste should check for ctrl+j and insert \n
cj fix: render control codes in mini buffer input with unicode control code symbols
cj fix: date keybinding should instert
cj fix: proactive close subprocesses on early exit in shell module
cj fix: remove git.current_branch_cache
cj fix: add missing logger clean-up in shell module
cj fix: paste in goto mode
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
Fixes:
- Add legacy input encoding compatible undo keybinding in emacs mode
- Allow .cmd along with .exe for Windows executables
- Fixed broken shifted keybinds for Helix mode
- Fix palette crashing when its items's length is exceeded
- Fix restoring of last_find_query from editor state
- Fix make keybind module respect command.suppressed_errors list
- Allow font names longer than 31 characters in win32
- Fix panic on extra long plane names
- Don't stop unindenting on blank or full unindented lines
- Make sure to show_home if no files are opened via command line
- Add workaround for LSPs sending junk null messages (omnisharp)
- Don't truncate scratch buffer names in tabs and terminal title
- Prevent unexpected message errors on missing LSP binary
- Replace std.unicode.utf8Decode with safe function that cannot panic on invalid UTF-8 input
- nudge_delete should handle cursor moving to same line as delete
- Remove multithreaded buffer access in background async differ
- Remove multithreaded buffer access in project_manager
- Word/line wise dragging should keep the original word/line selected
- Remove prefix from paths in ripgrep results
- Use iso date format for default date instert keybind
- Workaround broken dir.statFile on WSL1
- Left an right movements jump to selection boundary
- Prefer targetSelectionRange over targeRange if both are provided by LSP
- Fix flicker: home screen should not load if we have a file to open
- Update thespian to fix subprocess file descriptor race
- Force ripgrep to never try search stdin
- Bracketed paste should check for ctrl+j and insert \n
- Render control codes in mini buffer input with unicode control code symbols
- Proactive close subprocesses on early exit in shell module
- Fix paste in goto mode
- Don't match against legacy unshifted keys when we have extended input text
- Remove blocking project manager call on startup
- Never double free LSP init queue
- Remove arbitrary limit to command buffer size
- Remove ctrl+p command palette binding
- Stop after removing widget in Widget.remove (fixes ReleaseFast crash)
- Fix potention dangling pointer in mainview on view list realloc
- MRU position should not override line numbers on command line
- Don't restore editor view rows and cols
- Prevent task palette from being too short to show palette label
- Refresh hover on tab changes
- Add workaround for conpty ul color escape sequence parser bug
- get_mru_position should not hang if file not found in project
- Fix row & column in get_mru_position
- Remove initial empty frame render on startup
- Make move_cursor_up/_down fallback to move_begin/_end
- Don't get stuck in an overlay mode if it is triggered from the command line
- Update cursor target column after nudge_insert/_delete