Ce billet est le premier d'une série de trois qui donnera quelques clés pour démarrer l'aventure avec Emacs.
Dans ce premier billet, nous allons créer un fichier de configuration minimal qui facilite nos
interactions avec le logiciel.
Dans un second billet, nous étudierons les principaux raccourcis claviers, nous apprendrons à les
retrouver et à en créer de nouveaux.
Dans un dernier billet, nous apprendrons à utiliser l'aide du logiciel qui reste un élément
déterminant de votre progression.
Terminologie
Même si nous ne parlerons pas de l'ensemble des raccourcis claviers dans cet article, nous devons
expliquer le fonctionnement de ces derniers. Nous y reviendrons plus en détail dans l'article
concerné. Dans mes billets C-x
signifie appuyer simultanément sur la touche control
et la touche x
.
M-x
signifie appuyer simultanément sur la touche Méta Alt
ou équivalent (selon le système
d'exploitation) et la touche x
.
Ainsi, C-c C-v
signifie de maintenir la touche control
enfoncée en appuyant sur c
suivi de v
alors que
C-c v
signifie que la touche control
est actionnée pour la lettre c
mais pas pour la lettre v
.
Les quatre raccourcis incontournables que vous devez connaître sont :
-
C-x C-f ouvre (visite) un fichier ;
-
C-x C-s sauvegarde un fichier ;
-
C-x C-c quitte le logiciel.
-
C-x C-e évaluer une expression
Création des fichiers de configuration
Toute la configuration d'Emacs passe par un fichier en emacs-lisp
. Modifier un comportement du
logiciel, installer de nouvelles fonctionnalités ou programmer des fonctions se passent dans le
fichier nommé init.el
situé par défaut dans le dossier .emacs.d
qui se trouve à la racine du dossier personnel.
Pour le créer via un terminal, il suffit de taper la commande suivante :
Si nous souhaitons créer directement le fichier dans Emacs, il suffit de l'ouvrir et de l'enregistrer.
C-x C-f
puis taper ~/.emacs.d/init.el
. Un fichier vide va alors s'ouvrir. Emacs ne créera pas le
fichier sur le disque avant la première sauvegarde, il faut donc faire un C-x C-s
pour écrire le
fichier sur le disque.
Avec le temps ce fichier pourra devenir assez conséquent et la relecture pourra s'avérer difficile.
Une solution consiste à écrire la configuration dans un fichier texte au format org
. Ce système nous
permettra d'organiser notre fichier sous forme de chapitres et de sections. Nous pourrons également
documenter notre configuration de façon claire. Je vous propose de créer ce fichier org
dans un
dossier nommé configuration
. Nous y insérerons toute notre configuration à l'aide de blocs de code
en emasc-lisp
. À chaque démarrage, Emacs se servira des bouts de code en elisp
comme fichier de
configuration.
Comme précédemment, nous pouvons également le faire dans Emacs en ouvrant puis en enregistrant le
fichier. Emacs demandera alors s'il faut créer le dossier configuration
. Il suffira de valider
l'action.
De la même façon, nous allons créer un troisième fichier custom_vars.el
dont nous reparlerons plus
tard. Au choix passez par la ligne de commande ou par Emacs.
Pour résumer, voici la structure que prendra notre configuration.
Configurer init.el
L'ensemble des fichiers ont été créés, il est temps d'y insérer du code !
Ouvrons le fichier init.el
avec Emacs.
C-x C-f ~/.emacs.d/init.el
Notez que vous pouvez « auto-compléter » avec la touche TAB
. Une fois pour compléter s'il y a un
seul candidat et deux fois pour voir tous les candidats.
Un fichier vide s'ouvre, son nom s'affiche dans la modeline
(en bas de la fenêtre). Ce fichier contiendra le
minimum de configuration possible puis enverra Emacs lire la suite de la configuration dans notre
fichier conf.org
.
Configuration des dépôts
Pour débuter notre configuration, nous allons configurer les dépôts à travers lesquels nous pourrons installer de nouvelles fonctionnalités. Emacs est souvent comparé à un système d'exploitation et à ce titre il possède effectivement des dépôts de logiciels !
Vous pouvez copier/coller à la suite les bouts de codes suivants :
Installation de use-package
Use-package est un système de macros qui permet de mieux organiser la configuration des paquets. Son
utilisation n'est pas obligatoire mais notre configuration sera plus lisible. Nous allons le mettre
en place dès maintenant pour qu'il soit actif avant le chargement de notre fichier conf.org
.
Pour information, voici ce que fait le code:
Mettre use-package dans une liste de package
Initialise le système de package
Mets à jour la liste des packages
Utilise la liste et l'installe si le package n'est pas déjà installé
Charge use-package
Le fichier custom
Il y a plusieurs façons de configurer Emacs. Soit nous utilisons le fichier de configuration, soit
nous utilisons une interface graphique. Dans ce dernier cas, Emacs génère lui même le fichier de
configuration. Ce dernier reste peu lisible et difficile à retoucher. Pour ne pas polluer notre
propre fichier de configuration, nous allons dire à Emacs de mettre sa configuration dans un autre
fichier que nous avons nommé custom-vars.el
à l'étape précédente.
Configurons ceci dans notre fichier.
Renvoyer Emacs vers le fichier org
L'essentiel de notre fichier init.el
est configuré, il reste à lui dire d'aller chercher la suite de
la configuration dans notre fichier conf.org
. La fonction en charge d'extraire du code elisp
d'un
fichier org
se nomme org-babel-load-file
.
Il vous reste à valider vos changements en enregistrant votre fichier avec C-x C-s
.
Le fichier conf.org
n'ayant pas encore de code, ne redémarrez pas Emacs maintenant car il vous
afficherait une erreur au démarrage.
Évaluez simplement la dernière ligne avec C-x C-e
pour profiter dès maintenant de la fonction org-tempo
.
Configuration du fichier conf.org
Notre configuration du fichier init.el
étant terminée, tout le reste de la configuration peut
dorénavant se faire dans le fichier conf.org
.
Je vous propose d'effectuer quelques modifications qui ( je le pense ) amélioreront votre expérience avec le logiciel. Les choix que je fais sont arbitraires et il vous reviendra de les modifier selon votre convenance personnelle.
Pour résumer, nous allons modifier quelques variables internes à Emacs puis nous allons installer quelques logiciels qui faciliteront l'interaction avec le logiciel.
Ouvrez le fichier ~/.emacs.d/configuration/conf.org
Ce fichier est un fichier texte, ce qui vous permet d'utiliser la syntaxe orgmode pour formater votre fichier.
Prenons l'exemple suivant :
-
Nous souhaitons créer un titre de niveau 1
-
Nous documentons notre configuration
-
Nous insérons du code lisp
-
Nous évaluons le code pour valider le changement.
* Configuration interne Nous allons désactiver la barre d'outil d'Emacs. #+BEGIN_SRC emacs-lisp (tool-bar-mode -1) #+END_SRC
Comme vous le voyez, lorsque nous insérons du code, nous devons créer un environnement source (SRC) et
préciser de quel langage il s'agit. Pour créer cet environnement il existe un raccourci. Tapez <s
puis sur la touche de tabulation. L'environnement est créé, il suffit juste de préciser le langage
utilisé. Vous devez indiquer emacs-lisp.
Si le raccourci de org-tempo
ne fonctionnait pas, vous pouvez l'appeler avec le raccourci clavier
C-c C-,
qui affichera l'ensemble des environnements disponibles.
Le raccourci a été activé dans le fichier init.el avec org-tempo.
<s <TAB>
En y ajoutant le langage, vous devriez obtenir l'environnement suivant.
#+BEGIN_SRC emacs-lisp #+END_SRC
Dans la suite du document, je ne ferai plus apparaître l'environnement autour du code. N'oubliez pas de le créer à chaque fois pour que votre code soit interprété comme tel !
Pour évaluer le code et activer votre configuration, il suffit de se positionner à la fin des
parenthèses et d'utiliser le raccourci C-x C-e
. Si votre configuration contient plusieurs niveaux de
parenthèses, positionnez vous après la dernière pour évaluer l'ensemble du code.
Vous pouvez également redémarrer Emacs qui évaluera alors tout le code. Ce « premier » démarrage pourra être plus ou moins long selon le nombre de paquets à installer.
Modifications internes
Dans l'ordre nous allons :
-
Supprimer les messages d'accueil
-
Désactiver la barre d'outil
-
Appairer les parenthèses
-
Démarrer Emacs en fenêtre maximisée
-
Définir l'encodage
-
Garder en mémoire les 25 derniers fichiers ouverts (C-x C-r pour les ouvrir)
(setq inhibit-splash-screen t)
(setq inhibit-startup-message t)
(tool-bar-mode -1)
(electric-pair-mode t)
(add-to-list 'default-frame-alist '(fullscreen . maximized))
(set-language-environment "UTF-8")
(set-default-coding-systems 'utf-8)
(set-locale-environment "fr_FR.utf-8")
(setq european-calendar-style 't)
(load-library "iso-transl")
(recentf-mode 1)
(setq recentf-max-menu-items 25)
(setq recentf-max-saved-items 25)
;; Raccourci désactivé au profit de consult-recent-file installé dans le bloc suivant
;; (global-set-key "\C-x\ \C-r" 'recentf-open-files)
Si un élément ne vous convient pas, il suffit de supprimer la ligne ou de la commenter en insérant
;;
en début de ligne.
Installation de paquets externes.
Nous allons maintenant ajouter des paquets qui nous permettront de mieux interagir avec Emacs.
Nous allons ajouter cinq paquets qui me semblent indispensables. Il en existe d'autres qui possèdent à peu près les mêmes fonctionnalités. Leur choix ainsi que leur configuration sont arbitraires et peuvent être changés en fonction de vos goûts.
Le premier est selectrum qui permet d'avoir une complétion verticale dans le minibuffer. Il suffit d'activer le mode.
Le second est prescient qui filtre les recherches en fonction de leur fréquence. Il suffit d'activer le mode et de le rendre persistant entre les sessions.
Le troisième est orderless qui permet de ne saisir que des mots ou des bouts de mots pour retrouver un terme ou une fonction. Après activation les options permettent de surligner les lettres tapées dans les résultats visibles.
Le quatrième est consult qui offre des fonctions de recherche que nous remappons avec les raccourcis par défaut.
J'effectue donc ma recherche avec consult-line C-s
et j'inclus une recherche sur les sections avec
consult-outline C-r
. Deux façons de chercher dans un fichier. Il est à noter que C-x b
permet
dorénavant de rechercher un buffer mais aussi un fichier ou un bookmark. Taper b, f ou m suivi d'une
espace pour limiter la recherche. L'utilisation des registers
est ici simplifiée par rapport à la
fonction native d'Emacs mais vous aurez le temps de découvrir les registres plus tard.
Le cinquième est marginalia qui donne de la documentation sur les commandes. Ici la dernière ligne rend le tout plus bavard. Il suffit de la commenter pour que l'affichage ne soit plus systèmatique.
(use-package selectrum
:ensure t
:config
(selectrum-mode +1))
(use-package selectrum-prescient
:ensure t
:after (selectrum)
:config
(setq selectrum-prescient-enable-filtering nil)
(selectrum-prescient-mode +1)
(prescient-persist-mode +1))
(use-package orderless
:ensure t
:after (selectrum)
:config
(setq completion-styles '(orderless))
(setq orderless-skip-highlighting (lambda () selectrum-is-active))
(setq selectrum-highlight-candidates-function #'orderless-highlight-matches))
(use-package consult
:ensure t
:after (selectrum)
:bind (
("C-x C-r" . consult-recent-file)
("C-s" . consult-line)
("C-r" . consult-outline)
("C-x b" . consult-buffer)
("C-x 4 b" . consult-buffer-other-window)
("C-x 5 b" . consult-buffer-other-frame)
("M-y" . consult-yank-pop)
("M-'" . consult-register-store)
("M-?" . consult-register-load)
))
(use-package marginalia
:ensure t
:init
(marginalia-mode t)
(advice-add #'marginalia-cycle :after
(lambda () (when (bound-and-true-p selectrum-mode) (selectrum-exhibit 'keep-selected))))
:bind (("M-A" . marginalia-cycle)
:map minibuffer-local-map
("M-A" . marginalia-cycle))
:config
(setq marginalia-annotators '(marginalia-annotators-heavy marginalia-annotators-light nil)))
Lorsque vous évaluerez ce code pour chaque section avec le raccourci C-x C-e
Emacs recherchera les
paquets dans ses dépôts, télechargera et installera les paquets.
Une fois l'opération terminée, constatez la différence en tapant M-x
ou C-x C-f
. N'est-ce pas plus
convivial ?
Vous pouvez utiliser les raccourcis normaux d'Emacs que sont C-n
et C-p
pour naviguer dans les
menus.
Vous avez remarqué que vous allez très vite avoir un nombre incalculable de raccourcis claviers à
retenir. Nous allons donc installer un paquet très pratique qui listera les complétions possibles de
votre raccourci clavier. Admettons que vous tapiez C-c
, alors il affichera tous les raccourcis
possibles à partir de cette base.
(use-package which-key
:ensure t
:init
(which-key-mode))
Nous venons de terminer cette première configuration d'Emacs, elle devrait vous faciliter la découverte du logiciel.
Une dernière petite chose que vous pourriez apprécier serait un changement de thème. Emacs en
possède un certain nombre par défaut. Pour les tester, tapez M-x load-theme
puis validez. Emacs vous
proposera des thèmes à choisir. Trouvez le meilleur pour vous puis une fois votre choix effectué,
ajoutez le dans votre fichier de configuration pour le charger au démarrage.
(load-theme 'adwaita t)
Vous trouverez une gallerie de thèmes à cette adresse Certains sont intégrés par défaut et d'autres devront être installés par des paquets.
À titre personnel, j'utilise un thème sombre issu du projet doom-emacs.
(use-package doom-themes
:ensure t)
(load-theme 'doom-vibrant t)
Enfin, si vous ne l'avez pas encore fait, redémarrez Emacs pour bénéficier de l'ensemble de votre configuration.
Si vous souhaitez voir la quantité de logiciels installables, vous pouvez faire un M-x package-list-packages qui vous affichera une fenêtre avec l'ensemble des paquets. Il suffit de taper q pour quitter et revenir à votre fichier de configuration.
Vous pouvez commenter ce billet sur Mastodon en cliquant sur lien.