;; -*- emacs-lisp -*-
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; $Id: globals.el,v 1.11 2006/03/06 12:07:06 ole Exp $
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Emacs-Internals and Essentials
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; version 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(or (boundp 'running-xemacs)
    (defvar running-xemacs (string-match "XEmacs\\|Lucid" emacs-version)))

(or (fboundp 'emacs-version>=)
    (defun emacs-version>= (major &optional minor patch)
      "Return true if the Emacs version is >= to the given MAJOR, MINOR,
   and PATCH numbers.
The MAJOR version number argument is required, but the other arguments
argument are optional. Only the Non-nil arguments are used in the test."
      (let ((emacs-patch (or emacs-patch-level emacs-beta-version -1)))
        (cond ((> emacs-major-version major))
              ((< emacs-major-version major) nil)
              ((null minor))
              ((> emacs-minor-version minor))
              ((< emacs-minor-version minor) nil)
              ((null patch))
              ((>= emacs-patch patch))))))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; global variables
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(setq gc-cons-threshold 4000000
      garbage-collection-messages t
      max-lisp-eval-depth 4096
      enable-local-variables t
      auto-save-default nil
      make-backup-files nil
      truncate-partial-width-windows t
      truncate-lines t
      inhibit-startup-message t
      default-major-mode 'indented-text-mode
      visible-bell nil
      display-time-24hr-format t
      dired-dwim-target t)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Emacs appearance and display settings
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(setq initial-frame-alist '((top . 1) (left . 100) (width . 120) (height . 60)))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; global modes
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(dolist (item '((global-font-lock-mode 1)
                (scroll-bar-mode -1)
                (tool-bar-mode -1)
                (icomplete-mode 1)
                (ido-mode 1)
                (column-number-mode 1)
                (line-number-mode 1)
                (blink-cursor-mode -1)
                (auto-compression-mode 1)
                (display-time)
                (auto-insert-mode 1)
                (global-auto-revert-mode 1)
                (auto-image-file-mode 1)
                (cua-selection-mode 1)))
  (when (fboundp (car item))
    (apply (car item) (cdr item))))

;; Makes things a little bit more consistent.
(fset 'yes-or-no-p 'y-or-n-p)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; user
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(setq user-mail-address "ole@sugarshark.com"
      user-full-name "Ole Arndt"
      mail-host-address "localhost")

(defun user-mail-address ()  "ole@sugarshark.com")

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; encoding
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(set-language-environment "UTF-8")
(prefer-coding-system 'utf-8-unix)

(setq file-coding-system-alist
      (append '(("\\.java\\'" utf-8 . utf-8)
                ("\\.xml\\'" utf-8 . utf-8)
                ("\\.java\\'" utf-8 . utf-8))
              file-coding-system-alist))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;_* Global jump keymap
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defvar goto-keymap (make-sparse-keymap "Goto: (c)ompilation, (e)rc, (g)nus, (j)ournal, (p)lan, (s)hell, (t)erminal, (w)3m, (?)")
  "Keymap used to switch to different applications")
(define-key mode-specific-map [?g] goto-keymap)
(define-key goto-keymap [??] 'describe-prefix-bindings)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;_* Global and buffer local toggles
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defvar toggle-keymap (make-sparse-keymap "Toggle: (c)ase-fold, debug (e)rror+(q)uit, (f)ill, trunc (l)ines, (o)ption, (r)ead-only, (t)ab-width, (?)")
  "Keymap for global and buffer local toggles")
(define-key mode-specific-map [?t] toggle-keymap)

(define-key toggle-keymap [?c] 'toggle-case-fold-search)
(define-key toggle-keymap [?e] 'toggle-debug-on-error)
(define-key toggle-keymap [?q] 'toggle-debug-on-quit)
(define-key toggle-keymap [?l] 'toggle-truncate-lines)
(define-key toggle-keymap [?r] 'toggle-read-only)
(define-key toggle-keymap [?f] 'toggle-text-mode-auto-fill)
(define-key toggle-keymap [?o] 'toggle-option)
(define-key toggle-keymap [?t] 'toggle-tab-width)
(define-key toggle-keymap [??] 'describe-prefix-bindings)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;_* Mode setup
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(dolist (spec '(("[A-Z]+$" . text-mode)
                ("\\.el$" . emacs-lisp-mode)
                ("\\.asd$" . lisp-mode)
                ("\\.cl$" . lisp-mode)
                ("\\.log$" . text-mode)
                ("\\.py$" . python-mode)
                ("\\.inputrc$" . sh-mode)
                ("\\.js$" . java-mode)
                ("\\.sql$" . sql-mode)
                ("ChangeLog$" . change-log-mode)))
    (add-to-list 'auto-mode-alist spec))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;_* Colors
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(require 'color-theme)
(load "color-theme-sugarshark")
(color-theme-sugarshark)