Merge remote-tracking branch 'plyght/master'
Also, make some tweaks and fixes
This commit is contained in:
commit
5592b77ab1
1 changed files with 61 additions and 101 deletions
|
@ -8,9 +8,18 @@
|
||||||
|
|
||||||
This is a programmer's text editor. It is under active development, but usually stable.
|
This is a programmer's text editor. It is under active development, but usually stable.
|
||||||
|
|
||||||
[Demo]($video.siteAsset('video/flow-control.mp4').controls(false))
|
[]($video.siteAsset('video/flow-control.mp4').controls(true))
|
||||||
|
|
||||||
# Requirements
|
## 🚀 Features
|
||||||
|
- **Lightning Fast** TUI with ≤6ms response times
|
||||||
|
- **Tree-sitter** powered syntax highlighting
|
||||||
|
- **Language Server Protocol** pre configured support for most language servers
|
||||||
|
- Multi-cursor editing & mouse support
|
||||||
|
- Cross-platform (Linux/macOS/Windows/Android)
|
||||||
|
- VSCode/Vim keybindings + custom schemes
|
||||||
|
- Hybrid rope/piece-table buffer system
|
||||||
|
|
||||||
|
## Requirements
|
||||||
- A modern terminal with 24bit color and, ideally, kitty keyboard protocol support. Kitty,
|
- 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
|
Foot and Ghostty are the only recommended terminals at this time. Most other terminals
|
||||||
will work, but with reduced functionality.
|
will work, but with reduced functionality.
|
||||||
|
@ -18,19 +27,26 @@ This is a programmer's text editor. It is under active development, but usually
|
||||||
- Linux, MacOS, Windows, Android (Termux) or FreeBSD.
|
- Linux, MacOS, Windows, Android (Termux) or FreeBSD.
|
||||||
- A UTF-8 locale
|
- A UTF-8 locale
|
||||||
|
|
||||||
# Download
|
## 📦 Installation
|
||||||
|
|
||||||
Binary release builds are found here: [neurocyte/flow/releases](https://github.com/neurocyte/flow/releases)
|
### Installer
|
||||||
|
``` curl -fsSL https://www.flow-editor.dev/install | sh ```
|
||||||
|
|
||||||
Nightly binary builds are found here: [neurocyte/flow-nightly/releases](https://github.com/neurocyte/flow-nightly/releases)
|
### Prebuilt Binaries
|
||||||
|
- Stable: [Releases](https://github.com/neurocyte/flow/releases)
|
||||||
|
- Nightly: [Nightly Builds](https://github.com/neurocyte/flow-nightly/releases)
|
||||||
|
|
||||||
Or check your favorite local system package repository.
|
Or check your favorite local system package repository.
|
||||||
|
|
||||||
# Building from source
|
### Build from Source
|
||||||
|
```bash
|
||||||
|
# Basic build
|
||||||
|
zig build -Doptimize=ReleaseSafe
|
||||||
|
|
||||||
See the github page [neurocyte/flow](https://github.com/neurocyte/flow) for instructions.
|
# Cross-compile examples
|
||||||
|
zig build -Dtarget=x86_64-windows --prefix zig-out/win64
|
||||||
# Running Flow Control
|
zig build -Dtarget=aarch64-linux-musl --prefix zig-out/arm-linux
|
||||||
|
```
|
||||||
|
|
||||||
The binary is:
|
The binary is:
|
||||||
|
|
||||||
|
@ -38,116 +54,60 @@ The binary is:
|
||||||
zig-out/bin/flow
|
zig-out/bin/flow
|
||||||
```
|
```
|
||||||
|
|
||||||
Place it in your path for convenient access:
|
It is statically built (by default) and contains all the required tree-sitter parsers
|
||||||
|
and queries. No additional runtime files are required. Place it in your path for convenient
|
||||||
|
access.
|
||||||
|
|
||||||
```
|
## Configuration
|
||||||
sudo cp zig-out/bin/flow /usr/local/bin
|
|
||||||
```
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
```
|
|
||||||
scp zig-out/bin/flow root@otherhost:/usr/local/bin
|
|
||||||
```
|
|
||||||
|
|
||||||
Configuration is mostly dynamically maintained with various commands in the UI.
|
Configuration is mostly dynamically maintained with various commands in the UI.
|
||||||
It is stored under the standard user configuration path. Usually `~/.config/flow`
|
It is stored under the standard user configuration path. Usually `~/.config/flow`
|
||||||
on Linux. %APPDATA%\Roaming\flow on Windows. Somewhere magical on MacOS
|
on Linux. %APPDATA%\Roaming\flow on Windows.
|
||||||
|
|
||||||
Logs, traces and per-project most recently used file lists are stored in the
|
Logs, traces and per-project most recently used file lists are stored in the
|
||||||
standard user application state directory. Usually `~/.local/state/flow` on
|
standard user application state directory. Usually `~/.local/state/flow` on
|
||||||
Linux and %APPDATA%\Roaming\flow on Windows.
|
Linux and %APPDATA%\Roaming\flow on Windows.
|
||||||
|
|
||||||
Files to load may be specifed on the command line:
|
|
||||||
|
|
||||||
```
|
|
||||||
flow fileA.zig fileB.zig
|
|
||||||
```
|
|
||||||
|
|
||||||
The last file will be opened and the previous files will be placed in reverse
|
|
||||||
order at the top of the recent files list. Switch to recent files with Ctrl-e.
|
|
||||||
|
|
||||||
Common target line specifiers are supported too:
|
|
||||||
|
|
||||||
```
|
|
||||||
flow file.txt:123
|
|
||||||
```
|
|
||||||
|
|
||||||
Or Vim style:
|
|
||||||
|
|
||||||
```
|
|
||||||
flow file.txt +123
|
|
||||||
```
|
|
||||||
|
|
||||||
Use the --language option to force the file type of a file:
|
|
||||||
|
|
||||||
```
|
|
||||||
flow --language bash ~/.bash_profile
|
|
||||||
```
|
|
||||||
|
|
||||||
Show supported language names with `--list-languages`.
|
|
||||||
|
|
||||||
See `flow --help` for the full list of command line options.
|
|
||||||
|
|
||||||
# Key bindings and commands
|
|
||||||
|
|
||||||
Press `F2` 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.
|
|
||||||
|
|
||||||
Run the `Edit keybindings` command to save the current keybinding mode to a
|
|
||||||
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
|
Kitty, Ghostty and most other terminals have default keybindings that conflict
|
||||||
with common editor commands. I highly recommend rebinding them to keys that are
|
with common editor commands. We highly recommend rebinding them to keys that are
|
||||||
not generally used anywhere else.
|
not generally used inside TUI applications.
|
||||||
|
|
||||||
For Kitty rebinding `kitty_mod` is usually enough:
|
For Kitty rebinding `kitty_mod` is usually enough:
|
||||||
```
|
```
|
||||||
kitty_mod ctrl+alt
|
kitty_mod ctrl+alt
|
||||||
```
|
```
|
||||||
|
|
||||||
For Ghostty each conflicting binding has to be reconfigured individually.
|
## 🛠️ Basic Usage
|
||||||
|
```bash
|
||||||
|
flow file.zig:42 # Open at line 42
|
||||||
|
flow --language zig CMakeLists.txt # Force file type
|
||||||
|
flow --list-languages # Show all supported languages
|
||||||
|
flow --help # Full list of command line options
|
||||||
|
```
|
||||||
|
|
||||||
# Features
|
## ⌨️ Key Controls
|
||||||
- fast TUI interface. no user interaction should take longer than one frame (6ms) (even debug builds)
|
| Command | Action |
|
||||||
- tree sitter based syntax highlighting
|
|--------------------|----------------------|
|
||||||
- linting (diagnostics) and code navigation (goto definition) via language server
|
| `F4` | Switch input mode |
|
||||||
- multi cursor editing support
|
| `Ctrl+Shift+P` | Command palette |
|
||||||
- first class mouse support (yes, even with a scrollbar that actually works properly!) (Windows included)
|
| `Ctrl+F2` | View all keybindings |
|
||||||
- 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)
|
Run the `Edit keybindings` command to save the current keybinding mode to a
|
||||||
- completion UI/LSP support for completion
|
file and open it for editing. Save your customized keybinds under a new name
|
||||||
- persistent undo/redo
|
in the same directory to create an entirely new keybinding mode. Keybinding
|
||||||
- file watcher for auto reload
|
changes will take effect on restart.
|
||||||
|
|
||||||
# Features planned for the future
|
|
||||||
- multi tty support (shared editor sessions across multiple ttys)
|
|
||||||
- multi user editing
|
|
||||||
- multi host editing
|
|
||||||
|
|
||||||
# Community
|
## 🛣️ Roadmap
|
||||||
|
**In Development**:
|
||||||
|
- LSP completion support
|
||||||
|
- Persistent undo/redo
|
||||||
|
- File watcher integration
|
||||||
|
|
||||||
Join our [Discord](https://discord.com/invite/4wvteUPphx) server or use the discussions section on GitHub
|
**Future**:
|
||||||
to meet with other Flow users!
|
- Collaborative editing
|
||||||
|
- Plugin system
|
||||||
|
- Multi-terminal sessions
|
||||||
|
|
||||||
|
## 💬 Community
|
||||||
|
Join our [Discord server](https://discord.com/invite/4wvteUPphx) or discuss on [GitHub Discussions](https://github.com/neurocyte/flow/discussions)
|
||||||
|
|
Loading…
Add table
Reference in a new issue