Accueil > Informatique > Emacs > Straight : un gestionnaire de paquets pour Emacs
Straight : un gestionnaire de paquets pour Emacs
jeudi 29 octobre 2020, par
Introduction
N’importe quel utilisateur d’emacs qui a un peu joué avec ses fichiers de configuration, sait qu’il s’agit d’une activité chronophage et instable le monde d’emacs étant tellement riche et mouvant. On retrouve vite avec l’alternative suivante :
- avoir une configuration stable et ne plus toucher à rien ;
- avoir les derniers paquets à la mode et modifier ses fichiers de configuration souvent.
Dans le premier cas, on passe à côté de la vivacité de la communauté et dans le second on passe plus de temps à configurer emacs que sur ses projets...
Le gestionnaire de paquet straight permet de gérer facilement l’installation et la configuration des paquets. Il permet entre autre de figer la version d’un ensemble de paquets. L’ensemble des possibilités (ainsi qu’une comparaison avec d’autres gestionnaires de paquets) est longuement décrit sur la page du projet sur github.
Exemple de mise en oeuvre
Pré-requis
- installer git
- emacs 24.5+
- sauvegarder la configuration existente d’emacs (.emacs.d, .emacs, .site-lisp etc.)
Contexte
- Debian Buster
- Dans ce qui suit , on suppose que les fichiers de configuration d’emacs sont dans le répertoire
~/.emacs.d/et sont au nombre de 2 : init.el et custom.el - Intégration avec use-package
- Scénario :
- configuration de la version installée (built-in) d’org-mode
- installation de projectile un gestionnaire de projet depuis le dépôt de paquets Melpa
- installation de ox-report un modèle pour org-mode
Mise en oeuvre
Commençons par imposer l’utilisation de l’utf-8 et de bash
~/.emacs.d/init.el
;;; .emacs --- My emacs config -*- lexical-binding: t; -*-
;;; Commentary:
;;; Code:
(setq byte-compile-warnings '(cl-functions)) ;; supprime les avertissements concernant cl-libs
;; Use UTF8 everywhere, see https://thraxys.wordpress.com/2016/01/13/utf-8-in-emacs-everywhere-forever/
(setq locale-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(set-language-environment 'utf-8)
(prefer-coding-system 'utf-8)
(when (display-graphic-p)
(setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING)))
(setq shell-file-name "/bin/bash") ;; utilise le Bourne Again ShellInstallons et configurons straight (ainsi que use-package et bind-key, ces deux paquets permettent de faciliter la configuration)
~/.emacs.d/init.el[suite]
;; configuration de straight
;; Bootstrap `straight.el'
(defvar bootstrap-version)
(let ((bootstrap-file
(expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
(bootstrap-version 5))
(unless (file-exists-p bootstrap-file)
(with-current-buffer
(url-retrieve-synchronously
"https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el"
'silent 'inhibit-cookies)
(goto-char (point-max))
(eval-print-last-sexp)))
(load bootstrap-file nil 'nomessage))
;; installation de use-package
(straight-use-package 'use-package)
(require 'package)
(use-package bind-key
:straight t)Configurons légèrement org-mode. On utilise ici la version pré-installée d’Org-mode.
La commande org-agenda est assignée à Ctrl-a grâce à :bind.
~/.emacs.d/init.el[suite]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;; Installation et configuration des paquets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(use-package org
:straight (:type built-in)
:bind
("C-a" . org-agenda)
:config
(setq org-log-done nil)
(setq org-todo-keyword-faces
'(("IDEA" . (:foreground "GoldenRod" :weight bold))
("NEXT" . (:foreground "IndianRed1" :weight bold))
("STARTED" . (:foreground "OrangeRed" :weight bold))
("WAITING" . (:foreground "coral" :weight bold))
("CANCELED" . (:foreground "LimeGreen" :weight bold))
("DELEGATED" . (:foreground "LimeGreen" :weight bold))
("SOMEDAY" . (:foreground "LimeGreen" :weight bold))
))
(org-babel-do-load-languages
'org-babel-load-languages
'(
(emacs-lisp . t)
(org . t)
(shell . t)
(python . t)
(gnuplot . t)
(octave . t)
(R . t)
))
)Installons projectile depuis melpa.
~/.emacs.d/init.el[suite]
(use-package projectile
:straight t
:diminish projectile-mode
:init
;; this must be done before :config so we can't use :bind
(define-key global-map (kbd "C-c p") 'projectile-command-map)
:config
(projectile-mode t)
(setq
projectile-globally-ignored-files
(append '("*.aux" "*.out" "._sync*" ) projectile-globally-ignored-files)
projectile-indexing-method (quote alien)
projectile-git-command "git ls-files -zc --exclude-standard"
)
)Installons ox-report depuis github
~/.emacs.d/init.el[suite]
(use-package ox-report
:straight (ox-report :type git :host github :repo "DarkBuffalo/ox-report" :fetcher github))Enfin chargeons le fichier de personnalisation d’emacs
~/.emacs.d/init.el[suite et fin]
;;; init.el ends here
(setq custom-file (concat user-emacs-directory "custom.el"))
(load custom-file)Initialement, le fichier custom.el est quasiment vide.
~/.emacs.d/custom.el
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)Résultats et commentaires
- Le premier démarrage d’emacs est long : emacs télécharge, compile, installe et configure les paquets. Ensuite, les démarrages s’effectue presque normalement : par défaut straight vérfie si une nouvelle version d’un paquet est disponible et l’installe le cas échéant.
- La commande straight-freese-versions
M-x straight-freeze-versions
permet de sauvegarder l’état des paquets.
Ainsi, en sauvegardant les trois fichiers :
~/.emacs.d/init.el
~/.emacs.d/custom.el
~/.emacs.d/straight/versions/default.el
vous avez une configuration portable et reproductible d’emacs.
- Le gestionnaire gère les dépendances et installe automatiquement les paquets requis
- Une grande partie de la magie de straight repose sur git
- je vous recommande de lire en détail la page github de straight pour en savoir plus sur les possibilités de ce gestionnaire de paquets et sur emacs en général.
Voir en ligne : straight
Heptagone