view .emacs @ 74:fd369b708cbe

Better way of altering load-path, add support for local-to-machine emacs configs.
author Augie Fackler <durin42@gmail.com>
date Thu, 09 Apr 2009 13:27:19 -0500
parents 5c25d3dc29ab
children 2b2a667092fd
line wrap: on
line source

;; Augie Fackler's .emacs file
; Places I've stolen from:
;  Karl Fogel: http://svn.red-bean.com/repos/kfogel/trunk
;  Dave Anderson:

(add-to-list 'load-path (expand-file-name "~/.elisp"))
; Better buffer switching and file loading (load first in case we need the
; * Messages * buffer)
(require 'ido)
(setq ido-enable-flex-matching t)
(ido-mode t)

(require 'python-mode)
(require 'ipython)

(require 'show-wspace)

(require 'mercurial)

; improved diff mode
(require 'diff-mode-)

(require 'midnight)

; Clojure
(require 'clojure-auto)
(add-to-list 'auto-mode-alist '("\\.clj$" . clojure-mode))

(require 'textmate)
(textmate-mode)
(textmate-also-ignore "eggs|cover|daisy|.*.pyc")

; yaml
(require 'yaml-mode)
(add-to-list 'auto-mode-alist '("\\.yml$" . yaml-mode))


; Start the server so that emacsclient will work
; TODO: is there a way to *not* start a server if one was already running?
(server-start)

; All lines should end in a newline
(setq require-final-newline t)

; disable tabs
(setq tab-width 4)
(setq-default indent-tabs-mode nil)

; use tab for indent or complete
(defun indent-or-expand (arg)
  "Either indent according to mode, or expand the word preceding
point."
  (interactive "*P")
  (if (and
       (or (bobp) (= ?w (char-syntax (char-before))))
       (or (eobp) (not (= ?w (char-syntax (char-after))))))
      (dabbrev-expand arg)
    (indent-according-to-mode)))

(defun af-tab-fix ()
  (local-set-key [tab] 'indent-or-expand))

;; add hooks for modes you want to use the tab completion for:
(set-variable 'af-cleanup-whitespace t)
(add-hook 'c-mode-hook          'af-tab-fix)
(add-hook 'sh-mode-hook         'af-tab-fix)
(add-hook 'emacs-lisp-mode-hook 'af-tab-fix)
(add-hook 'clojure-mode-hook    'af-tab-fix)
(add-hook 'rst-mode-hook '(lambda ()
                            (make-variable-buffer-local 'af-cleanup-whitespace)
                            (set-variable 'af-cleanup-whitespace nil)))

(autoload 'js2-mode "js2" nil t)
(add-to-list 'auto-mode-alist '("\\.js$" . js2-mode))
(add-hook 'js2-mode-hook 'af-tab-fix)

(defun af-python-mode-hook ()
  ; highlight tabs in Python
  (make-variable-buffer-local 'font-lock-mode-hook)
  (add-hook 'font-lock-mode-hook 'show-ws-highlight-tabs)
  (make-variable-buffer-local 'python-indent)
  (if (and buffer-file-name (string-match "melange" buffer-file-name))
     (set-variable 'python-indent 2))
  (af-tab-fix)
)
(add-hook 'python-mode-hook 'af-python-mode-hook)


; text-mode tries to use M-s for something other than my save shortcut.
; That's evil. Stop it from doing that.
(add-hook 'text-mode-hook '(lambda ()
                             (define-key text-mode-map "\M-s"
                               'save-buffer)))

; Cleanup whitespace before saves.
(add-hook 'before-save-hook '(lambda ()
                               (if af-cleanup-whitespace (whitespace-cleanup))))

; Disable that startup screen
(setq inhibit-startup-message t)

; Basically everything I do is in version control, stop saving backup files
(setq make-backup-files nil)

; Set some pretty colors that are gentler on my eyes
(setq default-frame-alist
      '((width . 80)
        (cursor-color . "white")
        (cursor-type . box)
        (foreground-color . "white")
        (background-color . "black")
        )
      )
; always highlight matching paren
(show-paren-mode 1)

;; Automatically revert unedited files that change on the underlying
;; system.
(global-auto-revert-mode)

;; Key Bindings
; M-backspace kills the current buffer
(global-set-key [(meta backspace)] 'kill-this-buffer)
; Save early and often, with only one keystroke
(global-set-key [(meta s)] 'save-buffer)
; Typing tab is for lesser editors, make hitting return do that
(global-set-key "\C-m" 'newline-and-indent)
; M-l makes more sense to me for jumping to a line
(global-set-key "\M-l" 'goto-line)
; Sometimes C-h is what Backspace sends in a terminal, and I never use C-h
(global-set-key "\C-h" 'backward-delete-char-untabify)
; M-t is what I want for the textmate file finding
(global-set-key [(meta t)] 'textmate-goto-file)
(global-set-key [(meta z)] 'textmate-find-in-project-type)
(global-set-key [(meta m)] 'iconify-or-deiconify-frame)
(global-set-key [(control backspace)] 'kill-word)


(if (file-regular-p (expand-file-name (concat (getenv "HOME") "/.emacs-machine.el")))
    (load (expand-file-name "~/.emacs-machine.el")))