;;---------------------------------------------------------------------------
;;
;; Emacs-Options for Videolan CodingStyle programming
;;
;; paste the following lines in your .emacs file
;;
;;---------------------------------------------------------------------------

;; associate c-mode with file extension '.c' or '.h' in vlc trunk tree
(setq auto-mode-alist
      (append
       '((".*vlc-trunk.*/.*\\.[ch]$" . c-mode)
	  ) auto-mode-alist))

;; define videolan c style settings
(defconst videolan-c-style
  '((c-tab-always-indent           . t)
    (c-comment-only-line-offset    . 4)
    (c-hanging-braces-alist        . ((substatement-open before 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-offsets-alist     . ((string . -1000)
			    (c . c-lineup-C-comments)
			    (defun-open . 0)
			    (defun-close . 0)
			    (defun-block-intro . +)
			    (class-open . 0)
			    (class-close . 0)
			    (inline-open . 0)
			    (inline-close . 0)
			    (topmost-intro . 0)
			    (topmost-intro-cont . 0)
			    (member-init-intro . +)
			    (member-init-cont . 0)
			    (inher-intro . +)
			    (inher-cont . 0)
			    (block-open . 0)
			    (block-close . 0)
			    (brace-list-open . +)
			    (brace-list-close . 0)
			    (brace-list-intro . +)
			    (brace-list-entry . 0)
			    (statement . 0)
			    (statement-cont . +)
			    (statement-block-intro . +)
			    (statement-case-intro . +)
			    (statement-case-open . +)
			    (substatement . +)
			    (substatement-open . +)
			    (case-label . +)
			    (access-label . -)
			    (label . -1000)
			    (do-while-closure . 0)
			    (else-clause . 0)
			    (comment-intro . 0)
			    (arglist-intro . +)
			    (arglist-cont . 0)
			    (arglist-cont-nonempty . c-lineup-arglist)
			    (arglist-close . 0)
			    (stream-op . +)
			    (inclass . +)
			    (cpp-macro . -1000)
			    (friend . 0)
			    (objc-method-intro . 0)
			    (objc-method-args-cont . 0)
			    (objc-method-call-cont . 0)))

    (c-basic-offset . 4)
    (c-echo-syntactic-information-p . t)
    )
  "Videolan C Programming Style")

;; Customizations for c-mode
(defun videolan-mode-hook ()
  ;; add the Videolan c style and set it for the current buffer
  (local-set-key "\r" 'newline-and-indent)
  (c-add-style "vlc" videolan-c-style t)
  (c-set-offset 'member-init-intro '++)

  ;; other customizations
  (setq tab-width 4
	;; this will make sure spaces are used instead of tabs
        indent-tabs-mode nil)
  ;; we like auto-newline and hungry-delete
  (c-toggle-auto-newline-state 1)
  (custom-set-variables
   '(c-hanging-semi&comma-criteria nil))
  )

(add-hook 'c-mode-hook 'videolan-mode-hook)
