diff --git a/content/devlog/2024.smd b/content/devlog/2024.smd index 3d9550b..80f7c97 100644 --- a/content/devlog/2024.smd +++ b/content/devlog/2024.smd @@ -15,426 +15,6 @@ them. You can [subscribe to this page via RSS]($link.page('devlog').alternative('rss')) and find more devlog entries in the [archive](/devlog/). - -## [Windows native clipboard support]($section.id("2024-12-24T14:58:00")) - -I spent the morning dog-fooding flow on windows. I added native clipboard support, so now (finally) -pasting code blocks does not munge their formatting, and you can now use the regular `ctrl+v` -keybinding on windows instead of your terminal's paste function (ie. `ctrl+shift+v`). Also, I fixed -`alt+shift+` keybindings, which were broken on windows (and no-one seems to have noticed!?). - - -## [Binary releases]($section.id("2024-12-19T22:55:00")) - -Flow Control get it's first binary release! πŸŽ‰πŸΎπŸ₯³ - -[neurocyte/flow/releases/tag/v0.2.0](https://github.com/neurocyte/flow/releases/tag/v0.2.0) - - -## [Auto UTF-8 sanitization]($section.id("2024-12-18T16:33:00")) - -Flow will now read non UTF-8 files with out crashing. It'll do a simplistic 8bit to UTF-8 -transcoding and display a warning in the status bar. Writing the file will save it as UTF-8 and -what you see is what you get. This is really simplistic, but at least for most western european -codepages it should pretty much do the right thing. - -[]($image.asset('2024-12-18.png')) - - -## [File type palette]($section.id("2024-12-10T20:27:00")) - -Another day, another feature. Today's feature-of-the-day is a new file type palette. You can now -change the current file type on the fly with the Change file type command. - -[]($video.asset('2024-12-10_20-22-46.mp4').controls(true)) - - -## [Keybind configuration]($section.id("2024-12-05T20:55:00")) - -Today I merged the configurable keybindings branch! You can now customize your keybindings with the -`Edit key bindings` command. This will open the keybindings json file in the configuration -directory for the mode you are using. If the file does not yet exist it will be created from the -built-in configuration. You can also save your keybinding configuration under a new file name to -create a whole new keybinding mode. - -To help with editing the keybindings there is a new command `insert_command_name` that will list -all available commands (not just those in the command palette) and insert the command name into the -current file. This is usually bound to `ctrl+f2`. Commands can take arguments which are hinted in -the `insert_command_name` list and may be added after the command name in the keybinding -declaration. For example: `["ctrl+f9", "set_theme", "1984"],` - -Thank you to `@Robert Burnett` for getting the ball rolling on this and writing the vim style -keybind parser! - -[]($video.asset('2024-12-05_20-40-45.mp4').controls(true)) - - -## [Expand/shrink selection]($section.id("2024-11-25T22:10:00")) - -Today I added implementations for the tree-sitter based expand/shrink selection commands. And also -select next/previous sibling commands. Now you can move your selection around based on the -tree-sitter syntax tree. These commands are bound to alt+shift+left/right and alt+home/end -respectively. (in flow mode) - - -## [Theme alpha channel support]($section.id("2024-11-04T23:29:00")) - -Today I added proper support for alpha blending of theme colors. This fixes a lot of issues with -themes, especially light themes and should improve the overall polish of flow quite a bit. - - -## [New themes, new comamnds and more]($section.id("2024-10-29T22:10:00")) - -Various minor features have been added over the past week. A new group of themes called Catppuccin. -Swift language syntax highlighting. A new command `Open previous file`, useful for toggling between -two files. And as always, many minor bug fixes and improvements. - -Today I pushed a major refactor of our tree-sitter incremental parsing support. Flow now uses a -diff algorithm (dizzy) to generate tree-sitter edits on each frame (if there are changes) instead -of directly translating individual edit operations into tree-sitter edits on every change. This -seems to get us much more predicatable and reliable results from tree-sitter. - -Major refactoring of the keybinding system is still underway. When that is complete we will be able -to move forward with support for dynamic keybindings. This will allow plugins to configure keybinds -at runtime. - - -## [Modal palettes]($section.id("2024-10-19T20:39:00")) - -Small quality of life UI fix today. Palettes are now properly modal and you can cancel them by -clicking outside of the palette. This brings Flow a little closer to common GUI UI patterns. Also, -just for fun, added a slight dimming effect to the modal background. - -[]($video.asset('Screencast_From_2024-10-19_20-36-37.webm').controls(true)) - -And a fade effect... - -Fade effects are controlled by the `animation_max_lag` configuration parameter. - - -## [New args parser]($section.id("2024-10-14T20:42:00")) - -Today flow's CLI got a nice revamp thanks to Joe Mckay and his flags zig library. This also brings -improved error messages on invalid parameters. Thanks Joe! - -[]($image.asset('2024-10-14.png')) - - -## [Toggle highlighting]($section.id("2024-10-12T20:34:00")) - -You can now toggle syntax highlighting with `S-F10` or the `Toggle syntax highlighting` command. -This is not persistent, it's just for the currently open file. Also, the `--no-syntax` command line -option will now leave LSP support and file type detection enabled and just disable syntax -highlighting globally for the current session. You can still then turn it back on with `Toggle -syntax highlighting`. - - -## [Improved whitespace rendering]($section.id("2024-10-10T23:30:00")) - -Today I made some improvements to whitespace rendering. Indent size and tab width are now -configurable and there is a third whitespace rendering mode that renders indent guides. - -Also, I added proper support for editing CRLF files and changing the line ending mode a couple of -weeks ago and forgot to mention it here before going on vacation. - - -## [Hover]($section.id("2024-09-10T22:04:00")) - -Today's feature is hover information support. Hold down Alt and hover with the mouse to fire off a -hover LSP request. You can also use the keybinding, in flow/vim mode and -in helix mode. Also, Alt-LeftClick is goto_definition, which complements hover mode nicely -(goto_definition is not new though). - -The information view is fairly simple. It does not render the markdown or allow clicking on links -in the content yet. - -[]($video.asset('Screencast_from_2024-09-10_21-56-03.webm').controls(true)) - - -## [Save as]($section.id("2024-08-30T21:16:00")) - -Feature of the day. Save As! The save as command uses the same file browser mini mode as open file, -so you can complete existing directory and file names. This can be used to copy, replace or create -new files. - -[]($video.asset('Screencast_from_2024-08-30_21-13-02.webm').controls(true)) - - -## [Improved open file completion]($section.id("2024-08-29T21:50:00")) - -Pressing tab at the open file now completes from with a simple prefix match just in the directory -instead of fuzzy matching across the entire project. This is much more like vim, emacs, vscode, -etc. and lays some ground work for adding a file browser later. - - -## [Format on save]($section.id("2024-08-27T22:55:00")) - -Flow can now automatically format on save. You can enable it in the configuration file with the -`enable_format_on_save` option. - - -## [Open file fuzzy completion]($section.id("2024-08-26T22:00:00")) - -Pressing tab at the open file prompt will now fuzzy complete the file name from the project MRU -file list. Pressing tab multiple time will cycle to the next best matching file. - - -## [Clock widget & beam cursor]($section.id("2024-08-26T21:09:00")) - -I've added a simple clock widget. You can add it to your bars wherever you want with the "clock" -tag. It is not enabled by default. - -[]($image.asset('2024-08-26.png')) - -Thanks to @rockorager vim & helix modes will now show a beam cursor in insert mode and an underline -cursor in visual/select mode if you have "enable_terminal_cursor" turned on in your config. Only on -the primary cursor though as terminals do not support more than one native cursor. - - -## [Status bar configuration]($section.id("2024-08-25T21:32:00")) - -Flow's statusbar is now much more configurable. Instead of individual config switches to -enable/disable each widget, you can now configure the position of each widget with a string. Also, -there is now an optional top bar too and a new expander widget to help centering or spacing out -widgets. Have fun! - -[]($video.asset('Screencast_from_2024-08-25_21-25-50.mp4').controls(true)) - - -## [Open recent project]($section.id("2024-08-19T23:28:00")) - -Today I finally implemented the open recent project command. Now you can quickly switch projects -with C-r. Switching projects will also change the current working directory in the terminal so that -new terminal splits and tabs will open at the correct location. - -[]($video.asset('2024-08-19_flow_open_recent_project.webm').controls(true)) - - -## [Cross file diagnostics]($section.id("2024-08-17T16:43:00")) - -Today's feature is diagnostics in other files. If your LSP returns diagnostics messages for a file -(or files) you are not currently editing, then flow will display them in the file list panel and -let you jump to the location with A-n or mouse click. - -You can also show diagnostics for the current file with C-S-m or by clicking on the diagnostics -summary in the status bar. - -[]($video.asset('2024-08-18_flow_diagnostics_file_list_view.webm').controls(true)) - - -## [Find all references]($section.id("2024-08-17T23:59:00")) - -Today I finished off the find all references command. Enjoy! - -[]($video.asset('Screencast_from_2024-08-17_23-53-42.mp4').controls(true)) - - -## [Non-tree-sitter build support]($section.id("2024-08-16T22:59:00")) - -You can now build Flow entirely without tree-sitter with zig build -Duse_tree_sitter=false. This -will give you a tiny executable that is much more suitable for really small devices. Add it to all -your docker containers and never use nano ever again! (ok, it's not quite that small) - -Also, you can now start the regular build of flow with --no-syntax if for some reason you don't -want syntax highlighting. - -Also, 32 bit arm builds should now work. (with -Duse_tree_sitter=false) - - -## [Find all refs prep work]($section.id("2024-08-16T00:13:00")) - -Started work on the find all references command (S-f12). It is working already, but I still need to -add more detail to the results list. Also, you have to manually clear the list at the moment (C-j). -Navigation of the results works the same as with find in files. - - -## [Theme panel]($section.id("2024-08-14T21:33:00")) - -Feature of the day today is a new way to select themes. The list is getting long, so now there is a -palette just for selecting themes. This also brings easily reusable palettes, so adding other -features that need a palette type interface is now easy. - -[]($video.asset('Screencast_from_2024-08-14_21-30-26.webm').controls(true)) - - -## [Panel views mouse control]($section.id("2024-08-13T19:48:00")) - -Flow's panel views can now be resized with the mouse! - -[]($video.asset('2024-08-13_flow_panel_resize.webm').controls(true)) - - -## [File list view keybinds and terminal background]($section.id("2024-08-12T23:28:00")) - -Today I added up/down/enter keybindings to find in files mode so it is possible to browse the match -list via keyboard before jumping to a specific match. - -Also, flow now sets the terminal background color to match the selected theme. This makes borders a -little less ugly if your terminal does not resize in grid steps. It also reduces resizing flicker -on some terminals and enables transparency effects on others. - - -## [File list view update]($section.id("2024-08-11T22:42:00")) - -Today I finished off the file list view. It is now scrollable with keyboard, mouse wheel and -scrollbar. Also made it a little prettier. I fixed a few minor issues with the command palette too. - -[]($video.asset('2024-08-11_flow_filelist_view.mp4').controls(true)) - -Oops, I forgot to record the mouse cursor. πŸ˜‚ You all get the idea though I hope. - - -## [Windows TLC]($section.id("2024-08-08T22:53:00")) - -I gave the windows version some TLC today. Subprocess stdin input now works correctly and the -project manager encodes and decodes LSP URLs with windows file paths. - -This means that language server and language formatter support in Windows is now on par with Linux -and MacOS. πŸŽ‰ - -Pasting on windows now uses the internal clipboard by default as Windows doesn't support bracketed -paste. You can still paste from the system clipboard with C-S-v. - - -## [Fixing]($section.id("2024-08-07T21:58:00")) - -Mostly bug fixing today. In-band resize support is properly reset on exit now which eliminates the -junk at your prompt if you resize your terminal after exiting flow. Also, find_in_files will no -longer cause an integer overflow error if it matches the beginning of a line. - - -## [Extra large file support]($section.id("2024-08-05T22:13:00")) - -Support for loading very very large files is now merged. I've tested files up to around 270 million -lines large at around 4GB. File size should now be limited only by the available memory. Required -RAM is around 8 times the file size. On my machine loads files at around 8 seconds per GB, which I -think is fairly acceptable. - - -## [CLI list languages and execute commands]($section.id("2024-07-30T22:21:00")) - -Today I added some CLI arguments: -``` - --list-languages - Show available languages. - - -e, --exec ... - Excute a command on startup. -``` - -`--exec` allows you to execute mini scripts on flow startup. - -For example to change flow's whitespace setting: - -``` -flow --exec toggle_whitespace --exec quit -``` - -Or open and move to the end of a file: - -``` -flow src/main.zig --exec move_buffer_end -``` - - -## [Performance tuning]($section.id("2024-07-29T22:12:00")) - -Two major performance enhancements today. One to make tree-sitter re-parsing not require a -re-serialization of the entire buffer on every edit. And the second dramatically reduces the number -of egc_length calls (aka, graphemeIterator) needed to create tree-sitter edit updates. Editing -very, very large files (Sema.zig anyone?) should now be lag free again, at least for one cursor, -and editing with multiple cursors should scale much better. - - -## [File list jump commands]($section.id("2024-07-28T22:51:00")) - -Today I've added commands and keybindings (A-n/p) for jumping through the file list view. These are -the same keybindings as next/previous diagnostic, but they are only active if the file list is -visible. - -[]($video.asset('Screencast_from_2024-07-28_22-47-40.mp4').controls(true)) - - -## [Find in files results]($section.id("2024-07-28T00:06:00")) - -Today I did some more work on a results list for the find in files command. It's not quite complete -yet, but already quite usable. - -[]($video.asset('2024-07-28_00-04-01.mp4').controls(true)) - - -## [Recent files & superhtml]($section.id("2024-07-22T23:46:00")) - -I'm back from vacation and development work will now continue. Today brings some minor improvements -to the rendering of the open recent file list and superhtml support (shtml). - - -## [New language support]($section.id("2024-07-10T22:03:00")) - -Added yaml syntax highlighting today. Previously also added nim, nimble and kdl. - - -## [Colored undercurls]($section.id("2024-07-09T23:46:00")) - -Flow now has colored undercurls for diagnostics. - -[]($image.asset('2024-07-09.png')) - -(if the terminal supports them) - - -## [Just fixing]($section.id("2024-07-09T15:38:00")) - -Sorry that the dev-log is so quiet. I haven't stopped working on flow or anything, but it's been -all fixes and tweaks for the last week or so. I only report on new user visible features here. And -then only if they're not discussed in any of the other channels. - - -## [Windows fixes]($section.id("2024-06-27T22:28:00")) - -Lot of fixes for flow on windows today. Fuzzy find, window size, some integer overflows and -subprocess calls. Just LSP URIs left to fix. - -Also, the inspector view is now working again (everywhere). - - -## [CLI project support]($section.id("2024-06-23T21:41:00")) - -You can now open directories (aka projects) on the command line. Only one is allowed. All other -files on the same command line will be opened relative to this project. - - -## [Command palette MRU persistence]($section.id("2024-06-23T19:31:00")) - -Last used times are now persisted in `~/.local/state/flow/commands` - - -## [State moved]($section.id("2024-06-23T15:53:00")) - -Flow now stores it's state files in `~/.cache/flow` instead of `~/.local/state/flow` - -This better matches the XDG Base Directory Specification. - -Move your existing state files with `mv ~/.cache/flow ~/.local/state` if you want to keep them. - - -## [Command palette MRU ordered]($section.id("2024-06-22T22:00:00")) - -The command palette is now sorted by last used time. This helps a lot with repeating commands. Last -used time is not persisted across sessions yet though. - - -## [Command palette improvements]($section.id("2024-06-21T01:24:00")) - -Today's blood sweat and tears brings keybinding hints, a scrollbar and page down/up commands to the -command palette. πŸ˜… - -[]($image.asset('2024-06-21.png')) - -This should help discoverability a lot for all those who were too lazy to RTFM. (that's me 10 -minutes after adding yet another keybinding πŸ˜‚) - - ## [Command palette fuzzy matching]($section.id("2024-06-19T17:47:00")) Fuzzy matching is now supported in the command palette and clicking the flow button will now open diff --git a/content/devlog/2024/2024-06-21.png b/content/devlog/2024/2024-06-21.png deleted file mode 100644 index f8956fc..0000000 Binary files a/content/devlog/2024/2024-06-21.png and /dev/null differ diff --git a/content/devlog/2024/2024-07-09.png b/content/devlog/2024/2024-07-09.png deleted file mode 100644 index 5d6bcab..0000000 Binary files a/content/devlog/2024/2024-07-09.png and /dev/null differ diff --git a/content/devlog/2024/2024-07-28_00-04-01.mp4 b/content/devlog/2024/2024-07-28_00-04-01.mp4 deleted file mode 100644 index 4069fe4..0000000 Binary files a/content/devlog/2024/2024-07-28_00-04-01.mp4 and /dev/null differ diff --git a/content/devlog/2024/2024-08-11_flow_filelist_view.mp4 b/content/devlog/2024/2024-08-11_flow_filelist_view.mp4 deleted file mode 100644 index 5a51bed..0000000 Binary files a/content/devlog/2024/2024-08-11_flow_filelist_view.mp4 and /dev/null differ diff --git a/content/devlog/2024/2024-08-13_flow_panel_resize.webm b/content/devlog/2024/2024-08-13_flow_panel_resize.webm deleted file mode 100644 index 672e48b..0000000 Binary files a/content/devlog/2024/2024-08-13_flow_panel_resize.webm and /dev/null differ diff --git a/content/devlog/2024/2024-08-18_flow_diagnostics_file_list_view.webm b/content/devlog/2024/2024-08-18_flow_diagnostics_file_list_view.webm deleted file mode 100644 index ea1f078..0000000 Binary files a/content/devlog/2024/2024-08-18_flow_diagnostics_file_list_view.webm and /dev/null differ diff --git a/content/devlog/2024/2024-08-19_flow_open_recent_project.webm b/content/devlog/2024/2024-08-19_flow_open_recent_project.webm deleted file mode 100644 index 7abb8c3..0000000 Binary files a/content/devlog/2024/2024-08-19_flow_open_recent_project.webm and /dev/null differ diff --git a/content/devlog/2024/2024-08-26.png b/content/devlog/2024/2024-08-26.png deleted file mode 100644 index 912ea53..0000000 Binary files a/content/devlog/2024/2024-08-26.png and /dev/null differ diff --git a/content/devlog/2024/2024-10-14.png b/content/devlog/2024/2024-10-14.png deleted file mode 100644 index 615c513..0000000 Binary files a/content/devlog/2024/2024-10-14.png and /dev/null differ diff --git a/content/devlog/2024/2024-12-05_20-40-45.mp4 b/content/devlog/2024/2024-12-05_20-40-45.mp4 deleted file mode 100644 index e5f348a..0000000 Binary files a/content/devlog/2024/2024-12-05_20-40-45.mp4 and /dev/null differ diff --git a/content/devlog/2024/2024-12-10_20-22-46.mp4 b/content/devlog/2024/2024-12-10_20-22-46.mp4 deleted file mode 100644 index 09cdd20..0000000 Binary files a/content/devlog/2024/2024-12-10_20-22-46.mp4 and /dev/null differ diff --git a/content/devlog/2024/2024-12-18.png b/content/devlog/2024/2024-12-18.png deleted file mode 100644 index ae364f8..0000000 Binary files a/content/devlog/2024/2024-12-18.png and /dev/null differ diff --git a/content/devlog/2024/Screencast_From_2024-10-19_20-36-37.webm b/content/devlog/2024/Screencast_From_2024-10-19_20-36-37.webm deleted file mode 100644 index 26df42e..0000000 Binary files a/content/devlog/2024/Screencast_From_2024-10-19_20-36-37.webm and /dev/null differ diff --git a/content/devlog/2024/Screencast_from_2024-07-28_22-47-40.mp4 b/content/devlog/2024/Screencast_from_2024-07-28_22-47-40.mp4 deleted file mode 100644 index 530dce4..0000000 Binary files a/content/devlog/2024/Screencast_from_2024-07-28_22-47-40.mp4 and /dev/null differ diff --git a/content/devlog/2024/Screencast_from_2024-08-14_21-30-26.webm b/content/devlog/2024/Screencast_from_2024-08-14_21-30-26.webm deleted file mode 100644 index 4067d44..0000000 Binary files a/content/devlog/2024/Screencast_from_2024-08-14_21-30-26.webm and /dev/null differ diff --git a/content/devlog/2024/Screencast_from_2024-08-17_23-53-42.mp4 b/content/devlog/2024/Screencast_from_2024-08-17_23-53-42.mp4 deleted file mode 100644 index 8c2bb26..0000000 Binary files a/content/devlog/2024/Screencast_from_2024-08-17_23-53-42.mp4 and /dev/null differ diff --git a/content/devlog/2024/Screencast_from_2024-08-25_21-25-50.mp4 b/content/devlog/2024/Screencast_from_2024-08-25_21-25-50.mp4 deleted file mode 100644 index 12cd5e1..0000000 Binary files a/content/devlog/2024/Screencast_from_2024-08-25_21-25-50.mp4 and /dev/null differ diff --git a/content/devlog/2024/Screencast_from_2024-08-30_21-13-02.webm b/content/devlog/2024/Screencast_from_2024-08-30_21-13-02.webm deleted file mode 100644 index e50d8fd..0000000 Binary files a/content/devlog/2024/Screencast_from_2024-08-30_21-13-02.webm and /dev/null differ diff --git a/content/devlog/2024/Screencast_from_2024-09-10_21-56-03.webm b/content/devlog/2024/Screencast_from_2024-09-10_21-56-03.webm deleted file mode 100644 index 7f4aa70..0000000 Binary files a/content/devlog/2024/Screencast_from_2024-09-10_21-56-03.webm and /dev/null differ diff --git a/content/devlog/2025.smd b/content/devlog/2025.smd deleted file mode 100644 index a6b805e..0000000 --- a/content/devlog/2025.smd +++ /dev/null @@ -1,253 +0,0 @@ ---- -.title = "Devlog - 2025", -.date = @date("2025-01-01T00:00:00"), -.author = "CJ van den Berg", -.layout = "devlog.shtml", -.draft = false, ---- - -[]($section.id('about')) -## About this Devlog - -I try to keep a log of major (and some minor) changes and new features going into flow as I work on -them. - -You can [subscribe to this page via RSS]($link.page('devlog').alternative('rss')) and find more -devlog entries in the [archive](/devlog/). - - -## [New command: copy_file_name]($section.id("2025-04-15T17:54:00")) - -I added a command to copy the current file name and position to the system clipboard. This is very -useful for grabbing something to use for setting a breakpoint, or for pasting into a bookmarks -file. It's bound to `shift+alt+c` for file name and line, column position and `ctrl+k alt+c` for -just the file name. Also, if there are multiple cursors it will copy multiple entries on a line -each. Nice for creating jump lists. - - -## [Column highlight]($section.id("2025-04-08T23:14:00")) - -Today brings a new configuration option: `highlight_columns`. This string contains a list of space -separated columns numbers where flow should draw a border. This can help with manual wrapping of -text as as visual indicator of how long the current line is. - - -## [Integer command arguments]($section.id("2025-04-08T18:04:00")) - -Integer arguments are back! Now you can once again use integer prefixes for many commands. Most -commands use the integer prefix as a repeat count, but the exact meaning is dependant on the -command being executed. The current value of the prefix is displayed in the `keybind` widget in the -status bar. Prefix digits are bound to `alt+0` through `alt+9` in flow and emacs mode and just -the plain digit keys in vim and helix modes. - - -## [Atomic updates for vim & helix insert modes]($section.id("2025-04-07T21:08:00")) - -I added `init_command` and `deinit_command` support for keybinding modes that allow us to now -call `pause_undo_history` and `resume_undo_history` when entering/exiting insert modes. This means -that insert modes will now create just one single undo step for the entire input made while in the -mode. - - -## [Customizable themes]($section.id("2025-03-26T23:05:00")) - -You can now customise the current theme in your local configuration directory without modifying -flow itself. Just run the `Customize theme` command and flow will copy the current theme to your -configuration directory and open it for you to edit. - - -## [Debug build warning]($section.id("2025-03-26T19:22:00")) - -There is now a small warning on the home screen when you run a debug build. Debug builds are -significantly slower than ReleaseFast builds. The build type is also now mentioned in the version -information. - - -## [Widget parameters]($section.id("2025-03-25T21:19:00")) - -Mini feature today. You can now add parameters to (some of) the status bar widgets by separating -them from the widget name with a colon. - -- `linenumber` widgets may have (up to) three parameters: pad width (int), pad value (space/zero) and -digit style (ascii/digital/subscript/superscript). - -For example: `linenumber:4,zero,digital`. - -- `spacer` widgets may have one parameter: width (int) - -- `clock` widgets may have one parameter: digit style (ascii/digital/subscript/superscript) - -[]($image.asset('2025-03-25.png')) - - -## [Binary queries & fully async LSP]($section.id("2025-03-25T10:26:00")) - -A few major behind the scene updates in the last week. Nothing directly user facing, but still -worth mentioning here. - -- Flow now uses pre-loaded binary versions of the tree-sitter queries. The scheme query text is - loaded at compile time and serialized to binary which is then loaded at runtime. The tree-sitter - query parser is incredibly slow and the binary loader is close to instant, so this saves around - 20-30ms when loading files. Every frame counts! - -- Flow's LSP backend is now 100% async. It used to be able to block the project manager in some - cases, potentially leading to pauses when listing project files and occationally timeouts when - loading the first file of a file type. These issues can no longer occur. LSP pauses can now only - effect LSP things, like diagnostics or goto_* requests. - - -## [zig-0.14 released]($section.id("2025-03-05T15:31:00")) - -Nightly builds are now on the freshly released `zig-0.14`. - - -## [Smart pairs and smarter open file]($section.id("2025-03-04T21:11:00")) - -Today we have a couple of useful quality of life features. - -A much improved `smart_insert_pair` command, and to go along with it, new commands -`smart_insert_pair_close` and `smart_delete_backwards`. This pretty much completes smart pair -handling as far as I am concerned and flow should generally do-the-right-thing when inserting or -deleting paired characters like `()`, `{}`, `[]`, `""`, etc. - -Automatic file link parsing in selections when using the `open_file` command. What this means is -that flow will automatically open files (if they actually exist) if you select the file path before -pressing `ctrl+o`, including parsing for line number and column indexes. This is especially useful -for command output buffer and means that you can easily jump to files in compiler errors or grep -matches. Tip: use the `expand_selection` command to select a whole file path in a command output -buffer. - -[]($video.asset('2025-03-04_20-59-15.mp4').controls(true)) - -[]($video.asset('2025-03-04_20-51-02.mp4').controls(true)) - - - -## [Zig-0.14 issues]($section.id("2025-02-06T21:46:00")) - -Wierd issues on macos with `zig-0.14` today, so I have reverted the `master` branch to `zig-0.13` -with a force push and cherry-picked all the new features since the `zig-0.14` update. There is now -a `zig-0.14` branch pointing to the `zig-0.14` changes (where `master` used to be). I also added -the build mode and zig version to the version info. - - -## [Bling!]($section.id("2025-02-05T22:40:00")) - -Todays feature of the day is a little bit of bliiiiing. You can now select from four different -digit styles for the line number gutter! - -[]($video.asset('2025-02-05_22-35-31.mp4').controls(true)) - - -## [Switched to zig master]($section.id("2025-02-04T23:12:00")) - -Flow Control is now on zig master once again! πŸŽ‰ - -``` -41 files changed, 648 insertions(+), 623 deletions(-) -``` - -By far the most painful zig update in flow's history! - - -## [Ephemeral buffers]($section.id("2025-01-27T20:11:00")) - -Today's update brings better support for ephemeral buffers. These buffers are used for task output, -new files and the help buffer. They can only be saved by giving them a new name first with the -`save_as` command and do not store undo info when closed unless first given a name. Also added is -the new create_new_file command, bound by default to `ctrl+shift+n`. - - -## [Tasks]($section.id("2025-01-26T22:11:00")) - -Today's feature is a 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+!`. - -[]($video.asset('2025-01-26_flow_task_runner.mp4').controls(true)) - - -## [Tabs widget]($section.id("2025-01-24T23:47:00")) - -Today's quality flow time brings a new `tabs` widget. Add it to your topbar config option to get a -tab bar that you can use to switch buffers with the mouse or a keybinding to -`next_tab`/`previous_tab`. You can close a tab with middle mouse click. - -[]($video.asset('2025-01-24_flow_tabs_widget.mp4').controls(true)) - - -## [Delete buffer command]($section.id("2025-01-22T22:56:00")) - -There is now 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. - - -## [Multi-buffer]($section.id("2025-01-21T23:10:00")) - -Today's feature of the day is **multi-buffer support**. Thanks to a new buffer manager module 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` -that will bring up a list of currently open buffers. The home screen now also has a `save_all` -command for those times you just want to exit without saving each file individually first. - -[]($video.asset('2025-01-21_flow_buffer_switcher.mp4').controls(true)) - - -## [Lots and lots]($section.id("2025-01-19T15:09:00")) - -A lot has happened over the last two weeks. Sorry about the lack of posts here in the devlog. Due -to the huge uptick in community contributions I have been concentrating on getting PRs reviewed and -merged. Here's a list of highlights of whats new (in no particular order): - -- **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. - -- **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 bindings greatly improved** - Emacs input mode keybindings are now much more fleshed out and - include all the emacs basic movement commands. Emacs input mode now also has a selection mode - (also `ctrl+space`). Thanks to `@marler8997` for this work. - -- **Win32 GUI** - Yes, flow can now render itself in a win32 GUI window for all those terminal - impaired windows users (with full GPU acceleration!). 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 as of this writing 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. - -- **Multi cursor changes** - Adding cursors is now `alt+click` (it was `ctrl+click`). This is to - fall inline with common practice in other editors (zed and vscode). Also, you can now remove - cursors by `alt+click`ing on them. - -- **Gutter symbols** - There is a new config option to disable gutter symbols and reduce the size - of the line number gutter if you so desire. - -- **Verilog support** - Thanks to `@edwloef` we now support syntax highlighting and formatting for - verlog files. - -- **LSP: Rename symbol command** - Thanks to `@Travis` we now have 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. - -Oh, and one more thing: - -- **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. - - -## [Whitespace revamp]($section.id("2025-01-02T18:44:00")) - -Today's feature of the day: 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. - -[]($video.asset('2025-01-02_18-35-05.mp4').controls(true)) diff --git a/content/devlog/2025/2025-01-02_18-35-05.mp4 b/content/devlog/2025/2025-01-02_18-35-05.mp4 deleted file mode 100644 index 36b0984..0000000 Binary files a/content/devlog/2025/2025-01-02_18-35-05.mp4 and /dev/null differ diff --git a/content/devlog/2025/2025-01-21_flow_buffer_switcher.mp4 b/content/devlog/2025/2025-01-21_flow_buffer_switcher.mp4 deleted file mode 100644 index 5e8652c..0000000 Binary files a/content/devlog/2025/2025-01-21_flow_buffer_switcher.mp4 and /dev/null differ diff --git a/content/devlog/2025/2025-01-24_flow_tabs_widget.mp4 b/content/devlog/2025/2025-01-24_flow_tabs_widget.mp4 deleted file mode 100644 index 3d5dd6f..0000000 Binary files a/content/devlog/2025/2025-01-24_flow_tabs_widget.mp4 and /dev/null differ diff --git a/content/devlog/2025/2025-01-26_flow_task_runner.mp4 b/content/devlog/2025/2025-01-26_flow_task_runner.mp4 deleted file mode 100644 index 0aec4d2..0000000 Binary files a/content/devlog/2025/2025-01-26_flow_task_runner.mp4 and /dev/null differ diff --git a/content/devlog/2025/2025-02-05_22-35-31.mp4 b/content/devlog/2025/2025-02-05_22-35-31.mp4 deleted file mode 100644 index 59723e7..0000000 Binary files a/content/devlog/2025/2025-02-05_22-35-31.mp4 and /dev/null differ diff --git a/content/devlog/2025/2025-03-04_20-51-02.mp4 b/content/devlog/2025/2025-03-04_20-51-02.mp4 deleted file mode 100644 index 710f0ba..0000000 Binary files a/content/devlog/2025/2025-03-04_20-51-02.mp4 and /dev/null differ diff --git a/content/devlog/2025/2025-03-04_20-59-15.mp4 b/content/devlog/2025/2025-03-04_20-59-15.mp4 deleted file mode 100644 index 5abcc7f..0000000 Binary files a/content/devlog/2025/2025-03-04_20-59-15.mp4 and /dev/null differ diff --git a/content/devlog/2025/2025-03-25.png b/content/devlog/2025/2025-03-25.png deleted file mode 100644 index b3c2b75..0000000 Binary files a/content/devlog/2025/2025-03-25.png and /dev/null differ