Configuring Emacs for NumPy/SciPy editing

Note

Downloaded lisp (.el) files should be placed in a directory on the Emacs path. I typically use ~/elisp and add it to the search path using

(add-to-list 'load-path "~/elisp")

Essential to producing well-formed code

Never use tabs

(setq-default indent-tabs-mode nil)

Clean up tabs and trailing whitespace

M-x untabify

and

M-x whitespace-cleanup

Highlight unnecessary whitespace

Download show-wspace.el

; Show whitespace
(require 'show-wspace)
(add-hook 'python-mode-hook 'highlight-tabs)
(add-hook 'font-lock-mode-hook 'highlight-trailing-whitespace)

Wrap lines longer than 79 characters

(setq fill-column 79)

The fill-paragraph command (M-q or ESC-q) also comes in handy.

Other useful tools

Highlight column 79

Prevent lines from exceeding 79 characters in length.

Download column-marker.el

(require 'column-marker)
(add-hook 'font-lock-mode-hook (lambda () (interactive) (column-marker-1 80)))

Show a ruler with the current column position

(require 'ruler-mode)
(add-hook 'font-lock-mode-hook 'ruler-mode)

Enable restructured text (ReST) editing

(require 'rst)
(add-hook 'text-mode-hook 'rst-text-mode-bindings)

Fix outline-mode to work with Python

(add-hook 'python-mode-hook 'my-python-hook)
(defun py-outline-level ()
  "This is so that `current-column` DTRT in otherwise-hidden text"
  ;; from ada-mode.el
  (let (buffer-invisibility-spec)
    (save-excursion
      (skip-chars-forward "\t ")
      (current-column))))
; this fragment originally came from the web somewhere, but the outline-regexp
; was horribly broken and is broken in all instances of this code floating
; around.  Finally fixed by Charl P. Botha
; <<a href="http://cpbotha.net/">http://cpbotha.net/</a>>
(defun my-python-hook ()
  (setq outline-regexp "[^ \t\n]\\|[ \t]*\\(def[ \t]+\\|class[ \t]+\\)")
  ; enable our level computation
  (setq outline-level 'py-outline-level)
  ; do not use their \C-c@ prefix, too hard to type. Note this overides
  ;some python mode bindings
  ;(setq outline-minor-mode-prefix "\C-c")
  ; turn on outline mode
  (outline-minor-mode t)
  ; initially hide all but the headers
  ; (hide-body)
  (show-paren-mode 1)
)