Note: en retard par rapport à la traduction anglaise.
Acme est un éditeur de texte/IDE développé par Rob Pike (Go, UTF-8, Sam, etc.) pour Plan9; l’éditeur est notamment disponible via Plan 9 from User Space sous UNIX.
Il se distingue d’autres éditeurs modernes par un ensemble de fonctionnalités réduit. L’outil est ici succinctement présenté, et sont introduits quelques scripts permettant d’en améliorer l’utilisation/la programmabilité.
Introduction
Les novices peuvent se référer à la démonstration (sept. 2012) de Russ Cox reproduite ici:
Ou se diriger vers la section ressources à la fin de cet article.
Brièvement, acme(1) est bien décrit comme un Environnement de Développement Intégrant. Malgré quelques limitations (e.g. difficile de déplacer des buffers automatiquement), il est suffisamment bien, léger, stable, intuitif pour les utilisateurs d’UNIX.
Outils
On propose quelques outils, décrits ci-après, ayant pour but de réduire le nombre de fenêtres, et de faciliter la programmabilité de l’éditeur, plus que ne le permette l’outillage par défaut (lib/acme.rc).
Fenêtre “+Buffer”
En pratique, avoir une seule fenêtre +Errors avec nettoyage automatique du contenu est généralement plus pratique que d’avoir une fenêtre +Errors par répertoire, sans nettoyage.
Note: le comportement par défaut reste raisonnable: autant être verbeux et laisser l’utilisateur filtrer à sa convenance.
Par convention, on appelle cette fenêtre la fenêtre +Buffer, étant la seule dont le nom est suffixé par +Buffer. Son accès est automatiquement géré par la commande Getids, décrite ci-dessous.
La tagline de cette fenêtre est de plus utilisée pour lancer des commandes “globales”, comme celles permettant la gestion de sessions, aussi décrites plus bas.
Getids
Getids est un script clef, sur lequel sont construits la plupart des autres scripts. Il permet de cibler facilement:
- la fenêtre +Buffer (la créant si nécessaire);
- plusieurs fenêtres (X//-like);
- la fenêtre courante (défaut).
Il génère une liste d’identifiants de fenêtres, un par ligne, à partir de soit:
- un entier (identifiant de fenêtre);
- un pattern awk(1);
- -a, pour cibler automatiquement +Buffer
- rien (fenêtre courante).
En guise d’exemple, un script comme Do qui exécute une commande sur la tagline d’une fenêtre, permettant ainsi de chaîner des commandes acme(1), prend un argument optionnel transmis à Getids:
# Nettoye la fenêtre courante
(tagline)$ Do 'Edit ,d'
# Nettoye le contenu de toutes les fenêtres +Errors
(sh|tagline)$ Do 'Edit ,d' '\+Errors$'
# Write est utilisé pour écrire des données dans les fichiers
# spéciaux associés au buffer (9P), similaire à winwrite() de
# lib/acme.rc.
#
# Ici, on écrit & ferme toutes les fenêtre dont le nom comporte
# /project42/, et on nettoye le contenu de +Buffer, la créant
# si nécessaire
(sh|tagline)$ Write ctl put '\/project42\/' && \
Write ctl delete '\/project42\/' && \
Do 'Edit ,d' -a
XDump, XLoad, Switch (sessions)
À nouveau avec pour but de réduire le nombre de fenêtres, trois scripts sont fournis, permettant de charger/sauvegarder l’état actuel des fenêtres:
# Sauvegarde tous les fichiers ouverts, et sauvegarde
# l'état actuel des fenêtres dans $HOME/acme.dumps/project42.dump
(sh|tagline)$ XPutall && XDump project42 # extension .dump optionnelle
# Charge l'état décrit par $HOME/acme.dumps/projects42.dump,
# supprimant toutes les fenêtres existantes au préalable
(sh|tagline)$ XLoad project42.dump # extension .dump optionnelle
# Sauvegarde l'état courant sous $HOME/acme.dumps/project42.dump et
# charge celui décrit par $HOME/acme.dumps/website.dump
(sh|tagline)$ Switch project42 website # extension .dump optionnelle
Plus
Ces outils et d’autres sont documentés extensivement sur github.
Ressources
- Acme: A User Interface for Programmers (en), par Rob Pike (première publication);
- A Tour of Acme (en, video, Sept. 2012), par Russ Cox;
- acme.cat-v.org (en);
- acme(1) et acme(4);
- Ressources diverses (en);
- Tips et ressources divers (en).
- Changement du thème (en);
- acmeeval, acmepipe, autoacme;
- Support LSP (en);
- etc.
Voir aussi quelques tentatives de ré-écritures “modernes”:
- Edward (Go), basé sur:
- Edwood (Go), basé sur:
Commentaires
Par email, à mathieu.bivert chez: