A text editor inspired by Emacs with Lua at it's core

Bernardo Magri 4f1529bcf9 switching to ncurses 1 hónapja
include 6cabe583b0 adding window split 1 hónapja
src 4f1529bcf9 switching to ncurses 1 hónapja
tests 323842052e adding missing files 1 hónapja
.envrc 4f1529bcf9 switching to ncurses 1 hónapja
CMakeLists.txt 305eb8fc34 adding many features 1 hónapja
EXTENSIBILITY.md 323842052e adding missing files 1 hónapja
LUA_API.md 305eb8fc34 adding many features 1 hónapja
README.md 305eb8fc34 adding many features 1 hónapja
init.lua 305eb8fc34 adding many features 1 hónapja
lumacs_debug.log 6cabe583b0 adding window split 1 hónapja
shell.nix b9eeba41b5 Initial commit 1 hónapja
test_highlight.lua 323842052e adding missing files 1 hónapja

README.md

Lumacs

A modern text editor in C++, inspired by Emacs but with better scripting via Lua.

Features (Planned)

  • Modern C++20 codebase with RAII principles
  • Terminal UI using FTXUI
  • Lua scripting with sol2
  • Window splits and buffer management
  • Extensible architecture

Tech Stack

  • Core: C++20 with modern idioms
  • TUI: FTXUI for terminal rendering
  • Scripting: Lua 5.4 + sol2 bindings
  • Build: CMake 3.20+
  • Text Storage: std::vector<std::string> (MVP), rope structure planned

Building

Standard Build

mkdir build && cd build
cmake ..
cmake --build .
./lumacs [file]

With Nix

nix-shell
mkdir build && cd build
cmake -G Ninja ..
ninja
./lumacs [file]

Build Options

  • Debug build: cmake -DCMAKE_BUILD_TYPE=Debug ..
  • Release build: cmake -DCMAKE_BUILD_TYPE=Release .. (default)

Project Structure

lumacs/
├── include/lumacs/    # Public headers
│   └── buffer.hpp     # Text buffer interface
├── src/               # Implementation
│   ├── main.cpp       # Entry point
│   └── buffer.cpp     # Buffer implementation
├── tests/             # Unit tests
├── CMakeLists.txt     # Build configuration
└── shell.nix          # Nix development environment

Current Status

MVP Phase: Basic infrastructure in place

  • Project structure and build system
  • Buffer implementation with basic operations
  • Minimal FTXUI integration
  • Lua runtime initialized
  • Keyboard input handling
  • Window splits (M-2 horizontal, M-3 vertical, M-0 close, C-w next)
  • Lua configuration loading
  • Basic editing commands (Search/Replace API added)
  • Unit tests
  • Command Buffer (Minibuffer)

Development

The project uses modern C++ practices:

  • RAII for resource management
  • Smart pointers for ownership
  • std::optional for fallible operations
  • Range-based operations
  • C++20 features (spaceship operator, etc.)

License

TBD