;;-*- Mode: Emacs-Lisp -*- ;;;; ------------ Variables locales ------------------------------------ ;; gomesdv::have-bbdb est un booléen qui indique si la bbdb est installée. ;; Idem pour ses petits camarades. (setq gomesdv::have-bbdb t gomesdv::have-auctex nil gomesdv::have-w3 nil gomesdv::have-rpm-spec-mode nil) ;; La liste load-path énumère les répertoires où emacs cherche ses modules ;; (fichiers .elc ou, à défaut, .el). (add-to-list 'load-path (expand-file-name "~/emacs-lisp")) (add-to-list 'load-path (expand-file-name "~/emacs-lisp/bbdb")) ;; La liste Info-default-directory-list énumère les répertoires où se trouvent ;; les fichiers d'aide en ligne info. (add-to-list 'Info-default-directory-list (expand-file-name "~/emacs-lisp/info/bbdb")) ;; Adresse électronique et toute cette sorte de choses. (setq user-full-name "Arnaud Gomes-do-Vale" user-mail-address "arnaud@carrosse.frmug.org" query-user-mail-address nil message-default-headers "Organization: Hipss canal alcoolique" message-default-news-headers "Mail-Copies-To: never\nX-No-Productlinks: yes") ;;;; ------------------------------------------------------------------- (defvar running-xemacs (string-match "XEmacs\\|Lucid" emacs-version)) (if running-xemacs ;;;; then... (on est sous XEmacs) (progn ;;;; ------------ Variables locales ------------------------------ (setq gomesdv::have-auctex t gomesdv::have-w3 t gomesdv::have-rpm-spec-mode t) (add-to-list 'load-path (expand-file-name "~/emacs-lisp/xemacs/gnus")) (add-to-list 'Info-default-directory-list (expand-file-name "~/emacs-lisp/info/gnus")) ;;;; ------------------------------------------------------------- ;; Gnuserv est un « serveur emacs ». Quand il est lancé, on peut ouvrir ;; un nouveau cadre du même emacs en lançant gnuclient depuis un shell. (require 'gnuserv) (gnuserv-start) ;; Le curseur clignotant (blink-cursor-mode t) ;; On vire cette p****n de barre d'icones qui prend de la place (set-specifier default-toolbar-visible-p nil) (require 'filladapt) ;; Maintenant que j'ai une zoulie souris à molette, autant en profiter. (define-key global-map 'button4 '(lambda (&rest args) (interactive) (let ((curwin (selected-window))) (select-window (car (mouse-pixel-position))) (scroll-down 5) (select-window curwin)))) (define-key global-map [(shift button4)] '(lambda (&rest args) (interactive) (let ((curwin (selected-window))) (select-window (car (mouse-pixel-position))) (scroll-down 1) (select-window curwin)))) (define-key global-map [(control button4)] '(lambda (&rest args) (interactive) (let ((curwin (selected-window))) (select-window (car (mouse-pixel-position))) (scroll-down) (select-window curwin)))) (define-key global-map 'button5 '(lambda (&rest args) (interactive) (let ((curwin (selected-window))) (select-window (car (mouse-pixel-position))) (scroll-up 5) (select-window curwin)))) (define-key global-map [(shift button5)] '(lambda (&rest args) (interactive) (let ((curwin (selected-window))) (select-window (car (mouse-pixel-position))) (scroll-up 1) (select-window curwin)))) (define-key global-map [(control button5)] '(lambda (&rest args) (interactive) (let ((curwin (selected-window))) (select-window (car (mouse-pixel-position))) (scroll-up) (select-window curwin))))) ;;;; ********************************************************************** ;;;; else... (on est sous GNU Emacs) ;; J'aime bien la commande C-TAB pour passer d'une fenêtre du même cadre ;; à l'autre. Ça existe par défaut sous XEmacs, on le reproduit sous ;; GNU Emacs. (global-set-key [(control tab)] 'other-window) ;; Par défaut, GNU Emacs ajoute des lignes à un tampon quand on utilise ;; next-line (la flèche vers le bas) à partir de la dernière ligne. On ;; désactive cette « fonctionnalité » (ahem). (setq next-line-add-newlines nil) ;;;; ------------ Variables locales ------------------------------ (setq gomesdv::have-auctex t gomesdv::have-w3 t) (add-to-list 'Info-default-directory-list (expand-file-name "~/emacs-lisp/info/psgml")) (add-to-list 'Info-default-directory-list (expand-file-name "~/emacs-lisp/info/w3")) (add-to-list 'Info-default-directory-list (expand-file-name "~/emacs-lisp/info/gnus")) (add-to-list 'Info-default-directory-list (expand-file-name "~/emacs-lisp/info/auctex")) (add-to-list 'load-path (expand-file-name "~/emacs-lisp/gnu-emacs/gnus")) (add-to-list 'load-path (expand-file-name "~/emacs-lisp/gnu-emacs/w3")) (add-to-list 'load-path (expand-file-name "~/emacs-lisp/gnu-emacs/auctex")) (add-to-list 'load-path (expand-file-name "~/emacs-lisp/gnu-emacs/psgml"))) ;; La BBDB (base de donnees d'adresses e-mail) (cond (gomesdv::have-bbdb (require 'bbdb) (bbdb-initialize 'gnus 'vm) (add-hook 'gnus-startup-hook 'bbdb-insinuate-gnus) (defun bbdb-insinuate-message () (define-key message-mode-map "\M-\t" 'bbdb-complete-name)) (add-hook 'message-mode-hook 'bbdb-insinuate-message) (setq bbdb-north-american-phone-numbers-p 'nil) (autoload 'bbdb-define-all-aliases "bbdb-com" "Hook mail alias feature of BBDB into message-mode." t) (add-hook 'message-setup-hook 'bbdb-define-all-aliases) (add-hook 'message-mode-hook 'ls6-message-mode-hook-mail-aliases) (defun ls6-message-mode-hook-mail-aliases () (define-key message-mode-map (kbd "C-c C-a") 'mail-interactive-insert-alias)))) ;;;**************** ;;;***** Base ***** ;;;**************** ;; Mise en valeur de la région quand elle est active. (setq-default transient-mark-mode t) ;; Pour une touche DEL qui se comporte normalement. (setq delete-key-deletes-forward t) ;; Itou pour home et end. (global-set-key [home] 'beginning-of-line) (global-set-key [end] 'end-of-line) ;; Les lignes défilent une par une. (setq-default scroll-conservatively 5) (setq-default scroll-step 1) ;; Les numéros de ligne et de colonne dans la barre d'état. (setq line-number-mode t) (setq column-number-mode t) ;; L'horloge dans la barre d'état. (display-time) (setq display-time-24hr-format t) ;; (display-time) affiche aussi un biff. On lui précise le fichier ;; à surveiller. (setq display-time-mail-file "~/mail/inbox") ;; Visiblement, ça ne fonctionne que sous XEmacs. ;; Ceci permet de lire un fichier texte compressé sans avoir à le ;; décompresser au préalable. (require 'jka-compr) (toggle-auto-compression t) ;; Choix des modes en fonction des extensions des fichiers. (setq auto-mode-alist '( ("\\.c$" . c-mode) ("\\.cc$" . c++-mode) ("\\.cpp$" . c++-mode) ("\\.C$" . c++-mode) ("\\.h$" . c++-mode) ("\\.el$" . emacs-lisp-mode) ("\\.gnus$" . emacs-lisp-mode) ("\\.emacs$" . emacs-lisp-mode) ("\\.html$" . html-mode) ("\\.htm$" . html-mode) ("\\.shtml$" . html-mode) ("\\.sgml$" . sgml-mode) ("\\.xml$" . sgml-mode) ("\\.xsl$" . sgml-mode) ("\\.sh$" . sh-mode) ("\\.tex$" . tex-mode) ("\\.bib$" . bibtex-mode) ("Makefile" . makefile-mode) ("\\.pl$" . perl-mode) ("\\.scm$" . scheme-mode))) (cond (gomesdv::have-rpm-spec-mode (require 'rpm-spec-mode) (add-to-list 'auto-mode-alist '("\\.spec$" . rpm-spec-mode)))) ;; Auto-fill pour les retours chariot automatiques. (add-hook 'text-mode-hook '(lambda () (auto-fill-mode 1))) ;; Les couleurs. (add-hook 'emacs-lisp-mode-hook 'font-lock-mode) (add-hook 'lisp-mode-hook 'font-lock-mode) (add-hook 'perl-mode-hook 'font-lock-mode) (add-hook 'sh-mode-hook 'font-lock-mode) (add-hook 'sgml-mode-hook 'font-lock-mode) (add-hook 'html-mode-hook 'font-lock-mode) (add-hook 'tex-mode-hook 'font-lock-mode) (add-hook 'bibtex-mode-hook 'font-lock-mode) (add-hook 'text-mode-hook 'font-lock-mode) (add-hook 'c-mode-hook 'font-lock-mode) (add-hook 'c++-mode-hook 'font-lock-mode) (add-hook 'makefile-mode-hook 'font-lock-mode) ;; Autoinsert permet de gérer des templates pour chaque type de fichier ;; édité. ;(add-hook 'find-file-hooks 'auto-insert) ;(setq auto-insert-directory (expand-file-name "~/emacs-lisp/autoinsert/")) ;(define-auto-insert "\\.pl\\'" '"template.pl") ;; Tiens, au passage, on vire ces irritants fichiers de sauvegarde toto~. (setq make-backup-files nil) ;; J'utilise zsh comme shell par défaut. Utile pour term. (if (file-exists-p "/bin/zsh") (setq explicit-shell-file-name "/bin/zsh")) (if (file-exists-p "/usr/local/bin/zsh") (setq explicit-shell-file-name "/usr/local/bin/zsh")) ;; Flyspell, un truc 'achement bien qui corrige l'orthographe à la ;; volée, y parait... (autoload 'ispell-word "ispell" "Check the spelling of word in buffer." 't) (autoload 'ispell-region "ispell" "Check the spelling of region." 't) (autoload 'ispell-buffer "ispell" "Check the spelling of buffer." t) (autoload 'ispell-message "ispell" "Check spelling of mail message or news post.") (autoload 'ispell-minor-mode "ispell" "Toggle mode to automatically spell check words as they are typed in.") (global-set-key (read-kbd-macro "M-$") 'ispell-word) (global-set-key [f11] 'ispell-buffer) (global-set-key [(shift f11)] 'ispell-message) (setq ispell-dictionary "francais" ispell-skip-sgml t) (autoload 'flyspell-mode "flyspell" "On-the-fly spelling checking" t) (setq flyspell-default-dictionary "francais") (add-hook 'message-mode-hook 'flyspell-mode) ;; La correction orthographique, c'est bien, mais ça dépend de la langue. ;; Le code suivant (adapté d'un code posté par Jacques L'helgoualc'h sur ;; fr.comp.applications.emacs) permet de basculer entre le français (par ;; défaut) et l'anglais. (defun gomesdv::lang-bascule () "change de langue" (interactive) (if gomesdv::gaulois (progn (setq gomesdv::gaulois nil) (ispell-change-dictionary "british") (set-background-color "DarkSlateGrey")) (progn (setq gomesdv::gaulois t) (ispell-change-dictionary "francais") (set-background-color "Black")))) (setq gomesdv::gaulois t) (ispell-change-dictionary "francais") (global-set-key (kbd "") 'gomesdv::lang-bascule) ;; Ca, je ne sais pas a quoi ca sert? ;; C'est utile pour les sauts de ligne, je ne sais pas si c'est tout. (load "desktop") (desktop-load-default) (desktop-read) ;; Ca, je ne sais pas a quoi ca sert (set-input-mode (car (current-input-mode)) (nth 1 (current-input-mode)) 0) ;; Ça, si c'est là, ça sert probablement à quelque chose. (setq minibuffer-max-depth nil) ;;;**************** ;;;***** SGML ***** ;;;**************** ;; PSGML, un mode SGML amélioré (autoload 'sgml-mode "psgml" "Mode majeur SGML." t) (setq sgml-validate-command "nsgmls -s %s %s" sgml-trace-entity-lookup t sgml-set-face t sgml-live-element-indicator t sgml-indent-data t sgml-indent-step 1 sgml-auto-activate-dtd t sgml-default-dtd-file t) (setq sgml-mode-hook '(lambda () "Defauts pour le mode SGML." (auto-fill-mode) (setq fill-column 76) (load-library "iso-sgml"))) ;; Les couleurs en mode SGML. Merci Soliman. (make-face 'sgml-comment-face) (make-face 'sgml-doctype-face) (make-face 'sgml-end-tag-face) (make-face 'sgml-entity-face) (make-face 'sgml-ignored-face) (make-face 'sgml-ms-end-face) (make-face 'sgml-ms-start-face) (make-face 'sgml-pi-face) (make-face 'sgml-sgml-face) (make-face 'sgml-short-ref-face) (make-face 'sgml-start-tag-face) (set-face-foreground 'sgml-comment-face "dark green") (set-face-foreground 'sgml-doctype-face "maroon") (set-face-foreground 'sgml-end-tag-face "blue2") (set-face-foreground 'sgml-entity-face "red2") (set-face-foreground 'sgml-ignored-face "maroon") (set-face-background 'sgml-ignored-face "gray90") (set-face-foreground 'sgml-ms-end-face "maroon") (set-face-foreground 'sgml-ms-start-face "maroon") (set-face-foreground 'sgml-pi-face "maroon") (set-face-foreground 'sgml-sgml-face "maroon") (set-face-foreground 'sgml-short-ref-face "goldenrod") (set-face-foreground 'sgml-start-tag-face "blue2") (setq-default sgml-markup-faces '((comment . sgml-comment-face) (doctype . sgml-doctype-face) (end-tag . sgml-end-tag-face) (entity . sgml-entity-face) (ignored . sgml-ignored-face) (ms-end . sgml-ms-end-face) (ms-start . sgml-ms-start-face) (pi . sgml-pi-face) (sgml . sgml-sgml-face) (short-ref . sgml-short-ref-face) (start-tag . sgml-start-tag-face))) ;; Le mode html-mode utilisé ici fait partie de psgml. Il est défini dans ;; psgml-html.el (add-hook 'html-mode-hook 'hm--html-minor-mode) (add-hook 'html-mode-hook '(lambda() (setq sgml-set-face nil) (auto-fill-mode 1))) ;; La définition d'origine de la DTD ressemble à ça : ;(defcustom html-helper-htmldtd-version ; "\n" ; "*Version of HTML DTD you're using." ; :type 'string ; :group 'psgml-html) ;; Maintenant, la mienne : (defcustom html-helper-htmldtd-version "\n\n" "*Version of HTML DTD you're using." :type 'string :group 'psgml-html) (defcustom html-helper-new-buffer-template '(html-helper-htmldtd-version "\n" " \n" " " (p "Document Title: " title) "\n" " \n" " \n" " \n" "\n" " \n" "

" (s title) "

\n\n" p "\n\n
\n" "
" html-helper-address-string "
\n" "
\n" (html-helper-return-created-string) html-helper-timestamp-start html-helper-timestamp-end "\n
\n" "
\n" "\n" "
\n" " \n\n") "*Template for new buffers. Inserted by `html-helper-insert-new-buffer-strings' if `html-helper-build-new-buffer' is set to t" :type 'sexp :group 'psgml-html) ;; Si j'ai bien compris, ça, c'est les couleurs. (setq font-lock-maximum-decoration t font-lock-background-mode 'dark font-lock-maximum-size nil) (require 'font-lock) (font-lock-mode 1) (set-face-foreground 'font-lock-comment-face "red") (set-face-foreground 'font-lock-function-name-face "blue") (global-set-key [(shift f12)] 'font-lock-mode) ;; Cette fonction sert à utiliser konqueror pour ouvrir les URL, sauf ;; les URL mailto:toto@machin.truc, que Gnus sait traiter lui-même. (setq browse-url-generic-program "konqueror") (defun gomesdv::browse-url-mailto-or-generic (url) (if (string-match "mailto:" url) (gnus-url-mailto url) (browse-url-generic url))) (setq-default browse-url-browser-function 'gomesdv::browse-url-mailto-or-generic) ;;;**************** ;;;***** i18n ***** ;;;**************** ;; Les caracters 8 bits (standard-display-european t) (custom-set-faces) ;; On veut utiliser les caractères français sans trop se battre avec le ;; clavier. Impossible de me souvenir où j'ai pu récupérer ce iso-francais.el. (load-library "~/emacs-lisp/iso-francais.el") ;;;*************************** ;;;********** TeX ********** ;;;*************************** ;; On utilise AUCTeX s'il est disponible, il est vraiment mieux foutu que ;; le tex-mode d'origine. (cond (gomesdv::have-auctex (require 'tex-site) ;; Les documents multi-fichiers (setq TeX-auto-save t TeX-parse-self t) (setq-default TeX-master nil) ;; Les guillemets francais (setq TeX-open-quote "<<" TeX-close-quote ">>") ;; Pour definir correctement les sections (setq LaTeX-section-hook '(LaTeX-section-heading LaTeX-section-title LaTeX-section-toc LaTeX-section-section LaTeX-section-label))))