diff --git a/README.md b/README.md index bd7e61f..6226d6f 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ This is my Zig text editor. It is under active development, but very stable and is my daily driver for almost everything. -[![Announcement](https://img.youtube.com/vi/iwPg3sIxMGw/maxresdefault.jpg)](https://www.youtube.com/watch?v=iwPg3sIxMGw) +[![Announcement](https://img.youtube.com/vi/Mf3k2uFkyK4/maxresdefault.jpg)](https://www.youtube.com/watch?v=Mf3k2uFkyK4) # Features @@ -49,7 +49,7 @@ and is my daily driver for almost everything. # Roadmap -See our [devlog](https://flow-control.dev/devlog/2025/) for on-going +See our [devlog](https://flow-control.dev/devlog/2026/) for on-going updates from the development team. ## In Development diff --git a/help.md b/help.md index 571881b..a068936 100644 --- a/help.md +++ b/help.md @@ -19,26 +19,25 @@ individually. ## Searching Press ctrl+f to search this help file. Type a search term and press -ctrl+n/ctrl+p or f3/shift+f3 to jump through the matches. Press Enter -to exit find mode at the current match or Escape to return to your -starting point. +ctrl+n/ctrl+p or f3/shift+f3 to jump through the matches. Press Enter to +exit find mode at the current match or Escape to return to your starting +point. ## Messages and logs -Messages of issues regarding tasks that are not accomplished, like -trying to close flow with unsaved files, as well as other information -are shown briefly in the bottom status bar; most recent messages can -be seen in the log view too, to open it, use ctrl+shift+p > `View log`; -it's possible to make it taller dragging the toolbar with the mouse -up or downwards. +Messages of issues regarding tasks that are not accomplished, like trying +to close flow with unsaved files, as well as other information are shown +briefly in the bottom status bar; most recent messages can be seen in the +log view too, to open it, use ctrl+shift+p > `View log`; it's possible to +make it taller dragging the toolbar with the mouse up or downwards. ## Input Modes Flow Control supports multiple input modes that may be changed -interactively at runtime. The current input mode (and some other -settings) is persisted in the configuration file automatically. +interactively at runtime. The current input mode (and some other settings) +is persisted in the configuration file automatically. - f4 => Cycle major input modes (flow, emacs, vim, helix,...) @@ -46,9 +45,9 @@ The current input mode is displayed at the left side of the statusbar. - ctrl+shift+p or alt+x => Show the command palette -The command palette allows you to fuzzy search and select commands to run. It -also shows any available keybind that may be used to run the command without -opening the palette. +The command palette allows you to fuzzy search and select commands to run. +It also shows any available keybind that may be used to run the command +without opening the palette. - ctrl+f2 => Show all available commands and keybinds @@ -58,16 +57,16 @@ will insert the command name into the current document instead of executing it. This is very useful for editing keybinding definition files. Run the `Edit keybindings` command to save the current keybinding mode to a -file in the configuration `keys` directory and open it for editing. Save your -customized keybinds under a new name in the same directory to create an -entirely new keybinding mode that can be selected with `f4`. Delete the +file in the configuration `keys` directory and open it for editing. Save +your customized keybinds under a new name in the same directory to create +an entirely new keybinding mode that can be selected with `f4`. Delete the keybinding file from the configuration `keys` directory to revert the mode to it's built-in definition (if there is one). Changes to keybinding files will take effect on restart. -Keybinding modes may inherit all non-conflicting keybindings from another mode -by adding an `inherit` option to the `settings` section of the keybind file -like this: +Keybinding modes may inherit all non-conflicting keybindings from another +mode by adding an `inherit` option to the `settings` section of the keybind +file like this: ```json { @@ -81,9 +80,9 @@ like this: This allows you to make only minor additions/changes to an existing builtin mode without copying the whole mode and is easier to keep up-to-date. -Additionally, individual sub-modes may inherit all non-conflicting keybindings -from another sub-mode of the same mode by adding an `inherit` option to the -sub-mode section like this: +Additionally, individual sub-modes may inherit all non-conflicting +keybindings from another sub-mode of the same mode by adding an `inherit` +option to the sub-mode section like this: ``` "normal": { @@ -102,43 +101,44 @@ Multiple inheritance is supported with the `inherits` options like this: ### Flow mode The default input mode, called just flow, is based on common GUI -programming editors. It most closely resembles Visual Studio Code, but -also takes some inspiration from Emacs and others. This mode focuses -on powerful multi cursor support with a find -> select -> modify -cycle style of editing. +programming editors. It most closely resembles Visual Studio Code, but also +takes some inspiration from Emacs and others. This mode focuses on powerful +multi cursor support with a find -> select -> modify cycle style of +editing. -See the `ctrl+f2` palette when flow mode is selected to see the full -list of keybindings for this mode. +See the `ctrl+f2` palette when flow mode is selected to see the full list +of keybindings for this mode. ### Vim mode -The vim modes, shown as NORMAL, INSERT or VISUAL in the status bar, -follow the basic modal editing style of vim. The basics follow vim -closely, but more advanced vim functions (e.g. macros and registers) -are not supported (yet). Keybindings from flow mode that do not conflict -with vim keybindings also work in vim mode. +The vim modes, shown as NORMAL, INSERT or VISUAL in the status bar, follow +the basic modal editing style of vim. The basics follow vim closely, but +more advanced vim functions (e.g. macros and registers) are not supported +(yet). Keybindings from flow mode that do not conflict with vim keybindings +also work in vim mode. ### Helix mode -The helix modes, shown as NOR, INS or SEL in the status bar, follow -the basic modal editing style of helix. The basics are being adapted -closely, more advanced functions (e.g. surround, macros, selections, -registers) are not supported (yet). Usual keybinding with LSPs are -used for tasks like 'go to definition', 'go to reference' and -'inline documentation' featuring inline diagnostics. Keybindings -from flow mode that do not conflict with helix keybindings also work in -helix mode. +The helix modes, shown as NOR, INS or SEL in the status bar, follow the +basic modal editing style of helix. The basics are being adapted closely, +more advanced functions (e.g. surround, macros, selections, registers) are +not supported (yet). Usual keybinding with LSPs are used for tasks like 'go +to definition', 'go to reference' and 'inline documentation' featuring +inline diagnostics. Keybindings from flow mode that do not conflict with +helix keybindings also work in helix mode. (work in progress) ## Mouse Commands -Mouse commands are NOT rebindable and are not listed in the command palette. +Mouse commands are NOT rebindable and are not listed in the command +palette. - Left Click => - Clear all cursors and selections and the place cursor at the mouse pointer + Clear all cursors and selections and the place cursor at the mouse + pointer - Double Left Click => Select word at mouse pointer @@ -176,11 +176,10 @@ Mouse commands are NOT rebindable and are not listed in the command palette. ## Configuration Configuration is stored in the standard location -`${XDG_CONFIG_HOME}/flow/config`. This is usually -`~/.config/flow/config`. +`${XDG_CONFIG_HOME}/flow/config`. This is usually `~/.config/flow/config`. -The default configuration will be written the first time -Flow Control is started and looks similar to this: +The default configuration will be written the first time Flow Control is +started and looks similar to this: ``` frame_rate 60 theme "default" @@ -197,23 +196,22 @@ animation_max_lag 150 Most of these options are fairly self explanatory. -`theme`, `input_mode` and `show_whitespace` are automatically -persisted when changed interactively with keybindings. +`theme`, `input_mode` and `show_whitespace` are automatically persisted +when changed interactively with keybindings. -`frame_rate` can be tuned to control the maximum number -of frames rendered. +`frame_rate` can be tuned to control the maximum number of frames rendered. -`animation_max_lag` controls the maximum amount of time allowed -for rendering scrolling animations. Set to 0 to disable scrolling -animation altogether. +`animation_max_lag` controls the maximum amount of time allowed for +rendering scrolling animations. Set to 0 to disable scrolling animation +altogether. -File types may be configured with the `Edit file type configuration` command. -You can also create a new file type by adding a new `.conf` file to the -`file_type` directory. Have a look at an existing file type to see what options -are available. +File types may be configured with the `Edit file type configuration` +command. You can also create a new file type by adding a new `.conf` file +to the `file_type` directory. Have a look at an existing file type to see +what options are available. ## Flags and options As every respectable terminal program, flow provide various invoking -options that among others, will allow you to inspect various aspects of -the running session. Feel free to run `flow --help` to explore them. +options that among others, will allow you to inspect various aspects of the +running session. Feel free to run `flow --help` to explore them. diff --git a/src/tui/status/tabs.zig b/src/tui/status/tabs.zig index 3d72f1c..2e3f320 100644 --- a/src/tui/status/tabs.zig +++ b/src/tui/status/tabs.zig @@ -296,6 +296,10 @@ pub const TabBar = struct { if (!clipped) if (tab.widget.walk(ctx, f)) return true; } + for (self.splits_list.widgets.items) |*split_widget| if (split_widget.widget.dynamic_cast(WidgetList)) |split| + for (split.widgets.items) |*widget_state| if (widget_state.widget.dynamic_cast(drop_target.ButtonType)) |_| { + if (widget_state.widget.walk(ctx, f)) return true; + }; return f(ctx, self_w); }