cacamacs — a small terminal text editor with Emacs key bindings
Project description
ccm — cacamacs
A small terminal text editor with Emacs key bindings, built on the
gtcaca libcaca TUI toolkit and its
editor widget. It shows off the widget's colourization, folding, annotations,
autocompletion, search/replace and a VSCode-style language-extension model.
ccm [file | directory] [language-configuration.json]
- A file opens in the editor.
- A directory opens the file browser (also
C-x d). - An optional explicit
language-configuration.jsonforces that config.
See docs/README-cacamacs.md for the full key-binding reference and feature tour.
History. ccm started life as
apps/cacamacsinside the gtcaca repo, where a copy remains as a worked example of building an app on the toolkit. Active development now happens here, against gtcaca as an ordinary external dependency.
Install with pip
Prebuilt binaries are published to PyPI for macOS (Apple Silicon), Linux (x86_64) and Windows (x86_64) — no compiler or Homebrew needed:
pip install cacamacs
ccm # or: cacamacs
PyPI is used purely as a binary channel (as ruff/cmake/ninja do): the
wheel carries the compiled ccm and the libgtcaca/libcaca/oniguruma
libraries it needs, made relocatable, plus the sample language extensions so
syntax highlighting works out of the box. See packaging/ for how
the per-platform wheels are built (packaging/build.sh → packaging/wheel.py,
wired up in .github/workflows/release.yml, which publishes on a v* tag).
Building
ccm consumes gtcaca like any third party would: install gtcaca first, then
build ccm against it. gtcaca ships a gtcaca.pc, so pkg-config finds it.
# 1. install gtcaca (any one of these):
brew install stricaud/tap/gtcaca # Homebrew tap
# …or from a gtcaca checkout: cmake -S . -B build && cmake --build build && sudo cmake --install build
# 2. build ccm
cmake -S . -B build
cmake --build build
# 3. run it
./run.sh # builds if needed, then runs build/ccm
./run.sh path/to/file
Requirements: a C compiler, CMake ≥ 3.20, pkg-config, and an installed
gtcaca (which pulls in libcaca).
Installing
sudo cmake --install build # → /usr/local/bin/ccm, share/ccm/ccm-theme.example
Self-contained macOS package
scripts/package-macos.sh builds a .pkg that bundles libgtcaca and
libcaca alongside ccm (rewritten to @rpath), so the installed editor needs
neither Homebrew nor a system gtcaca:
scripts/package-macos.sh # → ccm-<version>.pkg
Its postinstall seeds ~/.ccm/theme from the bundled sample (never clobbering
an existing one).
Configuration
- Colour theme — copy docs/ccm-theme.example to
~/.ccm/theme. Comments in the file explain every key. - Editor config — copy examples/config.json to
~/.cacamacs/config.jsonfor tab size, indent, per-language overrides. - Language extensions — the VSCode-style grammar/config bundles under examples/extensions/ drive syntax colourization.
Layout
src/ editor sources (cacamacs.c, ui.c, edit.c, search.c, …)
docs/ feature docs + the colour-theme sample
examples/ config sample and language extensions
scripts/ macOS packaging
CMakeLists.txt standalone build (finds gtcaca via pkg-config)
run.sh build-and-run helper
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
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 cacamacs-0.0.5-py3-none-win_amd64.whl.
File metadata
- Download URL: cacamacs-0.0.5-py3-none-win_amd64.whl
- Upload date:
- Size: 1.1 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
900c4fa4e0a54a889d4a85c80bb0dcea718f6fd00f8c645f20c22a4cc3407cec
|
|
| MD5 |
7108093c8689d7e8e79f8b1c792f6920
|
|
| BLAKE2b-256 |
58a1ac02006811d72cf7c5061a403be39648f05613d2c34bc99b422374067656
|
Provenance
The following attestation bundles were made for cacamacs-0.0.5-py3-none-win_amd64.whl:
Publisher:
release.yml on stricaud/ccm
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cacamacs-0.0.5-py3-none-win_amd64.whl -
Subject digest:
900c4fa4e0a54a889d4a85c80bb0dcea718f6fd00f8c645f20c22a4cc3407cec - Sigstore transparency entry: 2190560900
- Sigstore integration time:
-
Permalink:
stricaud/ccm@e572a7f4d13f3228c226a8d3b9d64b63497cc539 -
Branch / Tag:
refs/tags/v0.0.5 - Owner: https://github.com/stricaud
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e572a7f4d13f3228c226a8d3b9d64b63497cc539 -
Trigger Event:
push
-
Statement type:
File details
Details for the file cacamacs-0.0.5-py3-none-manylinux_2_35_x86_64.whl.
File metadata
- Download URL: cacamacs-0.0.5-py3-none-manylinux_2_35_x86_64.whl
- Upload date:
- Size: 1.8 MB
- Tags: Python 3, manylinux: glibc 2.35+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ba62c7923abc0d7ac9da6cc92ba36c493d2abe1430e0a9c3075ff4adc97452a1
|
|
| MD5 |
09a2c688d0aea9c09f49ed4f4bf84a9d
|
|
| BLAKE2b-256 |
806cd4d4089f22bb5e4e70f82f785f5a60d6b7f128fb3347d49f4f3ef66944f8
|
Provenance
The following attestation bundles were made for cacamacs-0.0.5-py3-none-manylinux_2_35_x86_64.whl:
Publisher:
release.yml on stricaud/ccm
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cacamacs-0.0.5-py3-none-manylinux_2_35_x86_64.whl -
Subject digest:
ba62c7923abc0d7ac9da6cc92ba36c493d2abe1430e0a9c3075ff4adc97452a1 - Sigstore transparency entry: 2190560863
- Sigstore integration time:
-
Permalink:
stricaud/ccm@e572a7f4d13f3228c226a8d3b9d64b63497cc539 -
Branch / Tag:
refs/tags/v0.0.5 - Owner: https://github.com/stricaud
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e572a7f4d13f3228c226a8d3b9d64b63497cc539 -
Trigger Event:
push
-
Statement type:
File details
Details for the file cacamacs-0.0.5-py3-none-macosx_14_0_arm64.whl.
File metadata
- Download URL: cacamacs-0.0.5-py3-none-macosx_14_0_arm64.whl
- Upload date:
- Size: 633.3 kB
- Tags: Python 3, macOS 14.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cafe431b6f111b8bc58a4b8094dd6c23f666bcb63eaabaff8efce7047eefa5fe
|
|
| MD5 |
9e65f41eb3a20497f570c98c47cd7cc7
|
|
| BLAKE2b-256 |
974880a3c88874bafa607a90ded7344ca113176bde3cf7c0c23725f3a46197ce
|
Provenance
The following attestation bundles were made for cacamacs-0.0.5-py3-none-macosx_14_0_arm64.whl:
Publisher:
release.yml on stricaud/ccm
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cacamacs-0.0.5-py3-none-macosx_14_0_arm64.whl -
Subject digest:
cafe431b6f111b8bc58a4b8094dd6c23f666bcb63eaabaff8efce7047eefa5fe - Sigstore transparency entry: 2190560879
- Sigstore integration time:
-
Permalink:
stricaud/ccm@e572a7f4d13f3228c226a8d3b9d64b63497cc539 -
Branch / Tag:
refs/tags/v0.0.5 - Owner: https://github.com/stricaud
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e572a7f4d13f3228c226a8d3b9d64b63497cc539 -
Trigger Event:
push
-
Statement type: