• Aucun résultat trouvé

Sur certains systèmes, le vi disponible est vim pour viimproved(soit vi « amélioré », ce qui en dit long sur l’état du premier7). Cette version est moins légère que la version originale mais apporte beaucoup de fonctionnalités et des facilités pour sa configuration.

6.3 Avec Emacs

8

PrésenterEmacsen quelques pages est une tâche difficile. Donner envie au lecteur d’utiliser ce logiciel extraordinaire en est une autre. La première chose que l’on peut dire au sujet de cet « éditeur de texte à tout faire » est que son nom est une contraction deEditing MACroS et que son origine remonte à 1976 date à laquelle Richard M. Stallman, fondateur du projet GNU, commença le développement d’Emacs.

Emacsfait partie des « stars » des logiciels libres, dans le sens où c’est sans doute un modèle de logicielouvert. À l’instar de LATEX, les utilisateurs enthousiastes ont montré que grâce à cette ouverture on pouvait ajouter de nombreuses fonctionna-lités à ce logiciel fascinant.Emacsest essentiellement utilisé pour les facilités qu’il apporte à l’édition de fichier source au sens large du terme ; l’auteur — qui en a une expérience somme toute assez maigre — a pu éditer les fichiers suivants : scripts shell, langage C, C++, Lisp, Pascal, Perl, PostScript, script Matlab, fichiers LATEX et HTML, des Makefiles, script de Persistence of Vision, et tout ceci en bénéficiant de l’insertion de commentaires, de l’indentation automatique et de la mise en évi-dence des mots clefs en couleur, entre autres choses. Mais bien que son rôle premier soit l’édition de fichiers texte, il est aussi capable de jouer aux tours de hanoï (M-x hanoi), au morpion (M-x gomoku), à Tétris (M-x tetris), de vous psychanalyser (M-x doctor), de lire les mails et les news, de transférer des fichiers par ftp, de compulser un calendrier (M-x calendar) permettant notamment de savoir que la date du jour (4 juillet 2000) correspondant au septidi de Messidor de l’année 209 de la Révolution française, éditer des fichiers en hexadécimal (M-x hexl-mode), j’en passe et des pires...

Cette section est une introduction aux concepts fondamentaux d’Emacs ainsi qu’aux commandes à connaître pour y prendre goût. Nous donnons en fin de ce paragraphe quelques idées pour chercher de l’aide pour les explorations futures.

6.3.1 Concepts de base

Pour commencer, il est important de noter qu’Emacs a la particularité de pouvoir s’exécuter aussi bien en mode texte dans un terminal qu’en mode graphique (ou fenêtre) en s’appuyant sur un serveur X. Dans l’un ou l’autre des modes, on pourra utiliser les commandes présentées dans cette section.

Les objets graphiques qui composent l’éditeurEmacssont les suivants : Frame : Emacsest multi-fenêtre, et nomme chacune d’ellesframe9. La figure 6.1

montre une session avec deuxframes; 7. cf. note 5.

8. Cette section est beaucoup plus longue que celle consacrée à l’éditeurvi. Je suis un utilisateur quotidien et enthousiaste d’Emacs, c’est pourquoi de manière totalement subjective et partiale, je m’étendrais quelque peu sur le sujet...

9. Nous conserverons ici à dessein le jargon anglais d’Emacsen utilisant une fonteparticulière.

6

Sur certains systèmes, le vi disponible est vim pour viimproved(soit vi « amélioré », ce qui en dit long sur l’état du premier7). Cette version est moins légère que la version originale mais apporte beaucoup de fonctionnalités et des facilités pour sa configuration.

6.3 Avec Emacs

8

PrésenterEmacsen quelques pages est une tâche difficile. Donner envie au lecteur d’utiliser ce logiciel extraordinaire en est une autre. La première chose que l’on peut dire au sujet de cet « éditeur de texte à tout faire » est que son nom est une contraction deEditing MACroS et que son origine remonte à 1976 date à laquelle Richard M.Stallman, fondateur du projet GNU, commença le développement d’Emacs.

