;;; prog-conf.el --- 

(setq-default indent-tabs-mode nil)

;;====
(message "Configuration Perl")
(setq-default
 cperl-electric-parens t 
 cperl-electric-keywords t
 cperl-indent-level 4
 cperl-hairy t
 cperl-auto-newline t
 cperl-mode-map nil
 cperl-extra-newline-before-brace nil
 )

;;====
(message "Configuration du mode C")

(setq-default 
 c-basic-offset 4
 c-default-style "user"
; c-default-style "ellemtel"
)


(defconst st::c-style
  '((c-tab-always-indent        . t)
    (c-hanging-braces-alist     . ((substatement-open after)
				   (brace-list-open)))
    (c-hanging-colons-alist     . ((member-init-intro before)
				   (inher-intro) 
				   (case-label after)
				   (label after) 
				   (access-label after)))
    (c-cleanup-list . (scope-operator
		       empty-defun-braces defun-close-semi))
    (c-echo-syntactic-information-p . t) )
  "Seb's C Programming Style")

(defun st::c-mode-common-hook ()
  ;; add my personal style and set it for the current buffer
  (c-add-style "PERSONEL" st::c-style t)
  ;; offset customizations not in my-c-style
  (c-set-offset 'case-label 0)
  (setq  c-tab-always-indent t
         tab-width 8)
; (c-set-offset 'brace-list-entry 0)
  ;; we like auto-newline and hungry-delete
  (c-toggle-auto-hungry-state 1)
  ;; keybindings for all supported languages.  We can put these in
  ;; c-mode-base-map because c-mode-map, c++-mode-map, objc-mode-map,
  ;; java-mode-map, and idl-mode-map inherit from it.
  (define-key c-mode-base-map "\C-m" 'newline-and-indent)
  )

(defconst st::c-protection-key
  "\\<\\(signals\\|\\(\\(public\\|protected\\|private\\)\\([ \t]+slots\\)?\\)\\)\\>")

(defun st::c++-mode-hook ()
  (font-lock-mode)
  (c-set-offset 'member-init-intro '++)
  (c-set-offset 'access-label '/)
  (c-set-offset 'inline-open 0)
  (setq c-hanging-comment-ender-p nil)
  (setq c-access-key (concat st::c-protection-key "[ \t]*:"))
  )

(add-hook 'c-mode-common-hook 'st::c-mode-common-hook)
;(add-hook 'c-mode-common-hook
;     	  '(lambda () (c-toggle-auto-hungry-state 1)))
(defun my-activate-ctypes () (require 'ctypes))
(add-hook 'c-mode-hook 'my-activate-ctypes)
(add-hook 'c++-mode-hook 'my-activate-ctypes)
(add-hook 'c++-mode-hook 'st::c++-mode-hook)



;; Tell cc-mode not to check for old-style (K&R) function declarations.
;; This speeds up indenting a lot.
(setq c-recognize-knr-p nil)


;;====

(message "Configuration du mode SQL")
;; le mode SQL est un peu lourd. On ne le charge que sur demande.
(defun st::register-sql-mode ()
  (setq sql-lisp-dir (expand-file-name "~/.elisp/sql-mode/"))
  (setq load-path (append load-path (list sql-lisp-dir)))
  (require 'sql-mode)
  (sql-initialize)
  (autoload 'sql-mode "sql-mode" "SQL Editing Mode" t)
  (setq auto-mode-alist
	(append '(("\\.sql$" . sql-mode)
		  ("\\.tbl$" . sql-mode)
		  ("\\.sp$"  . sql-mode))
		auto-mode-alist))
  )

;;====

(message "Configuration du mode ADA")
(setq-default
 ada-indent 4
 ada-case-keyword 'upcase-word
 ada-case-identifier 'downcase-word
 )

;;=====


;  Si le fichier du module existe (paquet pm3-extra sur une potato,
;  par exemple), on introduit sa config.
(let ((st::modula3-mode-file
       "/usr/share/emacs/site-lisp/pm3/modula3.el"))
  (if (file-exists-p st::modula3-mode-file)
      (progn
        (setq-default m3::electric-end 'all)
        (autoload 'modula-3-mode
          st::modula3-mode-file  nil t)
        (setq auto-mode-alist
              (cons '("\\.m3\\'" . modula-3-mode) auto-mode-alist)))))


;;; prog-conf.el ends here