dot Emacs
Cet article est dédié à Emacs et notamment sur les choses à mettre dans le fichier d’init.
Tout d’abord rappelons que le fichier init (~/.emacs
ou ~/_emacs
ou encore ~/.emacs.d/init.el
) contient du code Emacs LISP exécuté au démarrage d’Emacs.

Nous allons ici décortiquer les parties principales de mon fichier .emacs.d/init.el
:
Paramétrage
On commence par s’identifier :
(setq user-full-name "MiKael NAVARRO")
(setq user-mail-address "mickey@klnavarro.fr")
Raccourcis pour répondre aux questions par ’y’ ou ’n’ :
(fset 'yes-or-no-p 'y-or-n-p)
(define-key query-replace-map [return] 'act)
(define-key query-replace-map [?\C-m] 'act)
Désactivation du split des lignes :
(setq fill-column nil)
Gestion des fichiers compressés :
(auto-compression-mode t)
Affichage des images :
(auto-image-file-mode t)
Ne pas insérer des tabulations mais des espaces :
(setq-default indent-tabs-mode nil)
Parenthese matching, permet de verifier au fur et à mesure de la frappe que l’on ferme bien ce que l’on ouvre, aussi bien pour les parenthèses que les crochets ou les accolades :
(show-paren-mode 1)
(setq-default hilight-paren-expression t)
Internationnalisation
Aussi connu sous l’accronyme i18n, permet de gérer les accents :
(setq selection-coding-system 'compound-text-with-extensions)
(prefer-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
(set-file-name-coding-system 'utf-8)
(set-clipboard-coding-system 'utf-8)
;(set-w32-system-coding-system 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(set-language-environment 'utf-8)
On est en europe, config du charset par defaut proprement :
(standard-display-8bit 128 255)
(standard-display-european 1)
Le calendrier
Calendrier au format ISO 8601 :
(require 'calendar)
(calendar-set-date-style 'iso)
(setq calendar-week-start-day 1)
Rajout des numéros de semaines :
(setq calendar-intermonth-header
(propertize "WK" 'font-lock-face 'font-lock-function-name-face))
(setq calendar-intermonth-text
'(propertize
(format "%2d" (car (calendar-iso-from-absolute (calendar-absolute-from-gregorian (list month day year)))))
'font-lock-face 'font-lock-function-name-face))
Personnalisation de l’interface
Titre de la fenêtre :
(setq frame-title-format '(buffer-file-name "Emacs: %b (%f)" "Emacs : %b"))
Désactivation des nuisances sonores :
(setq visible-bell t)
Economie d’espace (on désactive la bare de menu, d’outils et l’ascenseur) :
(menu-bar-mode t)
(tool-bar-mode -1)
(scroll-bar-mode -1)
On désactive les infobules (dans le cas contraire on demande un affichage rapide) :
(tooltip-mode -1)
(setq tooltip-delay 0.1)
Affichage du numéro de ligne et de la colonne dans la bare de status :
(column-number-mode t)
(line-number-mode t)
Affichage de l’heure (au format 24h) :
(setq display-time-24hr-format t)
(display-time)
Désactivation du clignotement du curseur sous Emacs 21 :
(if (string-equal "21" (substring (emacs-version) 10 12))
(progn
(blink-cursor-mode 0)
))
Fontes et couleurs
Police par défaut :
;(set-default-font "-Misc-Fixed-Medium-R-Normal--13-120-75-75-C-80-ISO8859-1")
(set-frame-font "-*-Courier New-normal-r-*-*-13-*-*-*-c-*-iso8859-1")
Activation de la coloration syntaxique :
(global-font-lock-mode t)
(setq font-lock-maximum-decoration t)
(setq font-lock-maximum-size nil)
(transient-mark-mode t)
Et par défaut on active la colorisation :
(if (fboundp 'global-font-lock-mode)
(global-font-lock-mode t)
)
Thème (avant emacs-24) :
(defun color-theme-kln ()
(interactive)
(color-theme-install
'(color-theme-kln
((foreground-color . "Wheat")
(background-color . "DarkSlateGray")
(background-mode . dark)
(border-color . "Black")
(cursor-color . "Orchid")
(mouse-color . "White"))
(fringe ((t (:background "DarkSlateGray"))))
(mode-line ((t (:foreground "Black" :background "LemonChiffon"))))
(region ((t (:background "SteelBlue"))))
(font-lock-builtin-face ((t (:foreground "#8cd0d3"))))
(font-lock-comment-face ((t (:foreground "OrangeRed"))))
(font-lock-function-name-face ((t (:foreground "Cyan"))))
(font-lock-keyword-face ((t (:foreground "SkyBlue" :weight bold))))
(font-lock-string-face ((t (:foreground "Coral"))))
(font-lock-type-face ((t (:foreground "LimeGreen"))))
(font-lock-variable-name-face ((t (:foreground "#dfaf8f"))))
(minibuffer-prompt ((t (:foreground "#f0dfaf" :bold t))))
(font-lock-warning-face ((t (:foreground "Red" :weight bold :underline t))))
)))
(provide 'color-theme-kln)
On détermine quel thème utiliser suivant que l’on est en console ou en mode x (ou en mode client/serveur) :
(require 'color-theme)
(color-theme-initialize)
;; Select theme:
;; test win sys to rerun ctheme
(defun test-win-sys(frame)
(select-frame frame) ;; must be current for local ctheme
(if (window-system frame) ;; test winsystem
(color-theme-kln)
(color-theme-tty-dark)
)
)
;; hook on after-make-frame-functions
(add-hook 'after-make-frame-functions 'test-win-sys)
;; Default start - if non daemon
(let ((color-theme-is-global nil))
(if (window-system)
(color-theme-kln)
(color-theme-tty-dark)
)
)
Raccourcis clavier et souris
Les raccourcis claviers :
(global-set-key [up] 'previous-line)
(global-set-key [down] 'next-line)
(global-set-key [left] 'backward-char)
(global-set-key [right] 'forward-char)
(global-set-key [home] 'beginning-of-line)
(global-set-key [end] 'end-of-line)
(global-set-key [delete] 'delete-char)
(global-set-key [prior] 'scroll-down)
(global-set-key [next] 'scroll-up)
(global-set-key [C-up] 'backward-sexp)
(global-set-key [C-down] 'forward-sexp)
(global-set-key [C-left] 'backward-word)
(global-set-key [C-right] 'forward-word)
(global-set-key [C-home] 'beginning-of-buffer)
(global-set-key [C-end] 'end-of-buffer)
;(global-set-key [C-prior] "\M-<")
;(global-set-key [C-next] "\M->")
(global-set-key [M-next] 'scroll-other-window)
(global-set-key [M-prior] 'scroll-other-window-down)
(global-set-key "\M- " 'set-mark-command)
(global-set-key [C-backspace] 'backward-kill-word)
;(global-set-key "\M-%" 'query-replace)
(global-set-key [(meta g)] 'goto-line)
;(global-set-key [f1] 'view-order-manuals)
(global-set-key [f2] 'info)
;(global-set-key [f3] 'compile)
;(global-set-key [f4] 'repeat-complex-command)
;(global-set-key [f5] 'eval-current-buffer)
Pour GNU Emacs sous X :
(define-key global-map [(delete)] "\C-d")
Activation de la roulette de la souris :
(mouse-wheel-mode t)
(global-set-key [mouse-4] '(lambda () (interactive) (scroll-down 5)))
(global-set-key [mouse-5] '(lambda () (interactive) (scroll-up 5)))
(global-set-key [S-mouse-4] '(lambda () (interactive) (scroll-down 1)))
(global-set-key [S-mouse-5] '(lambda () (interactive) (scroll-up 1)))
(global-set-key [C-mouse-5] '(lambda () (interactive) (scroll-up (/ (window-height) 2))))
(global-set-key [C-mouse-4] '(lambda () (interactive) (scroll-down (/ (window-height) 2))))
Circuler entre les vues par shift-arrow_keys :
(windmove-default-keybindings)
Rajout d’un menu contextuel (liste des variables, fonctions et méthodes) sur le bouton droit :
(global-set-key [mouse-3] 'imenu)
Gestion des séléctions X :
(defun x-own-selection (s) (x-set-selection `PRIMARY s))
(global-set-key [(shift insert)] '(lambda () (interactive) (insert (x-get-selection))))
(global-set-key [(control insert)] '(lambda () (interactive) (x-own-selection (buffer-substring (point) (mark)))))
Modes
Mode C
Style d’indentation pour le langage C :
(custom-set-variables
'(c-basic-offset 2)
'(c-default-style "K&R")
'(c-tab-always-indent t)
'(compilation-ask-about-save nil)
'(compilation-window-height 6))
Hide/Show
Monter ou cacher des parties du code grâce au paquet HideShow. Quelques raccourcis clavier pour se simplifier la vie :
(add-hook 'c-mode-common-hook
(lambda()
(local-set-key (kbd "C-c <right>") 'hs-show-block)
(local-set-key (kbd "C-c <left>") 'hs-hide-block)
(local-set-key (kbd "C-c <up>") 'hs-hide-all)
(local-set-key (kbd "C-c <down>") 'hs-show-all)
(hs-minor-mode t)))
CScope
L’intégration de CScope pour Emacs est disponible via le package xcscope dans MELPA. Une fois installé il suffit d’activer le cscope-minor-mode
.
(require 'xcscope)
(cscope-setup)
;(add-hook 'c-mode-hook #'cscope-minor-mode)
Par défaut il indexera le répertoire courant, pour changer cela utiliser la fonction cscope-set-initial-directory
de concert avec le script cscope-indexer
.
Quelques extensions
Tout d’abord on rajoute son propre répertoire de librairies :
(add-to-list 'load-path (expand-file-name "~/site-lisp/"))
Auto-complétion
AutoComplete avec menu popup :
(require 'auto-complete)
(global-auto-complete-mode t)
(setq ac-auto-start 3)
Complétion sur l’Emacs LISP, les symboles ETAGS et pour le Python :
(require 'auto-complete-emacs-lisp)
(require 'auto-complete-etags)
(require 'auto-complete-python)
reStructuredText
Rajout du support du reStructuredText (avant emacs-24) :
(autoload 'rst-mode "~/site-lisp/rst.el"
"mode for editing reStructuredText documents" t)
(setq auto-mode-alist
(append '(("\\.rst$" . rst-mode)
("\\.rest$" . rst-mode)) auto-mode-alist))