aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Mackenzie2018-10-19 17:44:31 +0000
committerAlan Mackenzie2018-10-19 17:44:31 +0000
commit7cfe2dc415d0a5768f9e6800836ff6887079dc30 (patch)
tree837db78e1b917e7b594a280097875857d172670b
parentd2a07b9a82a632e8baa179c667a98d275e5f6973 (diff)
downloademacs-7cfe2dc415d0a5768f9e6800836ff6887079dc30.tar.gz
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.
-rw-r--r--lisp/emacs-lisp/edebug.el20
-rw-r--r--src/keyboard.c5
2 files changed, 20 insertions, 5 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."
342(defconst edebug-trace-buffer "*edebug-trace*" 342(defconst edebug-trace-buffer "*edebug-trace*"
343 "Name of the buffer to put trace info in.") 343 "Name of the buffer to put trace info in.")
344 344
345(defun edebug-focus-frame (frame)
346 "Switch focus to frame FRAME, if we're in a GUI.
347Otherwise, do nothing."
348 (unless (memq (framep frame) '(nil t pc))
349 (x-focus-frame frame)))
350
345(defun edebug-pop-to-buffer (buffer &optional window) 351(defun edebug-pop-to-buffer (buffer &optional window)
346 ;; Like pop-to-buffer, but select window where BUFFER was last shown. 352 ;; Like pop-to-buffer, but select window where BUFFER was last shown.
347 ;; Select WINDOW if it is provided and still exists. Otherwise, 353 ;; 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
2328 (debugger edebug-debugger) ; only while edebug is active. 2334 (debugger edebug-debugger) ; only while edebug is active.
2329 (edebug-outside-debug-on-error debug-on-error) 2335 (edebug-outside-debug-on-error debug-on-error)
2330 (edebug-outside-debug-on-quit debug-on-quit) 2336 (edebug-outside-debug-on-quit debug-on-quit)
2337 (outside-frame (selected-frame))
2331 ;; Binding these may not be the right thing to do. 2338 ;; Binding these may not be the right thing to do.
2332 ;; We want to allow the global values to be changed. 2339 ;; We want to allow the global values to be changed.
2333 (debug-on-error (or debug-on-error edebug-on-error)) 2340 (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
2338 edebug-initial-mode 2345 edebug-initial-mode
2339 edebug-execution-mode) 2346 edebug-execution-mode)
2340 edebug-next-execution-mode nil) 2347 edebug-next-execution-mode nil)
2341 (edebug-default-enter function args body)))) 2348 (edebug-default-enter function args body))
2349 (if (frame-live-p outside-frame)
2350 (edebug-focus-frame outside-frame))))
2342 2351
2343 (let* ((edebug-data (get function 'edebug)) 2352 (let* ((edebug-data (get function 'edebug))
2344 (edebug-def-mark (car edebug-data)) ; mark at def start 2353 (edebug-def-mark (car edebug-data)) ; mark at def start
@@ -2647,6 +2656,7 @@ See `edebug-behavior-alist' for implementations.")
2647 (edebug-eval-display eval-result-list) 2656 (edebug-eval-display eval-result-list)
2648 ;; The evaluation list better not have deleted edebug-window-data. 2657 ;; The evaluation list better not have deleted edebug-window-data.
2649 (select-window (car edebug-window-data)) 2658 (select-window (car edebug-window-data))
2659 (edebug-focus-frame (window-frame (selected-window)))
2650 (set-buffer edebug-buffer) 2660 (set-buffer edebug-buffer)
2651 2661
2652 (setq edebug-buffer-outside-point (point)) 2662 (setq edebug-buffer-outside-point (point))
@@ -3017,6 +3027,7 @@ Otherwise, toggle for all windows."
3017 ;;(if edebug-inside-windows 3027 ;;(if edebug-inside-windows
3018 ;; (edebug-set-windows edebug-inside-windows)) 3028 ;; (edebug-set-windows edebug-inside-windows))
3019 (edebug-pop-to-buffer edebug-buffer) 3029 (edebug-pop-to-buffer edebug-buffer)
3030 (edebug-focus-frame (window-frame (selected-window)))
3020 (goto-char edebug-point)) 3031 (goto-char edebug-point))
3021 3032
3022(defun edebug-view-outside () 3033(defun edebug-view-outside ()
@@ -3044,13 +3055,15 @@ before returning. The default is one second."
3044 ;; If the buffer's currently displayed, avoid set-window-configuration. 3055 ;; If the buffer's currently displayed, avoid set-window-configuration.
3045 (save-window-excursion 3056 (save-window-excursion
3046 (edebug-pop-to-buffer edebug-outside-buffer) 3057 (edebug-pop-to-buffer edebug-outside-buffer)
3058 (edebug-focus-frame (window-frame (selected-window)))
3047 (goto-char edebug-outside-point) 3059 (goto-char edebug-outside-point)
3048 (message "Current buffer: %s Point: %s Mark: %s" 3060 (message "Current buffer: %s Point: %s Mark: %s"
3049 (current-buffer) (point) 3061 (current-buffer) (point)
3050 (if (marker-buffer (edebug-mark-marker)) 3062 (if (marker-buffer (edebug-mark-marker))
3051 (marker-position (edebug-mark-marker)) "<not set>")) 3063 (marker-position (edebug-mark-marker)) "<not set>"))
3052 (sit-for arg) 3064 (sit-for arg)
3053 (edebug-pop-to-buffer edebug-buffer (car edebug-window-data))))) 3065 (edebug-pop-to-buffer edebug-buffer (car edebug-window-data))
3066 (edebug-focus-frame (window-frame (selected-window))))))
3054 3067
3055 3068
3056;; Joe Wells, here is a start at your idea of adding a buffer to the internal 3069;; 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'."
3872 "Switch to the evaluation list buffer \"*edebug*\"." 3885 "Switch to the evaluation list buffer \"*edebug*\"."
3873 (interactive) 3886 (interactive)
3874 (edebug-eval-redisplay) 3887 (edebug-eval-redisplay)
3875 (edebug-pop-to-buffer edebug-eval-buffer)) 3888 (edebug-pop-to-buffer edebug-eval-buffer)
3889 (edebug-focus-frame (window-frame (selected-window))))
3876 3890
3877 3891
3878(defun edebug-update-eval-list () 3892(defun edebug-update-eval-list ()
diff --git a/src/keyboard.c b/src/keyboard.c
index 8ea15d3c890..be727a6549a 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -3324,7 +3324,7 @@ readable_events (int flags)
3324 if (flags & READABLE_EVENTS_DO_TIMERS_NOW) 3324 if (flags & READABLE_EVENTS_DO_TIMERS_NOW)
3325 timer_check (); 3325 timer_check ();
3326 3326
3327 /* If the buffer contains only FOCUS_IN_EVENT events, and 3327 /* If the buffer contains only FOCUS_IN/OUT_EVENT events, and
3328 READABLE_EVENTS_FILTER_EVENTS is set, report it as empty. */ 3328 READABLE_EVENTS_FILTER_EVENTS is set, report it as empty. */
3329 if (kbd_fetch_ptr != kbd_store_ptr) 3329 if (kbd_fetch_ptr != kbd_store_ptr)
3330 { 3330 {
@@ -3344,7 +3344,8 @@ readable_events (int flags)
3344#ifdef USE_TOOLKIT_SCROLL_BARS 3344#ifdef USE_TOOLKIT_SCROLL_BARS
3345 (flags & READABLE_EVENTS_FILTER_EVENTS) && 3345 (flags & READABLE_EVENTS_FILTER_EVENTS) &&
3346#endif 3346#endif
3347 event->kind == FOCUS_IN_EVENT) 3347 (event->kind == FOCUS_IN_EVENT
3348 || event->kind == FOCUS_OUT_EVENT))
3348#ifdef USE_TOOLKIT_SCROLL_BARS 3349#ifdef USE_TOOLKIT_SCROLL_BARS
3349 && !((flags & READABLE_EVENTS_IGNORE_SQUEEZABLES) 3350 && !((flags & READABLE_EVENTS_IGNORE_SQUEEZABLES)
3350 && (event->kind == SCROLL_BAR_CLICK_EVENT 3351 && (event->kind == SCROLL_BAR_CLICK_EVENT