Ceci n’est pas une introduction à Emacs en soi mais à sa configuration. Si vous connaissez les bases, avez lu le tutorial intégré ou quelque chose d’équivalent, que vous arrivez à vous déplacer, écrire du texte, et éditer des fichiers dans Emacs, mais souhaitez changer certains paramètres de son comportement, cet article est peut-être pour vous.
Cette introduction à la configuration vous apprendra au passage les
bases de la syntaxe utilisée pour écrire le fichier .emacs ; si vous
voulez juste copier et coller des bouts de code, cet article n’est pas
pour vous.
Je ne documente ici ni XEmacs, ni NTEmacs, seulement GNU Emacs, soyez averti. Ce n’est pas que j’aie quoi que ce soit contre ceux-ci, mais je ne connais pas bien les autres emacs.
.emacs basique
Il existe trois moyens de configurer Emacs : par le menu, par une
application intégrée appelée customize ou en éditant le fichier
.emacs, situé dans votre dossier personnel ($HOME pour les
étourdis).
Cet article porte sur l’édition du fichier .emacs, mais je vais tout
de même passer en revue les autres possibilités pour vous expliquer
pourquoi nous n’allons pas y avoir recours.
La première méthode n’a pas besoin d’explications ; si vous lisez ceci, vous savez probablement vous servir d’une souris, ou d’un clavier, ce qui est encore mieux, et quoi qu’il en soit, c’est suffisant pour configurer Emacs par le menu. Cette approche est toutefois très limitée, les options du menu étant ce qu’elles sont, et rien de plus.
La deuxième offre un choix beaucoup plus important d’options ;
quasiment tout ce qui est utile en terme de configuration directe peut
être réalisé par cette interface. Pour l’invoquer, il suffit
d’utiliser la commande customize (invoquée par M-x customize comme
vous vous en doutez si vous avez eu une introduction décente à Emacs ;
sinon, sachez que M-x signifie « la touche X en maintenant la
touche Meta, ou Alt sur les claviers de PC, enfoncée »).
À partir de là, l’interface est assez simple : il y a des options,
avec leur description, et leur valeur actuelle, modifiable, ainsi que
des dossiers avec plus d’options et des sous-dossiers. Pour tout
sauvegarder, il y a un bouton en haut du buffer. Cela écrira
dans le fichier .emacs, par défaut.
Cette méthode a cependant un défaut : les modifications que vous
apportez à votre configuration sont ensuite difficilement rectifiables
directement en éditant le fichier produit par l’outil. De même, les
changements effectués en dehors du mode customize, tels que ceux
opérés sur le fichier .emacs, se marient assez mal avec celui-ci.
De plus, d’une version à l’autre d’Emacs, customize ne semble pas demeurer totalement rétro-compatible dans le sens où le fichier généré par customize dans une version récente risque de ne pas fonctionner correctement avec une version précédente.
Pour illustrer mon propos, je vais prendre mon exemple. J’ai un thème de couleurs grandement personnalisé. Je l’avais débuté étant sous Emacs 21, puis suis passé à Emacs 22 dès sa sortie. Je n’ai rencontré aucun problème de transfert vers la nouvelle version. Cependant, lorsque j’ai voulu prêter le fichier à quelqu’un qui était encore sous Emacs 21, celui-ci n’a pas pu le lire correctement !
Il y a peut-être une façon ninja de faire cette manipulation mais je ne suis pas au courant.
.emacs
Le fichier .emacs est un simple fichier contenant du texte. Simple ?
pas vraiment en vérité. Le format du fichier est loin de ressembler
à ce que vous avez sans doute l’habitude de voir avec d’autres
configurations. La configuration d’Emacs est écrite en Lisp, plus
précisément en Emacs Lisp. Si vous ne le savez pas, le Lisp est un
langage de programmation à part entière !
En effet, la spécificité d’Emacs est d’être entièrement (ou presque) programmable, grâce à son langage intégré. Tout (ou presque) dans Emacs est Lisp. Les divers modes et applications dans Emacs sont codés en Emacs Lisp, et de même la configuration est écrite en Lisp.
Même lorsque vous éditez votre configuration à l’aide des menus ou de customize, Emacs retranscrit vos modifications en Lisp et les sauvegarde dans un fichier.
En réalité, le fichier .emacs est aussi appelé fichier
d’initialisation car c’est simplement un programme écrit en Emacs
Lisp qui est exécuté au démarrage d’Emacs.
L’intérêt de cette dernière méthode réside dans sa flexibilité ; vous
pouvez presque tout faire rien qu’en écrivant du code Lisp dans votre
.emacs, et même si toutes ces possibilités ne vous seront pas tout
de suite utiles, c’est également l’approche qui s’adapte le mieux
à une évolution vers une utilisation confirmée d’Emacs, qui implique
l’apprentissage de l’Emacs Lisp.
Vous l’aurez compris, je vous recommande chaudement de configurer
votre Emacs en éditant le fichier .emacs par vous-même. Cependant,
le mode customize a un usage très important : parcourir l’ensemble des
paramètres disponibles pour une catégorie donnée. Pour cela, vous
pouvez utiliser la commande customize-group qui vous permet d’aller
directement à la configuration d’un groupe d’options particulier, dont
vous devez donner le nom. Généralement, c’est le nom correspondant
à l’application ou au mode que vous voulez configurer.
Par exemple, pour voir les possibilités de personnalisation offertes
par ERC, le client IRC, vous exécuteriez la commande
customize-group erc. Nous verrons plus loin comment mieux exploiter
ces informations ; pour l’heure, vous ne pouvez sans doute que lire
les descriptions d’options.
Une autre utilisation de customize que j’admets sans vraiment conseiller est la mise en place d’un thème de couleurs. Le faire sans customize est vraiment très pénible ; je l’ai fait, une fois, pour mon thème de couleurs basique, pour la console, mais je ne le referai pas, je crois. Nous verrons plus loin comment changer les polices et les décorations du texte, pour créer un environnement un peu plus agréable que le look par défaut.
Configurer Emacs ne requiert pas de connaître parfaitement l’Emacs Lisp, mais quelques rapides notions sont toutefois recommandées pour comprendre la syntaxe des lignes d’exemples à venir.
Le Lisp est un langage possédant une syntaxe extrêmement régulière. Toutes les constructions (ou presque) prennent la forme suivante :
(OPERATEUR OPERANDE...)
Si vous avez déjà un peu programmé, sachez qu’OPERATEUR peut être
aussi bien une fonction qu’une instruction spéciale (un if, un
while, etc.). Sinon, retenez simplement que le premier mot dans la
liste indique l’action à effectuer.
Et sans le vouloir, nous venons d’introduire la notion de liste. Une liste, c’est exactement ce que je viens de vous montrer, une suite d’éléments entre parenthèses, séparés par des blancs. Tout le code écrit en Emacs Lisp est essentiellement constitué de listes donc !
Tous les langages de programmation civilisés possèdent leur syntaxe pour inclure des commentaires dans le code, des lignes qui ne seront pas interprétées par Emacs. Il suffit de pour cela de précéder le texte à commenter par un point-virgule.
;; Ceci est un commentaire.
La première chose à savoir est qu’il existe plusieurs fichiers
similaires au .emacs qui contiennent divers morceaux de
configuration. Principalement, on peut prendre note des fichiers
suivants :
$HOME/.emacs.el ou $HOME/.emacsVotre fichier d’initialisation
principal. Les fichiers de code Emacs Lisp sont habituellement
nommés avec un suffixe .el mais le .emacs peut faire
exception. Il existe quelque différences, mais elles ne nous
gêneront pas ici et je me référerai toujours à ce fichier comme le
.emacs bien que je l’ai moi-même appelé .emacs.el.
$PREFIX/share/emacs/site-lisp/site-start.elLe fichier global
d’initialisation. Il joue le même rôle que le .emacs dans votre
dossier personnel mais est lu avant votre .emacs. Il est souvent
rempli à l’avance par votre installation dans le cas des
gestionnaire de paquets, qui s’en servent pour charger des
informations utiles sur les applications tierces qu’ils installent
pour Emacs.
$PREFIX est la racine où vous avez installé Emacs. Généralement
$PREFIX vaut /usr ou /usr/local ; sur certains systèmes, cela
peut être /usr/pkg ou, si vous l’avez installé dans votre dossier
personnel, $HOME/local.
Emacs est un
environnement de travail qui peut accueillir des applications
(spécifiquement développées pour Emacs). Chaque application possède
souvent son propre fichier qui est lu au chargement de celle-ci. Par
exemple, Mew utilise $HOME/mew.el.
Vous pouvez également
scinder votre .emacs en plusieurs fichiers, lorsque celui-ci
deviendra relativement volumineux. Ce ne sera pas le cas
aujourd’hui, aussi, nous n’aborderons pas ce sujet dans cet article.
Emacs étant avant tout un éditeur de texte, son interface ainsi que la plupart des informations qu’il lit, stocke et échange demeurent sous forme textuelle. Un réglage très global et très important est donc le système de codage par défaut.
Pour ceux d’entre vous qui ne savent pas ce qu’est un système de codage de caractères, c’est simplement la représentation numérique (« binaire ») des caractères (lettres, chiffres, symboles) qui forment le texte. Pour plus d’informations, vous pouvez consulter la page Wikipédia sur le codage de caractères.
Il existe plusieurs options pour configurer en finesse les différents
codages ; le réglage principal est obtenu par la commande
set-language-environment. La syntaxe est la suivante :
(set-language-environment "NOM")
Il faut bien sûr remplacer NOM par le nom de l’environnement de
votre choix. Les valeurs d’intérêt pour nous seront "UTF-8" si vous
souhaitez avoir un environnement utilisant principalement l’UTF-8, ou
"Latin-1" si vous voulez de l’ISO-8859-1. Les deux sont capables de
représenter les caractères français ; l’UTF-8 permet en plus les
caractères internationaux, provenant d’autres langues. Si vous ne
savez pas pour lequel opter, je vous conseille l’UTF-8 ; la tendance
actuelle va vers UTF-8 et les deux environnements de bureau dominants,
à savoir GNOME et KDE, l’utilisent, par défaut.
Rajoutez la ligne qui convient à votre .emacs. S’il n’existe pas,
créez le.
Votre .emacs ne contenant actuellement qu’une seule ligne, il semble
superflu d’essayer de le diviser en plusieurs fichiers. Toutefois, en
prévision des modifications que nous allons effectuer par le biais de
customize, afin de mettre en place un thème de couleurs, un petit
arrangement s’impose.
Par défaut, customize s’amuse à écrire dans votre .emacs, ce qui est
très mal venu, surtout si vous utilisez un gestionnaire de versions
comme RCS.
Il est très simple cependant de l’instruire de sorte à ce que le
contenu soit placé dans un fichier réservé, de manière civilisée. Le
nom de ce fichier est donné par la variable custom-file.
Dans Emacs, une variable est l’association d’une valeur (« quelque chose ») à un nom (un symbole dans le vocabulaire emacsien).
Ici, le symbole est custom-file et la valeur est le nom du
fichier.
On change la valeur d’une variable avec la forme :
(setq SYMBOLE VALEUR)
Dans notre cas, la ligne devient :
(setq custom-file "NOM-DU-FICHIER")
Remarquez que le nom du fichier est entre guillemets droits ; c’est la manière d’écrire du texte (des chaînes de caractères pour ceux qui ont quelque expérience en programmation) en Emacs Lisp.
Par exemple, vous pourriez appeler ce fichier .emacs-custom.el et le
placer dans votre dossier personnel, comme ceci :
(setq custom-file "~/.emacs-custom.el")
J’ai fait exprès d’utiliser le tilde, au cas où vous douteriez qu’Emacs le reconnaisse à l’instar du shell.
La syntaxe d’affectation (changement de valeur d’une variable) est
très utile pour la configuration et n’est pas propre à la variable
custom-file ; beaucoup d’options sont modifiables de cette
manière. J’aurais pu vous donner directement l’instruction tout
entière, mais, désormais, vous saurez reconnaître une
affectation. C’est un premier pas sur la voie du programmeur Emacs
Lisp ! :)
Toutefois, dans ce cas précis, simplement changer la valeur de la
variable ne suffit pas. Cette manipulation va dire à customize
d’inscrire ses modifications dans le fichier, mais celui-ci ne sera
pas lu par Emacs lui-même comme l’est votre .emacs (et par voie de
conséquence, comme l’étaient les ajouts faits par customize
à celui-ci, avant que nous ne décidions de les détourner).
Pour charger ce fichier dans la mémoire d’Emacs et l’exécuter, nous
allons employer la fonction load comme ceci :
(load custom-file)
Cette ligne est à placer après avoir donné à la variable custom-file
sa valeur, bien entendue ; en effet, on demande ici à Emacs de lire le
fichier dont le nom est donné par la variable custom-file. On aurait
pu écrire :
(load "~/.emacs-custom.el")
Maintenant que nous avons eu un bref aperçu des variables, rappelez-vous customize et de son utilisation en tant qu’explorateur d’options.
Dans l’interface de customize, vous trouverez beaucoup d’options de
configurations ; chacune porte un nom, qui, en règle générale,
correspond à celui d’une variable, avec des espaces à la place des
tirets et des majuscules au début des mots. L’option Ceci Est Une
Option est en vérité la variable ceci-est-une-option.
La description ainsi que les menus vous donnerons une petite idée
des valeurs acceptables et vous pourrez modifier la variable dans
votre .emacs. Remarquez que le menu offert par le bouton State
vous propose de voir l’expression Lisp telle que vous pourriez
vouloir l’inscrire dans votre .emacs.
Nous avons vu, dans cette partie, quelques réglages fondamentaux,
ainsi que la syntaxe pour affecter une valeur à une variable. Votre
.emacs devrait maintenant ressembler à ceci :
(set-language-environment "UTF-8")
(setq custom-file "~/.emacs-custom.el")
(load custom-file)
Ce n’est certainement pas le plus utile, mais c’est une question qui revient fréquemment : comment changer l’apparence d’Emacs. La méthode présentée ici n’est peut-être pas la plus propre, mais c’est celle que je trouve la plus pratique, et pour quelque chose de secondaire tel que l’affichage, elle conviendra bien.
Cette section n’a d’intérêt que si vous utilisez Emacs en mode graphique. Autrement, il s’agit de configurer votre console et non Emacs.
L’interface d’Emacs est majoritairement constituée de texte, il est important de configurer une police qui vous est agréable. La police par défaut doit être monospacée, mais cela mis à part, vous pouvez utiliser n’importe quelle police supportée par les applications graphiques. Sous X, cependant, la version 22 ne supporte pas encore le lissage des caractères. Je vous conseille donc de prendre une police disponible en format bitmap. Personnellement, j’utilise terminus.
Comme je l’ai indiqué auparavant, nous allons utiliser customize pour
modifier les paramètres d’affichage. La commande M-x customize-face
réalise cela.
Dans Emacs, « face » est le nom donné à un jeu d’attributs d’affichage. Il y en a pour chaque type de caractère que vous pouvez rencontrer dans un buffer : les caractères normaux, les mots-clés ou encore les commentaires, dans du code.
Emacs vous demande alors quel type de caractères modifier. Entrez
default pour personnaliser le type par défaut, dont les attributs
sont hérités par tous les autres, si ceux-ci ne fournissent pas les
leurs. Vous devriez alors obtenir une interface semblable à celle
représentée ci-dessous :
Default face: (sample) Hide Face
State: SAVED and set.
Basic default face.
Parent groups: Basic Faces
Choice: Value Menu
Attributes: [X] Font Family: xos4-terminus
[X] Width: Value Menu medium
[X] Height: Value Menu Height in 1/10 pt: 151
[X] Weight: Value Menu medium
[X] Slant: Value Menu normal
[X] Underline: Value Menu Off
[X] Overline: Value Menu Off
[X] Strike-through: Value Menu Off
[X] Box around text: Value Menu Off
[X] Inverse-video: Value Menu Off
[X] Foreground: gray88 (sample)
[X] Background: black (sample)
[X] Stipple: Value Menu None
[ ] Inherit: *
La plupart des champs devraient parler d’eux-mêmes. En vérité, pour le
type par défaut, nous ne voulons sans doute pas altérer d’autres
champs que Font Family, Height, Foreground et Background. Vous
pouvez obtenir une jolie liste des couleurs et leurs noms avec la
commande M-x list-colors-display.
Expérimentez un peu pour obtenir ce qui vous convient. Pour appliquer
vos changements, actionnez le bouton State ; les choix proposés ne
posent aucune difficulté. Faites plusieurs fois Set for Current
Session, puis, lorsque vous êtes content de vos paramètres,
choisissez Save for Future Sessions.
Cette manipulation est réalisable pour n’importe quel type ; pour
avoir accès à la liste complète, validez sans fournir de nom, lors de
l’invite offerte par M-x customize-face. Veuillez prendre note du
fait que seuls les types existants seront ainsi disponibles. En
particulier, si vous souhaitez personnaliser un module particulier, il
faudra le charger avant d’utiliser M-x customize-face. La plupart
des modules se chargent automatiquement lorsque vous tentez d’accéder
à un de leurs modes.
Si vous voulez changer la manière dont s’affichent les titres sous le
mode LaTeX, tentez de visiter un fichier LaTeX avant d’utiliser M-x
customize-face.
Un moyen pratique de savoir quel type personnaliser est de placer
votre curseur sur un caractère présentant les propriétés que vous
voulez changer et d’invoquer M-x customize-face ; l’invite vous
proposera alors par défaut de changer le type dont est affecté ce
caractère !
Après ce petit intermède en compagnie de customize, revenons
à l’édition de notre .emacs.
Par défaut, Emacs affiche beaucoup de composants sans grand intérêt dans son interface : un menu, une barre d’outils et même des barres de défilement, mais oublie certaines informations importantes telles que le numéro de la colonne à laquelle le curseur se situe. Nous allons au plus vite remédier à cela.
Le menu, les barres d’outils et de défilement peuvent être supprimés avec les instructions suivantes :
(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode -1)
L’affichage du numéro de la colonne est obtenu par l’instruction :
(column-number-mode t)
Le tout est bien sûr à placer dans votre .emacs, à la suite des
changements précédents. Voilà déjà quelques lignes de gagnées dans
votre espace de travail !
Terminons notre petit tour d’horizon des options de configuration de l’interface d’Emacs par quelques paramètres que vous pourriez vouloir et qui adressent chacune un aspect différent de l’affichage d’Emacs.
La première est truncate-partial-width-windows. Par défaut, Emacs
replie automatiquement les lignes de texte dans les fenêtres en
plein écran, mais, si vous décidez de partager horizontalement votre
Emacs en deux fenêtres côte à côte, vous vous apercevrez qu’Emacs
tronque à présent les lignes trop longues. Pour empêcher cela, il
faut changer la valeur de la variable
truncate-partial-width-windows de t (qui signifie « vrai » en
termes booléens) à nil (qui signifie « faux »).
(setq truncate-partial-width-windows nil)
Emacs possède de même tout un tas de paramètres qui vous permettent de changer la manière dont il affiche les éléments. N’hésitez pas à fouiller pour en trouver d’autres !
Mentionnons, par exemple, un petit réglage de confort sous la forme
de la variable ring-bell-function. Elle vous permet de spécifier
une fonction à appeler au lieu de faire sonner la petite alarme (qui
fait « bip ») interne de votre ordinateur. Il y a plusieurs valeurs
possibles, mais un choix convenable est le suivant :
(setq ring-bell-function 'ignore)
La fonction ignore ne fait rien ; du coup, vous n’aurez plus droit
à ces alarmes que personnellement je trouve perturbatrices.
En deuxième, regardons comment on peut avoir l’heure tout en restant dans Emacs. Cela fait partie des nombreux gadgets (mais qui peuvent s’avérer utiles ; en l’occurrence, j’aime avoir l’heure dans Emacs) disponibles sous Emacs.
Pour activer l’affichage de l’heure dans la barre de modes,
inscrivez la ligne suivante dans votre .emacs.
(display-time-mode t)
Vous l’aurez peut-être remarqué, nous avons déjà vu plusieurs
fonctions dont le nom se termine par -mode. Ici, ce sont des modes
mineurs globaux. En d’autres termes, ce sont des fonctionnalités que
vous pouvez activer ou désactiver. À la différence des variables,
les modes fonctionnent dans une optique plus binaire : un mode est
actif ou il ne l’est pas. Les variables, quant à elles, permettent
de spécifier des valeurs particulières pour contrôler certains
aspects du fonctionnement d’Emacs.
Maintenant que vous savez comment configurer l’apparence d’Emacs, nous allons nous intéresser aux combinaisons au clavier. Emacs étant un éditeur « orienté clavier », tout peut se faire au clavier. Mais cela signifie aussi qu’il est important d’avoir des raccourcis pratiques.
Cela ne signifie pas essayer de mettre Ctrl-C et Ctrl-V de
partout. Cela ne marchera pas comme vous voudrez. Emacs a ses
conventions et ses manières. Cette section vous apprend à ajouter
des commandes facilement accessibles par une combinaison de
touches ; elle n’est pas là pour vous inciter à faire de votre Emacs
un Notepad++ ou je ne sais quoi encore.
Si vous avez un minimum d’expérience sous Emacs, vous le savez déjà,
mais la notation des combinaisons de touches sous Emacs n’est pas la
même que sous d’autres environnements. Chaque touche modificatrice
(Ctrl, Alt, etc.) est représentée par une lettre et une
combinaison est notée Mod-Reste où Mod est la lettre correspondant
à la touche modificatrice et Reste est une combinaison.
Les correspondances sont les suivantes :
Shift | S
|
Ctrl | C
|
Meta (ou Alt) | M
|
Par exemple, C-a est obtenu en maintenant Ctrl et en appuyant sur
a, et C-M-f est la combinaison de Ctrl, Alt et f sur un
clavier français usuel.
Emacs possède des conventions quant aux combinaisons que vous pouvez utiliser et à celles qui sont réservées à différentes parties de l’éditeur.
Il vous faut simplement retenir que vous êtes autorisé à créer des
raccourcis débutant par C-c suivi d’une lettre pour vos besoins
personnels, en tant qu’utilisateur. Les autres combinaisons commençant
par C-c sont réservées aux modes majeurs et mineurs (ce n’est pas
important si vous ne savez pas bien ce que sont les uns et les autres)
et les autres espaces sont pris par Emacs lui-même ou des composants
spécialisés.
Pour pouvoir associer des commandes aux combinaisons de touches, il faut d’une part savoir comment noter la combinaison et d’autre part connaître la fonction à lui associer.
Pour Emacs, chaque combinaison de touches invoque une commande
(encore appelée fonction interactive). Une commande est une
fonction, c’est-à-dire, dit simplement, une suite d’actions
à effectuer, soit écrite en Emacs Lisp, soit écrite en C et connue
nativement d’Emacs. Mais toutes les fonctions ne sont pas des
commandes. Il faut en effet qu’elles soient prévues pour être appelées
de manière interactive, par l’utilisateur. Toute fonction qui peut
être appelée via M-x NOM-DE-LA-FONCTION est une commande ; le but
de cette section est de vous permettre d’éviter d’avoir à taper le nom
de la commande à chaque fois, en lui associant un raccourci clavier.
global-set-key
C’est la fonction permettant d’attacher une combinaison de touches à une commande, au niveau global, c’est-à-dire disponible partout dans Emacs. La syntaxe est la suivante :
(global-set-key COMBINAISON COMMANDE)
COMBINAISON est une séquence de touches. La manière la plus simple
de l’écrire est d’utiliser la fonction kbd comme ceci :
(kbd DESCRIPTION)
DESCRIPTION est alors la description de touches telle qu’elle a été
présentée ci-dessus, entre guillemets droits. Par exemple :
(kbd "C-c g")
Le tout est à mettre à la place de COMBINAISON.
COMMANDE est, dans sa forme la plus simple, et la seule que nous
verrons dans cet article, le nom d’une fonction précédé d’une
apostrophe ; par exemple : 'replace-string.
Imaginons que vous vouliez attacher la commande replace-string à la
combinaison C-c h. Vous pourriez écrire la ligne suivante dans le
.emacs :
(global-set-key (kbd "C-c h") 'replace-string)
Dorénavant, lorsque vous rencontrerez une commande intéressante, sur
un wiki, un blog, ou dans le .emacs de quelqu’un d’autre, vous
saurez comment l’affecter aux touches de votre choix !
| Commande | Description rapide |
replace-string | remplace un texte par un autre dans le buffer |
replace-regexp | pareil que replace-string avec une regexp
|
bury-buffer | cycle parmi vos buffers |
kill-this-buffer | détruit le buffer et ferme le fichier |
compile | invoque make pour compiler vos fichiers sources |
gdb | invoque gdb pour déboguer vos programmes |
Si vous avez lu et appliqué mes instructions jusqu’ici, votre Emacs devrait être suffisamment configuré pour l’édition de fichiers de texte. La plupart des utilisateurs d’Emacs le sont cependant pour leurs besoins en matière de programmation. Aussi, cette avant-dernière section adresse quelques points de configuration d’Emacs pour pouvoir écrire du C dans de bonnes conditions.
D’autres modes de langages de programmation ont des paramétrages semblables, mais il n’y a pas de règle vraiment générale. Il vous faudra lire les manuels correspondants.
L’une des fonctionnalités les plus appréciées d’Emacs est sa capacité
à indenter intelligemment le code selon le contexte. Le mode d’édition
du C, notamment, possède un indenteur relativement
performant. Cependant, par défaut, celui-ci suit les règles de
présentation du GNU. Si comme moi cela vous contrarie fortement, il
est aisé de changer de style. La variable c-default-style contient
le nom du style à utiliser, sous forme d’une chaîne de caractères
(entre guillemets). Les valeurs habituelles sont les suivantes :
"k&r" | le style K&R, aussi appelé style kernel |
"bsd" | le style Allman, aussi appelé style BSD |
"whitesmith" | le style Whitesmiths |
"gnu" | le style GNU, celui par défaut |
Par exemple, si vous utilisez le style K&R, vous écrirez :
(setq c-default-style "k&r")
En plus du style, il y a également une histoire de pas (ou largeur)
d’indentation. Par exemple, par défaut, Emacs indente vos blocs de 4,
en style K&R. Personnellement, j’utilise un pas de 8. Cela est obtenu
en changeant la valeur de la variable c-basic-offset. Pour moi :
(setq c-basic-offset 8)
De plus, la variable indent-tabs-mode contrôle l’usage des
tabulations pour l’indentation. C’est une variable booléenne. Une
valeur vraie (t) signifie que les tabulations seront utilisées dès
que possible tandis qu’une valeur fausse (nil) obligera Emacs
à n’utiliser que des espaces pour indenter. Par défaut, elle vaut
t. Je vous laisse deviner l’instruction à placer dans votre .emacs
si vous voulez des espaces !
Le mode C étant l’un des plus populaires, il possède son lot de
paramètres intéressants ou obscurs que je vous laisse découvrir en
compagnie de la documentation. Vous pourriez vouloir personnaliser un
peu plus le style d’indentation en modifiant la variable
c-offsets-alist. Je ne détaillerai pas son fonctionnement ici, mais
n’hésitez pas à consulter mon .emacs pour un petit
exemple.
Avec tout cela, l’édition du code C devrait maintenant être tout
à fait satisfaisante. Ainsi, votre Emacs devrait maintenant être
relativement complet pour un début. Cet article s’achève ici et je
vous laisse comparer le résultat de votre apprentissage avec un
exemple de fichier .emacs écrit d’après ce tutoriel.
.emacs basique
;; Environnement
(set-language-environment "UTF-8")
(setq custom-file "~/.emacs-custom.el")
(load custom-file)
;; Affichage
(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode -1)
(column-number-mode t)
(setq truncate-partial-width-windows nil)
(setq ring-bell-function 'ignore)
(display-time-mode t)
;; Raccourcis
(global-set-key (kbd "C-c h") 'replace-string)
(global-set-key (kbd "C-c j") 'replace-regexp)
(global-set-key (kbd "C-c o") 'bury-buffer)
(global-set-key (kbd "C-c k") 'kill-this-buffer)
(global-set-key (kbd "C-c c") 'compile)
(global-set-key (kbd "C-c g") 'gdb)