Flow Control: a programmer's text editor https://flow-control.dev
Find a file
2024-03-01 11:50:25 +01:00
src fix: mark missing commands on home screen as work-in-progress 2024-02-29 17:35:16 +01:00
test Initial public release 2024-02-29 00:00:15 +01:00
.gitignore Initial public release 2024-02-29 00:00:15 +01:00
build.zig fix: move mkdir .cache/cdb step from zig wrapper to build.zig 2024-03-01 11:50:25 +01:00
build.zig.version Initial public release 2024-02-29 00:00:15 +01:00
build.zig.zon fix: minor rendering issues caused by notcurses egc overrun 2024-02-29 16:47:11 +01:00
help.md docs: add a note about terminal key bindings 2024-02-29 18:30:27 +01:00
LICENSE Initial commit 2024-02-25 21:11:11 +01:00
README.md docs: add a note about terminal key bindings 2024-02-29 18:30:27 +01:00
zig fix: move mkdir .cache/cdb step from zig wrapper to build.zig 2024-03-01 11:50:25 +01:00

Flow Control: a programmer's text editor

This is my Zig text editor. It is very much a work-in-progress, but far enough along that I am daily driving it.

https://github.com/neurocyte/flow/assets/1552770/97aae817-c209-4c08-bc65-0a0bf1f2d4c6

Building

Build with the provided zig wrapper:

./zig build -Doptimize=ReleaseFast

The zig wrapper just fetches a known good version of zig nightly and places it in the .cache directory. Or use your own version of zig. Be sure to use a version at least as high as the version used be the zig wrapper. It's stored in build.zig.version.

Also, make sure your system meets the requirements listed below.

Run with:

zig-out/bin/flow

Place it in your path for convenient access.

See --help for full command line.

Terminal configuration

Kitty, Ghostty and most other terminals have default keybindings that conflict with common editor commands. I highly recommend rebinding them to keys that are not generally used anywhere else.

For Kitty rebinding kitty_mod is usually enough:

kitty_mod ctrl+alt

For Ghostty each conflicting binding has to be reconfigured individually.

Requirements

  • A modern terminal with 24bit color and kitty keyboard protocol support (kitty and ghostty are the only recommended terminals at this time)
  • NerdFonts support
  • Linux or MacOS (help porting to *BSD or Windows is welcome!)
  • A UTF-8 locale (very important!)

Features

  • fast TUI interface. no user interaction should take longer than one frame (6ms) (even debug builds)
  • tree sitter based syntax highlighting
  • multi cursor editing support
  • first class mouse support (yes, even with a scrollbar that actually works properly!)
  • vscode compatible keybindings (thanks to kitty keyboard protocol)
  • vim compatible keybindings (at least the basics, more to come)
  • good unicode support
  • hybrid rope/piece-table buffer for fast loading, saving and editing with hundreds of cursors
  • theme support (compatible with vscode themes via the flow-themes project)
  • infinite undo/redo (at least until you run out of ram)
  • stuff I've forgotten to mention...

Features in progress

  • LSP support for linting and navigating
  • find in files
  • multi tty support (shared editor sessions across multiple ttys)
  • command palette
  • completion UI
  • persistent undo/redo

Features planned for the future

  • multi host editing
  • multi user editing