Appeler Emacs depuis un navigateur, sous un Debian-like
Un petit billet dans la section administrativia pour me souvenir d’une astuce qui pourra resservir.
Aujourd’hui j’ai voulu reproduire sur un ordinateur une fonctionnalité que j’ai sur le mien et qui m’arrange bien : pouvoir facilement appeler Emacs depuis un navigateur web (en l’occurence Firefox) pour remplir un champ de texte.
Je ne prétends pas faire de la façon la plus efficace ou commode possible ; n’hésitez pas à le signaler si vous pensez qu’il y a une manière plus « propre » de faire.
L’idée d’ensemble est la suivante :
J’utilise l’extension It's All Text qui permet d’appeler n’importe quel éditeur pour remplir un champ de texte ; si vous n’utilisez pas Firefox, il faudra trouver une extension correspondante.
Je m’arrange pour que la commande
editor, gérée parupdate-alternativessous Debian (et Ubuntu), appelle Emacs, en utilisantemacsclientpour qu’il s’ouvre rapidement.
La première étape est simple, et marche sous toutes les versions de Firefox que j’ai testées. La seconde est un peu plus délicate, et détaillée ci-ensuite.
Pour commencer, le système update-alternatives n’accepte qu’un nom
d’exécutable, sans qu’on puisse lui passer de paramètres. C’est
dommage parce que pour que emacsclient soit agréable à utiliser, il
faut passer l’option -c, ou --create-frame, pour qu’il crée une
nouvelle fenêtre au lieu d’aller embêter une fenêtre existante.1 Il
est donc nécessaire de se créer un petit script intermédiaire,
à placer où vous voulez, chez moi c’est $HOME/etc/emacs.sh :
#!/bin/sh
emacsclient --create-frame $@
1 NdRZ : Personnellement, j’aime bien ouvrir ça dans une fenêtre existante. Two cents.
Ensuite il faut convaincre update-alternatives qu’on a envie
d’utiliser ce script comme alternative préférée pour le programme
editor — qui existe déjà et est géré par update-alternatives sur
les Debian et Ubuntu récentes ; sur la machine cible il pointait vers
nano par défaut. Il faut commencer par « installer » l’alternative,
puis la choisir. La syntaxe d’installation est la suivante:
sudo update-alternatives --install <link> <name> <path> <priority>
<link> désigne le chemin de l’exécutable final, ici
/usr/bin/editor, <name> son nom, editor, <path> le chemin du
vrai programme à exécuter, donc votre script, et <priority> un
nombre arbitraire, le plus grand est choisi par défaut. Chez moi les
autres programmes étaient entre -100 et 20, donc j’ai mis 20,
mais de toute façon ensuite je fais un choix manuel.
sudo update-alternatives --install /usr/bin/editor editor $HOME/etc/emacs.sh 20
sudo update-alternatives --set editor $HOME/etc/emacs.sh
Vous l’aurez compris, la dernière ligne désactive le choix automatique
(par les priorités) pour forcer un choix manuel. Je ne sais pas
pourquoi il faut répéter deux fois ce chemin, c’est un peu mal fichu,
mais c’est la vie. On peut vérifier que tout a bien marché en lui
demandant ce qu’il a en base pour editor :
% update-alternatives --display editor
editor - manual mode
link currently points to /home/gabriel/etc/emacs.sh
/bin/ed - priority -100
slave editor.1.gz: /usr/share/man/man1/ed.1.gz
/bin/nano - priority 40
slave editor.1.gz: /usr/share/man/man1/nano.1.gz
/home/gabriel/etc/emacs.sh - priority 10
/usr/bin/emacs23 - priority 0
slave editor.1.gz: /usr/share/man/man1/emacs.emacs23.1.gz
/usr/bin/emacsclient - priority 10
Current 'best' version is '/bin/nano'.
J’ai retiré quelques alternatives et quelques « esclaves » pour
raccourcir la sortie, mais vous voyez l’idée. Maintenant il suffit de
donner /usr/bin/editor à votre extension It’s All Text, et le
tour est joué.
emacsclient s’utilise en ayant lancé au moins une fois, au
démarrage de votre ordinateur, la commande emacs --daemon ; elle
n’ouvre pas de fenêtre emacs mais lance un serveur en fond de tâche
pour les clients suivants. Vous pouvez l’ajouter à vos scripts de
démarrage de session X, ou ce que vous voulez. Si vous l’oubliez,
It’s All Text se plaindra poliment d’une erreur à l’ouverture de
l’éditeur (code de retour -1).
Avec cette configuration, emacs est facile et rapide à ouvrir depuis
Firefox, et tout marche bien. Je m’en sers pour rédiger des messages
un peu longs, en particulier tout ce qui est technique ; j’utilise
beaucoup les facilités d’Emacs pour taper des caractères unicodes
(M-x set-input-mode,2 TeX). C’est aussi utile quand on rédige un
message avec des bouts de code : on peut tester dans un buffer, et
facilement ouvrir des buffers déjà ouverts depuis une autre fenêtre.
2 NdRZ : M-x set-input-mode qui s’active aussi avec la commande
C-x RET C-\. Une fois sélectionné, vous pouvez basculer entre le
mode choisi et le mode normal par défaut avec C-\. Si votre
disposition de touches ne permet pas un accès rapide et aisé
à C-\, je vous conseille de vous créer un alias de touches, vers
C-4 par exemple :
(define-key key-translation-map (kbd "C-4") (kbd "C-\\"))
![[Atom]](feed.png)