Next Previous Contents

1. EMACSulation

Par Eric Marsden, emarsden@mail.dotcom.fr

Cette rubrique est destinée à favoriser à une bonne utilisation d'Emacs, ce merveilleux éditeur de texte. Dans chaque numéro, je compte présenter une extension d'Emacs qui permettra d'augmenter votre productivité, de faire reculer le chômage et de rendre les filles plus jolies.

1.1 Le paquetage jka-compr

Présentation

jka-compr est un paquetage écrit par Jay K. Adams. Il permet à Emacs de traiter les fichiers compressés de manière transparente. Lorsqu'on ouvre un fichier compressé, Emacs le décompresse automatiquement avant de l'afficher à l'écran. Si l'on modifie ce fichier, et que, par la suite, on sauvegarde celui-ci, il sera compressé par Emacs avant d'être écrit sur le disque. Pour activer jka-compr, il suffit d'ajouter les lignes suivantes à votre fichier de configuration (qui s'appelle normalement ~/.emacs) :

    (require 'jka-compr)
    (toggle-auto-compression 1 t)

jka-compr fonctionne en examinant l'extension du fichier à ouvrir. Il reconnaît, dans sa configuration par défaut, les fichiers .gz (gzip) et .Z (compress). Il sait également traiter les fichiers .tgz, qu'il décompresse avant de passer la main à tar-mode, un mode Emacs permettant d'examiner le contenu d'archives tar. Si vous utilisez d'autres programmes de compression, vous pouvez personnaliser Emacs pour qu'il reconnaisse, par exemple, les fichiers bzip2 de \em/Julian Seward/ (programme de compression plus rapide, et légèrement plus efficace que gzip, sous GPL) vous pourriez ajouter les lignes suivantes à votre .emacs (avant de charger jka-compr) :

    (setq jka-compr-compression-info-list
      '(["\\.Z\\(~\\|\\.~[0-9]+~\\)?\\'"
         "compressing" "compress" ("-c")
         "uncompressing" "uncompress" ("-c")
         nil t]
        ["\\.tgz\\'"
         "zipping" "gzip"("-c" "-q")
         "unzipping" "gzip" ("-c" "-q" "-d")
         t nil]
        ["\\.gz\\(~\\|\\.~[0-9]+~\\)?\\'"
         "zipping"        "gzip"         ("-c" "-q")
         "unzipping"      "gzip"         ("-c" "-q" "-d")
         t t]
         ["\\.bz2\\(~\\|\\.~[0-9]+~\\)?\\'"
          "bzipping"      "bzip2"        ()
          "bunzipping"    "bzip2"        ("-d")
          nil t]))

Comment ça marche ?

Les paquetages comme jka-compr sont écrits en Emacs Lisp, (em/elisp/) : vous pouvez lire le code source dans le répertoire /usr/local/lib/emacs/${VERSION}/lisp/jka-compr.el pour GNU Emacs, ou /usr/local/lib/xemacs-${VERSION}/lisp/packages/jka-compr.el pour les utilisateurs d' XEmacs (si vous utilisez une distribution Red Hat, il vous faudra installer le paquetage emacs-el pour obtenir les fichiers sources). Comment un tel paquetage peut-il modifier le comportement d'Emacs à un niveau aussi bas que la lecture et l'écriture des fichiers ? La réponse vient du concept de hook.

La plupart des fonctions de bas niveau de l'éditeur (qui sont écrits en langage C) ont un hook qui leur est associé, auquel des fonctions de plus haut niveau (écrits en Emacs Lisp) peuvent être attachés. Les hooks sont fondamentaux dans la personnalisation d'Emacs, et permettent à l'utilisateur de modifier le comportement par défaut de l'éditeur dans des sens qui n'auraient pas été imaginés par ses auteurs. Les hooks sont expliqués dans les manuels de Emacs et de Emacs Lisp, qui sont disponibles en ligne depuis l'éditeur en tapant C-h i (ou depuis la barre de menu Help -> Browse Manuals, ou (beurk!) le toolbar de XEmacs).

Le hook after-init-hook, par exemple, est exécuté immédiatement après qu'Emacs ait été lancé et ait lu son fichier d'initialisation. Supposons que nous voulions que Emacs nous affiche un fortune cookie au démarrage. Il suffit alors d'ajouter les lignes suivantes à .emacs :

    
   (add-hook 'after-init-hook
      (function
       (lambda ()
         (pop-to-buffer (get-buffer-create " *Fortune*"))
         (shell-command "fortune -a" t))))

1.2 La prochaine fois ...

Dans le prochain numéro, je parlerai de ange-ftp, qui permet à Emacs de voir l'Internet comme un gigantesque système de fichiers virtuel. N'hésitez par à me contacter à emarsden@mail.dotcom.fr si vous avez des commentaires, corrections ou suggestions. C-u 1000 M-x hail-emacs !

PS : Emacs n'est, en aucune manière, limité à Linux, puisqu'il existe des implantations pour un grand nombre d'autres systèmes d'exploitation (et même pour certaines plate-formes qui ne sont pas dignes de ce nom). Cependant, et tant qu'un des logiciels phares du mouvement pour le logiciel libre, l'un des plus puissants, complexes et paramètrables, je sens qu'il a sa place dans la Linux Gazette.


Copyright © 1998, Eric Marsden

Cet article est parue pour la première fois dans le numéro 25 du Linux Gazette (en anglais). Traduction effectuée par l'auteur avec l'aide de Eric Jacobini.