diff --git a/README.md b/README.md index 023f065..2ee9245 100644 --- a/README.md +++ b/README.md @@ -1,89 +1,57 @@ # Flow Control: a programmer's text editor -This is my Zig text editor. It is under active development, but very stable -and is my daily driver for almost everything. +This is my Zig text editor. It is under active development, but usually stable +and is my daily driver for most things coding related. [![Announcement](https://img.youtube.com/vi/iwPg3sIxMGw/maxresdefault.jpg)](https://www.youtube.com/watch?v=iwPg3sIxMGw) - -# Features - -- **Lightning Fast** TUI with ≤6ms frame times, **low latency** input handling - and smooth **animated scrolling** -- Intuitive UI with **tabs**, **scrollbars** and **palettes** with full - **mouse** support for all UI elements -- Support for more than **70 programming languages**, **zero - configuration** needed, via **tree-sitter** powered syntax highlighting -- **Language Server Protocol** pre configured support for most language servers -- Powerful **multi-cursor** editing and integrated **clipboard history** -- Powerful configurable keybinding system that supports **modal** and - **non-modal** editing styles -- Multiple pre-configured **keybinding modes** - - Flow Control - GUI IDE style bindings (similar to vscode) - - Emacs - - Vim - - Helix - - User created -- Hybrid rope/piece-table buffer system, edit **very large files** with - **thousands of cursors** -- Infinite **undo** (at least until you run out of ram) -- Full **unicode** support, including support for the kitty text sizing protocol -- Plenty of **themes** included and support for vscode themes via the flow-themes project -- Runs on **Linux, FreeBSD, MacOS, Windows and Android** (under termux) with - easy **cross-compilation** to all supported targets - - # Requirements - -- A modern terminal with **24bit color** and, ideally, **kitty keyboard - protocol** support. **Kitty**, **Foot** and **Ghostty** are the recommended - terminals at this time. **Zellij** also works well. Most other terminals will - work, but likely with reduced functionality. -- **NerdFont** support. Either via terminal font fallback or a patched font. -- A **UTF-8** locale - - -# Roadmap - -See our [devlog](/devlog/2025) for on-going updates from the development team. - -## In Development - -- LSP completion support -- Persistent undo/redo -- File watcher integration - -## Future - -- Collaborative editing -- Plugin system -- Multi-terminal sessions - +- A modern terminal with 24bit color and, ideally, kitty keyboard protocol support. Kitty, + Foot and Ghostty are the only recommended terminals at this time. Most other terminals + will work, but with reduced functionality. +- NerdFont support. Either via terminal font fallback or a patched font. +- Linux, MacOS, Windows, Android (Termux) or FreeBSD. +- A UTF-8 locale # Download / Install -There is an [installation guide](https://flow-control.dev/installation) on the -main website, and source, release and nightly build binary -[downloads](https://flow-control.dev/downloads). +Binary release builds are found here: [neurocyte/flow/releases](https://github.com/neurocyte/flow/releases/latest) + +Fetch and install the latest release to `/usr/local/bin` with the installation helper script: + +```shell +curl -fsSL https://flow-control.dev/install | sh +``` + +Nightly binary builds are found here: [neurocyte/flow-nightly/releases](https://github.com/neurocyte/flow-nightly/releases/latest) + +Install latest nightly build and (optionally) specify the installation destination: + +```shell +curl -fsSL https://flow-control.dev/install | sh -s -- --nightly --dest ~/.local/bin +``` + +See all avalable options for the installer script: + +```shell +curl -fsSL https://flow-control.dev/install | sh -s -- --help +``` Or check your favorite local system package repository. [![Packaging status](https://repology.org/badge/vertical-allrepos/flow-control.svg)](https://repology.org/project/flow-control/versions) - # Building Make sure your system meets the requirements listed above. -Flow builds with zig 0.15.2 at this time. Build with: +Flow builds with zig 0.15.1 at this time. Build with: ```shell zig build -Doptimize=ReleaseSafe ``` -Zig will by default build a binary optimized for your specific CPU. If you get -illegal instruction errors add `-Dcpu=baseline` to the build command to produce -a binary with generic CPU support. +Zig will by default build a binary optimized for your specific CPU. If you get illegal instruction errors add `-Dcpu=baseline` to the build command to produce a binary with generic CPU support. Thanks to Zig you may also cross-compile from any host to pretty much any @@ -97,20 +65,15 @@ zig build -Doptimize=ReleaseSafe -Dtarget=aarch64-linux-musl --prefix zig-out/aa When cross-compiling zig will build a binary with generic CPU support. - -The output binary is: - -``` -zig-out/bin/flow -``` - -It is statically built (by default) and contains all the required tree-sitter parsers -and queries. No additional runtime files are required. - +[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/neurocyte/flow) # Running Flow Control -The Flow Control binary is called `flow`. +The binary is: + +```shell +zig-out/bin/flow +``` Place it in your path for convenient access: @@ -124,8 +87,8 @@ Or if you prefer, let zig install it in your home directory: zig build -Doptimize=ReleaseSafe --prefix ~/.local ``` -Flow Control is a single statically linked binary. No further runtime files are -required. You may install it on another system by simply copying the binary. +Flow Control is a single statically linked binary. No further runtime files are required. +You may install it on another system by simply copying the binary. ```shell scp zig-out/bin/flow root@otherhost:/usr/local/bin @@ -162,51 +125,25 @@ Show supported language names with `--list-languages`. See `flow --help` for the full list of command line options. - -# Documentation - -## User manual - -A basic user manual is available inside flow. You can open it with the -`Open help` command (F1). - -It is also available in the website [documentation]{https://flow-control.dev/docs/} -section. - -## Development Resources - -Additional developer resources can be found on the Flow Control website at -[flow-control.dev/docs](https://flow-control.dev/docs/). - -There is also an AI generated developer guide at -[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/neurocyte/flow). -Accuracy may vary. Check details against the referenced source code. - - # Configuration Configuration is mostly dynamically maintained with various commands in the UI. -It is stored under the standard user configuration path. Usually -`~/.config/flow` on Linux. %APPDATA%\Roaming\flow on Windows. Somewhere magical -on MacOS. +It is stored under the standard user configuration path. Usually `~/.config/flow` +on Linux. %APPDATA%\Roaming\flow on Windows. Somewhere magical on MacOS. There are commands to open the various configuration files, so you don't have to -manually find them. Look for commands starting with `Edit` in the command -palette. +manually find them. Look for commands starting with `Edit` in the command palette. -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. Logs, traces and per-project most recently used file lists are stored in the standard user application state directory. Usually `~/.local/state/flow` on Linux and %APPDATA%\Roaming\flow on Windows. - # Key bindings and commands -Press `F1` to view the online manual. Press `F4` to switch the current keybinding mode. (flow, vim, emacs, etc.) Press `ctrl+shift+p` or `alt+x` to show the command palette. Press `ctrl+F2` to see a full list of all current keybindings and commands. @@ -216,7 +153,6 @@ file and open it for editing. Save your customized keybinds under a new name in the same directory to create an entirely new keybinding mode. Keybinding changes will take effect on restart. - # Terminal configuration Kitty, Ghostty and most other terminals have default keybindings that conflict @@ -230,10 +166,36 @@ kitty_mod ctrl+alt For Ghostty each conflicting binding has to be reconfigured individually. +# Features +- fast TUI interface. no user interaction should take longer than one frame (6ms) (even debug builds) +- tree sitter based syntax highlighting +- linting (diagnostics) and code navigation (goto definition) via language server +- multi cursor editing support +- first class mouse support (yes, even with a scrollbar that actually works properly!) (Windows included) +- vscode compatible keybindings (thanks to kitty keyboard protocol) +- vim compatible keybindings (the standard vimtutor bindings, more on request) +- user configurable keybindings +- excellent unicode support including 2027 mode +- 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) +- find in files +- command palette +- stuff I've forgotten to mention... + +# Features in progress (aka, the road to 1.0) +- completion UI/LSP support for completion +- persistent undo/redo +- file watcher for auto reload + +# Features planned for the future +- multi tty support (shared editor sessions across multiple ttys) +- multi user editing +- multi host editing # Community ![Discord](https://img.shields.io/discord/1214308467553341470) -Join our [Discord](https://discord.com/invite/4wvteUPphx) server or use the -discussions section here on GitHub to meet with other Flow users! +Join our [Discord](https://discord.com/invite/4wvteUPphx) server or use the discussions section here on GitHub +to meet with other Flow users! diff --git a/build.zig.zon b/build.zig.zon index e2c8c0b..d3b9973 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -6,8 +6,8 @@ .dependencies = .{ .syntax = .{ - .url = "git+https://github.com/neurocyte/flow-syntax?ref=master#9106b13b4c98b145229ad643e7869f29c7b0816b", - .hash = "flow_syntax-0.1.0-X8jOoZQTAQCV2bjyceUHrRl_iu41imzTDLGT5R-XwT_9", + .url = "git+https://github.com/neurocyte/flow-syntax?ref=master#45d79d41562f3d9dcc53c7e2c38d7d829a2b2834", + .hash = "flow_syntax-0.1.0-X8jOoY0TAQDl5k1-sO2KfcxrECQAsjwocoRmh3sbwEoi", }, .flags = .{ .url = "git+https://github.com/neurocyte/flags?ref=main#984b27948da3e4e40a253f76c85b51ec1a9ada11",