Emacsfait partie des « stars » des logiciels libres, dans le sens où c’est sans doute un modèle de logicielouvert. À l’instar de LATEX, les utilisateurs enthousiastes ont montré que grâce à cette ouverture on pouvait ajouter de nombreuses fonctionna-lités à ce logiciel fascinant.Emacsest essentiellement utilisé pour les facilités qu’il apporte à l’édition de fichier source au sens large du terme ; l’auteur — qui en a une expérience somme toute assez maigre — a pu éditer les fichiers suivants : scripts shell, langage C, C++, Lisp, Pascal, Perl, PostScript, script Matlab, fichiers LATEX et HTML, des Makefiles, script de Persistence of Vision, et tout ceci en bénéficiant de l’insertion de commentaires, de l’indentation automatique et de la mise en évi-dence des mots clefs en couleur, entre autres choses. Mais bien que son rôle premier soit l’édition de fichiers texte, il est aussi capable de jouer aux tours de hanoï (M-x hanoi), au morpion (M-x gomoku), à Tétris (M-x tetris), de vous psychanalyser (M-x doctor), de lire les mails et les news, de transférer des fichiers par ftp, de compulser un calendrier (M-x calendar) permettant notamment de savoir que la date du jour (4 juillet 2000) correspondant au septidi de Messidor de l’année 209 de la Révolution française, éditer des fichiers en hexadécimal (M-x hexl-mode), j’en passe et des pires...

Cette section est une introduction aux concepts fondamentaux d’Emacs ainsi qu’aux commandes à connaître pour y prendre goût. Nous donnons en fin de ce paragraphe quelques idées pour chercher de l’aide pour les explorations futures.

6.3.1 Concepts de base

Pour commencer, il est important de noter qu’Emacs a la particularité de pouvoir s’exécuter aussi bien en mode texte dans un terminal qu’en mode graphique (ou fenêtre) en s’appuyant sur un serveur X. Dans l’un ou l’autre des modes, on pourra utiliser les commandes présentées dans cette section.

Les objets graphiques qui composent l’éditeurEmacssont les suivants : Frame : Emacsest multi-fenêtre, et nomme chacune d’ellesframe9. La figure 6.1

montre une session avec deuxframes; 7. cf. note 5.

8. Cette section est beaucoup plus longue que celle consacrée à l’éditeurvi. Je suis un utilisateur quotidien et enthousiaste d’Emacs, c’est pourquoi de manière totalement subjective et partiale, je m’étendrais quelque peu sur le sujet...

9. Nous conserverons ici à dessein le jargon anglais d’Emacsen utilisant une fonteparticulière.

6

Window

Mini buffer

Buffers

Frame

Figure6.1: Emacs dans un environnement graphique

6

Window

Mini buffer

Buffers

Frame

Figure6.1: Emacs dans un environnement graphique

6

Window : lesframescontiennent une ou plusieurswindows. La figure 6.1 montre troiswindows: une dans la frame de gauche et deux dans la frame de droite ; Buffer : les données qui sont affichées dans leswindowssont des zones mémoires appeléesbuffers. Ces zones contiennent du texte à éditer. Unbufferpeut être sauvegardé sur disque, créé à partir d’un fichier, etc. En fait sousEmacs, « tout est buffer » ;

Minibuffer : buffer particulier composé d’une ligne tout en bas de chaqueframe.

C’est dans cette zone qu’a lieu la majeure partie des interactions avec l’utili-sateur ;

Status bar : ou barre d’état, située en bas de chaquewindow, elle indique diffé-rentes informations ; ici : le nom du fichier, l’heure, la position du curseur, le mode d’édition (cf. plus bas), etc. :

Menu : chaqueframedispose d’un menu permettant de lancer diverses fonctions.

Les deux autres concepts fondamentaux sont les suivants :

Commandes : toute action exécutée dans l’éditeur, quelle qu’elle soit, est le résul-tat de l’interprérésul-tation d’une fonction Lisp10. Cette fonction peut être appelée par son nom, par une combinaison de touches, ou par le biais du menu. Il faut noter que toutes les fonctions n’ont pas nécessairement de combinaison de touches ou d’entrée dans le menu ;

Mode : chaque buffer est « piloté » parEmacsdans unmodeparticulier. Le mode en question correspond à la manière dont les commandes vont être interprétées.

À titre d’exemple, les fonctions d’indentation, de mise en couleur, de mise en commentaire, sont interprétées différemment selon qu’Emacsest en mode LATEX, ou en mode C pour ne citer que ceux-là.

