view .elisp/settings/40.modes.el @ 307:e37b00236907

zshrc: work around my shell function that turns on utf8 in screen The zsh built in which was getting confused by the function, and always claimed screen was installed. I'm finally running into machines with tmux but not screen, so I noticed.
author Augie Fackler <raf@durin42.com>
date Sat, 19 Jan 2013 19:29:58 -0600
parents a9e3c2ca6fa5
children 6a773ec78813
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 '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)

(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 af-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))))

(defun af-java-mode-hook ()
  (c-set-offset 'topmost-intro-cont 'af-annotation-fix)
  (local-set-key (kbd "RET") 'comment-indent-new-line)
  (af-tab-fix))
(add-hook 'java-mode-hook 'af-java-mode-hook)

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