blog2geek.com
MichaAvatar de Micha

17 billets | Profil

Recherche Google

ce blog tous
Derniers billets Connexion
Archives

aime-emacs-hacks

18/07/2006

Des propriétés

Une liste d'association est, tout simplement, une map. Elle associe à une valeur une autre valeur.

Quand cette liste d'association est associée à un symbole (variable, fonctions, ...) on parle de liste de propriétés (plist).

Habituellement, cette liste, stockée dans une partie du symbole qu'Emacs gère, associe des symboles à des valeurs. L'avantage des symboles, c'est qu'ils ne sont pas une valeur, mais qu'ils sont la manière de les représenter (opposition syntaxe/sémantique).

Un symbole est précédé d'un ' généralement. Le symbole 'toto est différent du symbole 'tata.

Donc, pour revenir à nos propriétés, la propriété d'une fonction est, par exemple, l'endroit où elle a été définie, qu'est-ce qu'elle fait dans la vie, est-ce qu'elle est considérée comme dangereuse (auquel cas prévenir l'utilisateur avant l'execution, ...).

Par exemple :

M-: (symbol-plist 'upcase-region)
(disabled t)

Le symbole 'disabled a pour correspondant t, ce qui signifie que cette fonction est invalidée. Si vous appelez cette fonction, Emacs vous hurlera dessus en disant « disabled because new users often find it confusing ».

Ho gosh ! Comment c'est arrivé ! Qui a intercepté l'appel ?

Il s'agit de novice.el, l'ami des débutants, qui vous proposera d'enabler cette commande. Il définit une variable disabled-command-function qui sera examinée par le code C d'Emacs quand une fonction marquée `disabled' s'exécute.

Le code C d'Emacs appellera simplement (get 'upcase-region 'disabled), qui lui renverra t. Il en déduira qu'il faut faire l'appel.

Mais si (get) existe, il doit y avoir un (set), non ? Non. En fait cette fonction s'appelle (put), mais fait exactement ce que vous voulez.

Vous pouvez approfondir ce chapitre par le manuel d'info, bien que cela ne me semble pas nécessaire.