;;  David's wonderful .emacs file!
;;

;;
;;  Keep track of which version of emacs we are running
;;
(defvar running-xemacs (string-match "XEmacs\\|Lucid" emacs-version))

;;
;;  Auto-loaded files
;;

; mdw figure out why swapping these two lines below is strange
(set-background-color "Black") 
;(set-background-color "DarkBlack") 

(set-foreground-color "tan") 
;;(set-default-font "-adobe-courier-bold-r-normal--14-140-75-75-m-90-iso8859-1")
(set-default-font "-bitstream-terminal-bold-r-normal--18-140-100-100-c-110-iso8859-1")
;;(set-face-foreground 'modeline "black") 

(set-cursor-color "yellow") 

(autoload `kumac-mode "kumac-mode")
(autoload `xrdb-mode "xrdb-mode")

(setq auto-mode-alist
      (append '(("\\.car$"   . fortran-mode) ; cards files
                ("\\.inc$"   . fortran-mode)
                ("\\.kumac$" . kumac-mode)   ; KUIP macros
                ("\\.Xdefaults$"    . xrdb-mode)
                ("\\.Xenvironment$" . xrdb-mode)
                ("\\.Xresources$"   . xrdb-mode)
                ("*.\\.ad$"         . xrdb-mode)
               )
               auto-mode-alist))

;
; Turn on line numbers in whatever buffer we are in
;
(line-number-mode 1)

;
;  Make the default mode for an empty file be text mode rather than fundamental
;
(setq default-major-mode 'text-mode)

;
; This stuff controls version numbers: the previous 5 versions of the
; file are kept as file.~n~; the earlier versions are silently deleted.
;
;(setq version-control t)
;(setq kept-new-versions 4)
;(setq kept-old-versions 0)
;(setq delete-old-versions t)

;
; Always highlight the current selection
;
(setq-default transient-mark-mode t)

;
;  Modifications to fortran mode
;
(setq fortran-comment-indent-style nil)
(setq fortran-do-indent 2)
(setq fortran-if-indent 2)
(setq fortran-continuation-char "+")

;
;  Modifications to TeX mode
;
(setq-default tex-default-mode 'latex-mode)
(setq tex-dvi-command "xdvi")
(add-hook 'latex-mode-hook
  '(lambda ()
    (auto-fill-mode 1)
    (set-fill-column 76)
    (modify-syntax-entry ?\$ ".")
))
(add-hook 'tex-mode-hook
  '(lambda ()
    (auto-fill-mode 1)
    (set-fill-column 76)))
;
; Allow the downcase-region command
;
(put 'downcase-region 'disabled nil)
(put 'upcase-region 'disabled nil)

;
; Highlight matching parentheses (doesn't work in xemacs)
;
(cond ((not running-xemacs)
      (show-paren-mode 1)
))
;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;  Font-lock mode (colorization of text) customization
;;
;
; Invoked differently in emacs and xemacs
;
(cond ((not running-xemacs)
      (global-font-lock-mode t)
))

(cond (running-xemacs
       (require 'font-lock)
))

;
;  Set the colors
;
(set-face-foreground 'highlight "Gold")
;(set-face-background 'highlight "DarkSlateGray")
(set-face-background 'highlight "Black")
(set-face-foreground 'region    "Red")
(set-face-background 'region    "Yellow")

;(set-face-background 'default   "Black")         ; default bg
;(set-face-foreground 'default   "White")    ; default fg
;(set-face-background 'modeline "White")      ; Line at bottom of buffer
;(set-face-foreground 'modeline "blue")
;(set-face-font  'modeline "*bold-r-normal*140-100-100*")

(make-face 'info-node)
(make-face 'info-menu-5)
(make-face 'info-xref)
(make-face-bold 'info-node)
(make-face-bold 'info-menu-5)
(make-face-bold 'info-xref)
(set-face-foreground 'info-node   "Orange")
(set-face-foreground 'info-menu-5 "Orange")
(set-face-foreground 'info-xref   "Orange")

(make-face 'font-lock-comment-face)
(make-face 'font-lock-string-face)
(make-face 'font-lock-keyword-face)
(make-face 'font-lock-type-face)
(make-face 'font-lock-function-name-face)
(make-face 'font-lock-variable-name-face)
(make-face 'font-lock-reference-face)

(setq font-lock-comment-face       'font-lock-comment-face)
(setq font-lock-string-face        'font-lock-string-face)
(setq font-lock-keyword-face       'font-lock-keyword-face)
(setq font-lock-type-face          'font-lock-type-face)
(setq font-lock-function-name-face 'font-lock-function-name-face)
(setq font-lock-variable-name-face 'font-lock-variable-name-face)
(setq font-lock-reference-face     'font-lock-reference-face)

(set-face-foreground font-lock-comment-face       "DarkGreen")
(set-face-foreground font-lock-string-face        "Blue")
(set-face-foreground font-lock-keyword-face       "Red")
(set-face-foreground font-lock-type-face          "Goldenrod")
(set-face-foreground font-lock-function-name-face "LightBlue")
(set-face-foreground font-lock-variable-name-face "Magenta")
(set-face-foreground font-lock-reference-face     "Coral")

;
;  Modifications to C++ mode
;
(defun my-c-mode-common-hook ()
;  (c-toggle-auto-hungry-state 1) 
  (setq c-font-lock-keywords c-font-lock-keywords-2)
  (setq c++-font-lock-keywords c++-font-lock-keywords-2)
  (setq c-basic-offset 8)
  (c-set-offset 'substatement-open 0)
)

(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Match brackets by pressing %.
; (define-key global-map "%" 'vi-type-paren-match)
;
;; VI-ish paren matching
;; --
;; originally attributed to: michael@uni-paderborn.de
;; embellished by: jxh@cs.wustl.edu
;;                 Fixed it so that it doesn't move off of a closing brace
;;                 if no match is found.
;; --
;(defun vi-type-paren-match (arg)
;  "Go to the matching parenthesis if on parenthesis otherwise insert %."
;  (interactive "p")
;  (let ((oldpos (point)))
;    (cond
;     ((looking-at "[{([]")
;      (forward-sexp 1) (backward-char))
;     ((looking-at "[])}]")
;      (forward-char)
;      (condition-case nil
;          (progn
;            (backward-sexp 1)
;            (while (not (looking-at "[{([]")) (forward-char)))
;        (error (progn
;                 (backward-char)
;                 (error (message "Unbalanced parentheses"))))))
;     (t (self-insert-command (or arg 1))))))
;(global-set-key "%" 'vi-type-paren-match)

;;
;;  Modify the title of the frame to show the name of the machine and file
;;
(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))))

(setq frame-title-format
      '(multiple-frames
        ("" invocation-name "@" se::system-short-name " - " "%b")
        ("" invocation-name "@" se::system-short-name " - " "%b")))

;;
;;  Turn on EDT emulation
;;
;(cond ((not running-xemacs)
;       (edt-emulation-on)
;))

;; enable display of european character set (mdw)
;;(standard-display-european 1)

;; Enable wheelmouse support by default
(require 'mwheel)


(defun no-more-control-m ()
  "Strip those annoying Control M chars from files that have been
imported from MS-DOS."
  (interactive)
  (save-excursion
    (goto-char (point-min))
    (end-of-line)
    (delete-char -1)
    (while (= 0 (forward-line 1))
      (end-of-line)
      (delete-char -1))))