;;; -*- coding: utf-8-unix -*-
;;;+----------------------------------------------------------+
;;;|                                                          |
;;;|                     Seki's dotemacs                      |
;;;|                                                          |
;;;+----------------------------------------------------------+
;;; Time-stamp: <08/01/2017 18:28 seb@macseb.seki.fr>
;;
;; This .emacs is the result of a never finished tuning process of
;; tailoring the one-editor to my needs and habits, in addition to the
;; utilisation of Emacs on a various list of systems each having
;; its own features and limitiations.
;;
;; It includes the reusing of the configuration files found in the
;; web, the compilation of some code snippets, and also interactions
;; with other users via the newsgroups or IRC.
;;
;; Thanks to :
;; - fr.comp.applications.emacs
;; - gnu.emacs.help
;; - Sébastien Dinot <sebastien.dinot@free.fr>
;; - Mathieu Roy <yeupou@gnu.org>
;; - Matthieu Moy <http://www-verimag.imag.fr/~moy/emacs/>
;; - Florent Georges (aka drkm on fca.emacs and also for his drkm-lib
;;   http://drkm-lib.sourceforge.net/) 
;; - Emacs Wiki : <http://www.emacswiki.org/>
;; - DotEmacs : <http://www.dotemacs.de/>
;;
;; Look here to access the dedicated mailing-lists and their archives :
;; <http://savannah.gnu.org/mail/?group_id=40>
;;;============================================================

;;; Définition de l'environnement

;; Déterminer si on emploie Emacs ou XEmacs
(defvar sk:is-xemacs (string-match "XEmacs" emacs-version) 
  "Variable interne différente de nil si on est dans XEmacs")

;;chez moi
(defvar sk:home (expand-file-name "~") "Home sweet home")
;;(if sk:is-xemacs 
;;  (setq sk:home (expand-file-name sk:home)))




;; Ajouter mon répertoire personnel à la liste des chemins de recherche
;(defvar sk:elisp-path (concat sk:home "/.elisp") "Chemin vers mes packages elisp")
(defvar sk:elisp-path "~/.elisp" "Chemin vers mes packages elisp")
;(if  sk:is-xemacs
;    (setq sk:elisp-path (expand-file-name sk:elisp-path)))

;(message (format "%s" load-path))
(add-to-list 'load-path sk:elisp-path)  
(progn (cd sk:elisp-path) 
       (normal-top-level-add-subdirs-to-load-path) 
       (cd sk:home))
;(message (format "%s" load-path))

;; chemin d'un Gnus custom (si présent)
(let ((gnusp (concat sk:elisp-path "/gnus")))
  (when (file-exists-p gnusp)
    (add-to-list 'load-path gnusp)))
;; localisation des fichiers gnus (ne peut pas être dans .gnus !)
(setq gnus-home-directory  (concat sk:home "/.gnus.d"))
(setq message-directory    (concat gnus-home-directory "/Mail"))
(setq gnus-directory       (concat gnus-home-directory "/News"))
(setq gnus-agent-directory (concat gnus-home-directory "/agent"))

;; Gnus est notre courielleur
(setq read-mail-command 'gnus)      ;marche pas terrible ?
(setq mail-user-agent 'gnus-user-agent
      ;smtpmail-default-smtp-server "lumiere.ens.fr"
      ;smtpmail-smtp-server "lumiere.ens.fr"
      ;message-mail-user-agent 'gnus-user-agent
)

;; on a un environnement français
(set-language-environment 'French)  ;met à dispo latin-1 et latin-9
(prefer-coding-system 'utf-8)       ;mais on préfère utf-8
;;(prefer-coding-system 'latin-9)       ;mais on préfère latin-9
(set-locale-environment "fr_FR")    ;pour utiliser les locales françaises (utile sous OSX car LC_xx n'est pas défini)

;; pour pas se prendre les pieds dans le tapis entre latin-1 et latin-9
;; Emacs considère séparément les caractères identiques entre latin-1 et latin-9
(when (< emacs-major-version 23)
  ;;(require 'ucs-tables)
  (unify-8859-on-encoding-mode t) ; les caractères encodables en latin-9 le seront directement
  (unify-8859-on-decoding-mode t) ; au décodage, les caractères latins représentables en latin-1
                  ; sont remappés, les autres passent en mule-unicode-0100-24ff
                  ; ça permet par exemple de comparer «é» latin-1 identique à «é» latin-9
  )

;;;======= SPECIFIQUE PLATEFORME ==========================================================
(cond ((eq system-type 'darwin)     ; réglages pour le mac
       
       (message "on est sous mac")
       
       (setq process-connection-type t)     ;en shell pour voir l'affichage
       
       ;;(setq mac-command-key-is-meta t);pomme = meta (removed from emacs22 cvs)
       (setq mac-option-modifier 'none);control, meta, alt, super, or hyper (none = no interpretation)
       (setq mac-command-modifier 'meta)
       
       ;obsolete ? (setq mac-pass-command-to-system nil)    ;évite de cacher emacs avec M-h
       
       ;; iso-latin-1 input encoding ?
       ;;(setq mac-keyboard-text-encoding kTextEncodingISOLatin1)
       ;;(set-keyboard-coding-system 'iso-latin-1)
       ;; To modify mac/unix/dos encodings: CTRL-X RET f
       
       ;(set-terminal-coding-system 'latin-9)
       ;;(set-keyboard-coding-system 'mac-roman) ;dejà positionné ?
       ;;(set-frame-font "fontset-mac")
       ;;(setq default-buffer-file-coding-system 'iso-latin-9-mac) ;attention prefer-coding-system + bas
       
       ;(setq mac-wheel-button-is-mouse-2 t)           ;???
       ;(setq mac-emulate-three-button-mouse 1) ; option = mouse2 / command = mouse3
       
       (if window-system 
           (progn
             (set-background-color "gray90")
         
             ;;X fonts specs format (désignation des fontes X)
             ;;-FOUNDRY-FAMILY-WEIGHT-SLANT-WIDTH--PIXELS-POINTS-HRES-VRES-SPACING-AVEWIDTH-CHARSET 
             
             ;; Set frame size, color and fonts
             ;;          (create-fontset-from-fontset-spec
             ;;               "-apple-monaco-medium-r-normal--9-*-*-*-*-*-fontset-monaco,
             ;;         ascii:-apple-monaco-medium-r-normal--9-90-75-75-m-90-mac-roman,
             ;;         mule-unicode-0100-24ff:-apple-lucida grande-medium-r-normal--0-0-75-75-m-0-mac-roman,
             ;;         mule-unicode-2500-33ff:-apple-bitstream vera sans mono bold-medium-r-normal--0-0-75-75-m-0-mac-roman,
             ;;         latin-iso8859-15:-apple-monaco-medium-r-normal--9-90-75-75-m-90-mac-roman,
             ;;         latin-iso8859-1:-apple-monaco-medium-r-normal--9-90-75-75-m-90-mac-roman")
             
             ;;--
             ;;-apple-unifont medium-medium-r-normal--0-0-75-75-m-0-mac-roman
             ;;              (create-fontset-from-fontset-spec
             ;;               "-apple-unifont medium-medium-r-normal--0-0-75-75-m-0-fontset-monaco,
             ;;         ascii:-apple-unifont medium-medium-r-normal--0-0-75-75-m-0-mac-roman,
             ;;         mule-unicode-0100-24ff:-apple-unifont medium-medium-r-normal--0-0-75-75-m-0-mac-roman,
             ;;         mule-unicode-2500-33ff:-apple-unifont medium-medium-r-normal--0-0-75-75-m-0-mac-roman,
             ;;         latin-iso8859-15:-apple-unifont medium-medium-r-normal--0-0-75-75-m-0-mac-roman,
             ;;         latin-iso8859-1:-apple-unifont medium-medium-r-normal--0-0-75-75-m-0-mac-roman")

             (create-fontset-from-fontset-spec "-misc-seki-medium-r-*-12-*-*-*-*-*-*-fontset-custom_seki")
             (set-fontset-font "fontset-custom_seki" 'latin-iso8859-1 '("Monaco" . "iso8859-1"))
             ;;(set-fontset-font "fontset-custom_seki" 'latin-iso8859-1 '("American Typewriter" . "iso8859-1"))
             (set-fontset-font "fontset-custom_seki" 'latin-iso8859-15 '("Monaco" . "iso8859-15"))
             ;;(set-fontset-font "fontset-custom_seki" 'latin-iso8859-15 '("American Typewriter" . "iso8859-15"))
             (set-fontset-font "fontset-custom_seki" '(#x2200 . #x2200) '("Monaco" . "iso8859-15"))
             ;;(set-fontset-font "fontset-custom_seki" '(#x2200 . #x2200) (font-spec :family "Arial Unicode MS" :size 24 :slant 'italic))
             ;(set-face-font 'default "-misc-seki-medium-r-*-*-*-*-*-*-*-*-fontset-custom_seki" nil)
             (set-frame-font "-misc-seki-medium-r-*-12-*-*-*-*-*-*-fontset-custom_seki")
             ;(create-fontset-from-fontset-spec "-apple-monaco-medium-r-normal--14-*-*-*-*-*-fontset-monaco")
             ;(set-fontset-font "" 'latin-iso8859-1 '("American Typewriter" . "iso8859-1"))
             ;(set-fontset-font "fontset-custom_seki" 'latin-iso8859-15 '("American Typewriter" . "iso8859-15"))
             ;(set-fontset-font "fontset-custom_seki" '(#x2200 . #x2200) (font-spec :family "Arial Unicode MS" :size 24))
             ;(set-face-font 'default "-misc-seki-medium-r-*-*-*-*-*-*-*-*-fontset-custom_seki" nil)
             
             (setq default-frame-alist '((width . 120) 
                                         (height . 44) 
                                         (top . 76)       ;pixels
                                         (left . 260)      ;pixels
                                         (font . "-misc-seki-medium-r-*-12-*-*-*-*-*-*-fontset-custom_seki")
                                        ;(font . "fontset-monaco");fontset-mac ;; preferences
                                        ;(font . (create-fontset-from-mac-roman-font "-apple-monaco-medium-r-normal--9-90-75-75-m-90-mac-roman"))
                                        ;(font . (create-fontset-from-mac-roman-font "unifont medium"))
                                         (cursor-type . bar)
                                         (cursor-color . "purple")
                                         ))
             ;;(setq default-frame-alist initial-frame-alist)
             )
         )
       (global-set-key (kbd "<kp-delete>") 'delete-char) ;touche suppr
       (global-set-key (kbd "<kp-divide>") "/") ;touche division sur pavé num (inactif sur mon poste ?)
       (global-set-key (kbd "<C-kp-home>") (kbd "<C-home>"))         ;idem /
       (global-set-key (kbd "<C-kp-end>") (kbd "<C-end>"))       ;idem /

       ;;Aargh, change default Mac behavior for home / end keys
       (global-set-key (kbd "<home>") 'beginning-of-line)
       (global-set-key (kbd "<end>") 'end-of-line)

       ;;(global-set-key "?" (sk-insere-euro t));j'arrive pas avec l'euro ;( €€ et si !
  
       ;;impressions
       (setq printer-name "IMP_DEV_PROJ")
       ;;pour imprimer les caractères latin-9
       (setq ps-mule-font-info-database-default '((latin-iso8859-15 (normal nil nil iso-latin-9)) 
                                                  (latin-iso8859-1 (normal nil nil iso-latin-1))))
       )
      ;;=================================================================
 
      ((eq system-type 'windows-nt)     ; réglages pour windows
       (progn
         (message "on est sous ouin-ouin")
         (global-set-key [128] 'sk-insere-euro) ; C-h l donne \200 pour l'euro soit 128 en décimal
    
         ;;weird bug of M-x not functionning when other M- combo work
         (when (string-match "^PC-SEBASTIEN" system-name)
           (setq w32-alt-is-meta nil)
           (setq w32-lwindow-modifier 'meta))

         ;; Mouse wheel
         (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)
         ;; Mouse wheel

         (if window-system 
             (progn
               (set-background-color "gray90")
               ;;(set-cursor-color "#aa88dd")
               (set-cursor-color "#ff00aa")
               ;;-outline-Lucida Console-normal-r-normal-normal-11-82-96-96-c-70-iso8859-1
               ;; Set frame size, color and fonts
               (create-fontset-from-fontset-spec
                "-*-lucida console-*-*-*-*-10-*-*-*-*-*-fontset-lucida,
          ascii:-*-lucida console-*-*-*-*-10-*-*-*-*-*-iso8859-1,
          latin-iso8859-1:-*-lucida console-*-*-*-*-10-*-*-*-*-*-iso8859-1")
               (create-fontset-from-fontset-spec
                "-*-consolas-*-*-*-*-12-*-*-*-*-*-fontset-consolas,
          ascii:-*-consolas-*-*-*-*-12-*-*-*-*-*-iso8859-1,
          latin-iso8859-1:-*-consolas-*-*-*-*-12-*-*-*-*-*-iso8859-1,
          latin-iso8859-15:-*-consolas-*-*-*-*-12-*-*-*-*-*-iso8859-15,
          uniscribe:-*-Arial Unicode MS-*-*-*-*-12-*-*-*-*-*-iso8859-15")
               ;;        (create-fontset-from-fontset-spec
               ;;         "-apple-monaco-medium-r-normal--9-*-*-*-*-*-fontset-monaco,
               ;;          ascii:-apple-monaco-medium-r-normal--9-90-75-75-m-90-mac-roman,
               ;;          latin-iso8859-1:-apple-monaco-medium-r-normal--9-90-75-75-m-90-mac-roman") 
               (setq default-frame-alist '((width . 100) 
                                           (height . 44) 
                                           (top . 50) ;pixels
                                           (left . 50) ;pixels
                                           (font . "fontset-consolas") ;fontset-mac
                                           (cursor-type . bar)
                                           (cursor-color . "purple")
                                           ))
               ;;(setq default-frame-alist initial-frame-alist)
               )
           )
         )
       )

      ;;=================================================================

      ((eq system-type 'gnu/linux)      ; réglages pour Linux
       (progn
         (message "on est avec le pingouin")
         ()                 ;rien d'autre
         
         ;; Mouse wheel
         ;; remplacé par mwheel (mouse-wheel-mode est t par défaut)
         ;; (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)
         
         ;;