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
Skeleton: tree / tabs / status bar / C-x chords / open & saveEmacs editing: kill ring, C-s/C-r isearch, mark & region, M-x paletteMarkdown mode: side-by-side live preview (debounced)Terminal panel (full PTY: forkpty + pyte)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
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 candat-0.4.1.tar.gz.
File metadata
- Download URL: candat-0.4.1.tar.gz
- Upload date:
- Size: 30.6 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a3d132034c42ef190884d65764f39f8c02780048e649bd999d1980d0297cd8c4
|
|
| MD5 |
73315de4785c7a3b7a7570b15cc5002e
|
|
| BLAKE2b-256 |
200b4e414212cf45f00d72b7baa55c7a769662a5563417976ce45326f8ce2a01
|
File details
Details for the file candat-0.4.1-py3-none-any.whl.
File metadata
- Download URL: candat-0.4.1-py3-none-any.whl
- Upload date:
- Size: 39.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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d627537ffd281a8738949724b751c55111a03d274b806693a7cafdaa36a420aa
|
|
| MD5 |
ace10e84233137b49c3249d1afac1c03
|
|
| BLAKE2b-256 |
c3998469f5abe61bdd928c1780298262d0ce7912b357af7a5584ba6191015184
|