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 has a filter box on top: press / while the tree is focused (or click it), type to narrow the tree to files whose path matches, Esc clears it. 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.5.0.tar.gz (32.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.5.0-py3-none-any.whl (41.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: candat-0.5.0.tar.gz
  • Upload date:
  • Size: 32.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.5.0.tar.gz
Algorithm Hash digest
SHA256 d1537a640cb30a6e9fe0244ccd9593d050bb4265739c473cd8cfe7ade922b227
MD5 a5a9a4b8ab27536daea171fe4285e742
BLAKE2b-256 238e1f31fa5dc7811112ffa190acab339efddfedf7c40cf7dfe36d32205e9e35

See more details on using hashes here.

File details

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

File metadata

  • Download URL: candat-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 41.5 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.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d4acd66c4f6da46bd80e3bf64c8c26e41c9abd5a988ae6ca5f931866539da4dc
MD5 31c36d596b40c4fc6a46d084c908dda6
BLAKE2b-256 4ae618f9e9f3f2b9565d2357415aa24d43e95279bfb74865d9e115528f9eebeb

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