Skip to content

crramirez/caswrite

Repository files navigation

CasWrite - Text Editor with Table Support

A powerful text-based editor built with Casciian that combines traditional text editing with spreadsheet capabilities. CasWrite supports multiple overlapping windows, mouse operations, and can open both text files and CSV/table files simultaneously.

Features

  • Text Editing: Open and edit text files in dedicated editor windows with full editing capabilities
  • Table Support: Open CSV and TSV files in spreadsheet-like table windows
  • Multiple Windows: Work with multiple files simultaneously in overlapping windows
  • Rich Menus:
    • File Menu: New, Open, Open as Table, Save, Save As, Exit
    • Edit Menu: Undo, Redo, Cut, Copy, Paste, Clear, Find, Replace, Go to Line
    • System Menu: Shell access for running OS commands
    • Window Menu: Tile, Cascade, Close All, Next, Previous window management
    • Table Menu: Table-specific operations for CSV/spreadsheet files
  • Mouse Support: Full mouse support for window management and text selection
  • Terminal-Based: Runs in any Xterm-compatible terminal

Use Cases

CasWrite can serve as:

  • A default text editor for Linux (similar to nano or vim but with GUI-like features)
  • A CSV/table data viewer and editor
  • A multi-file text editing environment
  • A combination text and data editor in a single application

Prerequisites

  • Java 21 or later
  • Gradle 9.2.1 or later (included via wrapper)
  • For native image compilation: GraalVM Java 25 with native-image
  • For packaging: fpm (installed via gem install fpm)

Building

Standard JAR Build

./gradlew clean build

This creates a JAR file in build/libs/caswrite-<version>.jar

Running CasWrite

After building, you can run CasWrite in several ways:

Run with Gradle

./gradlew installDist
./build/install/caswrite/bin/caswrite

Run with a file

# Open a text file
./build/install/caswrite/bin/caswrite myfile.txt

# Open a CSV file (automatically opens in table view)
./build/install/caswrite/bin/caswrite data.csv

Run the JAR directly

java -jar build/libs/caswrite-<version>.jar
java -jar build/libs/caswrite-<version>.jar myfile.txt

Native Image Compilation (Required for Packaging)

The DEB and RPM packages require a native binary. You need GraalVM Java 25 with native-image installed.

Installing GraalVM

You can install GraalVM using SDKMAN:

curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk install java 25.0.0.r25-graalce

Or download directly from GraalVM Downloads.

Building Native Binary

  1. Ensure GraalVM Java 25 is installed and configured
  2. Run:
./gradlew nativeCompile

This creates a native executable at build/native/nativeCompile/caswrite

Creating DEB and RPM Packages

Important: The packages require a native binary. You must first compile the native binary using GraalVM (see above).

Prerequisites for Packaging

# Install fpm and dependencies
sudo apt-get install ruby ruby-dev build-essential rpm
sudo gem install fpm

Building Packages

After compiling the native binary, build both DEB and RPM packages:

./gradlew buildPackages

Or build individually:

./gradlew buildDeb    # Creates DEB package in build/distributions/deb/
./gradlew buildRpm    # Creates RPM package in build/distributions/rpm/

The packages will include only:

  • /usr/bin/caswrite - Native executable binary

Installing the Packages

Debian/Ubuntu:

sudo dpkg -i build/distributions/deb/caswrite_0.1.0-1_amd64.deb
sudo apt-get install -f  # Install dependencies if needed

RedHat/CentOS/Fedora:

sudo rpm -ivh build/distributions/rpm/caswrite-0.1.0-1.x86_64.rpm

After installation, you can run the application:

caswrite
caswrite myfile.txt
caswrite data.csv

Keyboard Shortcuts

CasWrite supports standard keyboard shortcuts:

  • Alt+F: File menu
  • Alt+E: Edit menu
  • Alt+S: System menu
  • Alt+W: Window menu
  • Alt+T: Table menu
  • F3: Find
  • Ctrl+S: Save (in editor windows)
  • Ctrl+Q: Quit
  • Ctrl+X: Cut
  • Ctrl+C: Copy
  • Ctrl+V: Paste

Customizing the Template

This template is designed to be a starting point for your own Casciian-based application:

  1. Modify features: Update CasWrite.java to add new menu items or functionality
  2. Add file type support: Extend the file opening logic to support additional formats
  3. Customize menus: Add new menus or modify existing menu items
  4. Update metadata:
    • Edit build.gradle to update group, description, URLs, and maintainer information
    • Update gradle.properties to set your version
  5. Update documentation: Modify this README to describe your specific application

Project Structure

caswrite/
├── build.gradle              # Gradle build configuration
├── settings.gradle           # Gradle settings
├── gradle.properties         # Project version and properties
├── src/
│   └── main/
│       └── java/
│           └── io/github/crramirez/caswrite/
│               └── CasWrite.java   # Main application class
└── README.md

License

Apache License 2.0 - Copyright 2025 Carlos Rafael Ramirez

Dependencies

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages