Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

denary-0.0.1.tar.gz (131.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

denary-0.0.1-py3-none-any.whl (140.6 kB view details)

Uploaded Python 3

File details

Details for the file denary-0.0.1.tar.gz.

File metadata

  • Download URL: denary-0.0.1.tar.gz
  • Upload date:
  • Size: 131.5 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

Hashes for denary-0.0.1.tar.gz
Algorithm Hash digest
SHA256 eb48f994048c69b4c6ff076372422654451cc71b93c8bbb9fe973bc0b7f7337e
MD5 7ecc5dcdb9a9a73e0d37d83673355452
BLAKE2b-256 853969d4bd43d7501167f7ea7d7cdeaf6124b0dd2ebba395139836c9ec591d58

See more details on using hashes here.

File details

Details for the file denary-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: denary-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 140.6 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

Hashes for denary-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ed700144532815b33fd7256084b82a31bc65d75542b510a3cbc7b1417e4e8b7b
MD5 a88f00a5d4c5961f36e93e750619177a
BLAKE2b-256 26d71c7add50e6d022b11aa5d5783e56399e423bbaef3b336576bb40117b50f2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page