view .elisp/settings/40.modes.el @ 238:3d5c595c229e

emacs: slightly better window-width resizing behavior
author Lucas Bergman <slb@google.com>
date Thu, 24 Feb 2011 09:21:57 -0600
parents 7ca719e40c58
children 31f86a5707ee
line wrap: on
line source

; 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)

;; disable whitespace cleanup in modes sensitive to whitespace
(defun af-no-clean-whitespace ()
  (interactive)
  (make-variable-buffer-local 'af-cleanup-whitespace)
  (set-variable 'af-cleanup-whitespace nil))
(add-hook 'rst-mode-hook 'af-no-clean-whitespace)
(add-hook 'makefile-mode-hook 'af-no-clean-whitespace)


(defun af-go-hook ()
  ;; enable tabs
  (setq tab-width 2)
  (setq-default indent-tabs-mode t))


(let ((go-emacs (concat (getenv "GOROOT") "/misc/emacs")))
  (message (concat go-emacs "/go-mode.el"))
  (if (file-exists-p (concat go-emacs "/go-mode.el"))
      (progn (add-to-list 'load-path go-emacs)
             (require 'go-mode-load)
             (add-hook 'go-mode-hook 'af-go-hook))
    (message "Go appears to not be installed, skipping go-mode.")))

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

(add-hook 'ruby-mode-hook '(lambda ()
                            (af-tab-fix)
                            (local-set-key (kbd "RET")
                                           'reindent-then-newline-and-indent)
                            (local-set-key (kbd "C-M-f")
                                           'textmate-find-in-project-type)))
(add-to-list 'auto-mode-alist '("\\.rake$" . ruby-mode))

(require 'django-html-mode)
;; I think I probably just always want it in django mode for now
(add-to-list 'auto-mode-alist '("\\.html$'" . django-html-mode))
(add-to-list 'auto-mode-alist '("\\.html.erb$'" . django-html-mode))
(add-to-list 'auto-mode-alist '("\\.rhtml$'" . django-html-mode))
(add-hook 'django-html-mode-hook '(lambda ()
                                    (local-set-key (kbd "RET")
                                                   'reindent-then-newline-and-indent)))
(defun af-python-mode-hook ()
  ; highlight tabs in Python
  (make-variable-buffer-local 'font-lock-mode-hook)
  (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)
  (easy-menu-add-item nil '("Python") ["Run All Tests" nosetests-all t]
                      "Comment Out Region")
  (easy-menu-add-item nil '("Python") ["Run All Tests with --failed" nosetests-failed t]
                      "Comment Out Region")
  (easy-menu-add-item nil '("Python") ["Run Module Tests" nosetests-module t]
                      "Comment Out Region")
  (easy-menu-add-item nil '("Python") ["Run One Test" nosetests-one t]
                      "Comment Out Region")
  (easy-menu-add-item nil '("Python") ["Debug One Test" nosetests-pdb-one t]
                      "Comment Out Region")
  (easy-menu-add-item nil '("Python") ["-" nil t] "Comment Out Region")
  (local-set-key "\M-n" 'nosetests-module)
  (local-set-key "\M-\C-n" 'nosetests-one)
  (local-set-key (kbd "RET") 'comment-indent-new-line)
)
(add-hook 'python-mode-hook 'af-python-mode-hook)

(add-hook 'compilation-mode-hook '(lambda () (local-set-key "g" 'recompile)))

(column-number-mode)


(defun annotation-fix (unused)
  "fix indentation after an annotation"
  (save-excursion
    (beginning-of-line)
    (forward-word -1)
    (if (eq (char-before) ?@) ;; There's an annotation there
        0
      (+ c-basic-offset c-basic-offset))))

(add-hook 'java-mode-hook
          (lambda ()
            (c-set-offset 'topmost-intro-cont
                          annotation-fix)))

;; mq diff-mode support
(add-to-list 'auto-mode-alist '("\\.hg/patches/" . diff-mode))
(defun mq-patch-set-default-directory ()
  (when (string= ".hg" (nth 2 (reverse (split-string default-directory "/"))))
    (setq default-directory (expand-file-name (concat default-directory "../../")))))
(add-hook 'diff-mode-hook 'mq-patch-set-default-directory)