view .elisp/settings/40.modes.el @ 336:ea73ef5dc38c

emacs: avoid weird package.el breakage with newish packages I've been toting around this package.el from 2009 or so, and something in the package format seems to have changed that broke me. Thanks to some related diagnostics by Lucas, I've grabbed the last package.el that worked with emacs 23 and stashed it here. This seems to work, modulo some things (notably js2-mode and smex) now seem to require emacs 24 if you install them using package.el, so this will end up being brittle on my last couple of emacs23 machines.
author Augie Fackler <raf@durin42.com>
date Thu, 29 May 2014 14:30:42 -0400
parents 6a773ec78813
children 0a593d2c0595
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)

;; Tempfiles from mutt should be edited in mail-mode.
(add-to-list 'auto-mode-alist '("/mutt" . mail-mode))