Esprit
A minimal terminal-based spreadsheet editor built with Python and Textual. Create, edit, and manage structured data tables with typed columns directly in your terminal.
Sometimes you want to take notes in a table.
Features
- Terminal UI: Fast, keyboard-driven interface
- Typed Columns: String, Number, Boolean, and URL column types
- Row Operations: Insert, delete, and move rows with keyboard shortcuts
- JSON Storage: Simple, readable JSON file format
Installation
Install esprit from PyPI:
pip install esprit
Or install from source:
git clone https://github.com/mkaz/esprit.git
cd esprit
pip install .
Requirements
- Python 3.10 or higher
Usage
Starting Esprit
Launch with a new or existing file:
# Create or open a spreadsheet
esprit mydata.json
# Start with default empty spreadsheet
esprit
On first launch with a new file, you'll see the initialization dialog where you can:
- Set the spreadsheet title
- Define columns with names and types
- Add or remove columns as needed
Column Types
- String: Plain text values
- Number: Numeric values with comma formatting
- Boolean: True/False values displayed as ✓/✗
- URL: Links with title and URL (format:
Title | https://example.com)
Keyboard Shortcuts
Navigation
- Arrow Keys: Move between cells
Editing
- Enter: Edit current cell
- Escape: Cancel editing
Row Operations
- Ctrl+I: Insert empty row above current
- Ctrl+K: Delete current row
- Alt+Up: Move current row up
- Alt+Down: Move current row down
File Operations
- Ctrl+S: Save spreadsheet
- Ctrl+Q: Quit (prompts to save if unsaved changes)
Special
- Ctrl+Enter: Open URL in browser (when on URL column cell)
File Format
Esprit saves spreadsheets as JSON files:
{
"metadata": {
"title": "My Spreadsheet",
"columns": [
{"name": "Name", "type": "string"},
{"name": "Amount", "type": "number"},
{"name": "Active", "type": "boolean"},
{"name": "Website", "type": "url"}
]
},
"rows": 20,
"cols": 4,
"cells": {
"0,0": "Alice",
"0,1": 1500,
"0,2": true,
"0,3": {"title": "Example", "url": "https://example.com"}
}
}
License
MIT License - see LICENSE file for details
Contributing
Contributions welcome! Please open an issue or pull request on GitHub.
Links
Metadata
Release files for esprit 0.2.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| esprit-0.2.3.tar.gz | 240.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| esprit-0.2.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 258.8 kB
Release files / esprit-0.2.3.tar.gz
| Download URL | esprit-0.2.3.tar.gz |
|---|---|
| Size | 240.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0f406a4f31c55018a239e197901f9d2b35446c92c6cf3e6d805f4e7eca888ffb
|
|
BLAKE2b-256 checksum How to use checksums |
75743170d64a159e0e2423b2e114ae48947d04b9761c1c0ae1009464b2e55d9d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.0
|
Release files / esprit-0.2.3-py3-none-any.whl
| Download URL | esprit-0.2.3-py3-none-any.whl |
|---|---|
| Size | 18.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9a9651c54c6e649d8f90d6036aa44058b36966a5af1df8a00b35813015b86778
|
|
BLAKE2b-256 checksum How to use checksums |
8c3fc1c00691c965b9c4138fc9f7b9863566af7ca4f0e3c8e95717717b584a9a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.0
|