Présentation

txt est un éditeur de texte fonctionnant exclusivement dans le terminal, écrit en Rust 1.88 ou version supérieure. Le binaire, disponible via Homebrew, curl ou un script PowerShell, se place dans le répertoire ~/.local/bin (Linux/macOS) ou %LOCALAPPDATA%\txt (Windows) et démarre immédiatement, sans configuration préalable ni plugins. Cette approche contraste avec les éditeurs traditionnels qui imposent une phase de configuration ou un modèle modal, ce qui, selon l’auteur, crée une friction lors d’éditions rapides.

Architecture et performances

L’implémentation repose sur le moteur de parsing tree‑sitter, intégré pour la coloration syntaxique et le pliage de code. Tree‑sitter fournit un arbre syntaxique incrémental, ce qui permet à txt de mettre à jour la coloration et les structures de pliage en temps réel avec un coût CPU minimal. Le choix de Rust garantit une empreinte mémoire contrôlée et une exécution native sans dépendance d’interpréteur, ce qui explique le démarrage instantané affiché par l’auteur. La gestion des raccourcis clavier est centralisée dans un fichier ~/.config/txt/keybindings.toml, offrant la possibilité de charger des presets VS Code ou IntelliJ IDEA, tout en conservant la logique de traitement d’événements clavier en mode non modal.

Fonctionnalités avancées

txt supporte la coloration de plus d’une douzaine de langages grâce à tree‑sitter : Rust, Python, JavaScript, TypeScript/TSX, Go, Java, Kotlin, C#, Groovy, Shell, HTML, CSS, JSON, YAML, TOML, Properties et Markdown. Le pliage de code s’active avec Ctrl+Shift+[ et le repli total avec Alt+0. La navigation symbolique utilise Ctrl+Shift+O pour afficher un sélecteur flou de fonctions, classes et déclarations. L’intégration Git montre les modifications en marge et propose un dialogue complet (Ctrl+Shift+G) pour les opérations de staging, commit, push et pull. Le support LSP est activé par défaut via un fichier lsp.toml ; le premier lancement d’un serveur déclenche une validation SHA‑256 et un cache de confiance. Exemple de configuration :

enabled = true
server  = "rust-analyzer"
[servers.rust-analyzer]
command = "rust-analyzer"
[servers.gopls]
command = "gopls"
args    = ["serve", "-rpc.trace"]

Des macros clavier (enregistrement a‑z), des snippets TextMate, le suivi de marques et de la liste de sauts, ainsi que le support .editorconfig complètent l’ensemble, offrant une expérience proche d’un IDE sans quitter le terminal.

Limites et perspectives

Bien que txt propose une palette riche, il ne prétend pas remplacer un IDE complet : les serveurs LSP restent externes et doivent être installés séparément, ce qui peut compliquer la mise en place sur des environnements dépourvus d’accès réseau. L’absence d’écosystème de plugins limite l’extensibilité, mais renforce la prévisibilité du comportement. Sous Windows, l’installation repose sur un script PowerShell qui ajoute automatiquement le binaire au PATH, mais aucune version native Windows n’est fournie, ce qui peut affecter la performance sur des machines non‑Unix. Enfin, le parsing tree‑sitter, bien que rapide, consomme davantage de mémoire pour des fichiers très volumineux, un point à surveiller dans les projets de grande taille. Des améliorations futures pourraient inclure une gestion plus fine du cache d’arbre syntaxique et une interface graphique optionnelle pour les utilisateurs souhaitant un hybride terminal/GUI.