The ultimate .emacs ?
Par M, jeudi 8 juin 2006 à 21:19 - Work around the clock - #65 - rss
MAJ : 03 avril 2007
Voici l'aboutissement de maintes heures passées les mains dans le cambouis à bidouiller ce foutu %$@§~ de fichier .emacs (à placer dans le Dossier personnel).
Le résultat est un Emacs fonctionnel sous Ubuntu (ou tout système opérant par défaut en utf-8, sinon faudra changer le codage dans les variables d'environnement), avec LaTeX, R, Sweave, écriture en (x)html ou CSS, Lilypond (pour l'édition de partitions) d'opérationnels.
- les paquets
emacs,emacs-color-themes,r-base(sans oublierr-base-dev!),ess,auctex,latex-ucsetcss-mode, ainsi que la distributiontexlivesont installés, avec toutes leurs dépendances (voir le sources.list adéquat). - Pour le mode
ESS(codeR) : indentation au fur et à mesure (sinon utiliser<TAB>en ligne par ligne, ou bienC-M-qsur une accolade de début de fonction), autocomplétion par<TAB>dans un bufferRou bienC-c <TAB>dans un bufferESS,C-C C-rpour copier une sélection dans le bufferR,C-c C-epour placer le curseur sur le prompt d'un bufferR, utilisation possible deSweave(fichiers .Rnw), etc. - Pour le mode
LaTeX: correction d'orthographe à la volée avecflyspell, les accents correctement gérés, possibilité de mettre des registres (fonctionnant comme des ancres),AUCTeXetRefTeXutilisés, etc.
Pour le reste, tout (ou presque) se trouve dans les commentaires !
;; -------------------------------------------------------------------------- ;;
;; Variables d'environnement ;;
;; -------------------------------------------------------------------------- ;;
;; = .emacs par défaut
(custom-set-variables
'(case-fold-search t)
'(current-language-environment "UTF-8")
'(default-input-method "rfc1345")
'(global-font-lock-mode t nil (font-lock))
'(show-paren-mode t nil (paren))
;; -------------------- pas par défaut --------------------------------------;;
;; Pour spécifier globalement (?) l'indentation à 4 espaces,
;; nécéssaire pour la mise en page de R
'(c-basic-offset 4)
'(c-default-style "bsd")
;; -------------------- fin pas par défaut ----------------------------------;;
)
(custom-set-faces)
;; Changement de mode majeur par touche fonction
(global-set-key [f1] 'html-mode)
(global-set-key [f2] 'sql-mode)
(global-set-key [f3] 'tex-mode)
(global-set-key [f4] 'text-mode)
(global-set-key [f5] 'php-mode)
(global-set-key [f6] 'perl-mode)
(global-set-key [f7] 'java-mode)
(global-set-key [f8] 'c-mode)
(global-set-key [f9] 'c++-mode)
;; -------------------------------------------------------------------------- ;;
;; Affichage - Sessions ;;
;; -------------------------------------------------------------------------- ;;
;; Choix du thème :
;(color-theme-bharadwaj-slate)
(color-theme-charcoal-black)
;(color-theme-classic)
;(color-theme-deep-blue )
;(color-theme-ld-dark)
;(color-theme-midnight)
;(color-theme-pok-wog)
;(color-theme-resolve)
;(color-theme-shaman)
;(color-theme-subtle-hacker)
;; Choix de la police :
(set-default-font "Monospace-10")
;(set-default-font "Bitstream Vera Sans Mono-11")
;; Pour enregistrer automatiquement la position du curseur quand on quitte un
;; fichier, et y retourner automatiquement à la réouverture
(require 'saveplace)
(setq-default save-place t)
;; Correcteur orthographique : utiliser aspell
(setq-default ispell-program-name "aspell")
(setq-default ispell-extra-args '("--reverse"))
;; Pour utiliser la correction à la volée avec flyspell
(add-hook 'LaTeX-mode-hook 'flyspell-mode)
(autoload 'flyspell-mode "flyspell" "On-the-fly spelling checker." t)
(autoload 'flyspell-delay-command "flyspell" "Delay on command." t)
(autoload 'tex-mode-flyspell-verify "flyspell" "" t)
(setq flyspell-sort-corrections nil)
;; Censé utiliser le langage de babel :
(autoload 'flyspell-babel-setup "flyspell-babel")
(add-hook 'latex-mode-hook 'flyspell-babel-setup)
;; Les 'beep' deviennent visibles (et non plus audibles)
(setq visible-bell t)
;; Circuler entre les vues par ctrl-tab
(global-set-key [(ctrl tab)] 'bury-buffer)
;; Annuler par ctrl-z
(global-set-key [(control z)] 'undo)
;; Remplacer par alt-r
(global-unset-key "\M-r")
(global-set-key "\M-r" 'replace-string)
;; Activer le mode 'PC' (sélection avec shift, ctrl-suppr/ins pour
;; copier/coller, etc.)
(pc-selection-mode)
;; Désactive les différentes barres
;; barre de menu
;(menu-bar-mode -1)
;; barre d'outils
(tool-bar-mode -1)
;; la barre de défilement
(scroll-bar-mode -1)
;; Mettre un titre aux fenêtres plutôt que emacs21@localhost.localdomain
(setq frame-title-format '(buffer-file-name "Emacs: %b (%f)" "Emacs: %b"))
;; Afficher le numéro de colonne (la commande line-number ne sert à rien...)
(column-number-mode 1)
(line-number-mode 1)
;; Pas de message à l'ouverture d'une session
(setq inhibit-startup-message t)
;; Les buffers sur lesquels je ne veux pas "switcher"
;; Y a une faille... à trouver !
(defun yic-ignore (str)
(or
(string-match "\\*Buffer List\\*" str)
(string-match "^TAGS" str)
(string-match "^\\*Messages\\*$" str)
(string-match "^\\*Completions\\*$" str)
(string-match "^\\*scratch\\*$" str)
(string-match "^\\*ESS\\*$" str)
(string-match "^ " str)
(string-match "Mew message" str)
(string-match "output\\*$" str)
(string-match "compilation" str)
(string-match "^\\*TeX silent\\*$" str)
(string-match "+inbox" str)
))
(defun yic-next (ls)
"Switch to next buffer in ls skipping unwanted ones."
(let* ((ptr ls)
bf bn go
)
(while (and ptr (null go))
(setq bf (car ptr) bn (buffer-name bf))
(if (null (yic-ignore bn)) ;skip over
(setq go bf)
(setq ptr (cdr ptr))
)
)
(if go
(switch-to-buffer go))))
(defun yic-prev-buffer ()
"Switch to previous buffer in current window."
(interactive)
(yic-next (reverse (buffer-list))))
(defun yic-next-buffer ()
"Switch to the other buffer (2nd in list-buffer) in current window."
(interactive)
(bury-buffer (current-buffer))
(yic-next (buffer-list)))
;; -------------------------------------------------------------------------- ;;
;; Edition ;;
;; -------------------------------------------------------------------------- ;;
;; Make the mode-line display the standard EOL-TYPE symbols (used above)...
(setq eol-mnemonic-undecided "(?)" ;; unknown EOL type
eol-mnemonic-unix "(unix)" ;; LF
eol-mnemonic-dos "(dos)" ;; CRLF
eol-mnemonic-mac "(mac)") ;; CR
;; Supprime tous les espaces en fin de ligne
;; http://www.splode.com/users/friedman/software/emacs-lisp/
(autoload 'nuke-trailing-whitespace "whitespace" nil t)
;; Activer la coloration syntaxique
(global-font-lock-mode t)
;; Mettre un maximum de couleurs
(setq font-lock-maximum-size nil)
;; Surlignage d'une région sélectionnée
(setq-default transient-mark-mode t)
(transient-mark-mode t)
;; 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.
(require 'paren)
(show-paren-mode 1)
(setq-default hilight-paren-expression t)
;; Ferme automatiquement parenthèses, crochets, guillemets
;; au cours de la frappe
(setq skeleton-pair t)
(global-set-key "(" 'skeleton-pair-insert-maybe)
(global-set-key "[" 'skeleton-pair-insert-maybe)
(global-set-key "\"" 'skeleton-pair-insert-maybe)
(global-set-key "'" 'skeleton-pair-insert-maybe)
(global-set-key "{" 'skeleton-pair-insert-maybe)
;; -------------------------------------------------------------------------- ;;
;; Registres ( = ancres) avec F1-12 ;;
;; -------------------------------------------------------------------------- ;;
(global-set-key [(f1)] '(lambda () (interactive) ( jump-to-register 31 nil)))
(global-set-key [(control f1)] '(lambda ()
(interactive) (point-to-register 31 nil)))
(global-set-key [(f2)] '(lambda () (interactive) ( jump-to-register 32 nil)))
(global-set-key [(control f2)] '(lambda ()
(interactive) (point-to-register 32 nil)))
(global-set-key [(f3)] '(lambda () (interactive) ( jump-to-register 33 nil)))
(global-set-key [(control f3)] '(lambda ()
(interactive) (point-to-register 33 nil)))
(global-set-key [(f4)] '(lambda () (interactive) ( jump-to-register 34 nil)))
(global-set-key [(control f4)] '(lambda ()
(interactive) (point-to-register 34 nil)))
(global-set-key [(f5)] '(lambda () (interactive) ( jump-to-register 35 nil)))
(global-set-key [(control f5)] '(lambda ()
(interactive) (point-to-register 35 nil)))
(global-set-key [(f6)] '(lambda () (interactive) ( jump-to-register 36 nil)))
(global-set-key [(control f6)] '(lambda ()
(interactive) (point-to-register 36 nil)))
(global-set-key [(f7)] '(lambda () (interactive) ( jump-to-register 37 nil)))
(global-set-key [(control f7)] '(lambda ()
(interactive) (point-to-register 37 nil)))
(global-set-key [(f8)] '(lambda () (interactive) ( jump-to-register 38 nil)))
(global-set-key [(control f8)] '(lambda ()
(interactive) (point-to-register 38 nil)))
(global-set-key [(f9)] '(lambda () (interactive) ( jump-to-register 39 nil)))
(global-set-key [(control f9)] '(lambda ()
(interactive) (point-to-register 39 nil)))
(global-set-key [(f10)] '(lambda () (interactive) ( jump-to-register 40 nil)))
(global-set-key [(control f10)] '(lambda ()
(interactive) (point-to-register 40 nil)))
(global-set-key [(f11)] '(lambda () (interactive) ( jump-to-register 41 nil)))
(global-set-key [(control f11)] '(lambda ()
(interactive) (point-to-register 41 nil)))
(global-set-key [(f12)] '(lambda () (interactive) ( jump-to-register 42 nil)))
(global-set-key [(control f12)] '(lambda ()
(interactive) (point-to-register 42 nil)))
;; -------------------------------------------------------------------------- ;;
;; Divers ;;
;; -------------------------------------------------------------------------- ;;
;; Pour ne pas avoir à taper en entier la réponse yes/no
(fset 'yes-or-no-p 'y-or-n-p)
;; Affichage des images et fichiers compressés
(setq auto-image-file-mode t)
(setq auto-compression-mode t)
;; Molette de la souris
(defun up-slightly () (interactive) (scroll-up 5))
(defun down-slightly () (interactive) (scroll-down 5))
(global-set-key [mouse-4] 'down-slightly)
(global-set-key [mouse-5] 'up-slightly)
(defun up-one () (interactive) (scroll-up 1))
(defun down-one () (interactive) (scroll-down 1))
(global-set-key [S-mouse-4] 'down-one)
(global-set-key [S-mouse-5] 'up-one)
(defun up-a-lot () (interactive) (scroll-up))
(defun down-a-lot () (interactive) (scroll-down))
(global-set-key [C-mouse-4] 'down-a-lot)
(global-set-key [C-mouse-5] 'up-a-lot)
;; visualisation fichiers compresses
(auto-compression-mode 1)
;; pour utiliser le format européen pour la calendrier.
(setq european-calendar-style 't)
;; on va dire que les semaines commencent le lundi, et non le dimanche.
(setq calendar-week-start-day 1)
;;calendar en Français
(setq calendar-day-name-array ["Dimanche" "Lundi" "Mardi" "Mercredi" "Jeudi"
"Vendredi" "Samedi"])
(setq calendar-month-name-array ["Janvier" "Février" "Mars" "Avril" "Mai" "Juin"
"Juillet" "Août" "Septembre" "Octobre"
"Novembre" "Décembre"])
;; Quand on reçoit un fichier .txt d'une machine dos/windows,
;; il est très énervant de voir les ^M à chaque fin de ligne.
;; Utiliser M-x dos-unix pour vous en debarrasser.
;; dos-unix
(defun dos-unix ()
(interactive)
(goto-char (point-min))
(while (search-forward "\r" nil t) (replace-match "")))
;; C'est l'inverse du precedent.
;; unix2dos
(defun unix-dos ()
(interactive)
(goto-char (point-min))
(while (search-forward "\n" nil t) (replace-match "\r\n")))
;; -------------------------------------------------------------------------- ;;
;; PHP - HTML - CSS ;;
;; -------------------------------------------------------------------------- ;;
;; Manuel php en français
(setq php-manual-url "http://www.nexen.net/docs/php/annotee/manual.php")
;; Utiliser le html-helper-mode, http://www.gest.unipd.it/~saint/hth.html
(autoload 'php-html-helper-mode "html-helper-mode" "html-helper-mode" t)
;; Ajoute un mode pour éditer du php
;; http://www.ontosys.com/reports/PHP.html
(autoload 'php-mode "php-mode" "PHP editing mode" t)
(add-to-list 'auto-mode-alist '("\\.php\\'" . php-mode))
(add-to-list 'auto-mode-alist '("\\.php3\\'" . php-mode))
(add-to-list 'auto-mode-alist '("\\.php4\\'" . php-mode))
;; Utiliser le menu expert
(setq html-helper-use-expert-menu t)
;; Indenter automatiquement lorsque l'on appuie sur entrée
(defun my-html-helper-load-hook ()
(define-key html-mode-map (kbd "RET") 'newline-and-indent)
)
(add-hook 'html-helper-load-hook 'my-html-helper-load-hook)
;; Utiliser PSGML pour les fichiers SGML, HTML, XML
(autoload 'sgml-mode "psgml" "Major mode to edit SGML files." t)
(autoload 'xml-mode "psgml" "Major mode to edit XML files." t)
;; Ajoute un mode CSS
;; nécéssite d'installer le paquet css-mode
(autoload 'css-mode "css-mode")
(setq auto-mode-alist
(cons '("\\.css\\'" . css-mode) auto-mode-alist))
;; -------------------------------------------------------------------------- ;;
;; LaTeX ;;
;; -------------------------------------------------------------------------- ;;
;; Pour écrire un .tex en utf-8, installer le package latex-ucs.
;; Ajouter dans le préambule des fichiers LaTeX :
;; \usepackage{ucs}
;; \usepackage[utf8x]{inputenc}
;; Mode LaTeX + AUCTeX
(require 'tex-site)
;; Commande par défaut pour le visionnage : xdvi
(setq tex-dvi-view-command "xdvi")
;; Charger RefTeX
(add-hook 'LaTeX-mode-hook 'turn-on-reftex)
;; Définir le répertoire de la bibliographie
(setq reftex-bibpath-environment-variables
'("/home/mathieu/Travail/Bibliographie/"))
;; Pour que la compilation en tex se fasse directement en pdf
;(set-variable (quote latex-run-command) "pdflatex")
;; Mode LaTeX : retour automatique à la ligne au bout du 90e caractère
(setq LaTex-mode-hook
(lambda ()
(auto-fill-mode t)
(setq fill-column 90)
))
(setq latex-mode-hook
(lambda ()
(auto-fill-mode t)
(setq fill-column 90)
))
(setq TeX-mode-hook
(lambda ()
(auto-fill-mode t)
(setq fill-column 90)
))
(setq tex-mode-hook
(lambda ()
(auto-fill-mode t)
(setq fill-column 90)
))
;; -------------------------------------------------------------------------- ;;
;; ESS ;;
;; -------------------------------------------------------------------------- ;;
;; Pour avoir R en anglais, y compris sous Emacs
;; Dans un terminal, enlever les ;; puis lancer d'un coup
;; echo -e "#\041/bin/sh
;; #
;;
;; echo -e \042
;; ### Pour avoir les messages sous R en anglais
;; LANGUAGE=en\042 >> /usr/lib/R/etc/Renviron\n\nexit 0" > R_en.sh
;; sudo sh R_en.sh
;; rm R_en.sh
;; Ne demande pas le répertoire de démarrage, utilise les valeurs par défaut
(setq ess-ask-for-ess-directory nil)
;; Lance les processus R dans le buffer du bas (pas besoin d'en créer un)
(setq inferior-ess-same-window nil)
;; Pour spécifier le style d'écriture de R
;; nécessite les deux lignes spécifiées dans "Variables d'environnement"
(add-hook 'ess-mode-hook
'(lambda()
(ess-set-style 'C++ 'quiet)
(add-hook 'local-write-file-hooks
'(lambda()
(delete-trailing-whitespace)))))
;; Pour ajouter à la liste d'association les .Rhistory pour les traîter comme
;; des fichiers sources R
(setq auto-mode-alist
(append
'(("\\.[rR]history\\'" . R-mode))
auto-mode-alist))
;; Pour avoir la liste des arguments d'une fonction
;; http://www.svenhartenstein.de/emacs-ess.php
(defun my-r-show-args ()
"Show arguments and their default values of function in minibuffer."
(interactive "*")
(let ((pointposition (point)))
(up-list -1)
(let ((posend (point)))
(backward-sexp 1)
(setq object (buffer-substring-no-properties posend (point)))
(ess-command (concat "try(args(" object "), silent=TRUE)\n")
(get-buffer-create "*my-r-args-completion*"))
)
(goto-char pointposition)
)
(with-current-buffer "*my-r-args-completion*"
(goto-char (point-min))
(if (equal nil (search-forward "function" 10 t))
(message my-r-noargsmsg)
(goto-char (point-min))
(zap-to-char 1 (string-to-char "("))
(goto-char (point-max))
(zap-to-char -1 (string-to-char ")"))
(delete-trailing-whitespace)
(if (equal my-r-show-as "tooltip")
(tooltip-show (concat "ARGS: " (buffer-string)))
(message (concat "ARGS: " (buffer-string)))
)))
(kill-buffer "*my-r-args-completion*")
)
(defvar my-r-noargsmsg ""
"The message that is returned if my-r-show-args does not find a list
of arguments.")
(defvar my-r-show-as nil
"How my-r-show-args should show the argument list. Possible values
are: 'message' (the default) or 'tooltip'.")
(setq my-r-noargsmsg "") ; no message when no arguments found
(setq my-r-show-as "message") ; show arguments as message
;(setq my-r-show-as "tooltip") ; show arguments as tooltip
;; bind my-r-show-args to F2
(define-key ess-mode-map [f2] 'my-r-show-args)
;; call my-r-show-args automatically
(define-key ess-mode-map "(" '(lambda nil "" (interactive)
(skeleton-pair-insert-maybe nil)
(my-r-show-args)))
;; -------------------------------------------------------------------------- ;;
;; Lilypond ;;
;; -------------------------------------------------------------------------- ;;
(autoload 'LilyPond-mode "lilypond-mode")
(setq auto-mode-alist
(cons '("\\.ly$" . LilyPond-mode) auto-mode-alist))
(add-hook 'LilyPond-mode-hook (lambda () (turn-on-font-lock)))

Commentaires
1. Le jeudi 8 juin 2006 à 22:44, par Krikouille
2. Le vendredi 9 juin 2006 à 00:28, par M
3. Le vendredi 9 juin 2006 à 14:52, par AL
4. Le vendredi 9 juin 2006 à 22:19, par M
5. Le lundi 12 juin 2006 à 07:39, par M
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.