Skip to main content

Terminal Markdown word processor with live inline styling and spell check

Project description

Essa Editor

Essa Editor

A terminal Markdown word processor. Single Python file, pure-Python dependencies, works in a bare TTY or over SSH.

        _.._
       /   _ `.
      /  /   `.\
     |  |      `>_
  > ~~~~~~~~~~~~~~~~~~
    E S S A   E D I T O R

Features

  • Live inline styling (WYSIWYG): **bold** renders bold, *italic* renders italic, <u>underline</u> (or ++underline++) renders underlined — as you type. Markers stay visible but dimmed, so cursor positions always map 1:1 to the file on disk. Headers, lists, blockquotes, inline/fenced code, links, and ~~strikethrough~~ are also styled.
  • Spell check: misspellings get a red underline. F7 opens a suggestion popup (Enter replaces, a adds the word to a personal dictionary), F8 jumps to the next misspelling, F3 toggles checking. Code spans, fenced blocks, URLs, and ALL-CAPS acronyms are skipped.
  • Toggleable mouse (F2): ON = click to place the cursor, drag to select, wheel to scroll. OFF = the editor releases the mouse so your terminal's native selection and copy/paste work.
  • 256-color theme, line numbers, current-line highlight, soft wrap (F6), incremental search (Ctrl+F), undo, cut/copy/paste.

Install

Dependencies are prompt_toolkit and pyspellchecker (both pure Python, no compilation). On Debian/Ubuntu the system Python is externally managed, so use a venv:

python3 -m venv ~/.local/share/essaedit-venv
~/.local/share/essaedit-venv/bin/pip install -r requirements.txt

Then make it callable. For fish:

alias --save essa "~/.local/share/essaedit-venv/bin/python3 /path/to/essaedit.py"

For bash/zsh, add to your ~/.bashrc / ~/.zshrc:

alias essa='~/.local/share/essaedit-venv/bin/python3 /path/to/essaedit.py'

Or just chmod +x essaedit.py and point the shebang at the venv python.

Optional: pip install pyperclip lets Ctrl+C/X/V use the system clipboard instead of the internal one. This needs a graphical session — apt install xclip on X11, or wl-clipboard on Wayland. On a bare TTY (no X/Wayland) there's no system clipboard; the internal clipboard works fine there.

Usage

essa notes.md          # opens (or creates on save)
essa --no-mouse        # start with mouse capture off
essa --no-spell        # start with spell check off

Keys

Key Action
Ctrl+S Save (prompts for a name if untitled)
Ctrl+O Open file
Ctrl+N New buffer
Ctrl+Q Quit (asks about unsaved changes)
Ctrl+B Bold — wraps selection in **, or inserts markers
Alt+I Italic (Ctrl+I is indistinguishable from Tab in terminals)
Ctrl+U Underline (<u>…</u>)
Ctrl+Z Undo
Ctrl+X / C / V Cut / Copy / Paste
Ctrl+F Search (Enter = next match, Esc = cancel)
Tab Insert 4 spaces
F1 Help overlay
F2 Toggle mouse capture
F3 Toggle spell check
F6 Toggle soft wrap
F7 Spelling suggestions for word under cursor
F8 Jump to next misspelled word

Formatting keys toggle: select already-wrapped text (with or without the markers) and press the key again to unwrap.

Notes

  • The personal dictionary lives at ~/.config/essaedit/dictionary.txt, one word per line. Edit it freely.
  • Underline isn't part of standard Markdown; <u> tags are the portable convention and survive most renderers. ++text++ is also styled for editors that use that extension.
  • Inline markers must open and close on the same line to render (line-based lexer).
  • snake_case_identifiers are not treated as italics — underscore emphasis only triggers at word boundaries.
  • Files are read and written as UTF-8.

License

GNU General Public License v3.0 or later. Copyright (C) 2026 Colin Lewis.

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

essa_editor-1.0.0.tar.gz (31.2 kB view details)

Uploaded Source

Built Distribution

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

essa_editor-1.0.0-py3-none-any.whl (30.1 kB view details)

Uploaded Python 3

File details

Details for the file essa_editor-1.0.0.tar.gz.

File metadata

  • Download URL: essa_editor-1.0.0.tar.gz
  • Upload date:
  • Size: 31.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for essa_editor-1.0.0.tar.gz
Algorithm Hash digest
SHA256 6b97b92f8727a0f35bd75bad26c58adbcb8ec3de78a1b09ebe66845467f97b64
MD5 44563b7a16cad774ae984bfc9f10d074
BLAKE2b-256 a0ac38c37983a370c68482e147b0424de459eed46eca2eb265c7d8e7b243226a

See more details on using hashes here.

File details

Details for the file essa_editor-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: essa_editor-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 30.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for essa_editor-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0123488b2464ec43ce943c8df75c5158b2a83c5e2176750694345ff397d47d7f
MD5 708c3742e1899ea16cb1da66e5e0bdbe
BLAKE2b-256 4fe8549aef95d33f45c960a3e1a6bd0fa0749997d353b9a1085a327ef57440f2

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