Styles

mercredi 16 mars 2011

Comment exécuter du code par projet dans Emacs

Pour personnaliser Emacs, les emacsiens que nous sommes ont l'habitude de mettre toute notre personnalisation dans le fichier ~/.emacs sans même avoir besoin de structurer ce fichier. Or j'ai besoin de gérer une configuration particulière par projet, le terme projet correspondant ici à un ensemble cohérent de fichiers permettant de produire un certain nombre de livrables clairement identifiés (un peu comme le fichier build.xml pour Apache Ant).

Dans Emacs, il existe quelques fonctions bien pratiques pour faire cela. Par exemple, j'ai besoin de définir localement et de façon spécifique selon le fichier ouvert, certaines variables comme la variable compile-command pour un projet écrit un python. Je veux une configuration bien particulière pour ce projet. Pour cela, j'utilise les Variables de Répertoire et met le code suivant dans mon .emacs :
(dir-locals-set-class-variables 'python-dev
'((python-mode . (
(eval .
(set
(make-local-variable 'compile-command)
(concat "python " (buffer-file-name))))))))

(dir-locals-set-directory-class
"c:/Users/jrx/src/tests/" 'python-dev)
Je construit la variable locale compile-command avec le nom du fichier affiché dans le buffer. Cela marche pour tous les fichiers qui sont dans le répertoire défini par l'instruction dir-locals-set-directory-class et tous ses sous-répertoires. On peut bien sûr imaginer sortir les instructions set, make-local-variable dans une fonction à part histoire de clarifier les choses.

On peut aussi créer des fichiers .dir-locals.el dans chaque répertoire que l'on veut personnaliser, mais je n'aime pas trop ça parce qu'on se met à écrire dans un répertoire projet des fichiers qui n'ont rien à voir avec le projet en soi. Et puis, il peut y avoir des répertoires où on n'a pas les droits en écriture.

Aucun commentaire: