[Python-mode] making stack traces clickable in gud.el pdb output.
m h
sesquile at gmail.com
Sat Jan 23 07:57:18 CET 2010
Hey all-
I got my original wish, compile-mode error navigation through the
python stack trace of a unittest failure.
Thanks to Gerard B for the hint.
I'm doing this from pdbtrack (shell) instead of pure pdb, but it
should work in both I believe. You need to enable
compilation-shell-minor-mode. And have the following code in your
.emacs:
;; if compilation-shell-minor-mode is on, then these regexes
;; will make errors linkable
(defun matt-add-global-compilation-errors (list)
(dolist (x list)
(add-to-list 'compilation-error-regexp-alist (car x))
(setq compilation-error-regexp-alist-alist
(cons x
(assq-delete-all (car x)
compilation-error-regexp-alist-alist)))))
(matt-add-global-compilation-errors
`(
(matt-python ,(concat "^ *File \\(\"?\\)\\([^,\" \n <>]+\\)\\1"
", lines? \\([0-9]+\\)-?\\([0-9]+\\)?")
2 (3 . 4) nil 2 2)
(matt-pdb-stack ,(concat "^>?[[:space:]]*\\(\\([-_./a-zA-Z0-9 ]+\\)"
"(\\([0-9]+\\))\\)"
"[_a-zA-Z0-9]+()[[:space:]]*->")
2 3 nil 0 1)
(matt-python-unittest-err "^ File \"\\([-_./a-zA-Z0-9 ]+\\)\",
line \\([0-9]+\\).*" 1 2)
)
)
(defun matt-set-local-compilation-errors (errors)
"Set the buffer local compilation errors.
Ensures than any symbols given are defined in
compilation-error-regexp-alist-alist."
(dolist (e errors)
(when (symbolp e)
(unless (assoc e compilation-error-regexp-alist-alist)
(error (concat "Error %s is not listed in "
"compilation-error-regexp-alist-alist")
e))))
(set (make-local-variable 'compilation-error-regexp-alist)
errors))
Then you can use standard compile mode navigation to zip through the
error stack trace.
cheers,
-matt
More information about the Python-mode
mailing list