A curses-based text editor with syntax highlighting
Project description
Editor Documentation
,gggggggggggg,
dP"""88""""""Y8b,
Yb, 88 `8b,
`" 88 `8b
88 Y8
88 d8 ,ggg, ,ggg,,ggg, ,gggg,gg ,gggggg, gg gg
88 ,8P i8" "8i ,8" "8P" "8, dP" "Y8I dP""""8I I8 8I
88 ,8P' I8, ,8I I8 8I 8I i8' ,8I ,8' 8I I8, ,8I
88______,dP' `YbadP' ,dP 8I Yb,,d8, ,d8b,,dP Y8,,d8b, ,d8I
888888888P" 888P"Y8888P' 8I `Y8P"Y8888P"`Y88P `Y8P""Y88P"888
,d8I'
,dP'8I
,8" 8I
I8 8I
`8, ,8I
`Y8P"
A modal terminal editor built on curses with a command-driven, event-based architecture and chunked text storage.
Includes syntax highlighting, multi-buffer management, registers and markers, undo/redo history, Git integration, async LSP support, subprocess execution, and HTTP requests.
Key Bindings
Core Editing
| Shortcut | Action |
|---|---|
| Ctrl-S | Save file |
| Ctrl-Q | Quit editor |
| Ctrl-Y | Copy |
| Ctrl-X | Cut |
| Ctrl-U | Paste |
| Ctrl-E | Undo |
| Ctrl-O | Open file |
| Ctrl-D | Delete buffer |
| Ctrl-/ | Search files |
| Ctrl-Z | Send editor to background |
Buffer / File Management
| Shortcut | Action |
|---|---|
| Ctrl-L | Buffer picker |
| Ctrl-P | Previous buffer |
| Ctrl-N | Next buffer |
| Ctrl-W | File explorer |
Navigation & Searching
| Shortcut | Action |
|---|---|
| Ctrl-F | Find |
| Ctrl-G | Go to line |
| Ctrl-Space | Show suggestions |
Vim-Style Navigation
| Shortcut | Action |
|---|---|
| Alt-H / J / K / L | Move cursor (vim style) |
| Alt-; | Toggle selection mode |
| Alt-I / Alt-O | Jump between punctuation |
| Alt-9 / Alt-0 | Jump to start/end of line |
| Alt-↑ / Alt-↓ | Scroll up/down |
| Alt-U | Paste system clipboard |
| Alt-N | Repeat last search |
| Alt-P | Reverse search repeat |
| Alt-M | Search word under cursor |
| Alt-W | File search |
Normal Mode Marks & LSP
| Shortcut | Action |
|---|---|
| m | Set marker |
| ' | Save and use clipboard registers |
| ` | Go to last buffer |
| K | Show LSP definition |
| q | Show line diagnostics |
| ; | Go to LSP definition |
Commands
Buffer Actions
| Command | Description |
|---|---|
h / help |
Show help |
q / quit |
Exit editor |
w / write |
Save current buffer |
ls / list |
List open buffers |
open |
Open a file |
bufnew |
Create new buffer |
nbuf / nextbuf / next / n |
Next buffer |
pbuf / prevbuf / prev / p |
Previous buffer |
delbuf / d |
Delete buffer |
ff |
File search |
ffr |
New file search |
fb |
Buffer picker |
ex |
File explorer |
UI & Behavior
| Command | Description |
|---|---|
themes |
Change editor theme |
ln |
Toggle line numbers |
gch |
Toggle Git highlight |
scrolloff <n> |
Set scroll offset |
Markers
| Command | Description |
|---|---|
m / marker |
Add local/global marker |
pm |
Pick marker |
dm |
Delete markers in this buffer |
dgm |
Delete global markers |
dpm |
Delete specific marker |
dam |
Delete all markers |
Text Utilities
| Command | Description |
|---|---|
clear_registers |
Reset registers |
reset_h_matches |
Reset highlighting |
replace |
Replace text |
comment |
Toggle comment |
upper / lower / capitalize |
Change case |
filetype <type> |
Set syntax mode |
Utilities
| Command | Description |
|---|---|
align |
Align text by a delimiter (e.g. =, :, ,, ` |
column_edit |
Insert, replace, or delete text within column ranges per line |
date |
Copy date |
datetime |
Copy current date & time |
file_path |
Copy current file path |
json_format |
Format JSON in selection or entire file |
number_lines |
Add line numbers to each line |
rejoin |
Split and rejoin selection or entire file using a delimiter |
remove_empty_lines |
Remove blank or whitespace-only lines |
reverse_lines |
Reverse the order of lines |
shuffle_lines |
Randomly shuffle lines |
slugify |
Convert text to URL-friendly slug format |
sort / sort_r |
Sort selection or entire file by lines (normal or reverse) |
trim / trim_l / trim_r |
Trim whitespace (both, left, or right) per line |
unique_lines / dedup |
Remove duplicate lines (keep first occurrence) |
uuid |
Copy random UUID |
wrap |
Wrap text to a specified width |
Git Commands
| Command | Description |
|---|---|
git_status |
Show Git status |
git_diff |
Show diff |
git_commit_all |
Commit all |
git_blame |
Show blame |
git_log |
Show history |
git_refresh |
Refresh state |
git_hunk |
Show previous version of changed code |
LSP Commands
| Command | Description |
|---|---|
lsp_diagnostics |
Show buffer diagnostics |
lsp_hover |
Show hover info |
lsp_definition |
Go to definition |
lsp_refresh |
Restart LSP for buffer |
lsp_line_diagnostics |
Show diagnostics for current line |
lsp_clear_diagnostics |
Clear diagnostics |
clear_line_diag / clrld |
Clear diagnostics for current line |
AI Commands
| Command | Description |
|---|---|
ai |
Send a custom instruction to the AI |
ai_gen |
Generate code at the cursor |
ai_review |
Review Git diff for issues |
ai_commit_message |
Generate a commit message from Git diff |
ai_get |
Retrieve AI result at the cursor |
ai_show |
Show AI completion picker |
ai_remove |
Cancel/remove AI completion at the cursor |
change_ai_model |
Change the active AI model |
HTTP Request Execution
Select a block and run:
| Command | Description |
|---|---|
req |
Make http request |
Request Format
<HTTP_METHOD> <URL>
<Header>: <Value>
<Header>: <Value>
<Optional Body>
Examples
GET:
GET https://jsonplaceholder.typicode.com/todos/1
Accept: application/json
POST:
POST https://jsonplaceholder.typicode.com/posts
Content-Type: application/json
{
"title": "Hello world",
"body": "Testing request from editor",
"userId": 1
}
Regex Replacement
Perform regex-based find and replace in the current buffer.
| Command | Description |
|---|---|
replace |
Run a regex search and replace |
Capture Groups
Parentheses create capture groups that can be reused in the replacement.
| Syntax | Meaning |
|---|---|
\0 |
Entire match |
\1 |
First group |
\2 |
Second group |
\3 |
Third group |
Example
Find
(\w+)\s+(\w+)
Replace
\2 \1
Result
hello world → world hello
Named Capture Groups
Groups can also be named.
(?P<name>pattern)
Named groups are referenced in the replacement using:
\g<name>
Example
Find
(?P<first>\w+)\s+(?P<last>\w+)
Replace
\g<last> \g<first>
Result
john doe → doe john
Case Transformations
The replacement string supports case modifiers.
| Syntax | Effect |
|---|---|
\U |
Uppercase until \E |
\L |
Lowercase until \E |
\u |
Uppercase next character |
\l |
Lowercase next character |
\E |
End transformation |
Example
Find
select
Replace
\U\0\E
Result
select → SELECT
Word Boundaries
\b matches the boundary between a word and a non-word character.
Example
Find
\bselect\b
Matches
select
Does not match
selected
Example: SQL Keyword Formatting
Find
\b(select|from|where|join|group\s+by|order\s+by)\b
Replace
\U\0\E
Result
select name from users where id = 1
↓
SELECT name FROM users WHERE id = 1
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file denary-0.0.3.tar.gz.
File metadata
- Download URL: denary-0.0.3.tar.gz
- Upload date:
- Size: 131.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.2 CPython/3.13.0 Linux/5.15.167.4-microsoft-standard-WSL2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5495bc383c631e5e98908398b092976de0b61a18ce4c987ac6e2547e83a2b6c2
|
|
| MD5 |
b23fe48cb0004e5e440baf4bad48c07a
|
|
| BLAKE2b-256 |
c3e5bffc5d72087d205e39e320f063a0c7aacbbbfabf43c34793a1be5f564e83
|
File details
Details for the file denary-0.0.3-py3-none-any.whl.
File metadata
- Download URL: denary-0.0.3-py3-none-any.whl
- Upload date:
- Size: 140.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.2 CPython/3.13.0 Linux/5.15.167.4-microsoft-standard-WSL2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
610465250f1db361237e651b0d2c84d83b4642d1a696b4778b95d45778426098
|
|
| MD5 |
28b45454cc542ba88f08df40b6dff21d
|
|
| BLAKE2b-256 |
550df19e189d1b512415eb820cbe3fb91e9366c0362268bb764f5ac807337c11
|