6.3.2 Notations utilisées

Dans les diverses documentations que l’on trouve traitant d’Emacs, et dansemacs lui-même, on retrouve les notations suivantes au sujet des combinaisons de touches :

– C-hti: pour une pression sur Ctrl et la touchehti; – M-hti: désigne l’utilisation de la touche « Meta » :

– une pression sur Alt et la touchehti, ou à défaut : – une pression sur Esc puisla touchehti.

– ESC: la touche Esc ; – RET: la touche Entrée ; – SPC: la barre d’espacement ; Ainsi :

– M-xsignifie Alt et x ou Esc puis x ;

10. Le Lisp — dont le nom vient de l’anglaislist processing — est le language utilisé pour concevoir les différentes extensions d’Emacs. La configuration de celui-ci demande d’ailleurs de connaître les rudiments de ce langage.

6

Window : lesframescontiennent une ou plusieurswindows. La figure 6.1 montre troiswindows: une dans la frame de gauche et deux dans la frame de droite ; Buffer : les données qui sont affichées dans leswindowssont des zones mémoires appeléesbuffers. Ces zones contiennent du texte à éditer. Unbufferpeut être sauvegardé sur disque, créé à partir d’un fichier, etc. En fait sousEmacs, « tout est buffer » ;

Minibuffer : buffer particulier composé d’une ligne tout en bas de chaqueframe.

C’est dans cette zone qu’a lieu la majeure partie des interactions avec l’utili-sateur ;

Status bar : ou barre d’état, située en bas de chaquewindow, elle indique diffé-rentes informations ; ici : le nom du fichier, l’heure, la position du curseur, le mode d’édition (cf. plus bas), etc. :

Menu : chaqueframedispose d’un menu permettant de lancer diverses fonctions.

Les deux autres concepts fondamentaux sont les suivants :

Commandes : toute action exécutée dans l’éditeur, quelle qu’elle soit, est le résul-tat de l’interprérésul-tation d’une fonction Lisp10. Cette fonction peut être appelée par son nom, par une combinaison de touches, ou par le biais du menu. Il faut noter que toutes les fonctions n’ont pas nécessairement de combinaison de touches ou d’entrée dans le menu ;

Mode : chaque buffer est « piloté » parEmacsdans unmodeparticulier. Le mode en question correspond à la manière dont les commandes vont être interprétées.

À titre d’exemple, les fonctions d’indentation, de mise en couleur, de mise en commentaire, sont interprétées différemment selon qu’Emacsest en mode LATEX, ou en mode C pour ne citer que ceux-là.

6.3.2 Notations utilisées

Dans les diverses documentations que l’on trouve traitant d’Emacs, et dansemacs lui-même, on retrouve les notations suivantes au sujet des combinaisons de touches :

– C-hti: pour une pression sur Ctrl et la touchehti; – M-hti: désigne l’utilisation de la touche « Meta » :

– une pression sur Alt et la touchehti, ou à défaut : – une pression sur Esc puisla touchehti.

– ESC: la touche Esc ; – RET: la touche Entrée ; – SPC: la barre d’espacement ; Ainsi :

– M-xsignifie Alt et x ou Esc puis x ;

10. Le Lisp — dont le nom vient de l’anglaislist processing— est le language utilisé pour concevoir les différentes extensions d’Emacs. La configuration de celui-ci demande d’ailleurs de connaître les rudiments de ce langage.

6

– C-x C-c signifie Ctrl et x et Ctrl et c , que l’on peut obtenir en maintenant Ctrl enfoncée tout en tapant dans l’ordre x puis c .

6.3.3 Appeler une commande

À partir de l’exemple de la commande d’ouverture d’un fichier, nous allons pas-ser en revue quelques-unes des notions importantes d’Emacsconcernant l’appel des commandes. On peut appeler la commande d’ouverture de fichier (find-file) de quatre manières :

– par son nom à l’aide de la combinaison :M-x find-file; – à l’aide de la combinaison :C-x C-f;

– à l’aide d’un éventuel raccourci clavier défini sur votre installation ; – à l’aide de l’entréeFile/Open Filedans la barre de menu.

Le minibuffer

