A sleek, powerful terminal text editor built with Textual
Project description
Axiom TUI
A terminal text editor that doesn't make you feel lame.
I have an ubuntu server on my rpi5 running in my room and I kept needing to edit files on it. Nano works but it looks like it's from the 90s. I tried vim but it wasn't satisfactory using it, So I thought why not make an usable, modern tui text editor for fun? I was out of ideas and I had a weekend to spare. So I built this.
It's not trying to replace anything. It's just a small editor you can open from the terminal when you need to make a quick edit and you want it to not look terrible.
Install
You need Python 3.11+ and Textual (python lib)
Just want to try it out? Clone and run:
git clone https://github.com/adyanthm/axiom-tui.git
cd axiom-tui
pip install textual
python main.py somefile.py
Want to actually use it regularly? Install it as a command:
git clone https://github.com/adyanthm/axiom-tui.git
cd axiom-tui
pip install -e .
Now you can open files from anywhere on your system:
axiom main.py
axiom ~/.bashrc
axiom /etc/nginx/nginx.conf
Just axiom and the file path. That's it. Works from any directory.
Don't want to deal with Python at all?
Grab axiom.exe (or the Linux/Mac binary) from the releases page. No Python needed, everything is bundled inside.
To use it as a global command (so you can just type axiom file.py from anywhere):
Windows:
- Download
axiom.exe - Put it somewhere like
C:\tools\ - Add that folder to your PATH (search "environment variables" in Start, edit the
Pathvariable, addC:\tools\) - Open a new terminal and you're good to go
Linux:
chmod +x axiom-linux
sudo mv axiom-linux /usr/local/bin/axiom
Mac:
chmod +x axiom-macos
sudo mv axiom-macos /usr/local/bin/axiom
After that, just use it like any other command:
axiom server.py
axiom ~/.bashrc
axiom config.yml
What it does
- Syntax highlighting for Python, JS, TS, Rust, Go, C, Java, Ruby, and a bunch more.
- File tree on the left so you can browse around without leaving the editor.
- Search that actually jumps to the match.
- Line numbers and a status bar with cursor position.
- Unsaved changes indicator (little dot next to the filename).
- Theme sync - When you switch app themes the syntax colors follow along. This one took me an embarrassingly long time to figure out because Textual's TextArea has its own theme system completely separate from the app. Fun.
Keybinds
| Key | Does |
|---|---|
ctrl+s |
Save |
ctrl+f |
Search (Enter to find, Esc to close) |
ctrl+b |
Toggle file tree |
ctrl+q |
Quit |
You can also switch themes through Textual's command palette.
The Theme Thing
So here's a fun rabbit hole I fell into: Textual has app themes (like Dracula, Nord, Catppuccin etc) and the TextArea widget has its own completely separate syntax highlighting themes. When you switch the app theme, only the UI chrome changes - the actual code highlighting stays the same.
I fixed this by mapping each app theme to the closest syntax theme. It's not perfect but it works. If you switch to Dracula the syntax goes Dracula, if you pick something light it switches to GitHub Light, etc.
Stuff I might add
- Find and replace (right now it's just find)
- Tabs for multiple files
- Remember last open file
- Goto line number
No promises though. This is a weekend project that I use for myself. If it helps you too, cool.
Contributing
PRs are welcome. Just keep it simple - the whole point is that this is a small, clean codebase. If your feature doubles the line count, maybe it should be a fork instead.
License
MIT. Do whatever you want with it.
Project details
Release history Release notifications | RSS feed
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 axiom_tui-1.0.5.tar.gz.
File metadata
- Download URL: axiom_tui-1.0.5.tar.gz
- Upload date:
- Size: 6.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eb88b9e54891397b8250b57a883fbdce69c382db01310264b0a1abbff0fee00f
|
|
| MD5 |
592a6100b1a1672ec3d02801b3ddb076
|
|
| BLAKE2b-256 |
efddd3fac1df1b699ddab82460fed19960c5a58288c72b74d421418c26bea743
|
Provenance
The following attestation bundles were made for axiom_tui-1.0.5.tar.gz:
Publisher:
release.yml on adyanthm/axiom-tui
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
axiom_tui-1.0.5.tar.gz -
Subject digest:
eb88b9e54891397b8250b57a883fbdce69c382db01310264b0a1abbff0fee00f - Sigstore transparency entry: 1431740692
- Sigstore integration time:
-
Permalink:
adyanthm/axiom-tui@e8793df26556bf5aa5cf5a869b5edf57c54f7b8f -
Branch / Tag:
refs/tags/v1.0.5 - Owner: https://github.com/adyanthm
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e8793df26556bf5aa5cf5a869b5edf57c54f7b8f -
Trigger Event:
push
-
Statement type:
File details
Details for the file axiom_tui-1.0.5-py3-none-any.whl.
File metadata
- Download URL: axiom_tui-1.0.5-py3-none-any.whl
- Upload date:
- Size: 6.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c661908786317ee4a4511cbbe9c1e450d66e81990a4ef6b7f995e129852bbeea
|
|
| MD5 |
ff4d3f3858900ba381247a5736adb3de
|
|
| BLAKE2b-256 |
1cb39b973f922100e4db98a799273839684657f4ce2eb3d9c0a7ce5cc0413c75
|
Provenance
The following attestation bundles were made for axiom_tui-1.0.5-py3-none-any.whl:
Publisher:
release.yml on adyanthm/axiom-tui
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
axiom_tui-1.0.5-py3-none-any.whl -
Subject digest:
c661908786317ee4a4511cbbe9c1e450d66e81990a4ef6b7f995e129852bbeea - Sigstore transparency entry: 1431740884
- Sigstore integration time:
-
Permalink:
adyanthm/axiom-tui@e8793df26556bf5aa5cf5a869b5edf57c54f7b8f -
Branch / Tag:
refs/tags/v1.0.5 - Owner: https://github.com/adyanthm
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e8793df26556bf5aa5cf5a869b5edf57c54f7b8f -
Trigger Event:
push
-
Statement type: