blog2geek.com
MichaAvatar de Micha

17 billets | Profil

Recherche Google

ce blog tous
Derniers billets Connexion
Archives

aime-emacs-hacks

13/07/2006

C-x b

Ça aussi, ça fait parti des choses que l'utilisateur régulier d'Emacs ne comprend pas chez le néophyte.

Comment diable fait-il pour change de buffer sans iswitchb-mode ?

C-x b, dans sa version la plus pure, est codée de la manière suivante (schématiquement) :

(defun switch-to-buffer (buffer &optional norecord)
(interactive "BBuffer: ")
...)

Apprenons à lire un peu de l'Emacs Lisp. J'ai ici défini une fonction `switch-to-buffer', qui prend en argument un buffer et un `norecord' « booléen » optionnel.

La fonction est dite interactive, appelable par M-x, et bindable à une touche. Le paramètre d'« interactive » est "BBuffer: ", remarquez le premier B : il indique quel est le type de l'argument interactif. B ici, c'est pour Buffer.

Royal ! Et donc l'argument `buffer' est rempli interactivement par un `chooser'. Contrairement à ce qui est souvent pensé, iswitchb ne recode pas ce `chooser' mais remplace la fonction switch-to-buffer :

(substitute-key-definition 'switch-to-buffer ; normally C-x b
'iswitchb-buffer map global-map)

Autrement dit, substitue tous les raccourcis clavier associés à switch-to-buffer pour iswitchb-buffer.

Que fait ensuite ce mode ? Pourquoi est-ce si surréaliste de ne pas l'avoir ?

Ce mode vous propose, quand vous faites C-x b, dans le minibuffer la liste de tous les buffers, et vous permet diverses formes de pattern matching pour obtenir votre choix.

M-x iswitchb-mode ! In-dis-pen-sable !