GNU-EMACS - Presentation simplifiee Guy Lapalme Departement d'informatique et de recherche operationnelle Universite de Montreal e-mail:lapalme@iro.umontreal.ca EMACS est un editeur de texte tres sophistique. En realite, c'est un interprete Lisp qui execute un editeur programme en Lisp. Or avant d'en apprecier toutes les subtilites, il est important d'en apprendre les rudiments comme tout autre editeur. Ces quelques pages devraient vous permettre d'utiliser EMACS comme n'importe quel autre editeur simple. Emacs est un editeur qui fonctionne aussi bien dans le mode caractere; ceci est particulierement utile lorsqu'on accede a l'ordinateur via un modem a basse vitesse que dans une fenetre X. Ce petit texte vous introduit aux deux modes. Meme si plusieurs operations se font avec la souris et les choix dans les menus, il est pratique et rapide de se familiariser avec les commandes au clavier. Il est difficile d'expliquer "en mots" ce qui se passe sur l'ecran. C'est pourquoi nous recommandons de faire cette lecture en meme temps que vous essayez les commandes sur l'ecran. Pour l'appeler, il suffit de faire : emacs Apres un certain temps, l'ecran se videra et apparaitra au bas de l'ecran Emacs: *scratch* (Lisp Interaction) indiquant le nom du tampon ("*scratch*" par defaut); le curseur sera en haut a gauche. Nous sommes alors au debut d'un document vierge et tout ce qu'on y tape y apparait a mesure. Essayez !!! Dans le systeme de fenetrage X, "emacs" fait apparaitre une nouvelle fenetre dans laquelle travailler. Lorsqu'un caractere errone a ete tape, on tape DEL et le dernier caractere avant le DEL disparait de l'ecran et le curseur recule. Comme chaque caractere tape s'ajoute au texte, il faut un autre moyen pour donner des commandes a EMACS lorsque nous desirons effectuer autre chose qu'entrer du nouveau texte. Pour differencier les commandes des caracteres il faut appuyer sur la touche "control" en meme temps qu'une lettre indiquant la commande. Ainsi en appuyant en meme temps sur les touches "control" et "b", le curseur reculera d'une position sans rien changer au texte; dans ce qui suit nous noterons par "^" cette touche simultanee de "control" et d'une lettre. Pour se deplacer dans le texte, les commandes suivantes ont ete definies: ^f (Forward) avancer d'un caractere ^b (Backward) reculer d'un caractere ^n (Next) aller a la meme position de la ligne suivante ^p (Previous) aller a la meme position de la ligne precedente ^a (Au debut!) aller au debut de la ligne ^e (End) aller a la fin de la ligne Au lieu de ^f, ^b, ^n et ^p on peut habituellement utiliser les fleches presentes sur le clavier pour le deplacement du curseur. Essayez-les. Si ca ne marche pas, demandez a un "expert" de vous configurer Emacs pour que ca fonctionne. Lorsqu'on travaille sur un ecran graphique, la facon la plus pratique de se deplacer rapidement dans un texte est d'utiliser la souris. Il suffit d'indiquer l'endroit dans le fichier ou on desirer se positionner et d'appuyer sur le bouton gauche de la souris. Avec ces commandes, il est donc possible de placer le curseur dans le texte et d'y ajouter de nouveaux caracteres en les tapant tout simplement. Essayez !!! Pour detruire un caractere, on a vu DEL qui detruisait le caractere precedant le curseur. ^d (Delete) detruit le caractere vis-a-vis le curseur; remarquez que lors de la destruction d'un caractere, tout le reste de la ligne est decale immediatement. Pour detruire toute ligne, il existe ^k (Kill) qui detruit les caracteres suivant le curseur jusqu'a la fin de la ligne courante; si le curseur est en fin de ligne, il enleve le CR final et la ligne suivante vient se fusionner avec celle-ci. Pour detruire des groupes de lignes, on en indique le debut en placant une marque avec ^@ (At) Les mots "Mark set" devraient apparaitre au bas de l'ecran, si ca ne fonctionne pas essayez soit la touche "BREAK" ou ^. On positionne ensuite le curseur a la fin de ce qu'on veut detruire; ^w (Wipe) fait disparaitre tout le texte entre la marque et le curseur. On peut aussi utiliser la souris pour delimiter cette region du texte en pointeur avec le bouton gauche et en glissant jusqu'a la fin. Le texte marque est alors souligne; ce souligne disparait aussitot mais la marque est maintenant repositionnee. Apres un "^k" ou un "^w", le texte detruit peut etre recupere avec ^y (Yank) On peut deplacer du texte en le "Yank"ant a un autre endroit que celui dont on vient de l'enlever. Une autre facon de positionner le curseur est la recherche d'une chaine: ^s (Search) imprime dans le bas de l'ecran "I-search:" et place le curseur dans un espace appele "mini-buffer" ou on tape la chaine desiree terminee par la touche RET. Le curseur se placera a la fin de la premiere occurrence de la chaine cherchee. La recherche se fait en avancant dans le document. Pour chercher en "remontant", il faut faire ^r (Reverse) qui place le curseur AVANT la premiere occurrence detectee. Lorsqu'un texte n'entre pas au complet sur l'ecran (c'est habituellement le cas), et que le curseur devrait sortir de l'ecran, EMACS reorganise le contenu de l'ecran de facon a ce que le curseur soit a peu pres au milieu. Ceci permet de voir le contexte. Lorsqu'on lit un texte, on aimerait souvent avoir une page neuve lorsque le curseur arrive en bas et non pas seulement la moitie. ^v (View) effectue ceci et ne garde que la derniere ligne de l'ecran precedent qui se retrouve maintenant en haut; le curseur est place en haut a gauche. Pour effectuer un remplacement de chaine, il faut taper ESC % EMACS demande alors la chaine a changer terminee par un "RETURN" et ensuite la chaine de remplacement; il positionne ensuite le curseur a la prochaine occurrence de la chaine et attendra une reponse avant de faire le remplacement. En tapant un espace, le remplacement sera effectue et le curseur se positionnera a la prochaine occurrence ou il attendra encore une reponse. Si on ne veut pas le remplacement de cette occurrence mais qu'on desire quand meme continuer pour voir les autres, il faut repondre avec DEL. Finalement, en reponse a un ! EMACS effectuera toutes les substitutions restantes sans demander de confirmation. EMACS permet de revenir en arriere et de defaire l'effet de commandes a l'aide de ^x u (Undo) souvent ^_ fait aussi l'affaire, Essayez. En appuyant de nouveau sur cette cle, on peut defaire autant de commandes que l'on veut jusqu'a retrouver l'etat initial du tampon. Toute autre commande brise la sequence de "undo" qui peut elle-meme etre defaite par la suite. En particulier, pour refaire une commande defaite il suffit d'effectuer une commande "inoffensive" ^f par exemple et de reexecuter undo. Ca semble complique mais c'est tres facile a utiliser une fois qu'on l'a experimente. Essayez. C'est surtout difficile de s'en passer une fois que l'on y est habitue. Sur un ecran graphique, il n'est pas necessaire de se rappeler toutes ces commandes car plusieurs d'entre elles sont disponibles a partir du menu deroulant qui apparait en appuyant sur un bouton de la souris sur un des mots en gras en haut de l'ecran. On y voit la commande et la suite de cles a appuyer pour lancer cette commande. Au debut, il est plus facile d'utiliser les menus mais rapidement on apprecie la commodite des combinaisons de cles. Maintenant que nous avons vu comment creer et modifier un fichier, il est interessant de le conserver. Pour eviter de faire des modifications par erreur, les commandes "dangereuses", c'est-a-dire qui modifient des etats de fichiers commencent par "^x" avant le code de controle (on retrouve aussi ces commandes sous le menu deroulant "File"): ^x^f (Find) place un fichier sur l'ecran ^x^s (Save) sauve le fichier sous le nom d'entree ^x^w (Write) ecrit le fichier;Emacs demande le nom ^x^c quitter EMACS ^z suspendre EMACS pour pouvoir y revenir plus tard On peut interrompre toute commande en cours avec ^g (Grrr!) Pour obtenir de l'aide: en tout temps il est possible de taper ^h (Help) Le plus simple est de repondre ? qui donne la liste de toutes les aides disponibles. Les plus utilisees sont c suivi d'un caractere qui decrit la fonction associee a ce caractere a suivi d'un mot qui donne la liste des commandes qui y ont rapport Ces messages d'aide apparaissent dans une autre fenetre et ne modifient pas le texte. Pour la faire disparaitre,il suffit de taper ce qui est suggere au bas de l'ecran. On a aussi acces a cette aide en utilisant le menu deroulant "Help". Ceci complete notre bref expose des principales commandes de EMACS. Il en existe une foule d'autres et il est meme possible de programmer soi-meme des extensions qui sont regroupees en modes. Principaux Modes EMACS Un texte peut-etre mis dans un "mode" qui en facilite l'edition en definissant des commandes supplementaires appropriees au mode. Par exemple, si on edite un texte "humain", on aura des commandes pour manipuler des mots, des phrases et des paragraphes. On peut mettre un tampon dans le mode "text" en tapant ESC x text-mode Le nom du mode apparait alors dans la ligne d'information sous la fenetre ou on ajoute le texte. On peut obtenir de l'information sur le mode courant, en particulier les commandes speciales a ce mode, en tapant ^h m Voici quelques exemples de modes groupes en grandes categories. Le mieux est de consulter la documentation en ligne disponible par la commande ^h i qui affiche son information dans un tampon EMACS (evidemment) dans un mode special INFO qui donne les possibilites de navigation a la maniere d'un hypertexte. Pour des textes humains, en plus du mode TEXT, on a les modes NROFF, TEX, LATEX et BIBTEX. Il y a aussi un mode pour lire son courrier RMAIL et un autre pour rediger des messages MAIL. Pour la programmation, on retrouve un mode pour presque tous les langages les plus courants (C, FORTRAN, PASCAL, ADA, SIMULA ...) qui facilite en particulier l'indentation des programmes. Il suffit de taper un TAB au debut d'une ligne pour obtenir l'indentation correcte. On obtient le meme effet en terminant une ligne par ^j qui placera le curseur de la prochaine ligne a l'indentation correcte. Il est de plus facile de lancer une compilation depuis EMACS en faisant ESC x compile et on tape la commande de lancement de la compilation. Si la compilation a produit des erreurs, il suffit de faire ^x ` (accent grave...) et EMACS positionnera le curseur sur la ligne en erreur. Pour les langages "interactifs" tels LISP ou PROLOG, on fait en general demarrer l'interprete dans un autre tampon d'EMACS qu'on appelle INFERIOR-LISP ou INFERIOR-PROLOG ce qui nous permet de garder trace de nos essais, de relancer d'anciennes commandes possiblement modifiees. On peut egalement faire demarrer un "shell" dans un tampon EMACS qui s'occupe alors de garder la trace de notre interaction. Comme dans le cas des modes "inferieurs" associes au langages interactifs, on peut reexecuter d'anciennes commandes. Lorsqu'on demande a editer un fichier qui est un repertoire, EMACS nous place alors dans le mode DIRED qui nous permet de gerer efficacement et visuellement le contenu du repertoire. Tableau des principales commandes EMACS DEPLACEMENT DU CURSEUR ^a:debut de la ligne | ESC a:debut de la phrase ^b:recule d'un car | ESC b:recule d'un mot ^e:fin de la ligne | ESC e:fin de la phrase ^f:avance d'un car | ESC f:avance d'un mot ^n:avance d'une ligne | ^p:recule d'une ligne | ^r:recherche vers l'arriere | ^s:recherche vers l'avant | esc <:debut du tampon | esc >:fin du tampon | ------------------------------------------------------------------------------ DESTRUCTION ET RECOUVREMENT del: detruit le car precedent | ESC DEL:detruit le mot precedent ^d: detruit le car sous le curseur | ESC d:detruit un mot en avant ^k: detruit jqa la fin de ligne | ESC k:detruit jqa la fin de phrase ^y: recouvre la derniere destruction| ^t: transpose les 2 derniers cars | ESC t:transpose les 2 derniers mots ESC % remplacement selectif | blanc=ok, DEL=refuse | ESC x replace-string: remplacement | ^_ : defaire la derniere commande ----------------------------------------------------------------------------- AFFICHAGE | ^l:reaffiche en centrant le curseur | ^v:ecran suivant | ESC v: ecran precedent ----------------------------------------------------------------------------- REGION | CONTROLE DE L'EDITION ^@: marque au curseur | ^g : avorter la commande en cours ^<: marque au debut du tampon | ^x^c: fin de l'edition ^>: marque a la fin du tampon | ^w: detruit la region | ESC w:copie la region | ^j : terminer la ligne courante et ^x^x:echange la marque avec curseur | et indenter la prochaine ----------------------------------------------------------------------------- FICHIERS | TAMPONS ^x^f:trouver un fichier | ^x^b:lister les tampons ^x^s:sauver un fichier | ^xb :choisir un tampon ^x^w:ecrire | ^xk :tuer un tampon | ^xa :ajouter a la fin d'un tampon ^xi : inserer un fichier | ESC x insert-buffer:inserer un tampon ----------------------------------------------------------------------------- COMPILATION | FENETRES ESC x compile : compiler dans tampon | ^x1: 1 fenetre ^x`: analyser la prochaine erreur | ^x2: 2 fenetres ESC x run-lisp: Lisp dans tampon | ^xo: passe a l'autre fenetre ESC x run-prolog: Prolog dans tampon | ESC ^v:avance l'autre fenetre ------------------------------------------------------------------------------ MACROS |DOCUMENTATION ^x(:debut de macro | ^h a: aide sur sujet ^x):fin de macro | ^h c: aide sur une cle ^xe:executer le dernier macro | ^h m: aide sur le mode courant ESC x name:nommer le dernier macro | ^h ?: aide sur l'aide ----------------------------------------------------------------------------- 12 juin 1995