summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
diff options
context:
space:
mode:
authorAlan Mackenzie <acm@muc.de>2018-10-19 17:44:31 +0000
committerAlan Mackenzie <acm@muc.de>2018-10-19 17:44:31 +0000
commit7cfe2dc415d0a5768f9e6800836ff6887079dc30 (patch)
tree837db78e1b917e7b594a280097875857d172670b /lisp/emacs-lisp
parentd2a07b9a82a632e8baa179c667a98d275e5f6973 (diff)
downloademacs-7cfe2dc415d0a5768f9e6800836ff6887079dc30.tar.gz
emacs-7cfe2dc415d0a5768f9e6800836ff6887079dc30.tar.bz2
emacs-7cfe2dc415d0a5768f9e6800836ff6887079dc30.zip
In edebug in GUIs, move focus to the selected frame.
Thus when entering edebug, the focus will be moved to the frame with the source being debugged, and when its finished, the focus will move back. Commands edebug-visit-eval-list (`E') and edebug-bounce-point (`p') have been likewise amended. * src/keyboard.c (readable_events): Handle FOCUS_OUT_EVENT as an invisible event. This prevents input-pending-p returning t when one of these events arrives, and thus obviates an instant termination of sit-for when there's no "real" event waiting. * lisp/emacs-lisp/edebug.el (edebug-focus-frame): New function. (edebug-default-enter, edebug--display-1, edbug-where, edebug-bounce-point) (edebug-visit-eval-list): Call edebug-focus-frame to move focus into the window newly selected by edebug-pop-to-buffer.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r--lisp/emacs-lisp/edebug.el20
1 files changed, 17 insertions, 3 deletions
diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el
index fb567c9cce0..ce4ed687be4 100644
--- a/lisp/emacs-lisp/edebug.el
+++ b/lisp/emacs-lisp/edebug.el
@@ -342,6 +342,12 @@ Return the result of the last expression in BODY."
(defconst edebug-trace-buffer "*edebug-trace*"
"Name of the buffer to put trace info in.")
+(defun edebug-focus-frame (frame)
+ "Switch focus to frame FRAME, if we're in a GUI.
+Otherwise, do nothing."
+ (unless (memq (framep frame) '(nil t pc))
+ (x-focus-frame frame)))
+
(defun edebug-pop-to-buffer (buffer &optional window)
;; Like pop-to-buffer, but select window where BUFFER was last shown.
;; Select WINDOW if it is provided and still exists. Otherwise,
@@ -2328,6 +2334,7 @@ and run its entry function, and set up `edebug-before' and
(debugger edebug-debugger) ; only while edebug is active.
(edebug-outside-debug-on-error debug-on-error)
(edebug-outside-debug-on-quit debug-on-quit)
+ (outside-frame (selected-frame))
;; Binding these may not be the right thing to do.
;; We want to allow the global values to be changed.
(debug-on-error (or debug-on-error edebug-on-error))
@@ -2338,7 +2345,9 @@ and run its entry function, and set up `edebug-before' and
edebug-initial-mode
edebug-execution-mode)
edebug-next-execution-mode nil)
- (edebug-default-enter function args body))))
+ (edebug-default-enter function args body))
+ (if (frame-live-p outside-frame)
+ (edebug-focus-frame outside-frame))))
(let* ((edebug-data (get function 'edebug))
(edebug-def-mark (car edebug-data)) ; mark at def start
@@ -2647,6 +2656,7 @@ See `edebug-behavior-alist' for implementations.")
(edebug-eval-display eval-result-list)
;; The evaluation list better not have deleted edebug-window-data.
(select-window (car edebug-window-data))
+ (edebug-focus-frame (window-frame (selected-window)))
(set-buffer edebug-buffer)
(setq edebug-buffer-outside-point (point))
@@ -3017,6 +3027,7 @@ Otherwise, toggle for all windows."
;;(if edebug-inside-windows
;; (edebug-set-windows edebug-inside-windows))
(edebug-pop-to-buffer edebug-buffer)
+ (edebug-focus-frame (window-frame (selected-window)))
(goto-char edebug-point))
(defun edebug-view-outside ()
@@ -3044,13 +3055,15 @@ before returning. The default is one second."
;; If the buffer's currently displayed, avoid set-window-configuration.
(save-window-excursion
(edebug-pop-to-buffer edebug-outside-buffer)
+ (edebug-focus-frame (window-frame (selected-window)))
(goto-char edebug-outside-point)
(message "Current buffer: %s Point: %s Mark: %s"
(current-buffer) (point)
(if (marker-buffer (edebug-mark-marker))
(marker-position (edebug-mark-marker)) "<not set>"))
(sit-for arg)
- (edebug-pop-to-buffer edebug-buffer (car edebug-window-data)))))
+ (edebug-pop-to-buffer edebug-buffer (car edebug-window-data))
+ (edebug-focus-frame (window-frame (selected-window))))))
;; Joe Wells, here is a start at your idea of adding a buffer to the internal
@@ -3872,7 +3885,8 @@ May only be called from within `edebug--recursive-edit'."
"Switch to the evaluation list buffer \"*edebug*\"."
(interactive)
(edebug-eval-redisplay)
- (edebug-pop-to-buffer edebug-eval-buffer))
+ (edebug-pop-to-buffer edebug-eval-buffer)
+ (edebug-focus-frame (window-frame (selected-window))))
(defun edebug-update-eval-list ()