OVH Cloud OVH Cloud

Explication de `eval-after-load'

14 réponses
Avatar
Xavier Maillard
Bonsoir et bonne année à tous,

J'aurais voulu comprendre le fonctionnement de la macro
`eval-after-load' et la comparer à d'autres « structures » de
chargement.

Quel est l'impact de faire quelque chose comme:

(eval-after-load "foo"
'(message "bar"))

par exemple ? Quand est-ce que Emacs se dit qu'il doit charger
foo ?

Merci
--
Xavier Maillard, zedek@gnu-rox.org

4 réponses

1 2
Avatar
drkm
Matthieu Moy writes:

Ensuite, j'ai un

(if (file-exists-p (expand-file-name "~/emacs-lisp/moy/Makefile"))
(shell-command "cd ~/emacs-lisp/moy/ ; make"))

dans mon .emacs.el, pour être sur de ne rien oublier.



Heu, tu lances un Emacs en batch à chaque lancement interactif ?
J'imagine qu'il y a plutôt une astuce de byte compilation ...

--drkm
Avatar
drkm
Xavier Maillard writes:

On 5 jan 2005, Matthieu Moy wrote:

Avec un coup de génération d'autoloads dans un Makefile[1], ça
me permet d'avoir un Emacs qui ne charge que ce dont il a
besoin de manière assez simple.



Pas mal comme technique :)



J'aime aussi la technique des loaddefs.el. Mais je préfère une
architecture plus décentralisée. En fait, mon .emacs ne fait que
quelques lignes. Il renseigne le répertoire de ma bibliothèque. Il
appelle ensuite `drkm-conf:init()'.

Entre autres choses, elle va parcourir le `load-path' à la recherche
de fichiers drkm-subdirs.el et un load path perso à la recherche de
fichiers subdirs.el. Elle charge chacun de ces fichiers.

Typiquement, ils ajoutent des répertoires au `load-path' et
éventuellement à `Info-directory-list'. Si un fichier loaddefs.el est
trouvé, il est également chargé (mais le subdirs.el peut demander le
contraire).

Ensuite, viennent une série de (require 'top-config-...). Il s'agit
de mes fichiers de config généraux (texte, web, langages de
programmation). À part un vraiment général, les autres se contentent
souvent de configurer des packages, de manière à ce que la
configuration effective (dans un autre fichier) ne soit chargée qu'au
moment voulu (à l'utilisation du package, pas au lancement d'Emacs).
Pour cela, un simple :

(drkm-conf:configure cperl-mode
:config 'config-perl)

et hop, lorsque `cperl-mode()' est appelée, on charge le fichier
config-perl.el.

Je me suis un peu égaré, là. Mais pour en revenir à la
décentralisation, voici un de mes répertoires site-lisp :

c:/Program Files/local/office/emacs/site-lisp:
total used in directory 2 available 504160
drwxr-xr-x 8 drkm all 0 Dec 7 23:42 .
drwxr-xr-x 4 drkm all 0 Oct 3 23:41 ..
drwxr-xr-x 2 drkm all 0 Dec 31 01:21 .~
drwxr-xr-x 10 drkm all 0 Dec 31 01:20 cedet-1.0beta3b
-rw-r--r-- 1 drkm all 182 Jan 3 23:51 drkm-subdirs.el
drwxr-xr-x 10 drkm all 0 Dec 31 01:20 gnus-2004-10-23
drwxr-xr-x 2 drkm all 0 Dec 31 01:21 mmm-mode-0.4.8
drwxr-xr-x 4 drkm all 0 Dec 31 01:20 nxml-mode-20041004
-rw-r--r-- 1 drkm all 106 Aug 31 2001 subdirs.el
drwxr-xr-x 2 drkm all 0 Dec 7 23:42 w3m

~> cat drkm-subdirs.el
(drkm-conf:add-info-path '("cedet-1.0beta3b/doc" "gnus-2004-10-23/texi"
"mmm-mode-0.4.8" "nxml-mode-20041004")
:if-dir t)

Si je veux installer cedet-1.0beta4, il suffit de changer le
répertoire dans le drkm-subdirs.el, et ajouter un fichier ".nosearch"
dans l'ancien répertoire (pour le supprimer logiquement avant de le
supprimer physiquement, et tester la nouvelle installation). Mais je
ne touche pas à mon .emacs ou mes [top-]config-...el

Idéalement, je ne devrait même pas à avoir à modifier le subdirs.el.
Je devrais pouvoir y faire :

(drkm-conf:add-info-path nil :if-dir t)

pour qu'il recherche les répertoires contenant un fichier "dir" (c'est
pour bientôt :-p).

Pour d'autres infos (peut-être pas très à jour, et certainement
très incomplètes) :

<URL:http://drkm-lib.sf.net/doc/drkm-config.html>

--drkm
Avatar
Matthieu Moy
drkm writes:

Heu, tu lances un Emacs en batch à chaque lancement interactif ?
J'imagine qu'il y a plutôt une astuce de byte compilation ...



Il y a surtout une astuce de Makefile : quand mes autoloads + .elc
sont a jours, c'est instantané ! (vu que dans la vie, je ne fais pas
*que* trifouiller ma config Emacs, ca arrive assez souvent !)

--
Matthieu
Avatar
drkm
Matthieu Moy writes:

drkm writes:

Heu, tu lances un Emacs en batch à chaque lancement interactif ?
J'imagine qu'il y a plutôt une astuce de byte compilation ...



Il y a surtout une astuce de Makefile



Bougre de triple buse d'imbécile que je fais, une fois !

--drkm
1 2