Emacs aussi a un gestionnaire de paquets !
Table of Contents
Si vous ne saviez pas qu'Emacs possède un système d'extensions, il est temps de vous mettre à la page et de vous créer une config aux petits oignons !
1 Utilisation
Si vous avez Emacs 24.1 ou supérieur, vous avez déjà package.el et vous pouvez de suite essayer les quelques commandes suivantes (et pour toutes les versions, nous avons el-get):
M-x package-refresh-content
pour le "apt-get update",M-x package-list-packages
pour tout lister: paquets disponibles, installés ou pas,M-x package-install RET nom-d'un-paquet RET
pour faire ce que de doit, avec TAB-completion (par exemple, magit ou evil),M-x list-packages
(un petit raccourci) pour tout lister,C-s
(comme d'hab) pour chercher un paquet,d
pour le marquer à désinstaller,i
pour le marquer à installer,U
pour tout marquer à mettre à jour,u
pour "unmark" le paquet, etx
pour tout exécuter.- il est conseillé de tout initialiser au démarrage avec la ligne
(package-initialize)
dans votre fichier de démarrage.
Maintenant, comme avec apt, il faut prendre en compte les sources de paquets. Par défaut on a accès à la base de GNU ELPA (Emacs Lisp Package Archive) mais il y en a bien plus dans MELPA et Marmalade, qu'on va donc ajouter:
(require 'package) (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) (add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/")) (package-initialize)
Notez qu'on les a ajoutées après "require package" et avant l'initialisation.
C'est tout ce que vous avez besoin de savoir.
Liens:
- documentation officielle
- pour chercher des paquets: http://melpa.org/#/ (et slugelisp)
2 Lister les paquets et les synchroniser
Maintenant voyons comment sauvegarder la liste des paquets qu'on installe. Ça nous servira d'abord à garder une trace, et à partager facilement sa configuration entre plusieurs PCs, par exemple entre maison et bureau, dès lors qu'on a placé son fichier d'init sous gestion de version (et créé un dépôt public où vous voulez, ou privé sur gitlab).
Certains ne font pas la fine bouche mais s'assurent une
reproductibilité à 100% en commitant intégralement le répertoire
~/.emacs.d/elpa/
, où sont installés les paquets.
Sinon, on écrit un petit peu d'elisp:
;; Rafraichir la liste (when (not package-archive-contents) (package-refresh-contents)) ;; Ma liste de paquets (defvar my-packages '( org evil un-autre-paquet ) "A list of packages to ensure are installed at launch.") ;; Tout installer (dolist (p my-packages) (when (not (package-installed-p p)) (package-install p)))
Petites notes de lisp: l'apostrophe ='(un deux)= est un raccourci pour
créer une liste: (list un deux)
. Le reste se comprend non ? Dans
package-installed-p
, le -p
final veut dire "predicate", donc cette
fonction va retourner true ou false (t
ou nil
).
dolist
est pour boucler sur la liste… ce n'est pas trop fonctionnel,
on aurait pu utiliser map, ok.
3 Cask et Pallet
Une autre possibilité est d'utiliser Cask et Pallet (équivalents de bundler pour Ruby?) pour écrire la liste dans un fichier à part, et pour mettre à jour automatiquement ce fichier quand on manipule des paquets dans Emacs.
4 Use-package
Le but de use-package est de regrouper la configuration d'un paquet dans une seule déclaration, et de gagner en performances (le chargement et la config du paquet se fera en asynchrone).
Cette fonction est de John Wiegley, l'auteur également de eshell, le système de compta ledger et plein d'autres choses. Il est le nouveau maintainer d'Emacs depuis quelques semaines.
5 Limitations
Malgré toutes les bonnes choses, package.el
n'est pas encore un
apt-get pour Emacs. Melpa contient les dernières versions des paquets
(melpa utilise leur branche master), ce qui peut créer des problèmes
d'incompatibilité. Pour remédier à ce problème on peut maintenant se
baser sur melpa-stable, qui utilise les tags des paquets:
(add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/"))
Mais tous les paquets ne sont pas dans le dépôt stable, et il arrive que certains dépendent sur des versions récentes qu'on ne trouve pas dans melpa-stable… Ceci dit, au quotidien, ça va, mais… on peut avoir un peu de config à faire quand on n'en a pas envie. Personnellement je mets peu souvent mes extensions à jour, et quand je le fais je dois renommer un ou deux paquets et en installer un ou deux manuellement. Ça va.
Certains font autrement.