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