Loading repository data…
Loading repository data…
rdaum / repository
Ryan's Own Emacs. A buffer-oriented console text editor with a UI and default bindings that copies GNU Emacs
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
A minimalistic text editor in the spirit of the Emacs family of editors, built in Rust.
This editor follows the Emacs tradition in three key ways: (a) it's buffer-oriented rather than file-oriented, (b) it uses the default GNU Emacs keybinding set, and (c) it's fully programmable via an embedded scripting language. Unlike the current trend toward "modal" editors, this is a direct manipulation editor and proud of it.
Roe uses Julia as its extension language (where Emacs uses Elisp). Keybindings, commands, and interactive modes can all be defined in Julia. The core editor is implemented in Rust for performance, while Julia provides the high-level customization layer.
Roe supports two rendering backends:
roe): Lightweight, runs in your terminalroe-vello): Native window with GPU-accelerated rendering via Vello/wgpuBoth renderers share the same core editor, keybindings, and Julia integration.
Keybindings are defined in Julia and can be customized in your .roe.jl configuration file. The
defaults follow GNU Emacs conventions. Use define_key("C-x C-s", "save-buffer") syntax to add or
override bindings.
C-f/b/n/p: Move right/left/down/upC-a: Beginning of lineC-e: End of lineHome/End: Beginning/end of lineM-f or C-Right: Move forward by wordM-b or C-Left: Move backward by wordM-{: Move backward by paragraphM-}: Move forward by paragraphC-v or Page Down: Page downM-v or Page Up: Page upM-Up: Page up (alternative)M-Down: Page down (alternative)C-Home: Beginning of bufferC-End: End of bufferC-x 2: Split window horizontallyC-x 3: Split window verticallyC-x o: Switch to other windowC-x 0: Delete current windowC-x 1: Delete all other windowsC-x b: Switch to another bufferC-x k: Kill (close) a bufferC-x C-f: Find fileC-x C-s: Save file<Backspace>: Delete character before cursor<Delete>: Delete character at cursor<Enter>: Insert newlineC-Space: Set mark at cursor (start region selection)C-w: Kill (cut) region between mark and cursorM-w: Copy region to kill ring without deletingC-k: Kill (cut) from cursor to end of lineC-y: Yank (paste) most recent killC-S-y: Yank from kill-ring index 0M-x: Command mode (interactive command execution)C-g: Cancel current operation (e.g., clear region selection)C-x C-c: QuitEsc: Escape# Set up Julia (downloads and configures Julia distribution)
./scripts/setup-julia.sh
# Build the project
cargo build --release
# Run terminal version
./scripts/run.sh [files...]
# Run Vello/GPU version
./scripts/run-vello.sh [files...]
Roe loads configuration from .roe.jl in the current directory on startup. Example configuration:
# Configuration is defined as a Dict named roe_config
roe_config = Dict(
# Font settings (Vello renderer only)
"font" => Dict(
"family" => "JetBrains Mono", # Any installed font
"size" => 14
),
# Color scheme (optional - defaults are used if not specified)
# "colors" => Dict(
# "background" => "#1e1e1e",
# "foreground" => "#d4d4d4",
# "selection" => "#264f78",
# "modeline" => "#007acc",
# "cursor" => "#aeafad"
# )
)
Custom keybindings can also be defined in Julia:
using Roe
# Custom keybindings
define_key("C-s", "save-buffer") # Quick save
define_key("C-q", "quit") # Quick quit
define_key("F5", "my-build-command") # Custom command
# Define a custom command
define_command("insert-date", "Insert current date") do ctx
InsertAction(ctx.cursor_pos, string(Dates.today()))
end
See jl/keybindings.jl for the full list of default keybindings.
Roe is built with a clean separation of concerns:
Key concepts:
ropey for efficient editingThis is a work-in-progress editor. Currently implemented:
define_key()define_command()This editor is very much a work-in-progress and almost certainly has bugs. It also probably won't meet your real editing needs yet. However, feedback and bug reports are very welcome!
If you encounter issues or have suggestions, please file them in the project's issue tracker. Even if the editor isn't ready for daily use, your input helps guide development priorities and catch problems early.
Please report: