Skip to main content

A terminal IDE with emacs keybindings, built on Textual — editor, file tree, markdown preview, and a real PTY terminal

Project description

candat

A terminal IDE with emacs keybindings, built on Textual.

Install

From PyPI, as a standalone tool (recommended — gives you a global candat command in its own isolated environment):

uv tool install candat
# or, with pipx (needs Python >= 3.10):
pipx install candat

Or with plain pip into the environment of your choice: pip install candat. To try it once without installing anything permanently: uvx candat.

The development version installs straight from GitHub:

uv tool install git+https://github.com/kavonrtep/candat

Requires Python >= 3.10 and Linux.

Run

candat [FILE|DIR ...]

Passing a directory sets the file-tree root; files are opened in buffers.

Keys (so far)

Key Action
C-x C-f find file (opens new file if it doesn't exist)
C-x C-s save buffer
C-x C-w write buffer to another file
C-x C-q toggle read-only (status bar shows %%)
C-x C-r open a file read-only
C-x k kill buffer
C-x b buffer list (Enter switches; next buffer preselected)
C-x o switch focus between tree and editor
C-x C-c quit (confirms if unsaved buffers)
C-x C-x exchange point and mark
C-x h mark whole buffer
C-x u, C-/, C-z undo
C-f C-b C-n C-p C-a C-e char/line movement
M-f M-b word movement
C-v M-v page down / up
M-< M-> beginning / end of buffer
C-space set mark (movement extends region)
C-k kill line (consecutive kills accumulate)
C-w / M-w kill / copy region
C-y / M-y yank / yank-pop
M-d / M-backspace kill word forward / backward
M-up / M-down move current line (or marked block) up / down
C-s / C-r incremental search (smart case, wraps)
M-% query-replace (y/n/!/q)
C-x g project-wide regex search (results list, Enter jumps)
M-; toggle line comment
C-c C-c send region or current line to the terminal REPL
C-x t toggle terminal panel (keys pass through raw; only C-x is reserved)
Shift+PgUp/PgDn terminal scrollback (typing snaps back)
C-c C-v cycle markdown preview: split / preview-only / off
M-x, Ctrl+Shift+P command palette
C-g / Esc cancel chord / prompt / search / mark

ESC acts as the Meta prefix, so ESC w == M-w, ESC x == M-x, etc. Tab completes paths in the find-file and write-file prompts.

Open files are watched for external changes: clean buffers reload automatically; buffers with local edits ask before discarding them.

.csv and .tsv files open in a table viewer (inspired by csvlens): a sticky header, row cursor, and original file line numbers in the gutter. Large files stream in as you scroll rather than loading whole. In the table: / (or C-s) searches, n repeats, & filters rows by regex, g/G jump to top/bottom. C-c C-v switches between the table and the raw text. The table is read-only.

The file tree opens files on selection. The default theme is candat-light (high-contrast dark-on-white). The markdown preview is linked: it follows the editor's scroll position.

Development

uv run pytest

Roadmap

  1. Skeleton: tree / tabs / status bar / C-x chords / open & save
  2. Emacs editing: kill ring, C-s/C-r isearch, mark & region, M-x palette
  3. Markdown mode: side-by-side live preview (debounced)
  4. Terminal panel (full PTY: forkpty + pyte)
  5. Polish: terminal scrollback, dirty-line rendering, path completion in prompts, buffer list, scroll-synced preview, R/xml/html highlighting

Syntax highlighting covers python, markdown, json, yaml, bash, html, xml, css, toml, js, sql, go, rust, java, and R (via tree-sitter-language-pack).

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

candat-0.4.0.tar.gz (30.1 kB view details)

Uploaded Source

Built Distribution

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

candat-0.4.0-py3-none-any.whl (38.6 kB view details)

Uploaded Python 3

File details

Details for the file candat-0.4.0.tar.gz.

File metadata

  • Download URL: candat-0.4.0.tar.gz
  • Upload date:
  • Size: 30.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for candat-0.4.0.tar.gz
Algorithm Hash digest
SHA256 14e68c2a1237261cbc773c6d6d84e92fd1d86ad1a925006bbc79041a2e16291c
MD5 3bd29feafe588ddb596b452f192b583b
BLAKE2b-256 5c1c2076751ae7dadc2218f8f7b8c7be6a87f13fc3a8608ea870f68e1c81fe30

See more details on using hashes here.

File details

Details for the file candat-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: candat-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 38.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for candat-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8a81c2f4991f7f4d4bc1dd2b828e7308d009293c7bd999292462ceb2e22044e9
MD5 70cb2d4fe0ed83c3be72bafc51ad45e2
BLAKE2b-256 6c4006a3dbf5774abbf33a27150f192679978a5eb1eee2c7dfdd7ddb5ae7a3b8

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