Mastodon >

Mon premier fichier de configuration

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 :

  touch ~/.emacs.d/init.el
Création du fichier init.el

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.

  mkdir ~/.emacs.d/configuration && touch ~/.emacs.d/configuration/conf.org
Création du fichier conf.org

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.

  touch ~/.emacs.d/configuration/custom_vars.el
Création du fichier custom-vars.el

Pour résumer, voici la structure que prendra notre configuration.

Diagramme de la configuration
Structure de la 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 des dépôts.
(setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/")
			 ("nongnu" . "https://elpa.nongnu.org/nongnu/")
			 ("melpa" . "https://melpa.org/packages/")))
Configuration des dépôts

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.

  ;; Installation de use-package
  (setq package-list
		'(use-package))
  (package-initialize)
  (unless package-archive-contents
	(package-refresh-contents))
  (dolist (package package-list)
	(unless (package-installed-p package)
	  (package-install package)))
  (eval-when-compile
	(require 'use-package))
Configuration de use-package

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.

;; Utiliser un fichier custom séparé
(setq user-emacs-directory "~/.emacs.d/configuration/")
(setq custom-file (locate-user-emacs-file "custom-vars.el"))
(load custom-file 'noerror 'nomessage)
Chargement du fichier custom-vars

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.

;; Utiliser notre fichier conf.org
(require 'org)
(org-babel-load-file (concat user-emacs-directory "conf.org"))

;; Activer les raccourcis tempo
(require 'org-tempo)
Chargement du fichier conf.org

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.


Articles récents

Mon premier fichier de configuration

Participer au blog

C-x C-f emacsem



Archives

2022 (1)
2020 (2)