val...@laposte.net :
> Donc, si je comprends bien, le hook ne peut servir qu'à opérer des
> définitions de variables "locales" appartenant au buffer?
Il peut servir à n'importe quoi, mais c'est plus logique de ne toucher qu'à
des choses plus ou moins locales. Je dis plus ou moins parce que la keymap
est en général "locale au mode" et non au buffer.
> Si je cherche à définir des fonctions par ce biais, elles seront
> forcément globales?
Une définition de fonction via defun est toujours globale. On peut faire une
définition locale en stockant un lambda dans une variable locale, mais la
syntaxe d'appel est chiante, donc en pratique, on ne s'* pas et on fait des
définitions globales, en namespaçant à la main avec des prefixes.
>> (en étant conscient que ça sera réexecuté à chaque fois qu'un
>> buffer passe dans ce mode, donc il faut que ce soit involutif;...
>
> involutif? J'avoue ne pas connaître cette notion. J'ai trouvé une
> entrée wikipedia, mais en math...
Bah oui, l'info, c'est des maths. Une fonction involutive, en maths, c'est
une fonction telle que f(f(x)) = f(x). En l'occurence, je veux dire que si
l'on appelle plus d'une fois la fonction, on ne doit pas changer l'état
des variables globales après le premier appel (donc dans le formalisme de la
phrase précédente, x est l'état global et non un éventuel argument à la
fonction elisp, qui a priori est sans argument).
Un exemple de truc non involutif:
(setq 'html-mode-list-of-bluish-foobars (cons "blah" html-mode-list-of-bluish-foobars))
car à chaque fois que tu ouvres un .html, tu vas réajouter "blah" en tête de
la liste.
Un exemple de truc involutif:
(local-set-key [(control ?c) (control ?f)] 'do-something)