[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Edebug, with Elisp source in different frame - Edebug doesn't select

From: Alan Mackenzie
Subject: Re: Edebug, with Elisp source in different frame - Edebug doesn't select the source window. [PATCH]
Date: Thu, 18 Oct 2018 11:08:24 +0000
User-agent: Mutt/1.10.1 (2018-07-13)

Hello, Emacs.

On Wed, Oct 17, 2018 at 16:22:53 +0000, Alan Mackenzie wrote:
> On Wed, Oct 17, 2018 at 14:22:26 +0000, Alan Mackenzie wrote:

> > In a GUI Emacs (26.1 or master), instrument a function for edebug with
> > C-u C-M-x in frame F1.  From a different frame, F2, cause this function
> > to be called, thus entering edebug.  F2 is still selected.  Surely edebug
> > should have selected F1?

> I've found the answer, I think.  Edebug is using select-window to select
> the frame.  What select-window doesn't do is to shift the X-Window focus.
> For that, one needs to call select-frame-set-input-focus, something which
> the current incarnation of edebug fails to do.

More precisely, the function to call is x-focus-frame.

> My first experimentation with s-f-set-i-focus indicates this is the
> problem.  I will come up with a patch.

Here is the first version of that patch.  Now, in X, when edebug is
entered, the focus is moved to edebug buffer's frame.  When edebug is
terminated, it is moved back to the original frame.

edebug-bounce-point has not been working either, but is more difficult
to fix.  :-(


diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el
index fb567c9cce..4d9850c7f6 100644
--- a/lisp/emacs-lisp/edebug.el
+++ b/lisp/emacs-lisp/edebug.el
@@ -2328,6 +2328,7 @@ edebug-default-enter
               (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 +2339,9 @@ edebug-default-enter
                       edebug-next-execution-mode nil)
-                (edebug-default-enter function args body))))
+                (edebug-default-enter function args body))
+            (if (frame-live-p outside-frame)
+                (x-focus-frame outside-frame))))
       (let* ((edebug-data (get function 'edebug))
              (edebug-def-mark (car edebug-data)) ; mark at def start
@@ -2647,6 +2650,7 @@ edebug--display-1
          (edebug-eval-display eval-result-list)
          ;; The evaluation list better not have deleted edebug-window-data.
          (select-window (car edebug-window-data))
+          (x-focus-frame (window-frame (selected-window)))
          (set-buffer edebug-buffer)
          (setq edebug-buffer-outside-point (point))

Alan Mackenzie (Nuremberg, Germany).

reply via email to

[Prev in Thread] Current Thread [Next in Thread]