(py-jump-on-exception): Variable which if t, means that if an
exception occurs in a synchronous Python subprocess, the mode will
automatically jump to the innermost exception.
diff --git a/Misc/python-mode.el b/Misc/python-mode.el
index 045d9b0..3ea1f3b 100644
--- a/Misc/python-mode.el
+++ b/Misc/python-mode.el
@@ -238,6 +238,12 @@
:type 'boolean
:group 'python)
+(defcustom py-jump-on-exception t
+ "*Jump to innermost exception frame in *Python Output* buffer.
+When this variable is non-nil and ane exception occurs when running
+Python code synchronously in a subprocess, jump immediately to the
+source code of the innermost frame.")
+
(defcustom py-backspace-function 'backward-delete-char-untabify
"*Function called by `py-electric-backspace' when deleting backwards."
:type 'function
@@ -1043,15 +1049,21 @@
(set-buffer curbuf))))
(defun py-postprocess-output-buffer (buf)
- (save-excursion
- (set-buffer buf)
- (beginning-of-buffer)
- (while (re-search-forward py-traceback-line-re nil t)
- (let ((file (match-string 1))
- (line (string-to-int (match-string 2))))
- (py-highlight-line (py-point 'bol) (py-point 'eol) file line))
+ (let (line file bol)
+ (save-excursion
+ (set-buffer buf)
+ (beginning-of-buffer)
+ (while (re-search-forward py-traceback-line-re nil t)
+ (setq file (match-string 1)
+ line (string-to-int (match-string 2))
+ bol (py-point 'bol))
+ (py-highlight-line bol (py-point 'eol) file line))
+ (when (and py-jump-on-exception line)
+ (beep)
+ (py-jump-to-exception file line))
)))
+
;;; Subprocess commands