From 2142011618b2a5d8078771520b82e4d7d0842e13 Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Thu, 17 Jul 2025 14:26:36 +0200 Subject: [PATCH] docs: finish 0.4.0 release notes --- release_notes.md | 450 +++++++++++++++++++---------------------------- 1 file changed, 182 insertions(+), 268 deletions(-) diff --git a/release_notes.md b/release_notes.md index a4a37d4..a739587 100644 --- a/release_notes.md +++ b/release_notes.md @@ -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 \ No newline at end of file +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 + \ No newline at end of file