Page suivante Page précédente Table des matières

3. EMACSulation

Par Eric Marsden

Cet article explique comment mieux utiliser Emacs, ce merveilleux éditeur de texte. Dans chaque numéro, je présenterai une extension d'Emacs qui augmentera votre productivité, l'ensoleillement et la belle couleur verte de l'herbe.

3.1 Gagner du temps

Vous avez sûrement remarqué qu'Emacs se décarcasse pour vous permettre d'économiser la frappe. Le mini-tampon offre un mécanisme d'historique vous permettant de rappeler et d'éditer les commandes précédentes et de nombreuses saisies dans le mini-tampon tentent de compléter ce que vous tapez lorsque vous utilisez la touche de tabulation. Ce comportement a inspiré les bibliothèques plutôt de modules que de bibs --> readline et history, utilisées par de nombreux shells et interpréteurs de la ligne de commande.

Cet article traite d'une autre caractéristique permettant d'économiser la frappe sous Emacs : la possibilité d'utiliser les abréviations. Vous êtes fatigués de taper des phrases répétitives comme le nom de votre société, ou votre numéro de téléphone ? Les abréviations vous feront économiser le bout de vos doigts. Vous pouvez, par exemple, demander à Emacs d'étendre LAAS en Laboratoire d'Analyse et d'Architecture des Systèmes. L'expansion intervient dès que vous avez entré un caractère n'entrant pas dans la composition d'un mot après l'abréviation (une espace, par exemple, bien que la définition exacte de la séparation de mot dépend du mode utilisé).

C'est le mécanisme d'abréviation d'Emacs. Vous pouvez utiliser le mode mineur abbrev-mode, qui permet aux abbréviations de s'étendre automatiquement (activez ce mode en faisant M-x abbrev-mode ) ou vous pouvez les étendre à la demande en faisant C-x a e avec le curseur positionné après l'abbréviation. Vos abréviations peuvent être sauvegardées dans un fichier lorsque vous quittez Emacs et rechargées automatiquement lorsque vous le lancez :

