[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ suivant ]


À la découverte de GNU Emacs
Chapitre 4 - Quelques modes


4.1 Mineurs


4.1.1 Le mode auto-fill

Le mode auto-fill est un mode mineur très pratique lorsqu'on souhaite avoir des lignes ne dépassant pas n caractères, n étant bien sûr choisi par l'utilisateur. On peut l'activer ou le désactiver avec M-x auto-fill-mode.

Quand l'auto-fill-mode est actif, Emacs insère automatiquement un saut de ligne à la fin d'une ligne entre deux mots pour que celle-ci comporte le maximum de caractères sans dépasser la valeur de la variable fill-column. Les espaces insécables sont pris en compte donc ne peuvent donner lieu à une coupure par le mode auto-fill.

Donc si vous voulez taper un texte ne dépassant pas 78 colonnes par exemple, vous enclenchez si besoin est l'auto-fill-mode puis mettez 78 dans la variable fill-column et il ne vous reste plus qu'à taper au kilomètre.

Pour changer la valeur de la variable fill-column, il y a au moins deux possibilités offertes par les fonctions suivantes :

C-x f (set-fill-column)

Stocker la valeur de l'argument dans la variable fill-column. Par exemple, pour mettre 78 dans cette variable, on peut taper C-u 7 8 C-x f[22].

Cette fonction permet également d'utiliser la colonne courante pour affecter fill-column ; pour cela, il suffit de taper C-u C-x f.

M-x set-variable (set-variable)

