dimanche 17 mai 2009

Monolithiquement incorrect

Ca ne fait pas vraiment longtemps que j'utilise Emacs mais mon .emacs commence déjà à être dans un état inavouable :
Il contient des configurations pour des modes que je n'ai essayé que 10 minutes, et il est difficile d'y retrouver les informations relatives à un mode donné.

Une fois n'est pas coutume, je vais anticiper et faire un peu de rangement :

Etape 1 - Tout regrouper dans un répertoire

L'idée est d'avoir un fichier par mode (pour plus de modularité) dans un même répertoire.

Il se trouve que .emacs.d est prévu pour ça.

Je vais donc y créer 2 sous répertoire :

~/.emacs.d/my-emacs-conf pour mes configurations perso
~/.emacs.d/external-emacs-conf pour les fichiers de tiers (modes non fournis par le système, configurations maintenues par d'autres...)

Et tout ce qu'il me reste à faire, c'est de copier les différentes parties de mon .emacs monolithique dans des fichiers distinct de ~/.emacs.d/my-emacs-conf

Parfois le fichier se réduit à quelques options et/ou affectation de touches.
Voici par exemple le fichier ~/.emacs.d/my-emacs-conf/my-eblog.el dans son intégralité :

(load-file "~/.emacs.d/external-emacs-conf/e-blog.el")
(global-set-key "\C-cb" 'e-blog-new-post)


A noter que le fichier e-blog.el est dans ~/.emacs.d/external-emacs-conf car il n'est pas fourni par mon ubuntu et que j'ai du le téléchargé
(http://code.google.com/p/e-blog/source/browse/trunk/e-blog.el)

Etape 2 - Plus de ~/.emacs

Il faut maintenant se débarasser du fichier .emacs dans mon homedir
(j'ai dit *tout* dans le même répertoire !)

A partir de la version 22 d'Emacs le fichier .emacs.d/init.el est exécuté au lancement d'Emacs et rend donc mon ~/.emacs inutile.

Mon init.el se contentera de charger les fichiers précédemment crées par éclatement de mon .emacs monolithique.

Il se réduit donc pour l'instant à une suite de commande assez répétitive
(donc prévoir une session de lisp pour transformer ça en boucle)

(if (file-exists-p "~/.emacs.d/my-emacs-conf/my-org.el")
(load-file "~/.emacs.d/my-emacs-conf/my-org.el"))

(if (file-exists-p "~/.emacs.d/my-emacs-conf/my-ido.el")
(load-file "~/.emacs.d/my-emacs-conf/my-ido.el"))

(if (file-exists-p "~/.emacs.d/my-emacs-conf/my-cua.el")
(load-file "~/.emacs.d/my-emacs-conf/my-cua.el"))

(if (file-exists-p "~/.emacs.d/my-emacs-conf/my-pymacs.el")
(load-file "~/.emacs.d/my-emacs-conf/my-pymacs.el"))

Un petit coup d'emacs pour vérifier que tout se lance bien et je peux maintenant continuer à reconfigurer mon Emacs sur des bases (plus) saines.