;; lire le fichier des abréviations, s'il y en a un
(setq-default abbrev-mode 't)
(if (file-exists-p abbrev-file-name)
    (read-abbrev-file))
(setq save-abbrevs t) ; redondant mais + explicite

Définir une abréviation

Pour définir une abréviation, tapez-la (LAAS dans l'exemple ci-dessus) dans un tampon, faites C-x a i g, puis entrez le texte qui lui correspondra dans le mini-tampon. Cette sybilline suite d'actions crée une abbréviation globale qui s'appliquera dans tous les modes. Essayez-la en la tapant et en faisant C-x a e (e pour expansion). Emacs vous permet aussi de créer des abréviations qui ne seront actives que dans un mode donné en faisant, cette fois, C-x a i l (dans un tampon se trouvant déjà dans le mode approprié). M-x list-abbrevs affiche la liste de toutes les abréviations définies.

Abréviations pour le courrier

Depuis la nuit des temps, les programmes de courrier d'Unix utilisent le fichier ~/.mailrc pour permettre aux utilisateurs de créer leurs propres alias de courrier. Le mécanisme mail-abbrev lit le contenu de ce fichier et définit les abbréviations qui seront étendues dans les champs To: et Cc: de tous les courriers que vous composez sous Emacs. Voici un exemple de fichier ~/.mailrc :

alias dsssl        dssslist@mulberrytech.com
alias cohorts      rabah jarboui almeida behnia
alias bond         "James Bond <bond@guerilla.net>"

D'autres systèmes de répertoires téléphoniques existent : le plus connu est BBDB de Jamie Zawinski, mais ils ne vous permettent pas de partager les alias avec d'autres programmes de courrier. Vous pouvez activer le mode mineur mail-abbrev à chaque fois que vous composez un courrier sous Emacs en ajoutant les lignes suivantes dans votre fichier ~/.emacs :

;; Pas la peine, si vous utilisez XEmacs
(add-hook 'message-setup-hook 'mail-abbrevs-setup)

Abréviations dynamiques

Cette facilité d'abréviation standard nécessite que vous enregistriez explicitement vos abréviations. Cela convient pour les choses que vous tapez très souvent, mais c'est l'enfer pour les expressions qui n'apparaissent que dans un document. Emacs dispose aussi des abbréviations dynamiques, qui tentent de deviner le mot que vous êtes en train de taper en examinant le texte qui l'entoure. Ceci est très pratique pour programmer dans des langages qui encouragent les NomsDeVariableTresLongs : vou n'avez qu'à taper une seule fois le nom de la variable et il suffira ensuite de ne taper que ses premières lettres et M-/ pour qu'Emacs essaie de compléter le nom de la variable.

Pour être précis, dabbrev recherche le mot le plus proche dont le mot sous le curseur est un préfixe. Pour ce faire, il commence par examiner les mots du tampon courant situés avant la position du curseur, puis les mots après le curseur et, enfin, dans tous les autres tampons de votre Emacs. S'il y a plusieurs expansions possibles (i.e. le texte tapé n'est pas un préfixe unique), vous pouvez passer en revue toutes les possibilités avec M-/. SPC M-/ vous permet de compléter les phrases contenant plusieurs mots.

Les utilisateurs imperturbables de vi seront intéressés par les tribulations d'un utilisateur qui a essayé d'implanter une version réduite des abréviations dynamiques sous vi.

Complétion

Le paquetage Completion, de Jim Salem, a les mêmes fonctions que les abbréviations dynamiques mais utilise une liaison de touches différente (M-RET) et un algorithme légèrement différent. Plutôt que de chercher une complétion proche dans le tampon, il commence par examiner les mots que vous avez tapé récemment (et continue dans les autres tampons ouverts si cette recherche échoue). L'historique des mots récemment utilisés est automatiquement sauvegardé lorsque vous quittez Emacs. Pour activer la complétion (vous pouvez l'utiliser à la place des abréviations dynamiques, ou en même temps qu'elles), placez les lignes suivantes dans votre ~/.emacs :

(require 'completion)
(initialize-completions)

Hippie Expand

La complétion des noms de fichiers dans le mini-tampon est un véritable économiseur de frappe et vous pourriez vous dire que ce serait formidable si vous pouviez l'utiliser lorsque vous entrez un nom de fichier dans un tampon normal. Ne rêvez plus : c'est l'une des possibilités offertes par le fabuleux paquetage hippie-expand.

Hippie-expand, d'Anders Holst, est un mécanisme d'abbréviation pouvant gérer différents types d'abbréviations dynamiques. Il peut gérer celles-ci selon :

  • un nom de fichier : si vous tapez /usr/X puis la touche d'expansion, il l'étendra en /usr/X11R6/ ;
  • une correspondante exacte de ligne : recherche une ligne du tampon ayant la ligne courante comme préfixe ;
  • le contenu du tampon courant, et des autres en cas d'échec, tout comme dabbrev ;
  • le contenu du kill-ring (qui est l'endroit où Emacs stocke le texte que vous avez tué, ou « coupé » dans la terminologie MacOS. Il s'agit d'un tampon circulaire) : plutôt que de taper M-y pour passer en revue le contenu du kill-ring, pous pouvez faire un hippie-expand sur le premier mot du texte supprimé.

Par défaut, Hippie-expand est désactivé, vous devez donc le lier à une touche. Voici ce que j'utilise :

    (define-key global-map (read-kbd-macro "M-RET") 'hippie-expand)

Continuons à économiser de la saisie.

Réactions

Glenn Barry m'a envoyé un commentaire sur mon article sur gnuclient/gnuserv :

J'ai lu et apprécié votre article sur gnuserv/gnuclient dans la Linux Gazette.

Mais vous avez oublié de parler d'une utilisation extrêmement puissante de gnuserv/gnuclient : on peut accéder à une session emacs en se connectant à distance sur un terminal (via rlogin/telnet) et lancer "gnuclient -nw" ... fait du travail à domicile un jeu d'enfant (même sur une liaison lente à 2.8).

On devoit faire un rlogin sur le système exécutant emacs avec gnuserv, car gnuclient -nw ne fonctionne pas sur le réseau (en tous cas, d'après ce qu'en dit la page du manuel). Cela m'a pris du temps pour me rendre compte de ça et ce serait bien que tout le monde connaisse cette possibilité.

L'option -nw demande à Emacs de démarrer en mode console, ce qui le rend bien plus utilisable sur une connexion lente qu'utiliser un affichage distant avec X11. XEmacs est capable d'utiliser les couleurs ANSI sur la console ou dans un xterm, tandis que GNU Emacs ne gère pas encore la couleur mais offre une barre de menu en mode texte.

Glenn a aussi donné une illustration de la puissance de ffap : il l'a personnalisé pour qu'il reconnaisse les numéros de bugs Sun sous le curseur et qu'il envoie une URL générée dynamiquement sur un frontal Web pour leur système de suivi de bug.

La prochaine fois...

Le mois prochain, j'aborderai les mécanismes d'insertion par squelettes et les patrons sous Emacs. N'hésitez pas à me contacter à l'adresse <emarsden@mail.dotcom.fr> en m'envoyant vos commentaires, corrections ou suggestions (quel est votre paquetage « je-ne-pourrais-vivre-sans » favori pour Emacs ?). 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. Cependant, en tant qu'un des logiciels phares du mouvement pour le logiciel libre, l'un des plus puissants, complexes et paramétrables, je pense qu'il a sa place dans la Linux Gazette.

_________________________________________________________________

Copyright © 1999, Eric Marsden - paru dans le numéro 36 de la Linux-Gazette

Adaptation française : Éric Jacoboni.


Page suivante Page précédente Table des matières