Dans les trois cas le lancement de cette commande donne le focus auminibuffer, et l’utilisateur doit entrer le nom du fichier qu’il veut ouvrir ou un nom quelconque pour créer un nouveau buffer.

M-x find-file Entrée monfichier.txt Entrée

Dans le minibuffer la touche « Espace » ( ) ou « Tab » ( −−→− −→ ) permet de compléter automatiquement un nom de commande ou un nom de fichier. En cas d’équivoque une pression sur ces touches crée une nouvelle windowavec unbuffer contenant les différentes alternatives possibles à la complétion. Par exemple si on tape :

M-x find

on fait apparaître une fenêtre contenant le buffer suivant : Click mouse-2 on a completion to select it.

In this buffer, type RET to select the completion near point.

Possible completions are:

find-alternate-file find-alternate-file-other-window

find-dired find-file

find-file-at-point find-file-literally find-file-other-frame find-file-other-window find-file-read-only find-file-read-only-other-frame find-file-read-only-other-window find-function

find-function-at-point find-function-on-key find-function-other-frame find-function-other-window

find-grep-dired find-name-dired

find-tag find-tag-noselect

find-tag-other-frame find-tag-other-window

find-tag-regexp find-variable

find-variable-at-point find-variable-other-frame find-variable-other-window

qui montre donc toutes les commandes dont le nom commence par «find». Donc en tapant les deux premiers caractères :

M-x find fi Entrée

6

– C-x C-c signifie Ctrl et x et Ctrl et c , que l’on peut obtenir en maintenant Ctrl enfoncée tout en tapant dans l’ordre x puis c .

6.3.3 Appeler une commande

À partir de l’exemple de la commande d’ouverture d’un fichier, nous allons pas-ser en revue quelques-unes des notions importantes d’Emacsconcernant l’appel des commandes. On peut appeler la commande d’ouverture de fichier (find-file) de quatre manières :

– par son nom à l’aide de la combinaison :M-x find-file; – à l’aide de la combinaison :C-x C-f;

– à l’aide d’un éventuel raccourci clavier défini sur votre installation ; – à l’aide de l’entréeFile/Open Filedans la barre de menu.

Le minibuffer

Dans les trois cas le lancement de cette commande donne le focus auminibuffer, et l’utilisateur doit entrer le nom du fichier qu’il veut ouvrir ou un nom quelconque pour créer un nouveau buffer.

M-x find-file Entrée monfichier.txt Entrée

Dans le minibuffer la touche « Espace » ( ) ou « Tab » ( −−→− −→ ) permet de compléter automatiquement un nom de commande ou un nom de fichier. En cas d’équivoque une pression sur ces touches crée une nouvellewindowavec unbuffer contenant les différentes alternatives possibles à la complétion. Par exemple si on tape :

M-x find

on fait apparaître une fenêtre contenant le buffer suivant : Click mouse-2 on a completion to select it.

In this buffer, type RET to select the completion near point.

Possible completions are:

find-alternate-file find-alternate-file-other-window

find-dired find-file

find-file-at-point find-file-literally find-file-other-frame find-file-other-window find-file-read-only find-file-read-only-other-frame find-file-read-only-other-window find-function

find-function-at-point find-function-on-key find-function-other-frame find-function-other-window

find-grep-dired find-name-dired

find-tag find-tag-noselect

find-tag-other-frame find-tag-other-window

find-tag-regexp find-variable

find-variable-at-point find-variable-other-frame find-variable-other-window

qui montre donc toutes les commandes dont le nom commence par «find». Donc en tapant les deux premiers caractères :

M-x find fi Entrée

6

on complète jusqu’àfind-fileet il est alors possible de saisir le nom du fichier que l’on veut charger. On notera que la complétion automatique fonctionne aussi sur les noms de fichiers. Enfin, la fenêtre d’information vous indique également que vous pouvez utiliser le bouton du milieu de votre souris11pour choisir le fichier parmi la sélection.

Stop !

Pour interrompre une action entreprise dans leminibuffer, il faut utiliser la com-binaisonC-gqui appelle la fonctionkeyboard-quit. Cette fonction est également utile pour interrompre l’exécution d’une commande.

Lorsqu’on débute sous Emacs, on a tendance à « laisser traîner » son curseur dans leminibuffer; ce qui peut entraîner un comportement étrange de l’éditeur qui vous narguera par des :

