[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ suivant ]
Je vais dans ce chapitre indiquer quelques variables, packages ou fonctions rencontrés dans mon .emacs afin que vous puissiez avoir rapidement un Emacs agréable à utiliser.
Mais qu'est-ce donc que ce .emacs dont on parle partout ? C'est le fichier que vous devez utiliser pour personnaliser Emacs. On peut l'appeler .emacs, ou .emacs.el à partir de la version 20.4. La notation .emacs.el est plus cohérente que la traditionnelle appellation .emacs car ce fichier est un fichier ELisp, comme tous les fichiers se terminant en .el livrés avec Emacs[26].
Si vous venez d'installer Emacs, vous n'avez probablement pas déjà de .emacs ni de .emacs.el et utilisez donc la configuration par défaut d'Emacs (sauf si vous avez un site-start.el (ou site-start.elc) dont le but est d'effectuer une configuration globale d'Emacs pour tout un site, alors que le .emacs.el est censé être propre à chaque utilisateur). Dans ce cas, il faut le créer dans un répertoire indiqué par la variable d'environnement HOME pour qu'Emacs le trouve. Sur les systèmes Unix, cette variable d'environnement est toujours définie. Sous Windows, vous devrez certainement la déclarer dans votre autoexec.bat (le fichier C:\autoexec.bat) avec une ligne du type :
Set HOME=C:\PROGRA~1\emacs
ou
Set HOME=C:\Marcel
ou que sais-je pourvu que dans se répertoire se trouve un fichier nommé .emacs ou .emacs.el ou encore paraît-il, puisque l'explorateur Windows ne permettrait pas, dit-on, de créer facilement un fichier de ce nom, _emacs ou _emacs.el (je n'ai pas vérifié). N.B. : sous Windows 95/98, il faut redémarrer l'ordinateur pour que la modification de HOME dans l'autoexec.bat soit prise en compte...
Si vous êtes masochiste ou avez vraiment une raison valable de byte-compiler votre .emacs, libre à vous de le faire ; dans les autres cas, cela vous apporterait certainement plus de tracas que d'avantages.
Le fichier .emacs.el, si Emacs parvient à le trouver, i.e. s'il est dans votre répertoire HOME, est lu et exécuté (c'est du ELisp) par Emacs à la fin de son lancement. Pour vous en convaincre, vous pouvez par exemple ne mettre que la ligne suivante dans votre .emacs.el :
(insert "Ce texte a été inséré ici par mon .emacs.el !")
et (re)lancer Emacs.
Voici donc quelques idées pour personnaliser Emacs à l'aide de ce fameux .emacs.
En premier lieu, si vous utilisez Emacs sur plusieurs systèmes d'exploitation et/ou plusieurs machines, ils n'auront probablement pas tous la même configuration. Pour faire la différence entre les uns et les autres dans votre .emacs, vous pouvez utiliser les variables :
Peut prendre des valeurs comme "gnu/linux" ou "windows-nt". Exemple :
(if ((string-equal system-type "windows-nt"))
(message "On est sous Windows.")
(message "On n'est pas sous Windows."))
Sur mon système GNU/Linux, cette variable vaut "rougon.via.ecp.fr", i.e. le nom DNS complet de la machine (Fully Qualified Domain Name -- voir hostname --fqdn) ; sur un Windows NT où je l'ai testé, elle vaut le nom NetBIOS de la machine (nom de la machine sur le « voisinage réseau »). string-equal, comme nous venons de le voir avec system-type, pourra faire l'affaire dans la plupart des cas ;
Ces variables permettent de choisir du code ELisp à exécuter en fonction de la version d'Emacs. Par exemple :
(unless (>= (+ emacs-major-version (/ emacs-minor-version 10.0)) 20.4)
(autoload 'sql-mode "sql"))
charge le mode SQL à partir d'un fichier sql.el ou sql.elc supposé installé par vous dans le load-path (voir un peu plus loin pour les explications sur cette variable) si la version d'Emacs est antérieure à 20.4 (à partir de laquelle le mode SQL est reconnu dans la configuration par défaut).
Cette variable m'est surtout utile sous Windows où elle indique le nom complet du répertoire bin d'Emacs (et permet donc d'accéder à <répertoire d'Emacs>/site-lisp par exemple en y rajoutant "../site-lisp"...) ;
Les variables suivantes permettent de changer certains comportements par défaut qui sont parfois agaçants :
En mettant cette variable à t avec une ligne comme :
(setq inhibit-startup-message t)
vous aurez un buffer *scratch* vide au lancement d'Emacs au lieu d'avoir le traditionnel message de présentation et les explications bien connues dans le buffer *scratch*.
En mettant cette variable à t avec une ligne comme :
(setq visible-bell t)
Emacs ne provoquera pas l'émission d'un son lors d'un appui par exemple sur C-g (keyboard-quit), mais fera en quelque sorte clignoter la fenêtre pour faire passer le message.
Vous pouvez redéfinir des séquences de touches de manière globale (i.e. valable quels que soient les modes majeur et mineurs actifs) avec global-set-key comme suit :
(global-set-key [home] 'beginning-of-line)
(global-set-key [end] 'end-of-line)
(global-set-key [delete] 'delete-char)
;; Pour que ESC [ 4 ~ (ie. la touche Fin) lance end-of-line quand Emacs
;; tourne dans un terminal
(unless window-system
(global-set-key [select] 'end-of-line))
N.B. : je ne prétends pas à l'universalité du (global-set-key [select] 'end-of-line) indépendamment du type de terminal... cela fonctionne dans mon cas et sert juste à vous donner une idée de ce qu'on peut faire.
Si vous ne connaissez pas le nom d'une touche pour Emacs comme home ou select ci-dessus, utilisez C-h k !
Pratiquement tout le monde a aujourd'hui la ligne suivante dans son .emacs : elle fait en sorte que dès qu'un mode sait tirer partie du font-lock-mode[27], tout buffer dans ce mode est colorisé par ce biais.
(global-font-lock-mode 1)
Si vous voulez un .emacs unique pour plusieurs configurations, vous apprécierez probablement la fonction locate-library :
;; Chargement de AUCTeX s'il est dans le load-path
(if (locate-library "tex-site")
(require 'tex-site))
Pour qu'Emacs sache dans quel environnement linguistique il est utilisé (on peut par exemple taper du Japonais avec Emacs), il est utile de lui préciser le language environment. En France, on utilisera à cet effet en général :
(set-language-environment "Latin-1")
Pour l'affichage de certains caractères non ASCII (avec un code entre 128 et 255 par exemple), la ligne suivante, considérée comme semi-obsolète (GNU Emacs 20.7, 4 juin 2001), peut s'avérer pratique :
(standard-display-european 1)
Avec Emacs 21 et une police ISO-8859-15 (= latin9), on utilisera plutôt quelque chose du genre :
(set-terminal-coding-system 'latin-9)
(set-keyboard-coding-system 'latin-9)
(set-language-environment 'latin-9)
à quoi on ajoutera la ligne suivante pour que les copier/coller d'un programme X vers Emacs fonctionnent bien avec les caractères accentués (ceci devrait être le réglage par défaut dans Emacs 21.3 mais ne l'est pas encore sous Emacs 21.2) :
(setq selection-coding-system 'compound-text-with-extensions)
Sous Emacs 21, il y a par défaut une barre de boutons (« barre d'outils ») et un curseur clignotant. Voici comment remédier à ces problèmes depuis le .emacs.el :
;; Suppression de la barre d'outils
(tool-bar-mode 0)
;; Pour que le curseur ne clignote plus
(blink-cursor-mode 0)
Notez qu'il existe un mécanisme qui permet de changer la manière, appelée input method, dont sont interprétées certaines séquences de touches. Ainsi, on peut faire en sorte par ce moyen de saisir les caractères accentués comme « é » en tapant ' puis e ou bien en tapant e puis '. C'est grâce à ce même mécanisme qu'on peut taper en chinois ou en japonais sous Emacs avec un clavier US, azerty...
Afin de gérer correctement les frappes de caractères accentués sur un terminal texte, j'utilise la fonction set-input-mode comme ceci dans mon .emacs :
;; Pour que les caractères 8 bits envoyés par xterm quand on fait emacs -nw
;; soient transmis sans modif.
(set-input-mode nil nil 1)
Toujours en ce qui concerne la saisie, la ligne suivante est très pratique :
;; Très pratique (C-x 8 machin, Alt-machin...) pour insérer des car. spéciaux
(require 'iso-transl)
Elle permet par exemple de taper un espace insécable avec A-SPC (i.e. A-barre d'espacement -- sur mon système GNU/Linux, la touche Alt joue le rôle du A- d'emacs ; sur un Windows, elle fait par défaut le M- donc pas de A-, du moins pas sur Alt) ou C-x 8 SPC, un guillemet ouvrant avec M-< ou C-x 8 <, un guillemet fermant avec M-> ou C-x 8 > et beaucoup d'autres choses que j'utilise moins souvent (que l'on peut trouver avec C-h b -- describe-bindings -- en cherchant « iso-transl- »).
Dans la série des bindings basiques, vous apprécierez peut-être les suivants :
(global-set-key [C-home] 'beginning-of-buffer)
(global-set-key [C-end] 'end-of-buffer)
(global-set-key [C-up] 'flo-scroll-one-line-down)
(global-set-key [C-down] 'flo-scroll-one-line-up)
(global-set-key "\C-z" 'undo)
(global-set-key "ce-que-vous-voulez-je-ne-veux-pas-le-savoir" 'goto-line)
;; Gestion de la roulette de la souris avec plusieurs vitesses
;; (inspiration venant de http://www.emacsfr.org/phpwiki/index.php?.emacs)
;; Shift + roulette : petite vitesse
;; Roulette seule : vitesse moyenne
;; Control + roulette : grande vitesse
(defalias 'flo-scroll-down-small-amount 'flo-scroll-one-line-down)
(defalias 'flo-scroll-up-small-amount 'flo-scroll-one-line-up)
(defun flo-scroll-down-medium-amount ()
(interactive)
(scroll-down 5))
(defun flo-scroll-up-medium-amount ()
(interactive)
(scroll-up 5))
(defun flo-scroll-down-large-amount ()
(interactive)
(scroll-down))
(defun flo-scroll-up-large-amount ()
(interactive)
(scroll-up))
(global-set-key [S-mouse-4] 'flo-scroll-down-small-amount)
(global-set-key [S-mouse-5] 'flo-scroll-up-small-amount)
(global-set-key [mouse-4] 'flo-scroll-down-medium-amount)
(global-set-key [mouse-5] 'flo-scroll-up-medium-amount)
(global-set-key [C-mouse-4] 'flo-scroll-down-large-amount)
(global-set-key [C-mouse-5] 'flo-scroll-up-large-amount)
où flo-scroll-one-line-down et flo-scroll-one-line-up sont définies en ce qui me concerne dans un fichier séparé par :
(defun flo-scroll-one-line-up ()
"Scroll text of current window upward one line."
(interactive)
(scroll-up 1))
(defun flo-scroll-one-line-down ()
"Scroll text of current window downward one line."
(interactive)
(scroll-down 1))
Si vous vous faites un .emacs « dynamique » (qui « réagit » en fonction de la machine ou du système sur laquelle (lequel) il est lancé), vous trouverez certainement la fonction concat très utile pour concaténer plusieurs chaînes de caractères :
(setq flo-site-lisp-dir
(cond (flo-on-windows-at-home-p
(concat exec-directory "../site-lisp/"))
(flo-at-work-p "~/Lisp/")
(t "/usr/share/emacs/site-lisp/")))
cond est quant à elle très pratique pour gérer plusieurs alternatives. Voir le GNU Emacs Lisp Reference Manual pour les détails de son utilisation.
La fonction add-to-list permet de d'ajouter un élément à une liste si et seulement s'il n'y est pas déjà :
(if flo-on-windows-p
(add-to-list 'load-path flo-site-lisp-dir))
ou, très simplement, si vous débarquez et ne comprenez pas ce qui précède :
(add-to-list 'load-path "c:/marcel/lisp")
La variable load-path joue un rôle très important : elle contient la liste des répertoires qu'Emacs parcourt lorsqu'on lui demande de charger un fichier ELisp (avec load ou require par exemple). L'installation d'un nouveau mode, programme, etc. pour Emacs passe donc presque toujours par l'ajout d'un élément au load-path.
Si vous utilisez un shell dans Emacs sous Windows et que vous avez des ^M (Control-M) à la fin des lignes, peut-être trouverez-vous la ligne suivante utile :
(add-hook 'comint-output-filter-functions 'shell-strip-ctrl-m))
Les lignes suivantes sont un peu plus adaptées au français que la configuration par défaut d'Emacs :
(setq colon-double-space nil)
(setq sentence-end-double-space nil)
(setq sentence-end "[.?!][]\"»')}]*\\($\\| \\|\t\\)[ \t\n]*")
Continuons un peu dans la configuration « de base » :
le numéro de colonne :
;; Pour avoir l'affichage du numéro de colonne :
(column-number-mode t)
Il existe aussi la fonction line-number-mode pour le numéro de ligne si besoin...
les délimiteurs qui vont par paires :
;; Pour que les parenthèses (ou accolades...) correspondantes soient
;; affichées sur fond coloré plutôt que de voir le curseur s'y
;; reporter
(require 'paren)
(show-paren-mode 1)
le calendrier (très pratique à l'occasion, par exemple pour trouver la date du 12142e jour après le 22 octobre 2001) :
;; Pour que les semaines (pour M-x calendar) commencent le lundi...
(setq calendar-week-start-day 1)
;; Pour que l'affichage des dates soit au format MM/JJ/AA
(setq european-calendar-style t)
;; << If t, show all the holidays that would appear in a complete Christian
;; calendar. >>
(setq all-christian-calendar-holiday t)
le dictionnaire avec Ispell (au passage, il paraît que aspell est très bien...) :
;; Dictionnaire pour ispell
(setq ispell-dictionary "francais")
le mode majeur par défaut :
;; Pour que les nouveaux buffers soient par défaut en mode majeur Text
(setq default-major-mode 'text-mode)
;; auto-fill-mode associé au text-mode
(add-hook 'text-mode-hook 'turn-on-auto-fill)
Notez bien le add-hook 'machin-mode-hook 'fonction. C'est une composante importante de la personnalisation d'Emacs car tout mode sous Emacs se doit de fournir un hook, i.e. une liste de fonctions, permettant d'exécuter une série d'actions à la fin du chargement du mode. Ici, à chaque fois que le text-mode sera chargé, la fonction turn-on-auto-fill sera exécutée à la fin de ce chargement.
un mode Text sans auto-fill parce que ce que je viens de faire ci-dessus est parfois indésirable :
;; Mode Text *sans* auto-fill pour les fichiers batch
(defun flo-text-mode-without-auto-fill ()
"Run text-mode and turn off auto-fill-mode."
(text-mode) (setq auto-fill-function nil))
(add-to-list 'auto-mode-alist
'("\\.bat\\'" . flo-text-mode-without-auto-fill))
la taille par défaut des frames : elle peut être réglée à l'aide de la ligne de commande (option --geometry), des ressources X (sous X11 ; cf. le GNU Emacs Manual pour les détails) et de la variable default-frame-alist. Il y a aussi initial-frame-alist mais je préfère utiliser les ressources X (ou la ligne de commande, si on n'est pas sous X11) car cela évite de voir la frame initiale changer de taille au démarrage.
Par défaut, Emacs ajoute des lignes au buffer quand on déplace le point à la fin de celui-ci et qu'on utilise la fonction next-line (flèche du bas en général), ce que je trouve assez pénible. Voici un moyen d'éviter ce comportement :
(setq next-line-add-newlines nil)
Les lignes suivantes permettent d'effacer plus rapidement du texte avec C-k (kill-line) qu'avec le comportement par défaut :
;; Pour que kill-line kille la ligne _et_ son newline quand elle est
;; invoquée en début de ligne :
(setq kill-whole-line t)
Je trouve pratique de pouvoir utiliser la complétion sous Emacs en ignorant la casse (ça évite de passer à côté d'une alternative parce qu'on ne se souvenait pas qu'il y avait un caractère en majuscules...) :
(setq completion-ignore-case t)
La gestion, l'harmonisation des tabulations ; un plaisir réservé aux programmeurs travaillant sur un même projet avec différents éditeurs de texte (et mauvaises habitudes) !
;; N'insère jamais de tabulations, mais des espaces qui produisent le
;; même espacement. Voir aussi les fonctions M-x tabify et
;; M-x untabify trouvées par : Help -> Manuals -> Browse Manuals with
;; Info puis entrées "Emacs", "Indentation" et enfin "Just spaces".
(setq-default indent-tabs-mode nil)
N.B. : si vous recevez un fichier contenant des tabulations, vous pouvez changer la longueur qu'Emacs leur attribue avec la variable tab-width. Vous obtenez un fichier présenté comme la personne qui l'a édité en dernier le voyait, vous utilisez untabify et vous avez un beau fichier avec des espaces à la place des tabulations afin que tout le monde le voie de la même manière.
J'utilise ce qui suit pour l'impression avec les fonctions ps-print-buffer et ps-print-buffer-with-faces :
(setq ps-paper-type 'a4
ps-font-family 'Courier
ps-font-size 10
ps-print-header t
ps-landscape-mode nil
;; Marge inférieure en points PostScript : (* 72 (/ 1.8 2.54)) = 1.8 cm
ps-bottom-margin 51.02362204724409)
;; Pour n'avoir que le nom du buffer et <page>/<total>.
(setq-default ps-header-lines 1)
Si vous voulez modifier (globalement) la variable fill-column, il faudra utiliser setq-default et non setq car cette variable est automatiquement « buffer-local » (si vous la modifiez avec setq, vous ne changez que ça valeur dans le buffer où vous avez exécuté le setq) :
(setq-default fill-column 78) ; Cette variable est automatiquement buffer-local
Si ce qui suit vous donne des idées pour la configuration du mode C, j'en serai ravi...
(defconst flo-c-style
'(;; C'est déjà en « default » dans *mon* .emacs, pas celui des autres...
(indent-tabs-mode . nil)
(c-hanging-braces-alist . ((brace-list-open)
(block-close . c-snug-do-while)
(extern-lang-open (after))
(block-open . (before after))))
)
"Florent's C-style"
)
(add-hook 'c-mode-common-hook
#'(lambda ()
;; Le t sert à faire en sorte que flo-c-style soit le style
;; courant :
(c-add-style "Florent's style" flo-c-style t)
;; Le c-mode-base-map est tiré de la FAQ du CC-mode (C-h i ->...)
(define-key c-mode-base-map "\C-m" 'newline-and-indent)
(define-key c-mode-base-map [f9] 'compile)
(setq compile-command "make")
;; Active les features auto-newline et hungry-delete-key.
(c-toggle-auto-hungry-state 1)
))
(add-hook 'c-mode-hook 'turn-on-auto-fill)
La variable auto-mode-alist fait partie des incontournables de la configuration d'Emacs : elle permet de dire à Emacs quel mode utiliser par défaut lors de l'ouverture d'un fichier en fondant sa décision sur le nom du fichier. Ici, je dis à Emacs que tous les fichiers se terminant par .py devront être ouverts en mode python-mode :
(add-to-list 'auto-mode-alist '("\\.py\\'" . python-mode))))
Message subliminal : Python est un langage de programmation assez génial.
Si vous utilisez AUCTeX pour le mode LaTeX, ce qui suit peut vous intéresser (à adapter à votre cas, bien sûr) :
(defun do-LaTeX ()
"LaTeX the curent file."
(interactive)
(TeX-command "LaTeX" 'TeX-master-file))
(if flo-on-windows-p
(defun do-DVIview ()
"View the curent file with Yap."
(interactive)
(TeX-command "View" 'TeX-master-file))
(defun do-DVIview ()
"View the curent file with xdvi."
(interactive)
(TeX-command "View with xdvi without prompt" 'TeX-master-file)))
(if flo-on-windows-p
(defun do-DVIPS ()
"DVIPS the curent file."
(interactive)
(TeX-command "dviPS" 'TeX-master-file))
(defun do-DVIPS ()
"DVIPS the curent file."
(interactive)
(TeX-command "DVIPS without prompt" 'TeX-master-file)))
(if flo-on-windows-p
(defun do-PSview ()
"PSView the curent file."
(interactive)
(TeX-command "Ghostview" 'TeX-master-file))
(defun do-PSview ()
"PSView the curent file."
(interactive)
(TeX-command "View with gv" 'TeX-master-file)))
(if flo-on-windows-p
(defun do-PDFview ()
"PDFView the curent file."
(interactive)
(error "Function not implemented")) ; mettre le bon exécutable...
(defun do-PDFview ()
"PDFView the curent file."
(interactive)
(TeX-command "View with acroread" 'TeX-master-file)))
(if flo-on-my-debian-p
(add-hook
'LaTeX-mode-hook
#'(lambda ()
(add-to-list 'TeX-command-list
'("View with xdvi without prompt" "%v"
TeX-run-silent nil nil))
(add-to-list 'TeX-command-list
'("DVIPS without prompt" "dvips %d -o %f"
TeX-run-command nil nil))
(add-to-list 'TeX-command-list
'("View with gv" "gv %f" TeX-run-discard nil nil))
(add-to-list 'TeX-command-list
'("View with acroread" "acroread %s.pdf"
TeX-run-silent nil nil))
)))
(add-hook 'LaTeX-mode-hook
#'(lambda ()
;; Pour que les paragraphes soient justifiés en mode Fill, on
;; peut mettre :
;; (setq default-justification 'full)
;; Colorisation avec font-latex.el (fourni avec AUCTeX):
(if window-system
(require 'font-latex))
(define-key LaTeX-mode-map [C-f5] 'do-LaTeX)
(define-key LaTeX-mode-map [C-f6] 'do-DVIview)
(define-key LaTeX-mode-map [C-f7] 'do-DVIPS)
(define-key LaTeX-mode-map [C-f8] 'do-PSview)
(define-key LaTeX-mode-map [C-f9] 'do-PDFview)
;; Une « ruse » pour pouvoir se déplacer d'une sectional unit à
;; la suivante :
(setq page-delimiter
(setq page-delimiter
"^\\(\\\\part\\|\\\\chapter\\|\\\\section\\|\
\\\\subsection\\|\\\\subsubsection\\|\\\\paragraph\\|\\\\subparagraph\\)")
))
Emacs offre une fonctionnalité de type client/serveur très pratique dans un système supportant la ligne de commande (comme les systèmes Unix). Avec la ligne suivante dans votre .emacs :
(server-start)
à partir du moment où Emacs est lancé, il vous suffit de taper
emacsclient mon_fichier pour ouvrir mon_fichier avec
l'Emacs qui déjà lancé (au lieu de créer un nouveau processus Emacs
inutilement, qui ne verrait pas les buffers de l'autre processus Emacs, etc.).
Une fois le fichier édité, il suffit de faire C-x #
(server-edit) pour qu'Emacs signale à emacsclient
qu'il a terminé son travail. On peut aussi invoquer emacsclient
avec l'option -n pour que celui-ci rende la main immédiatement à
l'interpréteur de commandes (i.e. le shell Unix ou l'invite de
commandes MS-DOS ou...).
Il existe un autre programme, fourni dans un package appelé « gnuserv »
(cf. http://www-uk.hpl.hp.com/people/ange/gnuserv/),
qui implémente des fonctionnalités très similaires. Ce package contient le
serveur et deux programmes clients : gnuclient (à comparer avec
emacsclient) et gnudoit. Les principaux avantages de
ces programmes par rapport à emacsclient sont qu'ils permettent :
de faire exécuter du code Lisp à un processus Emacs qui fait tourner le serveur (en plus de pouvoir lui dire d'éditer tel ou tel fichier) ;
d'invoquer un Emacs tournant sur une machine distante par le biais d'Internet-domain sockets.
Pour utiliser gnuserv, il suffit de mettre dans son
.emacs (ou .emacs.el) les lignes suivantes (après
avoir installé le package gnuserv) :
(require 'gnuserv)
(server-start)
Il n'y a plus qu'à invoquer gnuclient mon_fichier depuis la ligne
de commande pour éditer mon_fichier avec le processus Emacs
faisant tourner gnuserv (si vous ne voulez pas relancer Emacs pour
cela, il suffit d'évaluer les deux lignes précédentes avec C-x C-e
par exemple).
Voilà, je vous ai présenté les extraits de mes fichiers d'initialisation qui me semblent pouvoir intéresser la plupart des utilisateurs débutants ainsi que les idées principales de la configuration de ce fichier (load-path, auto-mode-alist, les hooks...). C'est peut-être un peu le fouillis dans l'état actuel (il s'agit plus ou moins d'extraits pris linéairement dans mes fichiers d'initialisation). Si cela vous paraît gênant, merci de me le signaler.
[ 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.29 (11 septembre 2006)flo (**AT**) via.ecp.fr