Premiers pas
La plateforme d'origine de Textchum est macOS ; une coque Linux expérimentale sur le même noyau se compile aussi — voir Linux plus bas.
Prérequis
- macOS 14 ou plus récent.
- La chaîne d'outils Swift, version 6 ou supérieure. Les Xcode Command Line
Tools suffisent (
xcode-select --install) ; l'application Xcode complète n'est pas nécessaire. - Une chaîne d'outils Rust (stable). Le plus simple est de l'installer avec rustup.
make, fourni avec les Command Line Tools.
Compiler et lancer
git clone https://github.com/perrito666/textchum
cd textchum
make run
make run compile le noyau Rust en bibliothèque statique, génère l'en-tête
C, compile l'application Swift contre celle-ci et lance l'éditeur.
Autres cibles utiles :
| Cible | Effet |
|---|---|
make build |
Compile le noyau et l'application sans la lancer. |
make test |
Exécute la suite de tests Rust. |
make smoke |
Compile tout puis exécute le test de fumée sans interface. |
make check |
Tout ce que lance la CI : tests, test de fumée, contrôle de dérive de l'en-tête. |
make app |
Construit un Textchum.app double-cliquable (avec icône) dans dist/. |
make playground |
Crée un projet et un profil jetables, et ouvre la copie de travail dessus. |
make docs |
Construit ce site de documentation dans site/. |
make clean |
Supprime tous les produits de compilation. |
Pas envie de compiler ? Chaque étiquette v* publie une
release GitHub avec
un zip de Textchum.app prêt à l'emploi et des tarballs Linux de
textchum-gtk (x86_64 et arm64), chacun avec son SHA-256.
L'application n'est pas signée : au premier lancement, faites un clic
droit dessus et choisissez Ouvrir.
Le terrain d'essai
Compiler vous dit que l'éditeur compile. Cela ne vous dit pas de quoi a
l'air un changement face à un dépôt git avec un distant, un fichier aux
modifications non validées, un projet imbriqué, une faute
d'orthographe et quatre cents lignes à parcourir — make playground en
fabrique donc un et ouvre dessus la copie de travail de l'éditeur.
make playground le fabrique et ouvre l'éditeur dessus
make playground KEEP=1 réutilise celui déjà fabriqué
make playground OPEN=0 le fabrique et dit où il est, sans éditeur
Tout atterrit dans build/playground : le projet d'un côté, le profil
entier de l'éditeur de l'autre. Ce que contient le projet :
- Python et Rust, le crate Rust imbriqué dans le projet Python, pour que les projets par manifeste et les réglages par projet aient deux racines à distinguer.
- Une histoire — quatre commits, deux auteurs, quatre mois différents — pour que le blame de ligne ait quelque chose à dire.
- Une copie de travail dans l'état où elle est d'ordinaire : lignes modifiées, lignes ajoutées, lignes disparues, quelque chose d'indexé et quelque chose de non suivi. La marge des changements marque tout cela.
- Un distant qui ne mène nulle part
(
github.com/textchum-playground/playground), pour que copier l'URL de la forge produise une URL. - Un fichier avec une erreur de syntaxe pour le serveur de langage installé, de la prose avec une faute pour le correcteur, et quatre cents lignes à parcourir.
Le profil est remis avec --data-dir : la configuration, les thèmes,
les packs d'icônes, la session et le journal du serveur de cette
exécution sont donc tous dedans, et les vrais ne sont jamais ouverts.
Structure du dépôt
textchum/
├── core/ espace de travail Rust
│ ├── textchum-core/ le noyau de l'éditeur (tampons, événements)
│ └── textchum-ffi/ ABI C au-dessus du noyau ; génère textchum.h
├── macos/ paquet Swift
│ └── Sources/
│ ├── CTextchum/ l'en-tête C généré, en module Clang
│ ├── TextchumKit/ enveloppe Swift sûre au-dessus de l'interface C
│ └── Textchum/ l'application AppKit
├── docs/ cette documentation (MkDocs)
└── Makefile le point d'entrée de toutes les tâches
La commande chum
Textchum → Install chum Command… (ou, depuis un checkout,
make install-cli — respecte PREFIX, /usr/local par défaut)
installe une petite commande de terminal qui parle à l'application en
cours ; la voie du menu ne demande les droits d'administration que si
/usr/local/bin l'exige :
chum notes.md # ouvrir (onglet ou fenêtre selon vos réglages)
chum +42 src/main.rs # ouvrir avec le curseur à la ligne 42
chum -w grand.md # forcer une fenêtre séparée
chum -t a.rs +7 b.rs # plusieurs fichiers, onglets, un avec ligne
chum --wait brouillon.md # bloque jusqu'à la fermeture de la fenêtre
--wait est ce qu'il faut aux outils qui lancent un éditeur puis
lisent le fichier — enregistrez, fermez la fenêtre, et l'appelant
reprend :
git config --global core.editor "chum --wait"
Fermer sans enregistrer laisse le fichier intact, ce que git lit comme
un commit abandonné — le même geste que :q!. Si Textchum quitte (ou
n'est plus là), les chum en attente sont libérés plutôt que laissés
suspendus.
Elle passe par le schéma d'URL textchum:// ; le paquet de
l'application (make app) doit donc avoir été lancé au moins une fois
pour l'enregistrer.
Linux (expérimental)
Le même noyau anime une coque native GTK4/libadwaita, liée comme crate
Rust plutôt qu'à travers l'en-tête C (là, les deux côtés sont Rust).
Plus jeune que l'application macOS mais plus un jouet : onglets
(AdwTabView) qui focalisent au lieu de dupliquer, arbre de fichiers du
projet en barre latérale (F9), édition et annulation propriété du
noyau, coloration tree-sitter depuis la table de thèmes partagée,
recherche dans le fichier (Ctrl+F), recherche dans le projet
(Ctrl+Shift+F, regex avec smart case, filtres empilables ligne/fichier
et ligne d'état qui dit ce qu'elle a fait), ouverture floue (Ctrl+P), une liste de fichiers
ouverts groupée par projet au-dessus de l'arbre, le pool de serveurs
de langage branché (diagnostics soulignés avec compte de problèmes,
complétion pendant la frappe, survol, saut à la définition en F12,
ennuis de serveur en avis), un volet d'aperçu Markdown en direct
(Ctrl+Alt+P) et
une fenêtre de préférences (Ctrl+,) sur le même contrat config.json
— apparence, thème, réglages d'éditeur et serveurs de langage —
défauts, surcharges par projet et interrupteurs d'espace de travail —,
rangé dans ~/.config/textchum/config.json.
sudo apt install libgtk-4-dev libadwaita-1-dev libgtksourceview-5-dev \
libwebkitgtk-6.0-dev libsoup-3.0-dev
cargo build --release --manifest-path linux/Cargo.toml
linux/target/release/textchum-gtk notes.md
La CI le compile et lance sa fumée sans écran à chaque push.
Construire la documentation
La documentation est un site MkDocs avec le thème
Material, publiée en anglais, espagnol et français. Elle est entièrement
statique : le répertoire site/ généré se sert avec n'importe quel serveur
web.
python3 -m venv .docs-venv
.docs-venv/bin/pip install -r docs/requirements.txt
.docs-venv/bin/mkdocs serve # aperçu avec rechargement sur localhost:8000
.docs-venv/bin/mkdocs build # site statique dans site/
make docs enveloppe ces mêmes étapes.
Dépannage
- Erreurs
xcodebuildmentionnant une « command line tools instance » — sans gravité ; Textchum n'utilise pasxcodebuild. Compilez avecmake(qui piloteswift build). - L'éditeur de liens ne trouve pas
-ltextchum— le noyau Rust n'a pas encore été compilé. Lancezmake core(ou toute ciblemakequi l'inclut) avant d'invoquerswift buildà la main.