A. GNU Emacs et ESS : la base▲
Emacs est l'Éditeur de texte des éditeurs de texte. À l'origine un éditeur pour les programmeurs (avec des modes spéciaux pour une multitude de langages différents), Emacs est devenu au fil du temps un environnement logiciel en soi dans lequel on peut réaliser une foule de tâches différentes : rédiger des documents LaTeX, interagir avec R, SAS ou un logiciel de base de données, consulter son courrier électronique, gérer son calendrier ou même jouer à Tetris !
Cette annexe passe en revue les quelques commandes essentielles à connaître pour commencer à travailler avec GNU Emacs et le mode ESS. L'ouvrage de Cameron et collab. (2004) constitue une excellente référence pour l'apprentissage plus poussé de l'éditeur.
A-1. Mise en contexte▲
Emacs est le logiciel étendard du projet GNU (« GNU is not Unix »), dont le principal commanditaire est la Free Software Foundation (FSF) à l'origine de tout le mouvement du logiciel libre.
- Richard M. Stallman, président de la FSF et grand apôtre du libre, a écrit la première version de Emacs et il continue à ce jour à contribuer au projet.
- Les origines de Emacs remontent au début des années 1980, une époque où les interfaces graphiques n'existaient pas, le parc informatique était beaucoup plus hétérogène qu'aujourd'hui (les claviers n'étaient pas les mêmes d'une marque d'ordinateur à une autre) et les modes de communication entre les ordinateurs demeuraient rudimentaires.
- L'âge vénérable de Emacs transparaît à plusieurs endroits, notamment dans la terminologie inhabituelle, les raccourcis clavier non conformes aux standards d'aujourd'hui ou la manipulation des fenêtres qui ne se fait pas avec une souris.
Emacs s'adapte à différentes tâches par l'entremise de modes qui modifient son comportement ou lui ajoutent des fonctionnalités. L'un de ces modes est ESS (Emacs Speaks Statistics).
- ESS permet d'interagir avec des logiciels statistiques (en particulier R, S+ et SAS) directement depuis Emacs.
- Quelques-uns des développeurs de ESS sont aussi des développeurs de R, d'où la grande compatibilité entre les deux logiciels.
- Lorsque ESS est installé, le mode est activé automatiquement en ouvrant dans Emacs un fichier dont le nom se termine par l'extension .R.
A-2. Installation▲
GNU Emacs et le mode ESS sont normalement livrés d'office avec toutes les distributions Linux. Pour les environnements Windows et OS X, le plus simple consiste à installer les distributions préparées par le présent auteur. Consulter le site http://vgoulet.act.ulaval.ca/emacs/
A-3. Description sommaire▲
Au lancement, Emacs affiche un écran d'information contenant des liens vers différentes ressources. Cet écran disparaît dès que l'on appuie sur une touche. La fenêtre Emacs se divise en quatre zones principales (voir la figure A.1) :
- Tout au haut de la fenêtre (ou de l'écran sous OS X), on trouve l'habituelle barre de menu dont le contenu change selon le mode dans lequel se trouve Emacs ;
- L'essentiel de la fenêtre sert à afficher un buffer, soit le contenu d'un fichier ouvert ou l'invite de commande d'un programme externe ;
- La ligne de mode est le séparateur horizontal contenant diverses informations sur le fichier ouvert et l'état de Emacs ;
- Le minibuffer est la région au bas de la fenêtre où l'on entre des commandes et reçoit de l'information de Emacs.
Il est possible de séparer la fenêtre Emacs en sous-fenêtres pour afficher plusieurs buffers à la fois. Il y a alors une ligne de mode pour chaque buffer.
A-4. Emacs-ismes et Unix-ismes▲
Emacs possède sa propre terminologie qu'il vaut mieux connaître lorsque l'on consulte la documentation. De plus, l'éditeur utilise des conventions du monde Unix qui sont moins usitées sur les plateformes Windows et OS X.
-
Dans les définitions de raccourcis clavier :
- C est la touche Contrôle () ;
- M est la touche Meta, qui correspond à la touche Alt de gauche sur un PC ou la touche Option () sur un Mac (toutefois, voir l'encadré) ;
- ESC est la touche Échap () et est équivalente à Meta ;
- SPC est la barre d'espacement ;
- DEL est la touche Retour arrière () — et non la toucheSupprimer ;
- RET est la touche Entrée ().
- Toutes les fonctionnalités de Emacs correspondent à une commande pouvant être tapée dans le minibuffer. M-x démarre l'invite de commande.
- Le caractère ~ représente le dossier vers lequel pointe la variable d'environnement $HOME (Linux, OS X) ou %HOME% (Windows). C'est le dossier par défaut de Emacs.
- La barre oblique (/) est utilisée pour séparer les dossiers dans les chemins d'accès aux fichiers, même sous Windows.
- En général, il est possible d'appuyer sur TAB dans le minibuffer pour compléter les noms de fichiers ou de commandes.
Par défaut sous OS X, la touche Meta est assignée à Option (). Sur les claviers français, cela empêche d'accéder à certains caractères spéciaux tels que [, ], { ou }.
Une solution à cette fâcheuse situation consiste à assigner la touche Meta à Commande (). Cela bloque alors l'accès à certains raccourcis Mac, mais la situation est moins critique ainsi. Pour assigner la touche Meta à Commande () et laisser la touche Option () jouer son rôle usuel, il suffit d'insérer les lignes suivantes dans son fichier de configuration .emacs (voir la section A.7Configuration de l'éditeur) :
2.
3.
4.
5.
6.
;;; ====================================
;;; Assigner la touche Meta à Commande
;;; et laisser Option être Option
;;; ====================================
(setq-default ns-command-modifier 'meta
)
(setq-default ns-option-modifier 'none
)
A-5. Commandes de base▲
Emacs comporte une pléthore de commandes, il serait donc futile de tenter d'en faire une liste exhaustive ici. Nous nous contenterons de mentionner les commandes les plus importantes regroupées par tâche.
A-5-1. Les essentielles▲
démarrer l'invite de commande.
bouton de panique : annuler, quitter ! Presser plus d'une fois au besoin.
A-5-2. Manipulation de fichiers▲
Entre parenthèses, le nom de la commande Emacs correspondante. On peut entrer cette commande dans le minibuffer au lieu d'utiliser le raccourci clavier.
On remarquera qu'il n'existe pas de commande « nouveau fichier » dans Emacs. Pour créer un nouveau fichier, il suffit d'ouvrir un fichier n'existant pas.
ouvrir un fichier (find-file)
sauvegarder (save-buffer)
sauvegarder sous (write-file)
fermer un fichier (kill-buffer)
annuler (pratiquement illimité) ; aussi C-x u (undo)
recherche incrémentale avant (isearch-forward)
Recherche incrémentale arrière (isearch-backward)
rechercher et remplacer (query-replace)
A-5-3. Déplacements simples du curseur▲
déplacer d'un caractère vers l'arrière | l'avant (backward-char | forward-char)
aller au début | fin de la ligne (move-beginning-of-line | move-end-of-line)
aller à la ligne précédente | suivante (previous-line | next-line)
aller au début | fin du fichier (beginning-of-buffer | end-of-buffer)
effacer le caractère à gauche | droite du curseur (delete-backward-char | delete-char)
effacer le mot à gauche | droite du curseur (backward-kill-word | kill-word)
supprimer jusqu'à la fin de la ligne (kill-line)
Plusieurs des raccourcis clavier de Emacs composés avec la touche Contrôle () sont valides sous OS X. Par exemple, A et E déplacent le curseur au début et à la fin de la ligne dans les champs texte.
A-5-4. Sélection de texte, copier, coller, couper▲
débute la sélection (set-mark-command)
couper la sélection (kill-region)
copier la sélection (kill-ring-save)
coller (yank)
remplacer le dernier texte collé par la sélection précédente (yank-pop)
- Il est possible d'utiliser les raccourcis clavier usuels de Windows (C-c, C-x, C-v) et OS X (C, X, V) en activant le mode CUA dans le menu Options.
- On peut copier-coller directement avec la souris dans Windows en sélectionnant du texte puis en appuyant sur le bouton central (ou la molette) à l'endroit souhaité pour y copier le texte.
A-5-5. Manipulation de fenêtres▲
changer de buffer (switch-buffer)
séparer l'écran en deux fenêtres (split-window-vertically)
conserver uniquement la fenêtre courante (delete-other-windows)
fermer la fenêtre courante (delete-window)
aller vers une autre fenêtre lorsqu'il y en a plus d'une (other-window)
A-5-6. Manipulation de fihiers de script dans le mode ESS▲
Le mode ESS dispose de fonctions « intelligentes » qui facilitent grandement la manipulation des fichiers de script. Les deux principales commandes à connaître sont les suivantes :
évaluer dans le processus R la ligne sous le curseur ou la région sélectionnée, puis déplacer le curseur à la prochaine expression (ess-eval-region-or-line-and-step) ;
évaluer dans le processus R la région sélectionnée, la fonction ou le paragraphe (tout bloc entre deux lignes blanches) dans lequel se trouve le curseur, puis déplacer le curseur à la prochaine expression
(ess-eval-region-or-function-or-paragraph-and-step).
Les quelques autres fonctions utiles sont :
déplacer le curseur vers le processus R (ess-switch-to-inferior-or-script-buffer) ;
évaluer le code de la fonction courante dans le processus R (ess-eval-function) ;
évaluer le code du fichier courant en entier dans le processus R (ess-load-file) ;
aide sur une commande R (ess-display-help-on-object).
A-5-7. Interaction avec l'invite de commande R▲
commande précédente | suivante dans l'historique (previous-matching-history-from-input | next-matching-history-from-input).
déplacer le curseur vers le fichier de script courant (ess-switch-to-inferior-or-script-buffer).
sélectionner le résultat de la dernière commande (mark-paragraph).
effacer le résultat de la dernière commande (comint-delete-output).
aide sur une commande R (ess-display-help-on-object).
terminer le processus R (ess-quit).
A-5-8. Consultation des rubriques d'aide de R▲
aller à la section précédente | suivante de la rubrique (ess-skip-to-previous-section | ess-skip-to-next-section).
aller à la section de la liste des arguments (Arguments).
aller à la section des détails sur la fonction (Details).
aller à la section sur la valeur retournée par la fonction (Value).
aller à la section des fonctions apparentée (See Also).
aller à la section des exemples (Examples).
évaluer la ligne sous le curseur ; pratique pour exécuter les exemples (ess-eval-line-and-step).
évaluer la région sélectionnée (ess-eval-region).
ouvrir une nouvelle rubrique d'aide, par défaut pour le mot se trouvant sous le curseur (ess-display-help-on-object).
retourner au processus ESS en laissant la rubrique d'aide visible (ess-switch-to-end-of-ESS).
fermer la rubrique d'aide et retourner au processus ESS (ess-kill-buffer-and-go).
A-6. Anatomie d'une session de travail (bis)▲
On reprend ici les étapes d'une session de travail type présentées à la section 1.6Anatomie d'une session de travail, mais en expliquant comment compléter chacune dans Emacs avec le mode ESS.
-
Lancer Emacs et ouvrir un fichier de script avec
- C-x C-f
ou avec le menu
- File|Open File…
En spécifiant un nom de fichier qui n'existe pas déjà, on se trouve à créer un nouveau fichier de script. S'assurer de terminer le nom du nouveau fichier par .R pour que Emacs reconnaisse automatiquement qu'il s'agit d'un fichier de script R.
-
Démarrer un processus R à l'intérieur même de Emacs avec
- M-x R
Emacs demandera alors de spécifier le répertoire de travail (starting data directory). Accepter la valeur par défaut, par exemple
- ~/
ou indiquer un autre dossier. Un éventuel message de Emacs à l'effet que le fichier .Rhistory n'a pas été trouvé est sans conséquence et peut être ignoré.
-
Composer le code. Lors de cette étape, on se déplacera souvent du fichier de script à la ligne de commande afin d'essayer diverses expressions. On exécutera également des parties seulement du code se trouvant dans le fichier de script. Les commandes les plus utilisées sont alors :
- C-RET pour exécuter une ligne du fichier de script ou la région sélectionnée ;
- C-c C-c pour exécuter un paragraphe du fichier de script ;
- C-c C-z pour se déplacer entre le fichier de script et la ligne de commande R.
-
Sauvegarder le fichier de script :
- C-x C-s
Les quatrième et cinquième caractères de la ligne de mode changent de ** à --.
-
Sauvegarder si désiré l'espace de travail de R avec save.image(). Cela n'est habituellement pas nécessaire à moins que l'espace de travail ne contienne des objets importants ou longs à recréer.
-
Quitter le processus R avec
- C-c C-q
Cette commande ESS se chargera de fermer tous les fichiers associés au processus R. On peut ensuite quitter Emacs en fermant l'application de la manière usuelle.
A-7. Configuration de l'éditeur▲
Une des grandes forces de Emacs est qu'à peu près chacune de ses facettes est configurable : couleurs, polices de caractères, raccourcis clavier, etc.
- La configuration de Emacs se fait par le biais de commandes réunies dans un fichier de configuration nommé .emacs (le point est important !) que Emacs lit au démarrage.
- Le fichier .emacs doit se trouver dans le dossier ~/, c'est-à-dire dans le dossier de départ de l'utilisateur sous Linux et OS X, et dans le dossier référencé par la variable d'environnement %HOME% sous Windows.
A-8. Aide et documentation▲
Emacs possède son propre système d'aide très exhaustif, mais dont la navigation est peu intuitive selon les standards d'aujourd'hui. Consulter le menu Help.
Autrement, on trouvera les manuels de Emacs et de ESS en divers formats dans les sites respectifs des deux projets :
Enfin, si le désespoir vous prend au cours d'une séance de codage intensive, vous pouvez toujours consulter le psychothérapeute Emacs. On le trouve, bien entendu, dans le menu Help !