[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master 7cfe2dc: In edebug in GUIs, move focus to the selec
From: |
Alan Mackenzie |
Subject: |
[Emacs-diffs] master 7cfe2dc: In edebug in GUIs, move focus to the selected frame. |
Date: |
Fri, 19 Oct 2018 13:54:17 -0400 (EDT) |
branch: master
commit 7cfe2dc415d0a5768f9e6800836ff6887079dc30
Author: Alan Mackenzie <address@hidden>
Commit: Alan Mackenzie <address@hidden>
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.
---
lisp/emacs-lisp/edebug.el | 20 +++++++++++++++++---
src/keyboard.c | 5 +++--
2 files changed, 20 insertions(+), 5 deletions(-)
diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el
index fb567c9..ce4ed68 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 ()
diff --git a/src/keyboard.c b/src/keyboard.c
index 8ea15d3..be727a6 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -3324,7 +3324,7 @@ readable_events (int flags)
if (flags & READABLE_EVENTS_DO_TIMERS_NOW)
timer_check ();
- /* If the buffer contains only FOCUS_IN_EVENT events, and
+ /* If the buffer contains only FOCUS_IN/OUT_EVENT events, and
READABLE_EVENTS_FILTER_EVENTS is set, report it as empty. */
if (kbd_fetch_ptr != kbd_store_ptr)
{
@@ -3344,7 +3344,8 @@ readable_events (int flags)
#ifdef USE_TOOLKIT_SCROLL_BARS
(flags & READABLE_EVENTS_FILTER_EVENTS) &&
#endif
- event->kind == FOCUS_IN_EVENT)
+ (event->kind == FOCUS_IN_EVENT
+ || event->kind == FOCUS_OUT_EVENT))
#ifdef USE_TOOLKIT_SCROLL_BARS
&& !((flags & READABLE_EVENTS_IGNORE_SQUEEZABLES)
&& (event->kind == SCROLL_BAR_CLICK_EVENT
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master 7cfe2dc: In edebug in GUIs, move focus to the selected frame.,
Alan Mackenzie <=