Skip to main content

A minimal terminal-based spreadsheet editor

Project description

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
  • Shift+Arrow Keys: Select multiple cells (shows sum in status bar)

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

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

esprit-0.1.0.tar.gz (127.8 kB view details)

Uploaded Source

Built Distribution

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

esprit-0.1.0-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

File details

Details for the file esprit-0.1.0.tar.gz.

File metadata

  • Download URL: esprit-0.1.0.tar.gz
  • Upload date:
  • Size: 127.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for esprit-0.1.0.tar.gz
Algorithm Hash digest
SHA256 d7feeed02819ada4d16f58c5f28ca8cb5c3dc26497b9d596c88d2dda5f4b76ba
MD5 a27943a75f4a5d07c075a6422836e12a
BLAKE2b-256 c230b42bc684e0a64e101d6e8092bf7d97a86af70b39cc728894473beee7f97d

See more details on using hashes here.

File details

Details for the file esprit-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: esprit-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 12.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for esprit-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 17193e10bbace566eb935e28dcb88439a286bbabdb98fbf6497bcfdcbac71d0f
MD5 dae8aa2dc96dd05c718f1e22a219c0c5
BLAKE2b-256 92d8d9d45a30e3ca118628391bdfb55ce2a41bd802ca8f771fb91acb43a82843

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