diff options
| author | Lars Ingebrigtsen | 2019-10-20 12:07:42 +0200 |
|---|---|---|
| committer | Lars Ingebrigtsen | 2019-10-20 12:17:28 +0200 |
| commit | e8b3a15cb6ff187ce08afcb43bd9a0b7907268ca (patch) | |
| tree | d7576b8bf8de8b33fe1802e3e8e6fa694c23b05b | |
| parent | 41ba8231ef072571e1a6feabc15d113e5cf57556 (diff) | |
| download | emacs-e8b3a15cb6ff187ce08afcb43bd9a0b7907268ca.tar.gz emacs-e8b3a15cb6ff187ce08afcb43bd9a0b7907268ca.zip | |
Mark breakpoints in edebug with highlights
* lisp/emacs-lisp/edebug.el (edebug--overlay-breakpoints)
(edebug--overlay-breakpoints-remove): New functions (bug#23468).
(edebug-modify-breakpoint): Use them to highlight breakpoints.
(edebug--display-1): Restore breakpoint highlights.
(edebug--recursive-edit): Remove highlights on exit.
| -rw-r--r-- | lisp/emacs-lisp/edebug.el | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el index e0a4eb3db5a..a19ac3bc602 100644 --- a/lisp/emacs-lisp/edebug.el +++ b/lisp/emacs-lisp/edebug.el | |||
| @@ -2723,6 +2723,7 @@ See `edebug-behavior-alist' for implementations.") | |||
| 2723 | (edebug-stop)) | 2723 | (edebug-stop)) |
| 2724 | 2724 | ||
| 2725 | (edebug-overlay-arrow) | 2725 | (edebug-overlay-arrow) |
| 2726 | (edebug--overlay-breakpoints edebug-function) | ||
| 2726 | 2727 | ||
| 2727 | (unwind-protect | 2728 | (unwind-protect |
| 2728 | (if (or edebug-stop | 2729 | (if (or edebug-stop |
| @@ -2905,6 +2906,7 @@ See `edebug-behavior-alist' for implementations.") | |||
| 2905 | (setq signal-hook-function #'edebug-signal) | 2906 | (setq signal-hook-function #'edebug-signal) |
| 2906 | (if edebug-backtrace-buffer | 2907 | (if edebug-backtrace-buffer |
| 2907 | (kill-buffer edebug-backtrace-buffer)) | 2908 | (kill-buffer edebug-backtrace-buffer)) |
| 2909 | (edebug--overlay-breakpoints-remove (point-min) (point-max)) | ||
| 2908 | 2910 | ||
| 2909 | ;; Remember selected-window after recursive-edit. | 2911 | ;; Remember selected-window after recursive-edit. |
| 2910 | ;; (setq edebug-inside-window (selected-window)) | 2912 | ;; (setq edebug-inside-window (selected-window)) |
| @@ -3186,7 +3188,27 @@ the breakpoint." | |||
| 3186 | 3188 | ||
| 3187 | (setcar (cdr edebug-data) edebug-breakpoints) | 3189 | (setcar (cdr edebug-data) edebug-breakpoints) |
| 3188 | (goto-char (+ edebug-def-mark (aref offset-vector index))) | 3190 | (goto-char (+ edebug-def-mark (aref offset-vector index))) |
| 3189 | )))) | 3191 | (edebug--overlay-breakpoints edebug-def-name))))) |
| 3192 | |||
| 3193 | (defun edebug--overlay-breakpoints (function) | ||
| 3194 | (let* ((data (get function 'edebug)) | ||
| 3195 | (start (nth 0 data)) | ||
| 3196 | (breakpoints (nth 1 data)) | ||
| 3197 | (offsets (nth 2 data))) | ||
| 3198 | ;; First remove all old breakpoint overlays. | ||
| 3199 | (edebug--overlay-breakpoints-remove | ||
| 3200 | start (+ start (aref offsets (1- (length offsets))))) | ||
| 3201 | ;; Then make overlays for the breakpoints. | ||
| 3202 | (dolist (breakpoint breakpoints) | ||
| 3203 | (let* ((pos (+ start (aref offsets (car breakpoint)))) | ||
| 3204 | (overlay (make-overlay pos (1+ pos)))) | ||
| 3205 | (overlay-put overlay 'edebug t) | ||
| 3206 | (overlay-put overlay 'face 'highlight))))) | ||
| 3207 | |||
| 3208 | (defun edebug--overlay-breakpoints-remove (start end) | ||
| 3209 | (dolist (overlay (overlays-in start end)) | ||
| 3210 | (when (overlay-get overlay 'edebug) | ||
| 3211 | (delete-overlay overlay)))) | ||
| 3190 | 3212 | ||
| 3191 | (defun edebug-set-breakpoint (arg) | 3213 | (defun edebug-set-breakpoint (arg) |
| 3192 | "Set the breakpoint of nearest sexp. | 3214 | "Set the breakpoint of nearest sexp. |