;; -*- Mode: Emacs-Lisp -*-
;; Fichier de config (X)Emacs.  La plupart des packages demandant une
;; config un peu plus grosse (enfin normalement) ont leur propre
;; fichier de config appelé en cours de route.
;; À faire (un jour): compatibilité GNU/Emacs


(message "Mise en place des préférences")

;; mon répertoire. Mis en premier pour la recherche des fichiers
;; chargés plus tard.
(setq seb-lisp-dir (expand-file-name "~/.elisp/"))
(setq load-path (cons seb-lisp-dir
                      load-path))

;; Pour dire qu'on utilise Gnus 5.8 plutôt qu'une autre
(setq st::load-pgnus t)

;(if st::load-pgnus
;    (setq load-path (cons (expand-file-name "~bot/.elisp/gnus/lisp") 
;                          load-path)))

(message "Affectation des variables diverses")

;; quelques valeurs qu'on ne sait où mettre
(setq-default
 tab-width 8
 display-time-24hr-format t
 require-final-newline t
 ps-paper-type 'a4
 ispell-dictionary "francais"

 delete-key-deletes-forward t 

 column-number-mode t
 line-number-mode t
 make-backup-files nil 

;; Obsolète bicoze templates.
; html-helper-htmldtd-version 
; "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n" 

 font-lock-maximum-decoration t
)

;;*======================= 
;;* make netscape use a new window when clicking a URL
;;   by Karl Kleinpaste
(setq browse-url-new-window-p t)
(defun karl-browse (a)
  "Wrapper, for new window use."
  (browse-url-netscape a t))
(setq browse-url-browser-function (function karl-browse))

;; Marre d'écrire 'yes' en entier
(fset 'yes-or-no-p 'y-or-n-p)

