@@ -26,10 +26,9 @@ l'édition de fichier orienté ligne.
...
@@ -26,10 +26,9 @@ l'édition de fichier orienté ligne.
En 1983 RMS lance le projet [[https://fr.wikipedia.org/wiki/Projet_GNU][GNU]] et l'une de ses premières tâches est
En 1983 RMS lance le projet [[https://fr.wikipedia.org/wiki/Projet_GNU][GNU]] et l'une de ses premières tâches est
de le doter d'un éditeur digne de ce nom. Profitant de son expérience
de le doter d'un éditeur digne de ce nom. Profitant de son expérience
et en s'inspirant de [[https://fr.wikipedia.org/wiki/Gosling_Emacs][Gosling Emacs]] il crée [[https://fr.wikipedia.org/wiki/GNU_Emacs][GNU Emacs]]. Pour cela, il
et en s'inspirant de [[https://fr.wikipedia.org/wiki/Gosling_Emacs][Gosling Emacs]] il crée [[https://fr.wikipedia.org/wiki/GNU_Emacs][GNU Emacs]]. Pour cela, il
l'écrit en [[https://fr.wikipedia.org/wiki/C_(langage)][C]] et permet l'écriture d'extensions en
l'écrit en [[https://fr.wikipedia.org/wiki/C_(langage)][C]] et permet l'écriture d'extensions en [[https://fr.wikipedia.org/wiki/Emacs_Lisp][Emacs Lisp]]. C'est
[[https://fr.wikipedia.org/wiki/Emacs_Lisp][Emacs Lisp]]. C'est probablement cette extensibilité qui fait que
probablement cette extensibilité qui fait que malgré son âge avancé,
malgré son âge avancé, Emacs est l'un des outils les plus utilisés
Emacs est l'un des outils les plus utilisés pour le développement.
pour le développement.
* Lancement d'Emacs
* Lancement d'Emacs
Pour lancer Emacs, il suffit de taper la commande
Pour lancer Emacs, il suffit de taper la commande
...
@@ -38,15 +37,15 @@ Pour lancer Emacs, il suffit de taper la commande
...
@@ -38,15 +37,15 @@ Pour lancer Emacs, il suffit de taper la commande
#+END_SRC
#+END_SRC
dans un terminal. Si le terminal ne permet pas l'ouverture de fenêtres
dans un terminal. Si le terminal ne permet pas l'ouverture de fenêtres
graphiques (pas de ~DISPLAY~), Emacs démarrera alors en mode texte. Si
graphiques (pas de ~DISPLAY~), Emacs démarrera alors en mode texte. Si
on utilise l'option ~-nw~, pour /no window/, on force le lancement
on utilise l'option ~-nw~, pour /no window/, on force le lancement d'Emacs
d'Emacs en mode texte.
en mode texte.
#+BEGIN_SRC bash :eval no
#+BEGIN_SRC bash :eval no
emacs -nw
emacs -nw
#+END_SRC
#+END_SRC
Attention dans ce mode, pour quitter Emacs, il faut utiliser le
Attention dans ce mode, pour quitter Emacs, il faut utiliser le
raccourcis clavier ~C-x C-c~ (contrôle-x puis contrôle-c). Une
raccourcis clavier ~C-x C-c~ (contrôle-x puis contrôle-c). Une dernière
dernière option pratique est l'option ~-q~. Son effet est de lancer
option pratique est l'option ~-q~. Son effet est de lancer Emacs sans
Emacs sans utiliser la configuration locale.
utiliser la configuration locale.
#+BEGIN_SRC bash :eval no
#+BEGIN_SRC bash :eval no
emacs -q
emacs -q
#+END_SRC
#+END_SRC
...
@@ -60,20 +59,20 @@ fonctionnement.
...
@@ -60,20 +59,20 @@ fonctionnement.
Comme on l'a dit, Emacs a vu le jour comme un ensemble de *macros*,
Comme on l'a dit, Emacs a vu le jour comme un ensemble de *macros*,
c'est-à-dire des enchaînements de commandes simples ou d'autres
c'est-à-dire des enchaînements de commandes simples ou d'autres
macros. Ces macros (ou plus précisément ces *fonctions*) sont
macros. Ces macros (ou plus précisément ces *fonctions*) sont toujours
toujours un des piliers du fonctionnement d'Emacs. Le nombre de
un des piliers du fonctionnement d'Emacs. Le nombre de fonctions
fonctions proposées par Emacs est très important et pour y accéder
proposées par Emacs est très important et pour y accéder rapidement
rapidement Emacs permet l'usage de raccourcis clavier. C'est en
Emacs permet l'usage de raccourcis clavier. C'est en apprenant et en
apprenant et en utilisant ces raccourcis qu'on gagne en
utilisant ces raccourcis qu'on gagne en productivité. L'utilisation de
productivité. L'utilisation de la souris avec Emacs est donc souvent
la souris avec Emacs est donc souvent contre productive. Enfin on peut
contre productive. Enfin on peut facilement créer et enregistrer des
facilement créer et enregistrer des enchaînements de commandes pour
enchaînements de commandes pour éviter les tâches répétitives.
éviter les tâches répétitives.
Une première façon d'apprendre un peu Emacs est d'effectuer le
Une première façon d'apprendre un peu Emacs est d'effectuer le
*tutoriel intégré* qu'il propose. Pour démarrer le tutoriel il suffit
*tutoriel intégré* qu'il propose. Pour démarrer le tutoriel il suffit de
de saisir le raccourcis ~C-h t~. Pour le novice, cela signifie qu'on
saisir le raccourcis ~C-h t~. Pour le novice, cela signifie qu'on doit
doit taper sur la touche contrôle (~C~) et sur la touche ~h~
taper sur la touche contrôle (~C~) et sur la touche ~h~ simultanément,
simultanément, puis sur la touche ~t~ seulement.
puis sur la touche ~t~ seulement.
** Interface
** Interface
Globalement, l'interface d'Emacs est assez intuitive, mais elle a
Globalement, l'interface d'Emacs est assez intuitive, mais elle a
...
@@ -92,8 +91,8 @@ Emacs. Chaque vue est appelée *fenêtre*. Attention, dans le jargon
...
@@ -92,8 +91,8 @@ Emacs. Chaque vue est appelée *fenêtre*. Attention, dans le jargon
Emacs, une fenêtre n'est pas à confondre avec les fenêtres gérées par
Emacs, une fenêtre n'est pas à confondre avec les fenêtres gérées par
le /window-manager/ de l'interface graphique (voir
le /window-manager/ de l'interface graphique (voir
figure [[fig:trois-windows]], où un [[sec:frames][cadre]] Emacs est découpé en trois
figure [[fig:trois-windows]], où un [[sec:frames][cadre]] Emacs est découpé en trois
fenêtres). On peut afficher un *même* /buffer/ dans différentes
fenêtres). On peut afficher un *même* /buffer/ dans différentes fenêtres
fenêtres et il peut être modifié dans n'importe laquelle de ses vues.
et il peut être modifié dans n'importe laquelle de ses vues.
#+CAPTION: Trois fenêtres affichées dans Emacs
#+CAPTION: Trois fenêtres affichées dans Emacs
#+NAME: fig:trois-windows
#+NAME: fig:trois-windows
...
@@ -102,27 +101,26 @@ fenêtres et il peut être modifié dans n'importe laquelle de ses vues.
...
@@ -102,27 +101,26 @@ fenêtres et il peut être modifié dans n'importe laquelle de ses vues.
*** <<sec:frames>> Cadre (/frames/)
*** <<sec:frames>> Cadre (/frames/)
Lorsqu'il est exécuté en mode graphique, une même instance d'Emacs
Lorsqu'il est exécuté en mode graphique, une même instance d'Emacs
peut proposer plusieurs cadres (/frames/) d'affichage. Il s'agit en
peut proposer plusieurs cadres (/frames/) d'affichage. Il s'agit en fait
fait de plusieurs fenêtres du gestionnaire graphique.
de plusieurs fenêtres du gestionnaire graphique.
Dans l'exemple de la figure [[fig:deux-frames]], il s'agit bien de la même
Dans l'exemple de la figure [[fig:deux-frames]], il s'agit bien de la même
instance d'Emacs\nbsp{}: on a lancé un seul exécutable, mais on a ouvert un
instance d'Emacs\nbsp{}: on a lancé un seul exécutable, mais on a ouvert un
cadre (/frame/) supplémentaire. Dans chacun des cadres, on affiche une
cadre (/frame/) supplémentaire. Dans chacun des cadres, on affiche une
vue d'un *même* /buffer/ d'édition, c'est-à-dire que le *même*
vue d'un *même* /buffer/ d'édition, c'est-à-dire que le *même* /buffer/ peut
/buffer/ peut être modifié par l'intermédiaire de l'un ou l'autre des
être modifié par l'intermédiaire de l'un ou l'autre des cadres.
cadres.
#+CAPTION: Deux cadres (/frames/) Emacs affichant le même /buffer/
#+CAPTION: Deux cadres (/frames/) Emacs affichant le même /buffer/
#+NAME: fig:deux-frames
#+NAME: fig:deux-frames
[[file:emacs-frames.png]]
[[file:emacs-frames.png]]
*** /Modeline/
*** /Modeline/
Dans Emacs, chaque /buffer/ est délimité *en bas* par la
Dans Emacs, chaque /buffer/ est délimité *en bas* par la /modeline/. Il
/modeline/. Il s'agit d'une zone dans laquelle sont affichées divers
s'agit d'une zone dans laquelle sont affichées divers informations
informations quant au mode de fonctionnement d'Emacs dans son
quant au mode de fonctionnement d'Emacs dans son /buffer/. On la voit en
/buffer/. On la voit en action sur la figure [[fig:emacs-modeline]], le
action sur la figure [[fig:emacs-modeline]], le mode majeur est ~CMake~, le
mode majeur est ~CMake~, le fichier édité s'appelle ~CMakeList.txt~,
fichier édité s'appelle ~CMakeList.txt~, enfin, on travaille sur la
enfin, on travaille sur la branche ~develop~.
branche ~develop~.
#+CAPTION: La /modeline/. Ici on voit qu'on est en mode ~CMake~, que le fichier édité s'appelle ~CMakeList.txt~ et qu'on travaille sur la branche ~develop~.
#+CAPTION: La /modeline/. Ici on voit qu'on est en mode ~CMake~, que le fichier édité s'appelle ~CMakeList.txt~ et qu'on travaille sur la branche ~develop~.
#+NAME: fig:emacs-modeline
#+NAME: fig:emacs-modeline
...
@@ -178,16 +176,16 @@ On ne liste ici que quelques unes des commandes (et raccourcis),
...
@@ -178,16 +176,16 @@ On ne liste ici que quelques unes des commandes (et raccourcis),
seulement une liste de celles qu'on juge importantes.
seulement une liste de celles qu'on juge importantes.
Noter que cette configuration utilise le mode ~which-key~, dont l'une
Noter que cette configuration utilise le mode ~which-key~, dont l'une
des fonctionnalités est de fournir une aide dans le /minibuffer/ lors
des fonctionnalités est de fournir une aide dans le /minibuffer/ lors de
de la saisie de commandes. Par exemple, si on tape ~C-x~, au bout d'un
la saisie de commandes. Par exemple, si on tape ~C-x~, au bout d'un
instant ~which-key~ affiche dans le /minibuffer/ la liste des
instant ~which-key~ affiche dans le /minibuffer/ la liste des commandes
commandes qui commencent par ~C-x~. C'est donc un excellent moyen de
qui commencent par ~C-x~. C'est donc un excellent moyen de retrouver les
retrouver les raccourcis et d'en apprendre de nouveaux. Cette aide est
raccourcis et d'en apprendre de nouveaux. Cette aide est évidemment