Toute personnalisation d'Emacs est réalisée via un code Lisp. Vous pouvez modifier les variables qui influencent la façon d'opérer d'Emacs ou même lui ajouter de nouvelles fonctions (ou remplacer les fonctions existantes par les vôtres).
Tant que vous testez la personnalisation d'Emacs, vous
souhaiterez probablement le faire de façon temporaire. Si
vous réalisez quelque chose d'affreux, tapez simplement
C-x C-c pour quitter Emacs, et lancez-le de
nouveau. Une fois que vous souhaiterez rendre ces
changements permanents, vous pourrez les intégrer à votre
propre ~/.emacs pour qu'ils
prennent effet à chaque lancement d'Emacs. Cela est abordé
dans la section suivante.
Les personnalisations les plus simples sont réalisées en changeant la valeur de variables d' Emacs. Le code destiné à cet usage ressemble à cela:
(setq nom-variable nouvelle-valeur)
Où nom-variable est le nom de la variable
et nouvelle-valeur est la valeur à lui
donner (en langage Lisp, vous 'attachez' une variable à
une valeur). La fonction setq de Lisp est
analogue aux opérateurs d'assignement (habituellement
=) sous d'autres langages.
NOTA: Je survole de nombreux détails dans
un but de simplicité. Vous pourrez utiliser d'autres
fonctions Lisp comme set ou setq-default. Si vous êtes réellement curieux,
reportez-vous à la documentation de Lisp Emacs.
Regardons de plus près une ligne de mon fichier
~/.emacs
(setq-default transient-mark-mode t)
La variable transient-mark-mode contrôle
si une région devient ou non surlignée lorsque je la
marque. Dans beaucoup d'applications, si vous cliquez
et déplacez la souris pour sélectionner une partie du
texte, il devient surligné en inverse vidéo, ou de
n'importe quelle autre couleur. Emacs se comportera de
la même manière si la variable transient-mark-
mode est déclarée (avec une valeur non nil).
Une valeur non QUOI?
Bien. Rapide digression. La plupart des langages intègrent la notion de valeur vraie/fausse. En C/C++ une valeur est considérée comme vraie si elle est non nulle. En Perl, une valeur non nulle ou différente de zéro est vraie. En Lisp, la même idée s'applique, mais les noms et les symboles sont différents.
Vrai est usuellement matérialisé par t et
faux (ou nul) l'est par nil. Ceci dit, comme dans
d'autres langages, n'importe quelle valeur non vide
est considérée comme vraie.
Pour avoir la description complète de ce que
transient-mark-mode fait, vous pouvez
utiliser l'aide en ligne. Tapez C-h v ou
M-x describe-variable puis transient-mark-
mode. Si vous êtes aussi fainéant que moi, vous
pouvez tirer avantage de la complétion des noms de
variables en utilisant la touche Tab. Tapez
simplement une partie du nom de la variable puis
pressez la touche Tab. Si vous avez tapé
assez de texte pour qu'Emacs ne trouve pas d'autres
correspondances possibles vous verrez le nom complété
pour vous.
Une autre variable fréquemment employée est
fill-column. Elle déclare à Emacs la largeur
de l'écran à utiliser avant un retour à la ligne (et
le mode auto-fill-mode respecte cette
valeur). Pour la tester avec une valeur absurde,
essayez :
(setq fill-column 20)
Mais la conséquence ne sera pas immédiate. Vous
devez demander à Emacs d'évaluer l'expression
tapée. Pour ce faire, placez le point (curseur) à la
fin de l'expression puis pressez C-x C-e, qui
appelle la fonction eval-last-sexp. Une fois
ceci fait, notez que la valeur 20 (ou n'importe quelle
valeur que vous ayez saisie) s'affiche dans le mini-
buffer en bas de l'écran. Il s'agit simplement de la
valeur retournée par l'expression que vous avez fait
évaluer.
Juste pour voir si cela marche, tapez une phrase ou
deux. Si vous êtes en mode auto-fill-mode (ce
qui n'est sans doute pas le cas), le texte sera
renvoyé à la ligne dès qu'il atteindra la 20ème
colonne. Autrement, après avoir terminé votre saisie,
tapez M-q qui appelle la fonction fill-
paragraph. Elle activera les renvois à la ligne.
Vous pouvez configurer Emacs pour qu'il réalise
automatiquement une action lorsque vous ouvrez un
fichier de type particulier (un peu comme les
applications qui se lancent automatiquement lorsque
vous cliquez sur l'icône d'un fichier particulier).
Par exemple, je peux souhaiter qu'Emacs passe
automatiquement en text-mode chaque fois que
j'ouvre un fichier avec l'extension .txt.
Euh... c'est déja ce qu'il se passe. :-)
Demandons plutôt à Emacs de toujours basculer en
text-mode lorsque vous ouvrez un fichier
appelé ``README''.
(setq auto-mode-alist (cons '("README" . text-mode)
auto-mode-alist))
Heu?
Sans rentrer dans les méandres de la programmation
Lisp que vous n'avez pas réellement besoin de
connaître (même si cela ne vous ferait pas de mal),
disons simplement que la variable auto-mode-
alist contient une liste de couples. Chaque
couple rassemble une expression régulière et un nom de
mode d'Emacs. Si le fichier que vous ouvrez
s'apparente à l'expression régulière, (dans le cas
présent la chaîne README) Emacs lance le mode
que vous avez spécifié.
L'étrange syntaxe que nous venons d'employer est
liée au fait que nous ajoutons un nouveau couple à la
liste. Nous ne voulons pas simplement donner une nouvelle
valeur au mode auto-mode-alist sans être
certains que les valeurs qui sont déja dans la liste ne soient
pas perdues.
Et si je souhaitais qu'Emacs passe automatiquement
en mode html-helper-mode chaque fois que
j'ouvre un fichier se terminant par .html ou
.htm, j'ajouterais ceci à mon fichier ~/.emacs :
(setq auto-mode-alist (cons '("\\.html$" . html-helper-
mode) auto-mode-alist))
(setq auto-mode-alist (cons '("\\.htm$" . html-helper-
mode) auto-mode-alist))
~/.emacs Aprés avoir consacré un peu de votre temps à Emacs et
vous être fait une idée de ce qui pourrait vous être
utile, vous voudrez sans doute figer définitivement
certaines choses (ou du moins jusqu'à ce que vous changiez
d'avis). Si vous utilisez Emacs de façon quotidienne, vous
constaterez que votre fichier ~/.emacs grossira à
mesure que le temps passera. C'est une Bonne
Chose car cela signifie que vous façonnez la manière
de travailler d'Emacs conformément à ce que vous
voulez qu'elle soit. C'est une honte que la plupart des
logiciels ne permettent pas cela.
Au cas vous vous ne vous seriez pas déjà posé la
question, chaque fois que vous lancez Emacs, il cherche un
fichier ~/.emacs situé dans votre répertoire personnel.
Ce fichier est là où vous devez
placer tout code Lisp que vous voulez exécuter
automatiquement lors du démarrage d'Emacs, ce qui inclus la
personnalisation que nous
venons d'évoquer.
Un autre extrait de mon fichier ~/.emacs:
(setq inhibit-startup-message t)
La variable inhibit-startup-message contrôle
si Emacs doit ou non afficher le message de bienvenue au
démarrage. Après quelques temps, j'ai fini par être las de
le voir apparaître (car je savais comment atteindre l'aide
et ainsi de suite), et j'ai donc cherché le moyen de le
désactiver.
À titre d'exercice, essayer de vous créer un fichier
~/.emacs personnel et ajoutez-lui cette ligne.
Sortez d'Emacs, et relancez-le. Vous ne devriez plus voire
le message de bienvenue.
Souvent lorsque vous découvrirez un mode d'Emacs (ou un
paquetage), la documentation vous suggèrera quelques codes
à ajouter à votre fichier ~/.emacs pour faire
réagir le mode ou le paquetage d'une façon particulière.
La FAQ d'Emacs GNU (C-h F) rassemble quelques
extraits de fichiers qui pourraient vous
être utiles.
A mesure qu'Emacs s'est étoffé et a évolué, d'aucuns
affirmaient ``Il faudrait trouver une façon plus simple de
permettre aux utilisateurs novices de personnaliser leur
Emacs.'' Customize était né.
Customize permet une méthode de personnalisation plus
intuitive du comportement d'Emacs. Pour la tester, visitez
le sous-menu Customize de votre menu d'aide
Help, ou tapez M-x customize.
Customize rassemble les options disponibles en groupes logiques, comme ``Edition (Editing)'', ``Programmation (Programming)'', ``Fichiers (Files)'', et ainsi de suite. Quelques groupes ont des sous-groupes.
Si vous réalisez des changements par le biais de
l'interface customize, Emacs enregistrera les
modifications dans votre fichier ~/.emacs. Ce qui
est très pratique, car vous pouvez ainsi facilement
visualiser (et modifier) les changements réalisés pour
vous.
N'utilisant pas l'interface Customize, je ne pourrai pas vous en dire beaucoup plus..
Comme toutes les applications X bien faites, Emacs
respecte vos ressources X. Ce qui signifie que vous pouvez
contrôler les couleurs initiales, la géométrie et d'autres
paramètres spécifiques à X, comme vous le feriez avec
xterm, nxterm, et autres.
Voici à quoi ressemble mon fichier
~/.Xdefaults:
emacs*Background: DarkSlateGray emacs*Foreground: Wheat emacs*pointerColor: Orchid emacs*cursorColor: Orchid emacs*bitmapIcon: on emacs*font: fixed emacs.geometry: 80x25
Consultez votre documentation X pour de plus
amples détails sur les ressources X.