-
released this
2025-01-27 21:35:00 +00:00 | 279 commits to master since this releaseMajor New Features:
-
Win32 GUI - Yes, flow can now render itself in a win32 GUI window for all those terminal impaired
windows users (with D3d11 shader rendering). The GUI binary can be built withzig build -Dgui --release=safe
and is calledflow-gui.exe
. Functionality in this GUI version of flow is identical to the TUI version, although
with this release there are some minor renderer features still missing such as curly underlines, mouse cursors and
double wide characters. Thanks to @marler8997 for the huge amount of work he put into this. There are a few GUI
specific commands to zoom in/out and select a font face. GUI specific configuration options are stored in a new
gui_config
file. -
Multi-buffer support - A new buffer manager module means you can now switch buffers without first saving them. The
recent files list has gained a dirty indicator so you can see which files need to be saved and there is a new command
switch_buffer
the will bring up a list of currently open buffers (with fuzzy search). The home screen now also has
asave_all
command for those times you just want to exit without saving each file individually first. There is a
delete_buffer
command that is bound to thedelete
key when in the buffer selector palette. Deleting a buffer will
remove it from the buffers list and free it's undo history entirely. -
Tabs - There is a a new tabs widget that you can use to switch buffers with the mouse or a keybinding to the
next_tab
/previous_tab
commands. In the default configuration it is added to the top bar. You can close a tab with
middle mouse click. -
Task runner - You can now run commands inside flow and have their output placed in a buffer. Tasks are remembered per
project. The default keybinding for the task palette isalt+!
. Task output buffers are ephemeral and will be deleted
when closed if not saved to a file first. -
Shell command bindings - You can now bind shell commands to keys and have the output inserted into the current buffer,
a new buffer, or the log. The commands areshell_execute_insert
andshell_execute_log
. Seesrc/keybind/builtin/flow.json
for some examples. -
LSP: Rename symbol - Thanks to @Travis flow now has LSP
rename_symbol
support. This is done a little differently in flow
to most other editors. When running therename_symbol
command we add cursors at all the symbol references and let you rename
them interactively. Cross file renames are not yet supported, but will show up in the references list for you to jump directly
to them and perform the rename yourself if you so desire. -
New config file format - Flow now uses a much simpler configuration file format that is nicer to edit manually. Conversion from
the old.json
config file is automatic and will not lose any configuration. Also, it is now possible to include nested
configuration files with theinclude_files
option. -
Much improved whitespace rendering - Flow now uses a map of the rendered view to process whitespace rendering after finishing
the main render pass. This fixes a few minor whitespace rendering bugs, and more importantly, allows easy and fast rendering
of more whitespace related features. There are new modes:leading
,eol
andtabs
, to render just subset of whitespace. And,
best of all, flow now highlights leading (ie. spaces before tabs) and trailing whitespace errors. -
Beam cursor mode mouse select - Selecting with the mouse when you have a beam cursor active now gives selection behaviour
like a GUI editor. ie. the position of the selection is calculated gap to gap instead of char to char.
Changes to input modes:
-
Flow select mode - Press
ctrl+space
in flow input mode to enter a select mode that lets you extend your selection with regular
movement keys. -
Emacs input mode - Emacs input mode keybindings are now mostly complete and include all the basic movement commands, selection mode
(alsoctrl+space
) and LSP commands. Thanks to @marler8997 for this work. -
Vim input mode - Vim input mode keybindinds have improved, but are still incomplete. New are vim style half and whole page movements
and more ways to enter instert mode. -
Helix input mode - Helix input mode is also improving, but still very far from complete. Helix style selections (inclusive) have
added in this release with more cursor movements still to come.
New commands:
create_new_file
- Create a new file that can be named with thesave_as
command.pause_undo
,resume_undo
- Pause/resume undo history. Useful for reducing undo steps generated by command sequences.
New file types:
sql
systemverilog
New configuration options:
gutter_symbols
- Enable/disable diagnostics symbols in the line number gutter.default_cursor
- Set the default cursor. One ofdefault
(the terminal default),block_blink
,block
,underline_blink
,
underline
,beam_blink
orbeam
New themes:
-mellow
Minor New Features:
- Show screen dimentions on resize
- *BSD support
- Tracking branch and upstream is now shown in
--version
output copy
now copies the current line if there is no selection- Remove existing cursor if clicked again in add cursor mode (
alt+click
) - Support inheritance between input modes within an input namespace
- Add a bullet to inline diagnostic messages
- Don't render diagnostic messages if there is too little space
- Use a smaller NL symbol
- Support pasting from the native windows clipboard
- Upgrade cursors to block cursors when multi-cursor editing
- Separate binding key seqences with space instead of '>'
- Clear file list and log if no
find_in_files
matches are found - Support matching of shifted keybindings
Fixes:
- project: don't abort early on project restore_state
- palette: prevent crash on select(0)
- gutter: add missing abs to rel conversion in primary_click/_drag
- disable slow mouse_idle_timer
- editor: send view and cursor position updates when number of document lines changes
- utf-8: perform utf-8 sanitazation on buffer insert_chars
- palette: cancel when clicking outside of a palette instead of activating the current item
- project: use after free on fast project switching
- editor: prevent an integer overflow in editor.cancel_all_selections() on project switch
- windows: fix a race in the subprocess module
- editor: clamp cursor to buffer in toggle_cursel_prefix
- editor: don't attempt to render off the bottom of the screen
- version: make gen_version_info a little more robust
- editor: add pretty error if clipboard request is denied by terminal
- keybind: provide fallback handling for legacy terminals the don not provide shifted key info
- windows: matching of alt+shift+ keybindings on windows
- windows: normalized vaxis windows console input
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
2 downloads
-