Sleeper

Emacs

Tips and Tricks

Changer de buffer
Lorsque l'on veut changer de buffer un C-x C-b permet de choisir entre les différents buffers disponibles. Toutefois, leur sélection peut devenir pénible lorsque leur nombre augmente. Le package iswitchb permet de choisir le buffer désiré au moyen de n'importe quelle partie de son nom.
(require 'iswitchb)
(iswitchb-default-keybindings) 
(add-hook 'iswitchb-make-buflist-hook 'iswitchb-summaries-to-end)
(defun iswitchb-summaries-to-end ()
  ""
  (let ((summaries (delq nil (mapcar 
                              (lambda (x) 
                                (if (or 
                                     (string-match "Summary" x)
                                     (string-match "^ ?\\*.*\\*$" x))
                                    x))
                              iswitchb-temp-buflist))))
    (iswitchb-to-end summaries)))
Yes or No ?
Fatigué de devoir taper yes ou no, chaque fois qu'emacs demande confirmation ?
(fset 'yes-or-no-p 'y-or-n-p)
permet de n'avoir qu'a répondre y ou n à la question fatidique...
Buffer name
Lorsque l'on ouvre plusieurs fichiers portant le même nom (mais dans des répertoires différents), il devient vite difficile de s'y retrouver avec des noms tels que toto.txt<1>. Heureusement uniquify est la. Il va permettre d'avoir des noms un peu plus parlant (par exemple toto.txt.
(require 'uniquify) 

;; /foo/bar/mumble/name and /baz/quux/mumble/name
;; will be named : name AND  name
(setq uniquify-buffer-name-style 'post-forward-angle-brackets)

Shotcuts C
Quelques shortcuts intéressant pour le mode C:

c-utils

c-utils.el permet la génération automatique des entêtes de fichiers .c et .h, ainsi que des fonctions en se basant sur des templates.

Ces templates peuvent comporter des tags. Certains tags sont prédéfinis (comme le nom du fichier ou la date), mais l'utilisateur peut les redéfinir ou en définir de nouveaux.

Un petit exemple vaut mieux qu'un long discours ... on commence par taper la fonction suivante :

int toto ( int var1, char *var2, struct list *h, ...) 
{


}

Et supposons que le template pour les header de fonctions soit:

(setq cut-function-header-tmpl 
      '( ""
	 "Function: @@funcname@@"
	 ""
	 " @param @@argname@@ (type @@argtype@@) - "
	 ""
	 " @returns @@returntype@@"
	 )
      )

(setq cut-function-header-style 'java-style)

alors un appel à la fonction cut-add-function-header, insérera le header de fonction suivant:

/**
 * 
 * Function: toto
 * 
 *  @param var1 (type int) - 
 * 
 *  @param var2 (type char *) - 
 * 
 *  @param h (type struct list *) - 
 * 
 *  @param ... (type variable arguments) - 
 * 
 * 
 *  @returns int
 */
int toto ( int var1, char *var2, struct list *h, ...) 
{


}

J'essaierai d'écrire une documentation plus fournie bientôt, mais en attendant, vous pouvez toujours lire le code ... De plus toutes les variables utiles peuvent être settées via le "customize", dans la catégorie Programming -> Tools -> Cut.

Valid XHTML 1.1!