• v0.3.0 78affc4052

    Ghost released this 2025-01-27 21:35:00 +00:00 | 279 commits to master since this release

    Signed by neurocyte
    GPG key ID: 8EB1E1BB660E3FB9

    Major 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 with zig build -Dgui --release=safe
      and is called flow-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
      a save_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 the delete 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 is alt+!. 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 are shell_execute_insert and shell_execute_log. See src/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 the rename_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 the include_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 and tabs, 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
      (also ctrl+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 the save_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 of default (the terminal default), block_blink, block, underline_blink,
      underline, beam_blink or beam

    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