Command attempted to use minibuffer while in minibuffer dans ce cas une ou deux pressions surC-gremet Emacs dans le droit chemin.

Historique

La combinaisonC-x ESC ESCrappelle la dernière commande exécutée. Les touches

et dans leminibufferpermettent alors de choisir et éventuellement modifier l’une des dernières commandes exécutées :

Redo: (find-file "˜/tcqvatvs/guide/chap-configurer.tex" 1) cet historique permet en outre d’avoir une première idée de la syntaxe d’appel des commandes Lisp.

Arguments et répétition

Certaines commandes d’Emacsattendent un argument numérique. On peut pas-ser cet argument en préfixant l’appel de la commande parC-uhni, pour passer la valeurhni. Si la commande en question n’attend pas d’argument elle sera simplement exécutéehnifois. Par exemple la séquence :C-u 24 a, insère :

aaaaaaaaaaaaaaaaaaaaaaaa dans lebuffercourant.

6.3.4 Manipuler les objets d’Emacs

Les objets d’Emacs—frame,window,buffer, etc. — peuvent être manipulés via un certain nombre de fonctions qu’il est souhaitable de connaître.

11. Si votre souris n’a qu’un bouton, c’est que vous avez un Machinetoque, changer alors d’or-dinateur ; si votre souris n’a que deux boutons, vous vous êtes fait avoir par le protocole « micro logiciel », changez de souris.

6

on complète jusqu’àfind-fileet il est alors possible de saisir le nom du fichier que l’on veut charger. On notera que la complétion automatique fonctionne aussi sur les noms de fichiers. Enfin, la fenêtre d’information vous indique également que vous pouvez utiliser le bouton du milieu de votre souris11pour choisir le fichier parmi la sélection.

Stop !

Pour interrompre une action entreprise dans leminibuffer, il faut utiliser la com-binaisonC-gqui appelle la fonctionkeyboard-quit. Cette fonction est également utile pour interrompre l’exécution d’une commande.

Lorsqu’on débute sous Emacs, on a tendance à « laisser traîner » son curseur dans leminibuffer; ce qui peut entraîner un comportement étrange de l’éditeur qui vous narguera par des :

Command attempted to use minibuffer while in minibuffer dans ce cas une ou deux pressions surC-gremet Emacs dans le droit chemin.

Historique

La combinaisonC-x ESC ESCrappelle la dernière commande exécutée. Les touches

et dans leminibufferpermettent alors de choisir et éventuellement modifier l’une des dernières commandes exécutées :

Redo: (find-file "˜/tcqvatvs/guide/chap-configurer.tex" 1) cet historique permet en outre d’avoir une première idée de la syntaxe d’appel des commandes Lisp.

Arguments et répétition

Certaines commandes d’Emacsattendent un argument numérique. On peut pas-ser cet argument en préfixant l’appel de la commande parC-uhni, pour passer la valeurhni. Si la commande en question n’attend pas d’argument elle sera simplement exécutéehnifois. Par exemple la séquence :C-u 24 a, insère :

aaaaaaaaaaaaaaaaaaaaaaaa dans lebuffercourant.

6.3.4 Manipuler les objets d’Emacs

Les objets d’Emacs—frame,window,buffer, etc. — peuvent être manipulés via un certain nombre de fonctions qu’il est souhaitable de connaître.

11. Si votre souris n’a qu’un bouton, c’est que vous avez un Machinetoque, changer alors d’or-dinateur ; si votre souris n’a que deux boutons, vous vous êtes fait avoir par le protocole « micro logiciel », changez de souris.

6

Figure6.2: TheEmacsquad tree

Frame les tâches courantes autour desframessont la création et la destruction. On crée une nouvelleframeavec :

– C-x 5 2ou :

– M-x make-frame-command – par le menuFile/Make New Frame on détruit celle sur laquelle on se trouve avec :

– C-x 5 0ou : – M-x delete-frame

– en cliquant sauvagement sur le bouton « delete window » de son gestionnaire de fenêtres préféré.

Il est bien évident que lesframesd’Emacs ne sont disponibles que dans un

Il est bien évident que lesframesd’Emacs ne sont disponibles que dans un