Affecter une valeur à une variable, les deux étant demandées dans le minibuffer (sauf si on lui fournit ses deux arguments en l'appelant en ELisp par exemple...).

Il est important de noter que set-variable ne propose pas dans le choix des variables à affecter (quand on l'appelle interactivement) toutes les variables définies dans la session Emacs courante, mais seulement celles pour lesquelles les programmeurs ont estimé qu'elles devaient être facilement modifiables par l'utilisateur. Leur chaîne de documentation doit commencer par une astérisque « * ». Si vous avez besoin de contourner cette limitation, jetez un oeil à Le mode Lisp Interaction, Section 4.2.4.

Pour modifier n'importe quelle variable, on utilisera la fonction (ou plutôt special form) ELisp setq, par exemple en tapant M-: puis (setq variable valeur).

On dispose ensuite (entre autres, comme toujours dans ce tutoriel) des fonctions suivantes dans le mode auto-fill :

M-q (fill-paragraph)

Reformater le paragraphe où se trouve le point afin que ses lignes ne dépassent pas fill-column caractères. Si l'on veut préserver certains sauts de lignes à l'intérieur des paragraphes, on regardera dans l'aide en ligne d'Emacs (C-h i par exemple) du côté de la variable use-hard-newlines.

Dans la configuration par défaut, on peut aussi reformatter tous les paragraphes contenus dans la region à condition de la sélectionner avec la souris avant de taper M-q, ce qui équivaut à la fonction fill-region décrite ci-dessous, au mode de définition près de la zone à traiter.

M-x fill-region (fill-region)

Reformater tous les paragraphes de la region comme avec M-q.

On peut également noter qu'Emacs permet de justifier les paragraphes, c'est à dire d'insérer des espaces le plus régulièrement possible au sein de chaque ligne pour qu'elle fasse exactement fill-column caractères. On peut faire cela ponctuellement avec par exemple M-- M-q ou de imposer ce mode de fonctionnement de manière globale en mettant à full la variable default-justification -- avec set-variable ou avec ce que nous allons voir en Introduction à ELisp, le dialecte Lisp d'Emacs, Chapitre 5.


4.1.2 Le mode font-lock

Le mode font-lock est le mode mineur le plus utilisé pour réaliser la couleur syntaxique dans un mode majeur donné. Autrement dit, il est très utile !

À moins de vouloir réaliser un mode majeur avec colorisation vous-même (auquel cas le GNU Emacs Lisp Reference Manual répondra à vos attentes), vous n'avez pas grand-chose à savoir de ce mode si ce n'est que :


4.2 Majeurs


4.2.1 Le mode Fundamental

Le mode Fundamental est le mode le plus simple d'Emacs (le moins spécialisé). Autant dire qu'il ne présente pas un grand intérêt en pratique sinon qu'il forme la base pour définir les autres modes. Personnellement, je ne m'en sers jamais ; pour les fichiers sans particularité (langage de programmation...), j'utilise le mode Text.


4.2.2 Le mode Text

Le mode Text est le mode le plus adapté en général quand il s'agit d'éditer un texte dans un langage naturel (par opposition à un langage de programmation).

Dans ce mode, les paragraphes sont par défaut définis comme étant séparés par une ou plusieurs lignes blanches, touche TAB invoque la commande indent-relative qui permet d'indenter une ligne comme la précédente, M-TAB lance ispell-complete-word... bref, ce mode est pratique pour éditer du texte (ou un fichier de configuration sans mode prévu spécialement pour lui, etc.).

Si vous séparez vos paragraphes avec un alinea plutôt qu'avec des lignes blanches, vous serez peut-être intéressé par le paragraph-indent-text-mode.


4.2.3 Le mode Info

Le mode Info est utilisé pour naviguer au sein du système de documentation hypertexte Info (préféré aujourd'hui aux manpages par le projet GNU). On y trouve la version Info du GNU Emacs Manual) et plus généralement la documentation de tous les programmes disposant d'une aide au format Info et ayant été installés correctement (ce qui est fréquent sur les systèmes de type Unix).

On peut ouvrir un buffer *info* en mode Info avec C-h i (info). La documentation dans ce format est organisée sous forme d'arbre. On parle de noeud (node en anglais) pour désigner chaque « page » (à comprendre comme une page HTML). Compte-tenu de la structure d'arbre, il y a un noeud particulier, (pour chaque document au format Info) qui n'a aucun parent : c'est le noeud Top. Dans chaque noeud se trouvent des références à d'autres noeuds afin de pouvoir explorer l'arbre (ce sont les références hypertexte). Une telle référence est indiquée par une ligne comme :

      * Commands::	        Named functions run by key sequences to do editing.

quand on visite un noeud. Il suffit de déplacer le point sur le * Commands:: (en général affiché en gras) et d'appuyer sur RET pour explorer le noeud indiqué par la référence. On peut également cliquer dessus avec le bouton du milieu pour parvenir à ce résultat.

En fait, quand on invoque la commande info, on se retrouve dans un noeud dit Top où les références sont aussi des noeuds Top : c'est simplement que info nous amène dans le fichier dir, qui contient des références à toutes les docs au format Info correctement installées sur le système et que ces documentations sont chacune un fichier Info indépendant donc commençant par un noeud Top.

Ceci était pour ceux qui se posent des questions. :-) Il est très simple de se naviguer dans la documentation avec le mode Info : nous avons vu une manière de visiter un un noeud référencé par le noeud courant. Une autre manière souvent plus efficace quand on connaît à l'avance le nom du noeud où l'on veut se rendre consiste à appuyer sur m (Info-menu) puis à utiliser la complétion pour entrer le nom du noeud. Il est également très pratique, comme dans (presque) tout buffer Emacs, d'utiliser la recherche incrémentale (voir Déplacements, Section 3.5.1) pour chercher une information dans un noeud.

Les commandes suivantes sont également très utiles en mode Info :

u (Info-up)

remonter d'un niveau dans l'arbre vers le noeud Top

l (Info-last)

retourner au noeud précédemment visité

i (Info-index)

chercher un noeud relatif à un sujet dans l'index ; on peut ensuite se déplacer parmi les résultats avec (Info-index-next).

Pour plus d'informations, on consultera la documentation du programme Info (qui existe également indépendamment d'Emacs)... au format Info !


4.2.4 Le mode Lisp Interaction

Le mode Lisp Interaction est celui par défaut du buffer *scratch* (qui en principe est ouvert dans toute nouvelle session Emacs). Il permet d'exécuter/tester facilement des petits bouts de code Lisp.

On y a (via le font-lock-mode) une colorisation adaptée au Lisp, on peut évaluer une expression (comme dans beaucoup d'autres modes d'ailleurs) avec C-x C-e (eval-last-sexp) en ayant le point juste après la parenthèse qui la termine ; son résultat (on dit la value de la Lisp form) est affiché dans la echo area (affichée au même endroit que le minibuffer, là ou vous voyez la plupart des messages comme Auto-saving... ou Fontifying...done, retrouvés par la suite si besoin dans le buffer *Messages*).

Plus spécifiquement au mode Lisp Interaction, on peut évaluer une Lisp form avec C-j (eval-print-last-sexp) (toujours avec le point juste après la parenthèse qui la termine). Cette fois-ci, la form value est insérée dans le buffer courant, juste avant le point, ce qui est très pratique si c'est volumineux, si on veut réutiliser cette valeur pour une autre Lisp form, etc.

Petit exemple pratique : mettez-vous dans le buffer *scratch*, insérez :

     (+ 12 42)

Placez le point après la parenthèse fermante. Tapez C-x C-e : 54 (la somme de 12 et 42) s'affiche dans l'echo area. Tapez C-j : cette fois-ci, 54 est inséré dans le buffer à la ligne suivant (+ 12 42).

Même si vous ne faites jamais de vraie programmation en ELisp, ce mode peut vous être utile par exemple pour affecter des valeurs à certaines variables :


4.2.5 Le mode Hexl

Le mode Hexl permet de voir/éditer un fichier en visualisant l'écriture hexadécimale de chacun de ses octets (ce qui est pratique dans le cas de fichiers binaires). On peut l'invoquer bien entendu avec M-x hexl-mode.

On trouvera une documentation basique du mode en tapant C-h m (describe-mode) par exemple (dans un buffer en hexl-mode). On notera que les caractères « normaux » (de code compris entre 0x20 -- l'espace -- et 0x7E -- le tilde -- sont insérés tels quels et que l'on peut insérer un caractère à l'aide de son code écrit en hexadécimal avec M-C-x, décimal avec M-C-d et octal avec M-C-o.

Pour trouver les autres fonctions (par exemple celles permettant de se déplacer à un offset donné dans le buffer), on pourra taper C-h b (describe-bindings) dans un buffer en mode Hexl et faire une recherche incrémentale sur hexl- (ceci est une méthode générale pour trouver rapidement de l'aide sur un mode qu'on ne connaît pas).


[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ suivant ]


À la découverte de GNU Emacs

Version 1.36 (3 mai 2016)

Florent Rougon mailto:f . rougon (**AT**) free [point] fr