[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ suivant ]
Je vais indiquer dans ce chapitre quelques variables, packages ou fonctions rencontrés dans mon fichier d'initialisation d'Emacs. Un tel fichier peut s'appeler .emacs.el ou porter un autre nom (voir ci-dessous). Ce qui suit devrait vous permettre d'avoir rapidement un Emacs agréable à utiliser.
Mais qu'est-ce donc que ce .emacs.el (ou .emacs) dont on parle partout ? C'est le fichier que vous devez utiliser pour personnaliser Emacs. La notation .emacs.el (comprise par Emacs depuis la version 20.4) est plus cohérente que l'ancienne 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 fichier d'initialisation et utilisez donc la configuration par défaut — 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. Notez que le fichier d'initialisation d'Emacs peut porter divers noms, pour des raisons historiques et de compatibilité avec certains systèmes d'exploitation : ~/.emacs, ~/.emacs.el, ~/.emacs.d/init.el, voire ~/_emacs ou ~/_emacs.el pour supporter certaines anciennes versions de Windows.
Dans ce qui précède, ~ représente votre répertoire home.
Sous Unix ou Linux, c'est très facile : c'est le répertoire contenu dans la
variable d'environnement HOME (typiquement,
/home/marcel). Sous Windows, il y a de nombreuses
possibilités
qui dépendent pour partie de la version de Windows
utilisée :
On peut définir la variable d'environnement HOME. Son contenu doit alors être le chemin complet d'un répertoire (c'est-à-dire d'un dossier) existant qu'Emacs considérera comme son répertoire home ; il cherchera donc à charger le fichier d'initialisation depuis ce répertoire.
Pour définir la variable d'environnement HOME sous Windows, on
peut a priori procéder comme suit (adapté à partir de cette documentation
Microsoft
) :
Dans le menu Démarrer, cliquez sur Panneau de configuration.
Dans le Panneau de configuration, double-cliquez sur Système.
Dans la boîte de dialogue Propriétés système, cliquez sur l'onglet Avancé, puis sur Variables d'environnement.
Dans la boîte de dialogue Variables d'environnement, dans le cadre Variables système, cliquez sur Nouveau.
Dans la boîte de dialogue Nouvelle variable système, tapez HOME dans la zone Nom de la variable, et le chemin complet du répertoire de votre choix dans la zone Valeur de la variable (utilisez de préférence le copier/coller pour être certain d'indiquer le bon chemin).
Cliquez sur OK.
Cliquez sur OK pour quitter la boîte de dialogue Variables d'environnement.
Cliquez sur OK pour quitter la boîte de dialogue Propriétés système.
Redémarrez Windows pour être tranquille (sinon, il est possible que la modification ne soit pas prise en compte).
Si la variable d'environnement HOME n'est pas définie, Emacs prend
pour répertoire home le dossier %APPDATA%, dont la
définition dépend
de la version de Windows
(remplacez username par votre nom
d'utilisateur) :
sous Windows 9X/ME, C:\WINDOWS\Application Data ou C:\WINDOWS\Profiles\username\Application Data
sous Windows 2000 et XP, C:\Documents and Settings\username\Application Data
sous Windows Vista et suivants, C:\Users\username\AppData\Roaming
Si aucun des répertoires indiqués par ces deux méthodes n'est utilisable, Emacs définit le répertoire home comme C:\.
Vous pouvez demander à Emacs ce qu'il considère comme étant votre répertoire home en faisant C-x d ~/ <RET>. La première ligne obtenue indique le chemin complet du répertoire en question et les suivantes son contenu.
Dans tous les cas, pour ajouter des instructions de configuration comme indiqué dans ce qui suit, il faut créer un fichier avec un des noms indiqués ci-dessus (je conseillerais aujourd'hui ~/.emacs.d/init.el ou ~/.emacs.el), où ~ représente votre répertoire home. Dans tout ce qui suit, j'appelerai ce fichier .emacs.el.
Le fichier d'initialisation .emacs.el, si Emacs parvient à le trouver (i.e. s'il est présent et lisible dans votre répertoire home), est lu et exécuté par Emacs à la fin de son lancement (ce fichier doit contenir du code Emacs Lisp valide). 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 fichier d'initialisation .emacs.el.
Les suggestions suivantes s'appliquent à Emacs 23 ou supérieur ; elles sont été testées avec des versions allant jusqu'à Emacs 26. Si vous utilisez une version plus récente d'Emacs et rencontrez un problème avec ce qui est proposé ici, pensez à lire les changements importants apportés dans votre version d'Emacs avec C-h N.
La configuration la plus basique que je conseillerais est la suivante (testée sous Linux avec une locale UTF-8) :
(set-language-environment "UTF-8") ;; UTF-8 en priorité, puis latin1, puis priorités définies par Emacs (prefer-coding-system 'latin-1) (prefer-coding-system 'utf-8) (set-keyboard-coding-system default-keyboard-coding-system) (set-terminal-coding-system default-terminal-coding-system)
Le premier point ci-dessous ne fait qu'expliquer un peu ces lignes et esquisser quelques options alternatives.
En premier lieu, pour qu'Emacs sache dans quel environnement linguistique il est utilisé (on peut par exemple taper du chinois ou du japonais avec Emacs), il est utile de lui préciser le language environment. Dans la mesure du possible, je conseille d'utiliser UTF-8. Il s'agit du codage Unicode le plus répandu. Il permet de représenter les caractères d'à peu près toutes les langues connues à ce jour et présente l'avantage, contrairement à d'autres codages Unicode, d'être entièrement compatible avec le bon vieil ASCII. À cet effet, on pourra utiliser :
(set-language-environment "UTF-8") ;; UTF-8 en priorité, puis latin1, puis priorités définies par Emacs (prefer-coding-system 'latin-1) (prefer-coding-system 'utf-8)
L'alternative la plus courante à UTF-8 en France est ISO 8859-1, couramment appelé « Latin-1 ». UTF-8 est nettement préférable car Latin-1 ne permet de représenter que les caractères les plus utilisés en Europe occidentale (concernant le français, il manque le symbole euro, le « e dans l'o » et... le y tréma majuscule). De plus, UTF-8 est de plus en plus répandu du fait de son universalité. Pour travailler en Latin-1 par défaut, on pourrait néanmoins faire comme ceci :
(set-language-environment "Latin-1")
Remarque : il est de bon ton de préciser le codage de chaque fichier texte dans ses deux premières lignes avec une indication du type :
-*- coding: utf-8 -*-
Cette indication suit une syntaxe qui est comprise par Emacs et Python, entre autres. Elle peut être précédée ou suivie de caractères quelconques afin de ne pas perturber les programmes qui auraient à lire le fichier (par exemple, on la précèdera de « ;; » dans un fichier Emacs Lisp pour en faire un commentaire). Il est également possible de déclarer le codage d'un fichier en plaçant une déclaration à la fin de celui-ci, mais elle ne sera a priori exploitable que par Emacs (voir la section File Variables du GNU Emacs Manual).
N.B. : le codage de caractères utilisé par Emacs pour lire et écrire dans un fichier donné est indiqué à gauche de la mode line, avec par exemple un U en UTF-8, un 1 en Latin-1, un 0 en ISO 8859-15, etc. Ceci est très pratique quand on reçoit un fichier dont le codage ne nous a pas été précisé (quelle impolitesse !).
Pour l'interprétation des caractères entrés au clavier, j'utilise également les deux lignes suivantes depuis un certain temps. Je n'affirme pas qu'elles sont nécessaires avec les versions actuelles d'Emacs, mais elles ont dû améliorer les choses pour moi à un moment donné et ne me posent pas de problème aujourd'hui (Emacs 26).
(set-keyboard-coding-system default-keyboard-coding-system) (set-terminal-coding-system default-terminal-coding-system)
Notez qu'il existe un mécanisme permettant 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 (latin-1-prefix) ou bien en tapant e puis ' (latin-1-postfix). On peut changer d'input method en choisissant Mule (Multilingual Environment) dans le menu Options. C'est une façon (sans doute obsolète) de taper du chinois ou du japonais sous Emacs avec un clavier US, azerty... Il est utile de savoir cela c'est pour comprendre la documentation d'Emacs, mais je n'utiliserais cette fonctionnalité qu'en dernier recours.
Toujours en ce qui concerne la saisie, la ligne suivante est assez pratique (déjà activée par défaut sous Emacs 23) :
;; Peut être pratique pour insérer des caractères spéciaux ;; (C-x 8 machin, Alt-machin...) (require 'iso-transl)
Elle permet par exemple d'insérer une espace insécable avec C-x 8 SPC, un guillemet ouvrant avec C-x 8 <, un guillemet fermant avec 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- »).
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.el, 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 un système GNU/Linux, cette variable donne le nom DNS complet de la machine (Fully Qualified Domain Name — voir hostname --fqdn), ou à défaut le nom de l'ordinateur sans suffixe de domaine (par exemple, zita). Sur un Windows NT où j'ai effectué le 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 [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 delete ou select ci-dessus, utilisez C-h k.
Si vous voulez un .emacs.el 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))
On peut également utiliser la fonction featurep pour tester si une fonctionnalité particulière a été chargée avec provide.
À partir d'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)
Quelques bindings pratiques :
(global-set-key "\C-z" 'undo) (global-set-key "ce-que-vous-voulez-je-ne-veux-pas-le-savoir" 'goto-line) (global-set-key [C-up] 'flo-scroll-one-line-down) (global-set-key [C-down] 'flo-scroll-one-line-up)
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))
Pour faciliter l'insertion des guillemets à la française et des espaces insécables :
(defun flo-insert-left-guillemets () (interactive) (insert (make-char 'latin-iso8859-15 171))) (defun flo-insert-right-guillemets () (interactive) (insert (make-char 'latin-iso8859-15 187))) (defun flo-insert-no-break-space () (interactive) (insert (make-char 'latin-iso8859-15 160))) (global-set-key [?\s-<] 'flo-insert-left-guillemets) (global-set-key [?\s->] 'flo-insert-right-guillemets) (global-set-key (kbd "s-SPC") 'flo-insert-no-break-space)
où, dans ma configuration sous GNU/Linux, le modificateur s (Super) correspond à la touche Windows de gauche (au moins une chose positive que nous aura laissée ce cher Bill).
Si vous vous faites un .emacs.el « dynamique » (qui adapte son exécution au système sur 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 presque
toujours, avec la méthode traditionnelle utilisée avant l'ajout de package.el
à Emacs (qui
est arrivé dans Emacs 24), par l'ajout d'un élément au load-path.
Les lignes suivantes sont un peu plus adaptées au français que la configuration par défaut d'Emacs (en tout cas celle d'anciennes versions — je n'ai pas vérifié récemment) :
(setq colon-double-space nil) (setq sentence-end-double-space nil) (setq sentence-end "[.?!][]\"»')}]*\\($\\| \\|\t\\)[ \t\n]*")
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 (calendar-set-date-style 'european) ;; « If t, show all the holidays that would appear in a complete Christian ;; calendar. » (setq calendar-christian-all-holidays-flag t)
Le dictionnaire avec ispell ou aspell (cf. ispell-program-name) :
(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 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))))
On peut réaliser plusieurs ajouts de ce type sous forme factorisée :
(dolist (mapping '(("/\\.mailcap\\'" . flo-text-mode-without-auto-fill) ("/known_hosts\\'" . flo-text-mode-without-auto-fill) ("/authorized_keys\\'" . flo-text-mode-without-auto-fill) ("/id_rsa.*\\.pub\\'" . flo-text-mode-without-auto-fill) ("\\.bash\\'" . shell-script-mode) ("\\.py3\\'" . python-mode) ("\\.bat\\'" . flo-text-mode-without-auto-fill) ("\\.cddb\\'" . flo-text-mode-without-auto-fill))) (add-to-list 'auto-mode-alist mapping))
Pour les cas où l'extension ne permet pas de déterminer un mode majeur approprié :
; Choix d'un mode majeur à partir de la « shebang line » (dolist (mapping '(("python2" . python-mode) ("python3" . python-mode))) (add-to-list 'interpreter-mode-alist mapping))
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 window-system-default-frame-alist (ou à défaut, sur de vieilles versions, default-frame-alist). Il y a aussi initial-frame-alist mais je préfère utiliser les ressources X lorsque cela est possible.
Le gros avantage de ces dernières pour régler la taille des frames et des polices de caractères découle du fait qu'elles sont attachées au serveur X, autrement dit là où s'effectue l'affichage. Si vous travaillez sur un ordinateur A avec un grand écran et un ordinateur B avec un petit écran, les ressources X permettent d'avoir toujours des paramètres adaptés à l'écran dans chacune de ces situations :
travail sur A en local ;
travail sur A depuis B (par exemple avec
ssh
) ;
travail sur B en local ;
travail sur B depuis A.
Ce genre de problème, quel que soit le nombre d'ordinateurs impliqués, n'est gérable que si la configuration (géométrie des frames et taille des polices de caractères) est attachée à la machine sur laquelle s'effectue l'affichage. C'est ce que permettent naturellement les ressources X, contrairement à la configuration via la ligne de commande ou le .emacs.el.
Les lignes suivantes permettent d'effacer (et copier) 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.
De manière alternative, si vous souhaitez préserver les tabulations dans le fichier (et donc la possibilité de changer leur largeur à l'affichage à tout moment), la variable tab-width est particulièrement utile comme file variable (voir ci-dessus ou le GNU Emacs Manual).
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 sa 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)
Si vous utilisez AUCTeX pour le mode LaTeX, ce qui suit peut vous intéresser (assez ancien, mais ma configuration actuelle est nettement plus complexe ; à adapter à votre cas) :
(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 the default DVI viewer." (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 okular" '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 xpdf" "xpdf %s.pdf" TeX-run-silent nil nil)) (add-to-list 'TeX-command-list '("View with okular" "okular %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): (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\\)") ))) ;; Hook partagé par tous les modes *TeX ; (add-hook 'TeX-mode-hook 'flo-TeX-mode-hook) (add-hook 'TeX-mode-hook 'turn-on-auto-fill)
Emacs offre une fonctionnalité de type client/serveur très pratique. Avec la ligne suivante dans votre .emacs.el :
(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...).
Pour les vieilles versions d'Emacs, voir « gnuserv/gnuclient » dans Avec d'anciennes versions, Section 6.2.
Voilà, je vous ai présenté des 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...).
Si votre configuration est assez longue, pensez à la répartir dans plusieurs fichiers chargés depuis le .emacs.el avec une ligne du type :
(load "flo-init-main")
On peut aussi utiliser :
(require 'feature)
à condition que le fichier à charger effectue, de préférence comme dernière opération (pour éviter que la feature ne soit prétendument présente dans le cas où il y aurait eu une erreur) :
(provide 'feature)
Ce qui précède fonctionne bien sous Emacs 23. Si vous êtes confronté à de vieilles versions, les recettes suivantes pourront peut-être vous rendre service :
Pour les caractères non-ASCII :
;; Pour l'antique Emacs 20 (à proscrire avec les versions plus récentes !) (standard-display-european 1) (set-input-mode nil nil 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 pourra ajouter la ligne suivante pour que les copier/coller d'un programme X vers Emacs fonctionnent bien avec les caractères accentués :
;; Pour le vieil Emacs 21 (setq selection-coding-system 'compound-text-with-extensions)
La ligne suivante, inutile avec une version suffisamment récente d'Emacs, fait en sorte que dès lors qu'un mode sait tirer partie du font-lock-mode[27], tout buffer dans ce mode est colorisé par ce biais.
;; Activé par défaut sous Emacs 23, mais utile avec d'anciennes versions (global-font-lock-mode 1)
Avec les versions d'Emacs antérieures à 21.1, les bindings suivants amélioraient pas mal le quotidien :
(global-set-key [home] 'beginning-of-line) (global-set-key [end] 'end-of-line) (global-set-key [C-home] 'beginning-of-buffer) (global-set-key [C-end] 'end-of-buffer) ;; 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ù les fonctions flo-scroll-one-line-down et flo-scroll-one-line-up sont définies dans Avec une version récente, Section 6.1.
Avant la version 21.1, Emacs ajoutait automatiquement des lignes au buffer quand on déplaçait le point à la fin de celui-ci et qu'on utilisait la fonction next-line (flèche du bas en général). Voici un moyen d'éviter ce comportement :
(setq next-line-add-newlines nil)
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))
Il existe (existait) un package non fourni avec Emacs offrant des
fonctionnalités similaires à emacsclient
, généralement référencé
sous le nom « gnuserv » ou « gnuserv/gnuclient ». L'utilité de ce package
semble avoir nettement diminué depuis une dizaine d'années, au fil des
améliorations apportées à emacsclient
. Il n'est a priori
plus utile depuis Emacs 22.1, qui contient déjà un emacsclient
offrant toutes les fonctionnalités qui justifiaient auparavant l'installation
de « gnuserv/gnuclient ». Je m'en réfère aux anciens liens qui ne fonctionnent
plus et à http://www.emacswiki.org/emacs/GnuClient
.
[ 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.37 (1er février 2019)mailto:f . rougon (**AT**) free [point] fr