GAZETTE N°26: 1. EMACSulation

EMACSulation

Par Eric Marsden

Adaptation française : Éric Jacoboni.


Précédent Suivant Table des matières

1. EMACSulation

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

1.1 Prêt pour l'Internet !

Vous avez probablement déjà entendu la publicité vantant les systèmes d'exploitation « Prêts pour l'Internet » avec lesquels vous pouvez accéder à la toile avec un simple clic de souris. En fait, les utilisateurs de l' interface utilisateur d'Emacs disposent de cet accès par la seule pression d'une touche depuis 1989 !

Emacs possède des fonctionnalités réseau intégrées qu'il utilise pour se connecter aux serveurs Usenet ou SMTP et pour la navigation sur le Web. Pour illustrer leur utilisation, voici un petit code qui ouvre une connexion TCP sur le port 13 de votre machine locale pour obtenir la date courante :

;; usage: M-x display-date
(defun display-date ()
(interactive)
(let ((stream (open-network-stream "DAYTIME" nil "localhost" "daytime")))
          (set-process-filter stream 'my-process-filter))
    
(defun my-process-filter (proc string)
       (message "Current date is %s" (substring string 0 -1)))

Ce code -- qui suppose qu'inetd s'exécute -- devrait afficher le format de date dans le minitampon. Le riche ensemble de primitives et la gestion intégrée des erreurs fournis par Emacs facilitent l'écriture d'utilitaires pratiques ; pensez au nombre de lignes de code nécessaires pour implanter une telle fonctionnalité en C.

1.2 Ange-ftp

Ange-ftp est un paquetage écrit par Andy Norman permettant à Emacs de voir l'Internet tout entier comme un système de fichiers virtuel. Il ajoute la possibilité d'édition distante en faisant correspondre des commandes FTP aux requêtes adressées aux fichiers distants. Par exemple, si vous demandez à Emacs d'ouvrir un fichier nommé

    /marsden@ondine.cict.fr:~/.emacs

ange-ftp donnera alors naissance à un processus FTP, se connectera à la machine salines.cict.fr sous le compte marsden, fera un CWD vers mon répertoire personnel, puis un GET de mon fichier d'initialisation d'Emacs et affichera le fichier comme s'il était sur votre système de fichiers local. Si ange-ftp à besoin d'un mot de passe, il en lira un à partir du minitampon. Si vous faites des modifications dans le fichier et que vous le sauvegardez, ange-ftp fera pour vous un PUT de ce fichier vers le serveur. Vous pouvez même copier des fichiers d'une machine distante vers une autre en tapant M-x copy-file RET /user1@host1:/path/to/file1 RET /user2@host2:/path/file2  ange-ftp ouvrira deux connexions FTP pour vous.

ange-ftp est pré-installé en même temps qu'Emacs (Xemacs fournit efs, une réécriture complète, du même auteur). La seule personnalisation que vous pouvez avoir besoin de faire est de configurer une passerelle si vous n'avez pas un accès direct à l'Internet. Vous pouvez utiliser ~/.netrc pour configurer les logins par défaut pour les hôtes fréquemment utilisés (et même les mots de passe si vous êtes téméraire).

La caractéristique probablement la plus élégante d'ange-ftp est son intégration parfaite à Emacs ; le seul changement visible qu'il introduit est la syntaxe des noms de fichiers étendus. La complétion des noms de fichiers (en pressant TAB dans le minitampon) est possible sur les machines distantes de la même façon que sur votre machine locale. ange-ftp fonctionne bien avec dired, l'éditeur de répertoires, et vous permet de naviguer à travers des machines éloignées, d'agir sur plusieurs fichiers distants en une seule opération, etc. Il fonctionne aussi avec les « bookmarks » (signets), vous pouvez donc mémoriser un endroit intéressant de votre serveur FTP favori et y revenir facilement ensuite. Prenons une utilisation typique : demander à Emacs d'ouvrir le répertoire suivant (avec C-x C-f ou à partir du menu Files) :

    /anonymous@ftp.kernel.org:/pub/linux/kernel/

Cela vous présentera un répertoire énumérant les différentes versions des noyaux Linux (si vous avez une ligne ressemblant à default login anonymous password monadresse@mamachine dans ~/.netrc, ange-ftp peut déduire anonymous@ automatiquement pour vous). Tapez C-x r m pour ajouter ce répertoire à vos bookmarks. Vous trouverez plus d'informations sur les signets dans l' article de Jesper Pedersen du numéro 7 de la Linux Gazette (NdT : cet article est traduit dans ce même numéro).

1.3 Navigation sur le Web

Emacs-w3 (aussi appelé Gnuscape par certains) est un navigateur Web écrit par William Perry en Emacs Lisp. Il est très sophistiqué sur certains points et a été le premier navigateur disponible à proposer des feuilles de style. Il reconnaît les tableaux et peut afficher les images en ligne sous XEmacs, ou en invoquant des visualisateurs externes lorsqu'il est lancé sous GNU Emacs. Son auteur note qu'Emacs-w3 est encore une autre raison de ne jamais quitter le Seul Véritable Éditeur, mais, en ce qui me concerne, il me sert à me rappeler les déficiences de l'Emacs Lisp : il est lent et a tendance à se bloquer pendant l'attente avec une connexion lente (malheureusement, Emacs n'est pas multi-threads bien que vous puissiez mettre la variable url-be-asynchronous à t pour réduire ce défaut). Si vous voulez l'essayer, récupérez la dernière version dans le répertoire des versions béta car elle possède de nombreuses améliorations par rapport à la version distribuée sur la plupart des CDROMs Linux.

browse-url est une extension pratique qui peut envoyer les références d'URLs à Mozilla ou à Emacs-w3. Il le fait en utilisant le remote invocation protocol de Netscape, qui, soit dit en passant, fonctionne aussi lorsque vous exécutez le navigateur sur une machine distante (l'implantation utilise le protocole de communication inter-applications de X11). Emacs offre son propre mécanisme de contrôle distant qui vous permet d'envoyer des commandes à un Emacs qui s'exécute (même sur une autre machine). Il s'appelle gnuserv/emacsclient et j'en parlerai une autre fois.

Les versions récentes d'Emacs sont configurées pour utiliser browse-url dans les modes de lecture du courrier et des news. Les URLs devraient être en surbrillance lorsque la souris passe dessus et vous pouvez les cliquer avec le bouton du milieu pour invoquer votre navigateur favori. Voilà comment faire pour que browse-url utilise Mozilla lorsque vous êtes sous X11 et Emacs-w3 sinon :

    (if (eq window-system 'x)
        (setq browse-url-browser-function 'browse-url-netscape
              browse-url-new-window-p t)
        (setq browse-url-browser-function 'browse-url-w3))

Une autre utilisation, moins directe, de browse-url est WebJump de Neil W. Van Dyke. Ce plugin Emacs offre une « hotlist » programmable des sites web intéressants avec laquelle vous pouvez alimenter votre navigateur. Sa caractéristique probablement la plus intéressante est qu'il peut envoyer une requête aux moteurs de recherches Internet comme AltaVista et Yahoo! sans avoir à charger la première page de présentation. Il possède aussi des caractéristiques permettant de faire des recherches dans les archives FAQ et RFC, dans le Webster online et dans le Thesaurus. Il sait aussi récupérer la page appropriée de l'API Java. Naturellement (c'est Emacs), vous pouvez l'étendre pour inclure vos sites favoris et vous vous rendrez compte que vous l'utilisez plus que les signets de votre navigateur.

1.4 Des fichiers à portée de la main

ffap est un paquetage puissant qui étend la commande find-file (celle qui demande un nom de fichier dans le minitampon et est normalement liée à C-x C-f). Il recherche quelque chose dans le texte autour de la position du curseur qui pourrait représenter un nom de fichier -- un fichier du répertoire courant, un fichier inclus par un #include, une référence à un forum Usenet, une référence style ange-ftp vers un fichier sur une machine distante ou une URL -- et vous demande si vous voulez ouvrir ce fichier ou envoyer l'URL à un navigateur (via browse-url). Lorsque vous en aurez pris l'habitude, vous vous fatiguerez vite de taper les noms de fichiers dans le minitampon, et vous vous rendrez compte qu'en insérant des « hyper-liens » aux places stratégiques de vos fichiers, vous économiserez de la frappe. ffap est distribué avec Emacs (les utilisateurs d'XEmacs devront récupérer la dernière version et la placer dans un répertoire connu d'Emacs) ; je l'ai lié à la touche F3 de la façon suivante :

    (autoload 'find-file-at-point "ffap" nil t)
    (define-key global-map [(f3)] 'find-file-at-point)

ou, si vous préférez, vous pouvez simplement surcharger le find-file traditionnel en faisant :

    (autoload 'find-file-at-point "ffap" nil t)
    (define-key global-map [(control x) (control f)] 'find-file-at-point)

ffap est vraiment pratique pour déterminer les fichiers intéressants ; il sait même reconnaître les noms des RFC et le serveur à partir duquel elles peuvent être obtenues. Il faut quand même savoir si les machines distantes sont en ligne et il peut naturellement être étendu pour reconnaître des types personnels de noms de fichiers. Pour conclure sur les raccourcis des noms de fichiers, vous pourrez apprécier fff (Fast File Finder) de Noah Friedman qui vous aide à trouver les fichiers cachés dans la profondeur de l'espace des inodes en interrogeant votre base de données locate (qui fait partie des « GNU findutils »).

1.5 Commentaires

Plusieurs personnes m'ont envoyé leurs commentaires sur l'article sur jka-compr du mois dernier. Chistopher B. Smith m'a indiqué qu'il préférait crypt++, qui offre un chiffrement et un déchiffrement à la volée en même temps que la compression et la décompression. Alors que jka-compr se fie au suffixe du nom de fichier, crypt++ lit les premiers octets du fichier pour déterminer son type. Le paquetage possède aussi des fonctions pour gérer les sauts de lignes « à la MS-DOS » que vous apprécierez si vous échangez des fichiers avec d'autres systèmes, bien qu'il suffise de dire (standard-display-ascii 13 "") pour cacher les caractères ^M. Crypt++ n'est pas une partie standard d'Emacs (il n'est pas inclus dans la distribution GNU Emacs, bien qu'il soit livré avec XEmacs). Je n'ai pas testé ses fonctionnalités de chiffrement car

<POLITIQUE>

En tant que citoyen Français, je n'ai pas le droit d'utiliser une forme quelconque de chiffrement. En France, le chiffrage nécessite une autorisation du Président, qui n'est octroyée qu'aux militaires et aux institutions financières. Ces lois sont l' une des raisons empêchant l'incorporation de la gestion du chiffrement dans le noyau Linux. Avant d'accuser la France d'être rétrograde, n'oubliez pas que des pays comme l'Iran, la Chine et la Russie imposent des restrictions similaires à la liberté de leurs citoyens.

</POLITIQUE>

Si vous utilisez la dernière version d'XEmacs (20.3 au moment de la rédaction de ce document), la suggestion que je faisais le mois dernier pour l'utilisation de jka-compr ne marche pas. Ceux qui maintiennent XEmacs ont décidé que le comportement de leur éditeur ne devrait pas être modifié par le chargement d'un module d'extension, mais par l'appel d'une fonction d'initialisation appropriée. La façon correcte de procéder est d'indiquer (toggle-auto-compression 1 t). Désolé...

1.6 La prochaine fois...

Le prochain numéro, je parlerai d'ediff, une interface puissante pour diff et patch. 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.


Précédent Suivant Table des matières

Copyright (c) 1998, Eric Marsden - paru dans le numéro 26 de la Linux-Gazette

Adaptation française : Éric Jacoboni.