(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(case-fold-search t)
 '(current-language-environment "Latin-9")
 '(default-input-method "latin-9-prefix")
 '(enable-multibyte-characters t)
 '(global-font-lock-mode t nil (font-lock))
 '(make-backup-files nil)
 )
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )

					; affichage des caractres "latins"
					;(standard-display-european t)
(set-terminal-coding-system 'iso-8859-15-unix)
(set-keyboard-coding-system 'iso-8859-15-unix)
(set-language-environment 'Latin-1)

; Faire apparaître la position du curseur dans la ligne modale
(setq column-number-mode t)
(setq line-number-mode t)


; Afficher l'heure dans la barre d'état (format 24 heures)
(setq display-time-24hr-format t)
(display-time)

; Decoration maximum
(global-font-lock-mode t)
(setq font-lock-maximum-decoration t)

; Montrer la correspondance des parenthèses
; (systématiquement et non seulement après la frappe)
(require 'paren)
(show-paren-mode t)
(setq blink-matching-paren t)
(setq blink-matching-paren-on-screen t)
;(setq show-paren-style 'expression)
(setq blink-matching-paren-dont-ignore-comments t)

(delete-selection-mode t)

(setq visible-bell t)

(setq c-default-style "k&r")
(setq c-block-comment-prefix "")
(setq c-basic-offset 8)
(setq tab-width 8)

(put 'upcase-region 'disabled nil)

(require 'color-theme)
; (color-theme-emacs-21)     ; ***
; (color-theme-xemacs)       ; **
; (color-theme-robin-hood)   ; ***
; (color-theme-blue-mood)    ; ***
; (color-theme-dark-blue)    ; ***
; (color-theme-dark-laptop)  ; *   pas génial mais économise les batteries
; (color-theme-deep-blue)    ; **
; (color-theme-gray30)       ; *
; (color-theme-gtk-ide)      ; ***
; (color-theme-jsc-dark)     ; **
; (color-theme-ld-dark)      ; ***
; (color-theme-pok-wob)      ; *
; (color-theme-retro-green)  ; *   pour les moments de nostalgie
; (color-theme-retro-orange) ; *   idem...
; (color-theme-snowish)      ; *
; (color-theme-subtle-blue)  ; **  joli mais peu lisible

(if window-system
  ; Thème sous X
  ; (color-theme-blue-mood)
  (color-theme-sitaramv-nt)
  ; Thème dans un XTerm ou une console virtuelle
  ; (color-theme-tty-dark)
  (color-theme-dark-info)
)

; Nom en clair des jours et mois apparaissant dans le calendrier
(setq european-calendar-style t)
(setq calendar-week-start-day 1)
(defvar calendar-day-name-array
  ["dimanche" "lundi" "mardi" "mercredi" "jeudi" "vendredi" "samedi"])
(defvar calendar-month-name-array
  ["janvier" "février" "mars" "avril" "mai" "juin"
   "juillet" "août" "septembre" "octobre" "novembre" "décembre"])

; Inhiber l'affichage du message d'accueil
(setq inhibit-startup-message t)

; « ispell » doit utiliser le dictionnaire français
(setq ispell-dictionary "francais")

; Défilement des tampons avec filtre des tampons non souhaités
; Fonctions fournies par Young-Il Choo <choo@cs.yale.edu>
; Touches associées (elles ne fonctionnent pas sous mon environnement
; car elles sont interceptées)
; (global-set-key [\C-tab] 'yic-next-buffer)
; (global-set-key [\C-\S-tab] 'yic-prev-buffer)
(defun yic-ignore (str)
  (or
    ; Liste des tampons à systématiquement ignorer
    (string-match "\\*Buffer List\\*" str)
    (string-match "^TAGS" str)
    (string-match "^\\*Messages\\*$" str)
    (string-match "^\\*Completions\\*$" str)
    (string-match "^ " str)

    ; Ignorer aussi les tampons déjà visibles dans une autre trame de
    ; cette même instance d'Emacs.
    (memq str
      (mapcar
        (lambda (x)
          (buffer-name
            (window-buffer
             (frame-selected-window x)
            )
          )
        )
        (visible-frame-list)
      )
    )
  )
)


; Sélection du tampon suivant dans la liste en tenant compte de
; ceux qui doivent être ignorés.
(defun yic-next (ls)
  "Déterminer le prochain tampon valide à afficher"
  (let ((ptr ls)
          bf bn go
        )
    (while (and ptr (null go))
      (setq bf (car ptr)  bn (buffer-name bf))
      (if (null (yic-ignore bn))
        (setq go bf)
        (setq ptr (cdr ptr))
      )
    )
    (if go (switch-to-buffer go))
  )
)


; Affichage du tampon précédent dans la liste des tampons valides
(defun yic-prev-buffer ()
  "Afficher le tampon suivant en ignorant ceux non souhaités"
  (interactive)
  (yic-next (reverse (buffer-list)))
)


; Affichage du tampon suivant dans la liste des tampons valides
(defun yic-next-buffer ()
  "Afficher le tampon précédent en ignorant ceux non souhaités"
  (interactive)
  (bury-buffer (current-buffer))
  (yic-next (buffer-list))
)


; Effacement des caractères blancs (y compris les nouvelles lignes)
; jusqu'au prochain caractère non blanc. Cette fonction est bien
; utile après un copier-coller de puis Netscape.
(defun delete-white () (interactive)
  "Effacer les caractères blancs jusqu'au prochain non blanc"
  (save-excursion
    (if (re-search-forward "[ \t\r\n]*[^ \t\r\n]" nil t)
      (delete-region (match-beginning 0) (- (point) 1))
    )
  )
)


; Effacer tous les espaces en fin de ligne
(defun delete-trailing-spaces ()
  "Effacer les espaces et tabulations en fin de chaque ligne du tampon"
  (interactive)
  (progn
    (save-excursion
      (goto-line 1)
      (replace-regexp "[ \t]+$" "")
    )
  )
)


; Conversion des fins de lignes du format MS-DOS au format Unix
(defun dos2unix ()
  (interactive)
  (goto-char (point-min))
  (while (search-forward "\r" nil t)
    (replace-match "")
  )
)


; Conversion des fins de ligne du format Unix au format MS-DOS
(defun unix2dos ()
  (interactive)
  (goto-char (point-min))
  (while (search-forward "\n" nil t)
    (replace-match "\r\n")
  )
)


; Montrer la table des caractères ASCII étendus
; Fonction fournie par Alex Schroeder <asc@bsiag.com>
(defun ascii-table ()
  "Afficher la table de caractères ASCII."
  (interactive)
  (switch-to-buffer "*ASCII*")
  (erase-buffer)
  (insert (format "Caractères ASCII de code 1 à 254.\n"))
  (let ((i 0))
    (while (< i 254) (setq i (+ i 1))
      (insert (format "%4d %c\n" i i))
    )
  )
  (beginning-of-buffer)
)

; Gestion de la souris à molette
; « (require 'mwheel) » ne marche pas avec ma souris !
; J'ai récupéré la solution utilisée à l'adresse :
;   http://koala.ilog.fr/colas/mouse-wheel-scroll/#gnuemacs
; Molette seule     <=> déplacement de cinq lignes
; Molette + Shift   <=> déplacement d'une ligne
; Molette + Control <=> déplacement d'une page

(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)

; Touche « F2 »             <=> « Sauver le tampon courant »
; Touche « F3 »             <=> « Basculer dans le tampon précédent »
; Touche « F4 »             <=> « Basculer dans le tampon suivant »
; Touche « F5 »             <=> « Annuler la dernière commande »
; Touche « F6 »             <=> « Aller à la ligne numéro ... »
; Touche « F7 »             <=> « Rechercher une expression dans l'aide »
; Touche « F8 »             <=> « Supprimer le tampon courant »
; Touche « F9 »             <=> « Remplacer interactivement »
; Touche « F10 »            <=> « Effacer les caractères blancs jusqu'au
;                                 prochain mot »
; Touche « F11 »            <=> « Masquer le bloc de code courant »
; Touche « F12 »            <=> « Montrer le bloc de code courant »
; Touche « Meta » + « F11 » <=> « Masquer tous les blocs de code »
; Touche « Meta » + « F12 » <=> « Montrer tous les blocs de code »
(global-set-key [f2]  'save-buffer)
(global-set-key [f3]  'yic-prev-buffer)
(global-set-key [f4]  'yic-next-buffer)
(global-set-key [f5]  'undo)
(global-set-key [f6]  'goto-line)
(global-set-key [f7]  'apropos)
(global-set-key [f8]  'kill-this-buffer)
(global-set-key [f9]  'query-replace)
(global-set-key [f10] 'delete-white)
(global-set-key [f11] 'hs-hide-block)
(global-set-key [f12] 'hs-show-block)
(global-set-key [(meta f11)] 'hs-hide-all)
(global-set-key [(meta f12)] 'hs-show-all)

; Touches « Ctrl » + « Flèche droite » <=> « Mot suivant »
; Touches « Ctrl » + « Flèche gauche » <=> « Mot précédent »
; Ca ne marche pas en mode console car la combinaison ne semble pas
; reconnue (problème de définition de $TERM)
; Ca ne marche pas sous X car mon window-manager semble intercepter
; la séquence !
; A déboguer...
; (global-set-key [(control right)] 'forward-word)
; (global-set-key [(control left)]  'backward-word)

; Activation des fonctions « upcase-region » et « downcase-region »
; Ces fonctions sont désactivées par défaut sous Emacs 21 ; pourquoi ?
(put 'upcase-region 'disabled nil)
(put 'downcase-region 'disabled nil)

; Si le support des images est activé alors les afficher lorsqu'on les ouvre
(if (fboundp 'auto-image-file-mode)
    (auto-image-file-mode 1))

; Activation systématique du mode mineur HS dans les modes C/C++
(add-hook 'c-mode-common-hook 'hs-minor-mode t)