;; clavier
(define-key function-key-map [dead-circumflex] 
  'compose-circumflex-map)
;; et puis ça c'est bien pour utiliser des trucs genre C-x 8 <
(require 'iso-insert)

;; Avant qu'on commence à charger le mulet
;(load "st-compile")


(message "Configuration de MIME")
;; MIME
(if (not st::load-pgnus)
    ; Pose problème avec Gnus 5.8.x
    (progn 
      (load "mime-setup")
      (setq mime-editor/transfer-level 8)
      (setq mime-editor/split-message nil)))

;;*=======================
;;* recent-files.el --- Maintain menu of recently opened files.
(load "recent-files")
(recent-files-initialize)
;;*=======================
;;* history -- Keep track of the files last opened
(require 'history)
(load "history")


;;*=======================
;;* Filladapt-Mode
(require 'filladapt)
(setq-default filladapt-mode t)
(setq filladapt-fill-column-tolerance 5)
(add-hook 'c-mode-hook 
	  'turn-off-filladapt-mode)
(add-hook 'text-mode-hook
	  '(lambda () (auto-fill-mode 1) ))

;:* crypt
;: Load crypt, which is a package for automatically decoding and
;: reencoding files by various methods - for example, you can visit a
;: .Z or .gz file, edit it, and have it automatically re-compressed
;: when you save it again.
(setq 
 ;: default encryption mechanism
 crypt-encryption-type 'pgp
 ;: make sure new passwords are correct      
 crypt-confirm-password t
 ;: if you don't encrypt anything, set this to tell it not to assume
 ;: that "binary" files are encrypted and require a password.
 ;: crypt-never-ever-decrypt t  
 )
(require 'crypt)


(message "Configuration du mode CSS")
(autoload `css-mode "css-mode")
(setq auto-mode-alist       
      (cons '("\\.css\\'" . css-mode) auto-mode-alist))

(message "Configuration de aucTeX")
(load "seb-emacs.tex")

(message "Configuration SGML/XML")
(load "seb-emacs.sgml")

;(message "Configuration de OO-Browser")
;(load "seb-emacs.oob")

(load "prog-conf.el")


;; Fonction pour aligner des expressions
(autoload 'align "align" nil t)

;; couleurs
(require 'font-lock)

;; on flash la parenthèse d'en face.
(require 'paren)
(paren-set-mode 'paren)

(message "Configuration BBDB")
(require 'bbdb)
(if (not st::load-pgnus)
    (bbdb-initialize 'gnus 'message 'sc)
  ;; BBDB-type-completion in GNUS 5.8
  (defun bbdb-insinuate-message () 
    "Call this function to hook BBDB completion into message"
    (define-key message-mode-map "\M-\t" 'bbdb-complete-name))
  ;; Call this function to hook BBDB completion into message
  (add-hook 'message-mode-hook 'bbdb-insinuate-message)
  )
(add-hook 'gnus-startup-hook 'bbdb-insinuate-gnus)
(setq
 ;; if you want to enter phone numbers that aren't the same 
 bbdb-north-american-phone-numbers-p nil
 ;; display a continuously-updating bbdb window
 bbdb-use-pop-up nil
 bbdb-auto-notes-alist (list
                        (list "x-face"
                              (list 
                               (concat "[ \t\n]*\\([^ \t\n]*\\)"
                                       "\\([ \t\n]+\\([^ \t\n]+\\)\\)?"
                                       "\\([ \t\n]+\\([^ \t\n]+\\)\\)?"
                                       "\\([ \t\n]+\\([^ \t\n]+\\)\\)?"
                                       )
                               'face
                               "\\1\\3\\5\\7"))
                        ;; This grabs the "Organization" header &
                        ;; updates the company slot.
                        '("Organization"
                          (".*" company 0))
                        '("Newsgroups"
                          ("[^,]+" newsgroups 0))
                        '("Subject"
                          (".*" last-subj 0 t))
                        '("User-Agent" 
                          (".*" mailer 0))
                        '("X-Mailer" 
                          (".*" mailer 0))
                        '("X-Newsreader" 
                          (".*" mailer 0)))
 )
(setq bbdb-offer-save 'auto) ;just save, don't ask

;;* Make the sequence "C-x w" execute the `what-line' command,
;;* which prints the current line number in the echo area.
(global-set-key "\C-xw" 'what-line)

;(load-default-sounds)

;; On mets les choses vraiment spécifiques à part
(cond
 ((string-match "XEmacs" emacs-version)
  (progn (message "Chargement de spécificités XEmacs")
	 (load "seb-xemacs"))))


;; Et puis ça, aussi:

; Jolies couleurs pour Info
(load "gc-info")

(autoload 'which "which" "Show where FUNCTION will be loaded from" t)


;; Pour changer le titre de la fenêtre
(defconst se::system-short-name
  (let* ((sys-name (system-name))
         (per-match (string-match "\\." sys-name)))
    (if (not per-match)
        sys-name
      (substring sys-name 0 per-match))))

(if (eq window-system 'x)
    (setq frame-title-format
          (concat "%S@" se::system-short-name ": %b")))

(resize-minibuffer-mode 1)

; Pour jouer avec des templates.
(setq tpl-dir (concat seb-lisp-dir "template"))
(setq load-path (append
		 load-path
		 (list (concat tpl-dir "/lisp/"))))
(require 'template)
(template-initialize)

;; Mode type :set num de VI
(autoload 'setnu-mode "setnu" nil t)
(autoload 'watson "watson" "Mode sherlock" t t)

;; Mode d'édition de fortunes
(autoload 'fortune "fortune" nil t)
(autoload 'fortune-add-fortune "fortune" nil t)
(autoload 'fortune-from-region "fortune" nil t)
(autoload 'fortune-compile "fortune" nil t)
(autoload 'fortune-to-signature "fortune" nil t)


;;
;; Config auto par XEmacs lui-même
;;
(custom-set-variables
 '(locale-package t)
 '(package-get-remote (quote (("ftp.lip6.fr" "/pub/emacs/xemacs/packages"))))
 '(template-default-directories (list (concat tpl-dir "/templates")))
 '(template-auto-insert t)
 '(fortune-dir "~/src/sigs/")
 )
(custom-set-faces
 '(message-cited-text-face ((((class color) (background dark)) (:foreground "LightBlue")) (((class color) (background light)) (:foreground "DarkBlue")) (t (:bold t)))))