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

4. Fonctionnalités avancées

4.1 La mise en page, l'indentation

Quand vous êtes en C-mode (traduit par le fait de voir C en major mode (cf structure de l'écran) dans la région modeline), Emacs peut indenter automatiquement votre code (comme le programme indent).

Il suffit de taper TAB (qui ne réalise par de tabulation du coup) et la ligne s'indente automatiquement.

Là encore vous pouvez configurer les valeurs des indentations (en nombre d'espaces) cf doc d'Emacs.

Vous pouvez aussi ne pas avoir à taper sur TAB en réglant une valeur (cf configurer emacs), et du coup à chaque fin de ligne quand vous tapez sur RET il se place directement là où il faut.

Vous pouvez indenter toute une région en la sélectionnant (comme quand on veut la couper, cf édition basique), puis tapez M-x (cf fonctions utiles) suivit d'indent-region.

Ainsi, si on vous donne du code mal indenté, tapez : C-x h ce qui sélectionne tout le contenu du buffer, puis M-x indent-region cela peut parfois prendre du temps, alors prenez patience .

Notez que parfois vous avez l'impression que Emacs indente mal. C'est que vous avez un problème dans votre code (accolade ou parenthèse fermante manquante etc...). Ainsi ça permet de voir les problèmes de syntaxe de votre programme sans lancer le compilateur (qu'il est fort cet Emacs !).

4.2 Remplacer un mot par un autre

Tapez M-%, puis votre premier mot mot1 RET puis le second mot2 RET. Emacs placera le curseur sur la première occurrence de mot1. Tapez alors y ou n, puis il ira sur l'occurrence suivante. Tapez alors y ou n et ainsi de suite.

Pour ne pas avoir à dire y à chaque fois, tapez ! au lieu de y.

Il est possible de remplacer des regexps (regular expression ou expression régulière) par un mot (très puissant). Par exemple remplacer tous les MOTS dede par menfout : tapez M-x replace-regexp puis \<dede\> RET puis menfout RET (\< veut dire début de mot et \> fin de mot).

Puissant, non ? Et ce n'est pas fini, le meilleur est à venir.

Les expressions régulières sont un concept UNIX très important et très puissant. Pour plus d'informations voir dans le manuel hypertexte d'Emacs (cf doc d'Emacs) le noeud searching and replacement.

4.3 Completion bis, le retour

Nous avons déjà vu qu'Emacs aidait l'utilisateur à compléter les mots dans le minibuffer. Il peut le faire aussi dans les fichiers. Il suffit de taper les premières lettres d'un mot, par exemple pad puis M-/ et alors il complétera par padioleau (si le mot est présent dans le buffer courant ou dans les autres).

Fantastique. Ainsi, imaginez que vous faites du C++ (y a des masos partout), et que vous voulez appeler une fonction déclarée plus haut (ou plus bas) dans le fichier ou dans un autre fichier (ouvert par Emacs). Vous savez que la fonction commence par fo. Tapez fo puis M-/ et avec un peu de chance il complétera par foobar. Si ce n'est pas le cas, retapez sur M-/ jusqu'à ce qu'il trouve, si il ne trouve pas c'est que cette fonction n'est dans aucun des buffers.

4.4 Les couleurs sous Emacs

Emacs peut rendre votre code plus lisible pour vous, en y ajoutant des couleurs. Il embellit la présentation à l'écran de votre code. Les couleurs sont accessibles uniquement sous X (XEmacs gère aussi la couleur en mode console).

Ainsi les commentaires seront en rouge, les mots clés en jaune, etc...

Pour rendre votre code beau tapez M-x font-lock-mode RET. Ceci fera rentrer le minor mode Font dans modeline(cf structure de l'écran). Si votre code n'est toujours pas beau, essayez M-x font-lock-fontify-buffer.

Le problème c'est que vous devrez taper pour chaque buffer M-x font-lock-mode. Mais ceci est paramétrable dans le fichier .emacs (cf configurer emacs).

En plus des couleurs, XEmacs gère des fontes différentes pour telle ou telle entité (commentaires, mots clés, etc...). Le choix des couleurs est bien sûr lui aussi paramétrable (c'est pas compliqué, sous Emacs tout est paramétrable).

Pour voir la liste des faces une face représente l'entité. par exemple la face-comment est la face qui gère les attributs des commentaires et leurs attributs tapez M-x list-faces-display.

4.5 Rectangles

Le problème est le suivant : imaginez que vous avez ceci

   

   essai a la con c est cool

   essai d la cin c est cool

   essao a la cun c est cool

   essaa i la con c est cool

   
et que vous voulez remplacer les 3 premières colonnes par dede. La région concernée est un rectangle. Une solution est de faire une macro (cf macro), mais il y a plus simple : les rectangles.

C'est pas facile à faire avec les fonctions standards comme couper, copier, coller (cf édition basique). La démarche c'est de se placer en haut à gauche du rectangle (sur le "e" de essai de la première ligne ), de taper C-ESPACE (classique, on dépose une marque comme en édition basique), puis de se déplacer en bas à droite du rectangle et de taper C-x r k qui va couper le rectangle (que l'on peut réinsérer à un autre endroit par C-x r y).

On obtient


   con c est cool

   cin c est cool

   cun c est cool

   con c est cool

   
Puis on refait un rectangle (avec C-ESPACE) du premier "c" au "c" de la dernière ligne, et on tape C-x r t cette fonction est très pratique pour mettre en commentaire un ensemble de lignes qui se suivent (en mode bash par exemple avec comme commentaire "#") puis dede RET, et Ooooh magique ça marche.

   dedecon c est cool

   dedecin c est cool

   dedecun c est cool

   dedecon c est cool

   

Il n'existe pas de fonction pour copier un rectangle (on ne peut que les couper). Ainsi la méthode est de couper le rectangle comme d'habitude, puis de faire un undo avec C-/ (cf undo).

4.6 Macro

Il arrive que vous ayez à répéter plusieurs fois une séquence de touches. Pour gagner du temps Emacs met à notre disposition les macros. Tapez C-x ( puis votre séquence de touches puis C-x ), et votre macro est enregistrée. Pour l'appeler tapez simplement C-x e.

4.7 Les TAGS : très important

Le but est de trouver l'endroit où est définie une fonction rapidement. Comment ? Réponse : les TAGS. Démonstration : imaginons que vous avez un projet avec 4 fichiers contenant du C : foo1.c foo2.c bar1.c foobar.c et des fichiers .h.

Si vous voulez revenir dans votre précédent buffer, tapez C-x b (cf multiple buffer) puis foo.c (ou RET si la valeur default est bonne).

En tapant C-x 4 . à la place de M-. Emacs ouvre le fichier foobar.c dans une autre fenêtre (cf fenêtre multiple).

Le programme etags reconnaît un certain nombre de langage, dont le C, C++, Java, Pascal, LaTeX, Scheme, Prolog, assembleur etc ...

4.8 Les sexps

Il arrive en mode C, lorsque le curseur est situé sur une accolade ouvrante, de vouloir aller directement sur l'accolade fermante correspondante. Pour cela tapez M-DROITE (ou C-M-f). Quand vous êtes sur l'accolade fermante tapez M-GAUCHE (ou C-M-b) pour revenir à l'accolade ouvrante.

Un 'bloc' C (tout comme la plus simple 'expression' C) est considéré par Emacs comme une sexp vient de s-expression, qui représente une expression LISP (au sens large) . Ainsi M-DROITE veut dire aller à la prochaine sexp, ce qui revient en C, lorsque l'on est sur une accolade ouvrante, à aller au prochain 'bloc' C (soit juste après l'accolade fermante). Une expression parenthesée est aussi une sexp, ainsi pour aller directement à la parenthèse fermante utilisez la même méthode.

On peut donc facilement indenter un 'bloc' C en tapant M-x indent-sexp ou couper une sexp avec C-M-k.

Chaque mode (comme le major mode C) définit ce qu'est une sexp, ce qui implique que l'objet sexp ne représente pas toujours la meme chose dans chacun de ces modes.

4.9 Compiler sous Emacs

Sous les environnements de développement intégrés proposés par Borland, quand vous compilez votre projet et que le code souffre d'erreurs de syntaxe (ou de type) l'éditeur Borland place le curseur directement sur l'erreur. Sous Emacs c'est pareil (mais en mieux).

Pour compiler tapez M-x compile RET.

Il vous demande alors la commande de compilation (souvent make mais peut être aussi gcc foo.c etc..), rentrez la commande puis RET (ou RET tout court si vous voulez faire un make), et là vous voyez dans une fenêtre le déroulement de la compilation (et souvent les erreurs).

Pour aller à la première erreur, soit vous repérez à quelle ligne s'est produite l'erreur, et vous y allez à la main (approche textedit), soit vous tapez C-x `. Emacs place alors votre curseur à la ligne où s'est produite l'erreur. Corrigez, puis pour aller à la prochaine erreur retapez encore C-x ` et ainsi de suite.

4.10 Débugger sous Emacs

On peut très facilement débugger sous Emacs (un peu comme sous Borland). Compilez votre programme avec -g pour que le binaire contienne des infos de débuggage et au lieu d'utiliser gdb tout seul (sans Emacs), tapez sous Emacs M-x gdb RET. Vous voilà alors comme si vous étiez sous gdb classique. Tapez b main RET (break-point sur main), puis r RET (run), et là magie, vous voyez deux fenêtres, une sous gdb et l'autre contenant le fichier.c qui contient la fonction main, ainsi qu'une petite flèche vous indiquant où vous êtes dans votre programme (magique).

Vous pouvez alors taper les commandes classiques de gdb (b break-point, c pour continue (va au prochain break-point), n pour prochaine instruction (next), s pour rentrer dans une fonction, f pour finish pour sortir de la fonction, etc... cf doc de gdb) et votre petite flèche bougera en même temps que vous tracez votre programme.

4.11 Shell

Vous n'êtes pas obligé de quitter Emacs pour lancer des commandes shell.

Tapez M-x shell RET et vous voilà avec un buffer de nom *shell* où vous pouvez taper vos commandes.

Ce buffer est un buffer comme un autre (les copier couper et touti quanti sont disponibles, la completion aussi). De plus vous avez l'historique des commandes en tapant M-p (ou C-HAUT et M-n (C-BAS;) (Previous et Next). Ceci est très utile avec camllight par exemple qui lui ne possède pas d'historique dans son interface. Ainsi tapez M-x shell RET, puis camllight RET et vous entrez sous camllight. Vous pouvez alors faire des copier coller de votre source CAML dans ce buffer, le faire interpréter par CAML, puis tapez M-p pour avoir la dernière commande.

4.12 RCS, le gestionnaire de versions

Emacs offre un environnement de travail avec rcs très facile. Après avoir créé un répertoire RCS dans le répertoire de votre projet, tapez simplement C-x v v. Vous voyez à présent dans modeline (cf structure de l'écran) RCS:1.1.

Pour archiver une nouvelle version, retapez C-x v v. Il vous demande alors de décrire les changements apportés. Après avoir fini de taper vos commentaires tapez C-c C-c. Vous voyez ainsi dans modeline que le numéro de version a changé, et que le fichier est en lecture seule car on voit %% dans modeline ( Voir structure de l'écran). Retapez encore C-x v v et c'est impeccable.

Pour revoir une version antérieure, tapez C-x v ~ puis un numéro de version.

RCS est un outil permettant de gérer un projet plus efficacement, mais il nécessite des connaissances qui sortent du cadre de ce tutorial. Pour plus d'informations voir la page man de RCS, et la documentation d'Emacs (cf doc d'Emacs) dans le noeud Version Control.

4.13 Vérificateur orthographique

Comme sous certains logiciels Micr...t, il est possible sous Emacs d'effectuer une vérification orthographique. Il suffit de disposer du programme ispell non fournie avec Emacs et du dictionnaire orthographique de la langue. Pour lancer la vérification sur un fichier tapez M-x ispell-buffer. Emacs vous demandera dès qu'il trouve une erreur de donner une réponse. L'écran se scinde en deux, et dans la fenêtre du haut on peut voir un certain nombre de choix et des couples mot-nombre. Si l'un des choix proposés vous va, tapez alors le nombre correspondant au mot. Si aucun choix n'est donné alors tapez sur R si vous voulez corriger le mot. Si le mot est selon vous bien écrit tapez sur ESPACE. L'ennui c'est que selon lui ce mot est mal écrit, et donc si il le rencontre encore, il vous requestionnera. La solution est de taper sur a au lieu de ESPACE. Si vous voulez insérer le mot dans votre propre dictionnaire (ispell ne connaît pas tous les mots) tapez sur i. On peut aussi:

Si vous voulez qu'Emacs prenne le dictionnaire français, tapez M-x ispell-change-dictionary puis francais. Voir aussi configurer emacs.

4.14 Configurer Emacs avec le .emacs

Pour configurer Emacs, il suffit d'écrire en LISP certaines commandes dans le fichier .emacs. Comme la plupart des autres outils UNIX, le comportement d'Emacs dépend d'un fichier .qqchose dans le répertoire de l'utilisateur.

Ainsi créez un fichier .emacs dans votre répertoire HOME, et écrivez vos fonctions dedans.

prenons comme exemple une partie de mon fichier .emacs :


   (global-font-lock-mode t) ;pour avoir les couleurs sans avoir a taper font-lock-mode

   (setq font-lock-maximum-decoration t) ;maximum de couleurs

   (setq font-lock-maximum-size nil)

   (transient-mark-mode t) ;pour que la region selectionnee soit mise en surbrillance

   (setq compilation-window-height 10) ;pour que la fenetre de compilation ne soit pas trop grande

   (standard-display-european 1)   ;pour avoir les accents

   (setq ispell-dictionary "francais") ;dictionnaire francais par defaut

   (defun padcomment()

     "pad comment"

       (interactive)

       (newline)

       (insert "/***********************************************")

       (newline)

       (insert "** **")

       (newline)

       (insert "***********************************************/")

       (previous-line 1)

       (forward-char 2)  

  )

  (setq c-mode-hook ;fonction appelee des que l'on ouvre un fichier .c

      '(lambda ()

   (setq c-auto-newline t) ; pour que l'on n'ait pas a taper sur TAB pour indenter

   (message "modifie par pad")

   (define-key c-mode-map "\C-c\C-i" 'padcomment) ;bind a la touche C-c C-i la fonction pad-comment

   ))

   

Vous me direz c'est pas évident de savoir que c'est telle variable qui fait telle chose. Comment faire pour réussir ?


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