{{{ #!rst ========================================= Configuring Emacs for NumPy/SciPy editing ========================================= .. contents :: .. 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 ; <http://cpbotha.net/> (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) ) }}}