* input-pending-p after make-frame-visible @ 2021-09-24 17:12 Aaron Jensen 2021-09-26 9:11 ` martin rudalics 0 siblings, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-09-24 17:12 UTC (permalink / raw) To: emacs-devel Hi all, Unfortunately, I don't have a repro for this, but I'm putting it out there in case anyone has any insight into it. There is a package that makes it so that your minibuffer is rendered into a child-frame called mini-frame: https://github.com/muffinmad/emacs-mini-frame/ I've noticed that at some point, Emacs gets into a state where after make-frame-visible is called with the child frame, input-pending-p starts returning t, rather than nil: (message "pending: %S" (input-pending-p)) (make-frame-visible mini-frame-frame) (message "pending: %S" (input-pending-p)) Prints: nil t Source: https://github.com/muffinmad/emacs-mini-frame/blob/57a049b9e1ea4a9b65e82fc10c8c7e70a042f636/mini-frame.el#L313 This ordinarily wouldn't matter, but I use it with a package that uses while-no-input and this unexpected input causes issues with that package (https://github.com/minad/vertico/issues/115). What could possibly cause an input to become pending when the frame is made visible? Thanks, Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-09-24 17:12 input-pending-p after make-frame-visible Aaron Jensen @ 2021-09-26 9:11 ` martin rudalics 2021-09-26 14:02 ` Aaron Jensen 0 siblings, 1 reply; 85+ messages in thread From: martin rudalics @ 2021-09-26 9:11 UTC (permalink / raw) To: Aaron Jensen, emacs-devel [-- Attachment #1: Type: text/plain, Size: 1159 bytes --] > There is a package that makes it so that your minibuffer is rendered > into a child-frame called mini-frame: > https://github.com/muffinmad/emacs-mini-frame/ > > I've noticed that at some point, Emacs gets into a state where after > make-frame-visible is called with the child frame, input-pending-p > starts returning t, rather than nil: > > (message "pending: %S" (input-pending-p)) > (make-frame-visible mini-frame-frame) > (message "pending: %S" (input-pending-p)) > > Prints: > > nil > t > > Source: https://github.com/muffinmad/emacs-mini-frame/blob/57a049b9e1ea4a9b65e82fc10c8c7e70a042f636/mini-frame.el#L313 > > This ordinarily wouldn't matter, but I use it with a package that uses > while-no-input and this unexpected input causes issues with that > package (https://github.com/minad/vertico/issues/115). > > What could possibly cause an input to become pending when the frame is > made visible? Can you try the attached patch? And, if possible, read the thread of Bug#49997 to tell us whether it is related and what would be needed to fix both issues - the one described there and yours. Thanks, martin [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: while-no-input-ignore-events.diff --] [-- Type: text/x-patch; name="while-no-input-ignore-events.diff", Size: 2907 bytes --] diff --git a/lisp/subr.el b/lisp/subr.el index 0a31ef2b29..f100259e9e 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -4350,11 +4350,6 @@ with-local-quit ;; that intends to handle the quit signal next time. (eval '(ignore nil))))) -;; Don't throw `throw-on-input' on those events by default. -(setq while-no-input-ignore-events - '(focus-in focus-out help-echo iconify-frame - make-frame-visible selection-request)) - (defmacro while-no-input (&rest body) "Execute BODY only as long as there's no pending input. If input arrives, that ends the execution of BODY, diff --git a/src/keyboard.c b/src/keyboard.c index 2e4c4e6aab..48b9904d85 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -2927,20 +2927,8 @@ read_char (int commandflag, Lisp_Object map, last_input_event = c; call4 (Qcommand_execute, tem, Qnil, Fvector (1, &last_input_event), Qt); - if (CONSP (c) - && (EQ (XCAR (c), Qselect_window) - || EQ (XCAR (c), Qfocus_out) -#ifdef HAVE_DBUS - || EQ (XCAR (c), Qdbus_event) -#endif -#ifdef USE_FILE_NOTIFY - || EQ (XCAR (c), Qfile_notify) -#endif -#ifdef THREADS_ENABLED - || EQ (XCAR (c), Qthread_event) -#endif - || EQ (XCAR (c), Qconfig_changed_event)) - && !end_time) + if (CONSP (c) && !NILP (Fmemq (XCAR (c), Vwhile_no_input_ignore_events)) + && !end_time) /* We stopped being idle for this event; undo that. This prevents automatic window selection (under mouse-autoselect-window) from acting as a real input event, for @@ -11550,6 +11538,27 @@ init_keyboard (void) {SYMBOL_INDEX (Qselect_window), SYMBOL_INDEX (Qswitch_frame)} }; +static Lisp_Object +init_while_no_input_ignore_events (void) +{ + Lisp_Object events = listn (9, Qselect_window, Qhelp_echo, Qmove_frame, + Qiconify_frame, Qmake_frame_visible, + Qfocus_in, Qfocus_out, Qconfig_changed_event, + Qselection_request); + +#ifdef HAVE_DBUS + events = Fcons (Qdbus_event, events); +#endif +#ifdef USE_FILE_NOTIFY + events = Fcons (Qfile_notify, events); +#endif +#ifdef THREADS_ENABLED + events = Fcons (Qthread_event, events); +#endif + + return events; +} + static void syms_of_keyboard_for_pdumper (void); void @@ -12444,7 +12453,12 @@ syms_of_keyboard (void) DEFVAR_LISP ("while-no-input-ignore-events", Vwhile_no_input_ignore_events, - doc: /* Ignored events from while-no-input. */); + doc: /* Ignored events from while-no-input. +Events in this list do not count as pending input while running +`while-no-input' and do not cause any idle timers to get reset when they +occur. */); + + Vwhile_no_input_ignore_events = init_while_no_input_ignore_events (); pdumper_do_now_and_after_load (syms_of_keyboard_for_pdumper); } ^ permalink raw reply related [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-09-26 9:11 ` martin rudalics @ 2021-09-26 14:02 ` Aaron Jensen 2021-09-26 17:50 ` martin rudalics 0 siblings, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-09-26 14:02 UTC (permalink / raw) To: martin rudalics; +Cc: emacs-devel On Sun, Sep 26, 2021 at 5:11 AM martin rudalics <rudalics@gmx.at> wrote: > > Can you try the attached patch? And, if possible, read the thread of > Bug#49997 to tell us whether it is related and what would be needed to > fix both issues - the one described there and yours. I'll give the patch a shot. Does it filter events out for input-pending-p as well? From the thread, it seems like that is the idea, but I wanted to confirm that this particular patch intends to do that because vertico uses both while-no-input and input-pending-p. I don't know what else I have to offer on that thread over what is discussed. Is there a way for me to tell what is triggering input-pending-p to be t while I am in Emacs? Thanks, ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-09-26 14:02 ` Aaron Jensen @ 2021-09-26 17:50 ` martin rudalics 2021-09-26 23:55 ` Aaron Jensen 0 siblings, 1 reply; 85+ messages in thread From: martin rudalics @ 2021-09-26 17:50 UTC (permalink / raw) To: Aaron Jensen; +Cc: emacs-devel > I'll give the patch a shot. Does it filter events out for > input-pending-p as well? From the thread, it seems like that is the > idea, but I wanted to confirm that this particular patch intends to do > that because vertico uses both while-no-input and input-pending-p. > > I don't know what else I have to offer on that thread over what is > discussed. Is there a way for me to tell what is triggering > input-pending-p to be t while I am in Emacs? Maybe (progn (while (not (input-pending-p)) (sit-for 1)) (message "%s" last-input-event)) can reveal something. With emacs -Q do C-x 5 2 and put that form in *scratch*. In the first frame show *Messages* so you don't miss any output. Have a window from some other process ready that you can give focus to since otherwise you might get a `switch-frame-event' that intervenes - the "first" frame should _never_ get focus by the window manager. Now eval the form in the second frame via C-x C-e and try to lower the second frame via the window manager and raise it again. There should be no message. I cannot do that here because for some reason I don't see your problem. But I can reproduce it when dragging the second frame with the mouse. martin ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-09-26 17:50 ` martin rudalics @ 2021-09-26 23:55 ` Aaron Jensen 2021-09-27 8:51 ` martin rudalics 0 siblings, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-09-26 23:55 UTC (permalink / raw) To: martin rudalics; +Cc: emacs-devel On Sun, Sep 26, 2021 at 1:51 PM martin rudalics <rudalics@gmx.at> wrote: > > > I'll give the patch a shot. Does it filter events out for > > input-pending-p as well? From the thread, it seems like that is the > > idea, but I wanted to confirm that this particular patch intends to do > > that because vertico uses both while-no-input and input-pending-p. > > > > I don't know what else I have to offer on that thread over what is > > discussed. Is there a way for me to tell what is triggering > > input-pending-p to be t while I am in Emacs? > > Maybe > > (progn > (while (not (input-pending-p)) > (sit-for 1)) > (message "%s" last-input-event)) > > can reveal something. With emacs -Q do C-x 5 2 and put that form in > *scratch*. In the first frame show *Messages* so you don't miss any > output. Have a window from some other process ready that you can give > focus to since otherwise you might get a `switch-frame-event' that > intervenes - the "first" frame should _never_ get focus by the window > manager. Now eval the form in the second frame via C-x C-e and try to > lower the second frame via the window manager and raise it again. There > should be no message. > > I cannot do that here because for some reason I don't see your problem. > But I can reproduce it when dragging the second frame with the mouse. I only see my problem sometimes. It doesn't reproduce if I restart Emacs until it does (some random amount of time later) When I do the above, if I focus away from the 2nd frame and back I see nothing. If I minimize it (I'm on macOS, so not sure if that is the closest thing to lowering) then I either get a focus-out-event or switch-frame-event because it ends up giving the focus to the 1st frame, that's just how macOS works. Maybe I can find a place to put last-input-event if it reproduces again. I'm using your patch now, so I can let you know if it happens again. Thanks, Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-09-26 23:55 ` Aaron Jensen @ 2021-09-27 8:51 ` martin rudalics 2021-09-27 9:46 ` Aaron Jensen 2021-09-27 23:02 ` Aaron Jensen 0 siblings, 2 replies; 85+ messages in thread From: martin rudalics @ 2021-09-27 8:51 UTC (permalink / raw) To: Aaron Jensen; +Cc: emacs-devel > I only see my problem sometimes. It doesn't reproduce if I restart > Emacs until it does (some random amount of time later) So you have to trigger it, somehow. > When I do the above, if I focus away from the 2nd frame and back I see > nothing. With and/or without my patch? Please compare the behaviors. > If I minimize it (I'm on macOS, so not sure if that is the > closest thing to lowering) then I either get a focus-out-event or > switch-frame-event because it ends up giving the focus to the 1st > frame, that's just how macOS works. That's why I told you to provide for a third window (using another Emacs process or another application) that gets focus when you minimize the Emacs frame. But getting a focus-out event with the patch applied _is_ bad - these should be caught by the patch. > Maybe I can find a place to put > last-input-event if it reproduces again. > > I'm using your patch now, so I can let you know if it happens again. You can also set 'while-no-input-ignore-events' to include or rule out specific events. martin ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-09-27 8:51 ` martin rudalics @ 2021-09-27 9:46 ` Aaron Jensen 2021-09-27 17:14 ` martin rudalics 2021-09-27 19:26 ` Stefan Monnier 2021-09-27 23:02 ` Aaron Jensen 1 sibling, 2 replies; 85+ messages in thread From: Aaron Jensen @ 2021-09-27 9:46 UTC (permalink / raw) To: martin rudalics; +Cc: emacs-devel On Mon, Sep 27, 2021 at 4:51 AM martin rudalics <rudalics@gmx.at> wrote: > > > I only see my problem sometimes. It doesn't reproduce if I restart > > Emacs until it does (some random amount of time later) > > So you have to trigger it, somehow. Right, and I have no idea how at the moment. > > When I do the above, if I focus away from the 2nd frame and back I see > > nothing. > > With and/or without my patch? Please compare the behaviors. Same w/o the patch, I don't know if application focus events are not handled on macos, only window (frame) focus changes > > If I minimize it (I'm on macOS, so not sure if that is the > > closest thing to lowering) then I either get a focus-out-event or > > switch-frame-event because it ends up giving the focus to the 1st > > frame, that's just how macOS works. > > That's why I told you to provide for a third window (using another Emacs > process or another application) that gets focus when you minimize the > Emacs frame. But getting a focus-out event with the patch applied _is_ > bad - these should be caught by the patch. Right, there is a 3rd window, but that's not how macOS works. I think I found how to do it though. If I minimize the messages frame, then eval the form, then minimize frame that and raise it, I do get a focus-out on that frame, with or without the patch. > > Maybe I can find a place to put > > last-input-event if it reproduces again. > > > > I'm using your patch now, so I can let you know if it happens again. > > You can also set 'while-no-input-ignore-events' to include or rule out > specific events. Ok, I'll see if I can do that once I get it reproducing again. Thanks, Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-09-27 9:46 ` Aaron Jensen @ 2021-09-27 17:14 ` martin rudalics 2021-09-27 18:57 ` Eli Zaretskii 2021-09-27 19:26 ` Stefan Monnier 1 sibling, 1 reply; 85+ messages in thread From: martin rudalics @ 2021-09-27 17:14 UTC (permalink / raw) To: Aaron Jensen; +Cc: emacs-devel > Right, there is a 3rd window, but that's not how macOS works. I think > I found how to do it though. If I minimize the messages frame, then > eval the form, then minimize frame that and raise it, I do get a > focus-out on that frame, with or without the patch. Which seems to indicate that the patch doesn't handle 'input-pending-p'. I'm probably not of much help here - maybe Eli has an idea. martin ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-09-27 17:14 ` martin rudalics @ 2021-09-27 18:57 ` Eli Zaretskii 2021-09-28 7:41 ` martin rudalics 0 siblings, 1 reply; 85+ messages in thread From: Eli Zaretskii @ 2021-09-27 18:57 UTC (permalink / raw) To: martin rudalics; +Cc: aaronjensen, emacs-devel > From: martin rudalics <rudalics@gmx.at> > Date: Mon, 27 Sep 2021 19:14:35 +0200 > Cc: emacs-devel@gnu.org > > > Right, there is a 3rd window, but that's not how macOS works. I think > > I found how to do it though. If I minimize the messages frame, then > > eval the form, then minimize frame that and raise it, I do get a > > focus-out on that frame, with or without the patch. > > Which seems to indicate that the patch doesn't handle 'input-pending-p'. > I'm probably not of much help here - maybe Eli has an idea. I don't think I understand well enough what is the problem. It sounds like we have no idea what kind of event is received that causes input-pending-p return non-nil, is that right? Then the first thing we should do is understand which event is that, and try figuring out why we receive that event. ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-09-27 18:57 ` Eli Zaretskii @ 2021-09-28 7:41 ` martin rudalics 2021-09-28 8:06 ` Eli Zaretskii 0 siblings, 1 reply; 85+ messages in thread From: martin rudalics @ 2021-09-28 7:41 UTC (permalink / raw) To: Eli Zaretskii; +Cc: aaronjensen, emacs-devel > I don't think I understand well enough what is the problem. It sounds > like we have no idea what kind of event is received that causes > input-pending-p return non-nil, is that right? The problem is rather whether and how we can/should make the events in a list like (focus-in focus-out help-echo iconify-frame make-frame-visible selection-request) not cause 'input-pending-p' return non-nil. I suppose we can't but maybe there is a way. martin ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-09-28 7:41 ` martin rudalics @ 2021-09-28 8:06 ` Eli Zaretskii 2021-09-29 9:28 ` martin rudalics 0 siblings, 1 reply; 85+ messages in thread From: Eli Zaretskii @ 2021-09-28 8:06 UTC (permalink / raw) To: martin rudalics; +Cc: aaronjensen, emacs-devel > Cc: aaronjensen@gmail.com, emacs-devel@gnu.org > From: martin rudalics <rudalics@gmx.at> > Date: Tue, 28 Sep 2021 09:41:18 +0200 > > > I don't think I understand well enough what is the problem. It sounds > > like we have no idea what kind of event is received that causes > > input-pending-p return non-nil, is that right? > > The problem is rather whether and how we can/should make the events in > a list like > > (focus-in focus-out help-echo iconify-frame make-frame-visible selection-request) > > not cause 'input-pending-p' return non-nil. I suppose we can't but > maybe there is a way. We could extend process_special_events, I suppose. But are we sure the culprit is one of these events? ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-09-28 8:06 ` Eli Zaretskii @ 2021-09-29 9:28 ` martin rudalics 2021-09-29 12:06 ` Eli Zaretskii 0 siblings, 1 reply; 85+ messages in thread From: martin rudalics @ 2021-09-29 9:28 UTC (permalink / raw) To: Eli Zaretskii; +Cc: aaronjensen, emacs-devel > We could extend process_special_events, I suppose. But are we sure > the culprit is one of these events? No. Investigating 'input-pending-p' from Elisp is not trivial. I wonder if an event we ignore via 'while-no-input-ignore-events' may trigger another event we do not ignore. To put it simply: I have no idea how processing input events is supposed to work. martin ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-09-29 9:28 ` martin rudalics @ 2021-09-29 12:06 ` Eli Zaretskii 2021-09-29 12:16 ` Aaron Jensen 0 siblings, 1 reply; 85+ messages in thread From: Eli Zaretskii @ 2021-09-29 12:06 UTC (permalink / raw) To: martin rudalics; +Cc: aaronjensen, emacs-devel > Cc: aaronjensen@gmail.com, emacs-devel@gnu.org > From: martin rudalics <rudalics@gmx.at> > Date: Wed, 29 Sep 2021 11:28:26 +0200 > > > We could extend process_special_events, I suppose. But are we sure > > the culprit is one of these events? > > No. Investigating 'input-pending-p' from Elisp is not trivial. Can this be done from GDB instead? ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-09-29 12:06 ` Eli Zaretskii @ 2021-09-29 12:16 ` Aaron Jensen 2021-09-29 13:13 ` Eli Zaretskii 0 siblings, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-09-29 12:16 UTC (permalink / raw) To: Eli Zaretskii; +Cc: martin rudalics, emacs-devel On Tue, Sep 28, 2021 at 1:50 AM Eli Zaretskii <eliz@gnu.org> wrote: > But where does that M-x come from in the recipe in question? Unfortunately my recipe at the moment involves a couple third party packages. M-x is what I hit to trigger M-x, with mini-frame enabled, which is what produces the problem. Specifically it's something about how mini-frame raises the child frame that causes input-pending-p to become t On Wed, Sep 29, 2021 at 5:28 AM martin rudalics <rudalics@gmx.at> wrote: > Could you please try to tell in a few sentences what you did and what > happened so maybe someone else can understand the issue and chime in. > I'm meanwhile completely lost. Also, unfortunately, my recipe involves using Emacs normally for a day or so with my configuration until the issue starts to manifest itself. I'm not the only person with this same problem, but no one else has a repro either. This is the code that evaluates, with make-frame-visible being the thing that changes the value of input-pending-p: (defun mini-frame--display (fn args) "Show mini-frame and call FN with ARGS." (let* ((selected-frame (selected-frame)) (selected-window (selected-window)) (selected-is-mini-frame (memq selected-frame (list mini-frame-frame mini-frame-completions-frame))) (dd default-directory) (parent-frame-parameters `((parent-frame . ,(unless mini-frame-standalone selected-frame)))) (show-parameters (if (functionp mini-frame-show-parameters) (funcall mini-frame-show-parameters) mini-frame-show-parameters)) (show-parameters (append (unless (alist-get 'background-color show-parameters) `((background-color . ,(funcall mini-frame-background-color-function)))) show-parameters))) (if (frame-live-p mini-frame-frame) (unless selected-is-mini-frame (setq mini-frame-selected-frame selected-frame) (setq mini-frame-selected-window selected-window) (modify-frame-parameters mini-frame-frame parent-frame-parameters)) (setq mini-frame-selected-frame selected-frame) (setq mini-frame-selected-window selected-window) (setq mini-frame-frame (mini-frame--make-frame (append '((minibuffer . only)) parent-frame-parameters show-parameters)))) (mini-frame--move-frame-to-frame mini-frame-frame mini-frame-selected-frame) (modify-frame-parameters mini-frame-frame show-parameters) (when (and (frame-live-p mini-frame-completions-frame) (frame-visible-p mini-frame-completions-frame)) (make-frame-invisible mini-frame-completions-frame)) (message "before: %S" (input-pending-p)) (make-frame-visible mini-frame-frame) (message "after: %S" (input-pending-p)) (redirect-frame-focus mini-frame-selected-frame mini-frame-frame) (select-frame-set-input-focus mini-frame-frame) (setq default-directory dd) (apply fn args))) On Wed, Sep 29, 2021 at 8:06 AM Eli Zaretskii <eliz@gnu.org> wrote: > Can this be done from GDB instead? For me, it'd be lldb. Would putting a breakpoint in input-pending-p tell us anything? Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-09-29 12:16 ` Aaron Jensen @ 2021-09-29 13:13 ` Eli Zaretskii 2021-09-29 14:16 ` Aaron Jensen 0 siblings, 1 reply; 85+ messages in thread From: Eli Zaretskii @ 2021-09-29 13:13 UTC (permalink / raw) To: Aaron Jensen; +Cc: rudalics, emacs-devel > From: Aaron Jensen <aaronjensen@gmail.com> > Date: Wed, 29 Sep 2021 08:16:32 -0400 > Cc: martin rudalics <rudalics@gmx.at>, emacs-devel@gnu.org > > > Can this be done from GDB instead? > > For me, it'd be lldb. Would putting a breakpoint in input-pending-p > tell us anything? You should be able to look at the last event via kbd_fetch_ptr, yes. ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-09-29 13:13 ` Eli Zaretskii @ 2021-09-29 14:16 ` Aaron Jensen 2021-09-29 15:42 ` Eli Zaretskii 0 siblings, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-09-29 14:16 UTC (permalink / raw) To: Eli Zaretskii; +Cc: martin rudalics, emacs-devel On Wed, Sep 29, 2021 at 9:13 AM Eli Zaretskii <eliz@gnu.org> wrote: > > > From: Aaron Jensen <aaronjensen@gmail.com> > > Date: Wed, 29 Sep 2021 08:16:32 -0400 > > Cc: martin rudalics <rudalics@gmx.at>, emacs-devel@gnu.org > > > > > Can this be done from GDB instead? > > > > For me, it'd be lldb. Would putting a breakpoint in input-pending-p > > tell us anything? > > You should be able to look at the last event via kbd_fetch_ptr, yes. Would that include non-keyboard events like focus out and the like? Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-09-29 14:16 ` Aaron Jensen @ 2021-09-29 15:42 ` Eli Zaretskii 2021-10-01 17:31 ` Aaron Jensen 0 siblings, 1 reply; 85+ messages in thread From: Eli Zaretskii @ 2021-09-29 15:42 UTC (permalink / raw) To: Aaron Jensen; +Cc: rudalics, emacs-devel > From: Aaron Jensen <aaronjensen@gmail.com> > Date: Wed, 29 Sep 2021 10:16:22 -0400 > Cc: martin rudalics <rudalics@gmx.at>, emacs-devel@gnu.org > > On Wed, Sep 29, 2021 at 9:13 AM Eli Zaretskii <eliz@gnu.org> wrote: > > > > > From: Aaron Jensen <aaronjensen@gmail.com> > > > Date: Wed, 29 Sep 2021 08:16:32 -0400 > > > Cc: martin rudalics <rudalics@gmx.at>, emacs-devel@gnu.org > > > > > > > Can this be done from GDB instead? > > > > > > For me, it'd be lldb. Would putting a breakpoint in input-pending-p > > > tell us anything? > > > > You should be able to look at the last event via kbd_fetch_ptr, yes. > > Would that include non-keyboard events like focus out and the like? Yes. Emacs has only one event queue, and the "kbd_" part of its name is misleading (it's a remnant from the original pre-GUI design). ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-09-29 15:42 ` Eli Zaretskii @ 2021-10-01 17:31 ` Aaron Jensen 2021-10-01 17:55 ` Eli Zaretskii 2021-10-01 17:57 ` Eli Zaretskii 0 siblings, 2 replies; 85+ messages in thread From: Aaron Jensen @ 2021-10-01 17:31 UTC (permalink / raw) To: Eli Zaretskii; +Cc: martin rudalics, emacs-devel On Wed, Sep 29, 2021 at 11:42 AM Eli Zaretskii <eliz@gnu.org> wrote: > > Yes. Emacs has only one event queue, and the "kbd_" part of its name > is misleading (it's a remnant from the original pre-GUI design). Ok, it appears to be 19, which I believe is HELP_EVENT. Does that make sense? ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-01 17:31 ` Aaron Jensen @ 2021-10-01 17:55 ` Eli Zaretskii 2021-10-01 17:57 ` Eli Zaretskii 1 sibling, 0 replies; 85+ messages in thread From: Eli Zaretskii @ 2021-10-01 17:55 UTC (permalink / raw) To: Aaron Jensen; +Cc: rudalics, emacs-devel > From: Aaron Jensen <aaronjensen@gmail.com> > Date: Fri, 1 Oct 2021 13:31:55 -0400 > Cc: martin rudalics <rudalics@gmx.at>, emacs-devel@gnu.org > > On Wed, Sep 29, 2021 at 11:42 AM Eli Zaretskii <eliz@gnu.org> wrote: > > > > Yes. Emacs has only one event queue, and the "kbd_" part of its name > > is misleading (it's a remnant from the original pre-GUI design). > > Ok, it appears to be 19, which I believe is HELP_EVENT. Does that make sense? help-echo? That presumes that the mouse pointer was above mouse-sensitive text. Was it? ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-01 17:31 ` Aaron Jensen 2021-10-01 17:55 ` Eli Zaretskii @ 2021-10-01 17:57 ` Eli Zaretskii 2021-10-01 18:25 ` Aaron Jensen 1 sibling, 1 reply; 85+ messages in thread From: Eli Zaretskii @ 2021-10-01 17:57 UTC (permalink / raw) To: Aaron Jensen; +Cc: rudalics, emacs-devel > From: Aaron Jensen <aaronjensen@gmail.com> > Date: Fri, 1 Oct 2021 13:31:55 -0400 > Cc: martin rudalics <rudalics@gmx.at>, emacs-devel@gnu.org > > On Wed, Sep 29, 2021 at 11:42 AM Eli Zaretskii <eliz@gnu.org> wrote: > > > > Yes. Emacs has only one event queue, and the "kbd_" part of its name > > is misleading (it's a remnant from the original pre-GUI design). > > Ok, it appears to be 19, which I believe is HELP_EVENT. Does that make sense? help-echo? That presumes that the mouse pointer was above mouse-sensitive text. Was it? But according to my reading of the code, it's TOOL_BAR_EVENT, because 2 events are specific to MS-Windows. ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-01 17:57 ` Eli Zaretskii @ 2021-10-01 18:25 ` Aaron Jensen 2021-10-03 19:33 ` Aaron Jensen 0 siblings, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-10-01 18:25 UTC (permalink / raw) To: Eli Zaretskii; +Cc: martin rudalics, emacs-devel On Fri, Oct 1, 2021 at 1:57 PM Eli Zaretskii <eliz@gnu.org> wrote: > > > From: Aaron Jensen <aaronjensen@gmail.com> > > Date: Fri, 1 Oct 2021 13:31:55 -0400 > > Cc: martin rudalics <rudalics@gmx.at>, emacs-devel@gnu.org > > > > On Wed, Sep 29, 2021 at 11:42 AM Eli Zaretskii <eliz@gnu.org> wrote: > > > > > > Yes. Emacs has only one event queue, and the "kbd_" part of its name > > > is misleading (it's a remnant from the original pre-GUI design). > > > > Ok, it appears to be 19, which I believe is HELP_EVENT. Does that make sense? > > help-echo? That presumes that the mouse pointer was above > mouse-sensitive text. Was it? That was a helpful question. I can reproduce it now. If I click on the echo area, it opens the messages buffer. Once that has been done once, the issue happens every time. > But according to my reading of the code, it's TOOL_BAR_EVENT, because > 2 events are specific to MS-Windows. That's what I got when I counted too, but it's HELP_EVENT. I verified by printing it. ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-01 18:25 ` Aaron Jensen @ 2021-10-03 19:33 ` Aaron Jensen 2021-10-03 20:55 ` Aaron Jensen 0 siblings, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-10-03 19:33 UTC (permalink / raw) To: Eli Zaretskii; +Cc: martin rudalics, emacs-devel On Fri, Oct 1, 2021 at 2:25 PM Aaron Jensen <aaronjensen@gmail.com> wrote: > > On Fri, Oct 1, 2021 at 1:57 PM Eli Zaretskii <eliz@gnu.org> wrote: > > > > > From: Aaron Jensen <aaronjensen@gmail.com> > > > Date: Fri, 1 Oct 2021 13:31:55 -0400 > > > Cc: martin rudalics <rudalics@gmx.at>, emacs-devel@gnu.org > > > > > > On Wed, Sep 29, 2021 at 11:42 AM Eli Zaretskii <eliz@gnu.org> wrote: > > > > > > > > Yes. Emacs has only one event queue, and the "kbd_" part of its name > > > > is misleading (it's a remnant from the original pre-GUI design). > > > > > > Ok, it appears to be 19, which I believe is HELP_EVENT. Does that make sense? > > > > help-echo? That presumes that the mouse pointer was above > > mouse-sensitive text. Was it? > > That was a helpful question. I can reproduce it now. If I click on the > echo area, it opens the messages buffer. Once that has been done once, > the issue happens every time. > > > But according to my reading of the code, it's TOOL_BAR_EVENT, because > > 2 events are specific to MS-Windows. > > That's what I got when I counted too, but it's HELP_EVENT. I verified > by printing it. Does anyone know why showing a mini-buffer only child frame would trigger a help event? It doesn't when I first start emacs, but if I click on the echo area once, it will do it from then on out. I'll see if I can narrow in a repro. ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-03 19:33 ` Aaron Jensen @ 2021-10-03 20:55 ` Aaron Jensen 2021-10-03 21:22 ` Gregory Heytings 2021-10-04 8:28 ` martin rudalics 0 siblings, 2 replies; 85+ messages in thread From: Aaron Jensen @ 2021-10-03 20:55 UTC (permalink / raw) To: Eli Zaretskii; +Cc: martin rudalics, emacs-devel On Sun, Oct 3, 2021 at 3:33 PM Aaron Jensen <aaronjensen@gmail.com> wrote: > > Does anyone know why showing a mini-buffer only child frame would > trigger a help event? It doesn't when I first start emacs, but if I > click on the echo area once, it will do it from then on out. I'll see > if I can narrow in a repro. Ok, here is a repro: emacs -Q Eval: (defvar mini-frame-frame nil) (defun repro () (interactive) (setq mini-frame-frame (or mini-frame-frame (make-frame `((parent-frame . ,(selected-frame)))))) (message "input-pending-p before: %S" (input-pending-p)) (make-frame-visible mini-frame-frame) (message "input-pending-p after: %S" (input-pending-p)) (make-frame-invisible mini-frame-frame)) (global-set-key (kbd "C-x C-x") 'repro) Then: Switch to messages buffer C-x C-x Focus the original frame C-x C-x Note that input-pending-p remains nil Click the echo area C-x C-x Note that input-pending-p is t after showing. You have to focus the original frame each time, but it is consistent after clicking ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-03 20:55 ` Aaron Jensen @ 2021-10-03 21:22 ` Gregory Heytings 2021-10-04 1:38 ` Aaron Jensen 2021-10-04 8:28 ` martin rudalics 1 sibling, 1 reply; 85+ messages in thread From: Gregory Heytings @ 2021-10-03 21:22 UTC (permalink / raw) To: Aaron Jensen; +Cc: martin rudalics, Eli Zaretskii, emacs-devel > > Ok, here is a repro: > I'm currently unable to reproduce the issue, but your recipe is not clear enough: > > Focus the original frame > C-x C-x > > [...] > > Note that input-pending-p is t after showing. You have to focus the > original frame each time, but it is consistent after clicking > What is "the original frame"? There is apparently a single (visible) frame in the recipe. ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-03 21:22 ` Gregory Heytings @ 2021-10-04 1:38 ` Aaron Jensen 2021-10-04 8:29 ` martin rudalics 0 siblings, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-10-04 1:38 UTC (permalink / raw) To: Gregory Heytings; +Cc: martin rudalics, Eli Zaretskii, emacs-devel On Sun, Oct 3, 2021 at 9:00 PM Gregory Heytings <gregory@heytings.org> wrote: > > > > Ok, here is a repro: > > > > I'm currently unable to reproduce the issue, but your recipe is not clear > enough: Are you on macOS? I don't know if this is a mac specific issue or not. Also, I just tried this with an older build that doesn't use Martin's patch and I see pending input after C-x C-x using these steps even without clicking in the echo area. > > > > Focus the original frame > > C-x C-x > > > > [...] > > > > Note that input-pending-p is t after showing. You have to focus the > > original frame each time, but it is consistent after clicking > > > > What is "the original frame"? There is apparently a single (visible) > frame in the recipe. Yes, but at least on macOS, that frame loses focus after the first C-x C-x. It's possible that the child frame has focus instead, even though it is invisible. Here is a video of the repro using martin's patch: https://cln.sh/Ts1MAC Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-04 1:38 ` Aaron Jensen @ 2021-10-04 8:29 ` martin rudalics 2021-10-04 11:04 ` Gregory Heytings 0 siblings, 1 reply; 85+ messages in thread From: martin rudalics @ 2021-10-04 8:29 UTC (permalink / raw) To: Aaron Jensen, Gregory Heytings; +Cc: Eli Zaretskii, emacs-devel >> What is "the original frame"? There is apparently a single (visible) >> frame in the recipe. > > Yes, but at least on macOS, that frame loses focus after the first C-x > C-x. It's possible that the child frame has focus instead, even though > it is invisible. Awkward. Can you try calling 'frame-focus-state' on both frames to find out whether Emacs itself has an idea of which frame has focus? martin ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-04 8:29 ` martin rudalics @ 2021-10-04 11:04 ` Gregory Heytings 2021-10-04 15:00 ` Aaron Jensen 0 siblings, 1 reply; 85+ messages in thread From: Gregory Heytings @ 2021-10-04 11:04 UTC (permalink / raw) To: martin rudalics; +Cc: Eli Zaretskii, Aaron Jensen, emacs-devel >>> What is "the original frame"? There is apparently a single (visible) >>> frame in the recipe. >> >> Yes, but at least on macOS, that frame loses focus after the first C-x >> C-x. It's possible that the child frame has focus instead, even though >> it is invisible. > > Awkward. Can you try calling 'frame-focus-state' on both frames to find > out whether Emacs itself has an idea of which frame has focus? > FTR, I can reproduce this on macOS, with Emacs 27.2. A more detailed recipe is: 1. emacs -Q 2. eval-buffer the recipe 3. C-x C-x 4. click on the original frame 5. click on the echo area of the original frame After step 3 the invisible frame has the focus and the visible frame does not have the focus. For example, C-x b makes the invisible "mini-frame-frame" frame visible again. Steps 3 and 4 can be repeated, they will always return input-pending-p {before,after} = nil. After step 5, which creates a window with the *Messages* buffer, steps 3 and 4 can be repeated again, they will always return input-pending-p before = nil, input-pending-p after = t. This is not 100% reproductibe however, it's what happens most of the times. ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-04 11:04 ` Gregory Heytings @ 2021-10-04 15:00 ` Aaron Jensen 2021-10-04 20:37 ` Alan Third 0 siblings, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-10-04 15:00 UTC (permalink / raw) To: Gregory Heytings, Alan Third; +Cc: martin rudalics, Eli Zaretskii, emacs-devel On Mon, Oct 4, 2021 at 8:20 AM Gregory Heytings <gregory@heytings.org> wrote: > FTR, I can reproduce this on macOS, with Emacs 27.2. A more detailed > recipe is: Thank you for checking and the additional details. I added Alan to the thread in case this is a macOS specific issue. Alan, any sense of what might cause the help-echo event to get added back to the queue any time a child frame is shown? (I don't know if I properly described what is happening, but hopefully that's close enough along with the repro) Thanks, Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-04 15:00 ` Aaron Jensen @ 2021-10-04 20:37 ` Alan Third 2021-10-04 22:12 ` Aaron Jensen 0 siblings, 1 reply; 85+ messages in thread From: Alan Third @ 2021-10-04 20:37 UTC (permalink / raw) To: Aaron Jensen Cc: martin rudalics, Gregory Heytings, Eli Zaretskii, emacs-devel On Mon, Oct 04, 2021 at 11:00:57AM -0400, Aaron Jensen wrote: > On Mon, Oct 4, 2021 at 8:20 AM Gregory Heytings <gregory@heytings.org> wrote: > > FTR, I can reproduce this on macOS, with Emacs 27.2. A more detailed > > recipe is: > > Thank you for checking and the additional details. > > I added Alan to the thread in case this is a macOS specific issue. > Alan, any sense of what might cause the help-echo event to get added > back to the queue any time a child frame is shown? (I don't know if I > properly described what is happening, but hopefully that's close > enough along with the repro) Does this do anything: modified src/nsterm.m @@ -7048,6 +7048,7 @@ - (void)windowDidResignKey: (NSNotification *)notification XSETFRAME (frame, emacsframe); help_echo_string = Qnil; gen_help_event (Qnil, frame, Qnil, Qnil, 0); + any_help_event_p = NO; } if (emacs_event && is_focus_frame) ? -- Alan Third ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-04 20:37 ` Alan Third @ 2021-10-04 22:12 ` Aaron Jensen 2021-10-05 15:47 ` Alan Third 0 siblings, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-10-04 22:12 UTC (permalink / raw) To: Alan Third, Aaron Jensen, Gregory Heytings, martin rudalics, Eli Zaretskii, emacs-devel On Mon, Oct 4, 2021 at 4:38 PM Alan Third <alan@idiocy.org> wrote: > > Does this do anything: > > modified src/nsterm.m > @@ -7048,6 +7048,7 @@ - (void)windowDidResignKey: (NSNotification *)notification > XSETFRAME (frame, emacsframe); > help_echo_string = Qnil; > gen_help_event (Qnil, frame, Qnil, Qnil, 0); > + any_help_event_p = NO; > } > > if (emacs_event && is_focus_frame) > > ? Not as far as I can tell. Can you reproduce it with Martin's patch? Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-04 22:12 ` Aaron Jensen @ 2021-10-05 15:47 ` Alan Third 2021-10-14 11:15 ` Aaron Jensen 0 siblings, 1 reply; 85+ messages in thread From: Alan Third @ 2021-10-05 15:47 UTC (permalink / raw) To: Aaron Jensen Cc: martin rudalics, Gregory Heytings, Eli Zaretskii, emacs-devel On Mon, Oct 04, 2021 at 06:12:17PM -0400, Aaron Jensen wrote: > On Mon, Oct 4, 2021 at 4:38 PM Alan Third <alan@idiocy.org> wrote: > > > > Does this do anything: > > > > modified src/nsterm.m > > @@ -7048,6 +7048,7 @@ - (void)windowDidResignKey: (NSNotification *)notification > > XSETFRAME (frame, emacsframe); > > help_echo_string = Qnil; > > gen_help_event (Qnil, frame, Qnil, Qnil, 0); > > + any_help_event_p = NO; > > } > > > > if (emacs_event && is_focus_frame) > > > > ? > > Not as far as I can tell. Can you reproduce it with Martin's patch? I don't have access to a Mac just now, so no. ;) -- Alan Third ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-05 15:47 ` Alan Third @ 2021-10-14 11:15 ` Aaron Jensen 2021-10-14 11:32 ` Aaron Jensen ` (2 more replies) 0 siblings, 3 replies; 85+ messages in thread From: Aaron Jensen @ 2021-10-14 11:15 UTC (permalink / raw) To: Alan Third, Aaron Jensen, Gregory Heytings, martin rudalics, Eli Zaretskii, emacs-devel On Tue, Oct 5, 2021 at 11:47 AM Alan Third <alan@idiocy.org> wrote: > > Not as far as I can tell. Can you reproduce it with Martin's patch? > > I don't have access to a Mac just now, so no. ;) Ah, that's not permanent, is it? Any other ideas on this? Martin, do you plan to install your patch (assuming it hasn't been installed already)? Thanks, Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-14 11:15 ` Aaron Jensen @ 2021-10-14 11:32 ` Aaron Jensen 2021-10-14 12:42 ` martin rudalics 2021-10-15 17:32 ` Alan Third 2 siblings, 0 replies; 85+ messages in thread From: Aaron Jensen @ 2021-10-14 11:32 UTC (permalink / raw) To: Alan Third, Aaron Jensen, Gregory Heytings, martin rudalics, Eli Zaretskii, emacs-devel On Thu, Oct 14, 2021 at 7:15 AM Aaron Jensen <aaronjensen@gmail.com> wrote: > > On Tue, Oct 5, 2021 at 11:47 AM Alan Third <alan@idiocy.org> wrote: > > > Not as far as I can tell. Can you reproduce it with Martin's patch? > > > > I don't have access to a Mac just now, so no. ;) > > Ah, that's not permanent, is it? > > Any other ideas on this? Alan, I think I did something wrong when attempting to repro w/ your suggested change. I just did it again and found that it partially fixes the issue in that only reproduces on the *next* child frame open after clicking in the echo area and not any subsequent ones. So, something is still wrong with the logic, but you seem to have identified the area of the problem. Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-14 11:15 ` Aaron Jensen 2021-10-14 11:32 ` Aaron Jensen @ 2021-10-14 12:42 ` martin rudalics 2021-10-14 23:04 ` Aaron Jensen 2021-10-15 17:32 ` Alan Third 2 siblings, 1 reply; 85+ messages in thread From: martin rudalics @ 2021-10-14 12:42 UTC (permalink / raw) To: Aaron Jensen, Alan Third, Gregory Heytings, Eli Zaretskii, emacs-devel > Martin, do you plan to install your patch (assuming it hasn't been > installed already)? It's installed on master only. martin ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-14 12:42 ` martin rudalics @ 2021-10-14 23:04 ` Aaron Jensen 2021-10-15 7:05 ` martin rudalics 0 siblings, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-10-14 23:04 UTC (permalink / raw) To: martin rudalics; +Cc: Alan Third, Eli Zaretskii, Gregory Heytings, emacs-devel On Thu, Oct 14, 2021 at 8:42 AM martin rudalics <rudalics@gmx.at> wrote: > > > Martin, do you plan to install your patch (assuming it hasn't been > > installed already)? > > It's installed on master only. Ah. Is/should help event be excluded as well by default? ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-14 23:04 ` Aaron Jensen @ 2021-10-15 7:05 ` martin rudalics 2021-10-15 11:30 ` Aaron Jensen 0 siblings, 1 reply; 85+ messages in thread From: martin rudalics @ 2021-10-15 7:05 UTC (permalink / raw) To: Aaron Jensen; +Cc: Alan Third, Eli Zaretskii, Gregory Heytings, emacs-devel > Ah. Is/should help event be excluded as well by default? Does it fix anything on your side when you append it to 'while-no-input-ignore-events'? If it does, we can add it to the default and look whether it breaks things for someone else. Please note that all I've done in the past was to add 'move-frame' to a predecessor of that list. Otherwise, I have no idea about the implications adding/removing something to/from this list could have. martin ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-15 7:05 ` martin rudalics @ 2021-10-15 11:30 ` Aaron Jensen 2021-10-16 7:54 ` martin rudalics 0 siblings, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-10-15 11:30 UTC (permalink / raw) To: martin rudalics; +Cc: Alan Third, Eli Zaretskii, Gregory Heytings, emacs-devel On Fri, Oct 15, 2021 at 3:05 AM martin rudalics <rudalics@gmx.at> wrote: > > > Ah. Is/should help event be excluded as well by default? > > Does it fix anything on your side when you append it to > 'while-no-input-ignore-events'? If it does, we can add it to the > default and look whether it breaks things for someone else. It's already there, but it doesn't appear to be effective with either while-no-input or input-pending-p. Here's an updated repro: (defvar mini-frame-frame nil) (defun repro () (interactive) (setq mini-frame-frame (or mini-frame-frame (make-frame `((parent-frame . ,(selected-frame)))))) (message "input-pending-p before: %S" (input-pending-p)) (while-no-input (message "NO INPUT BEFORE")) (make-frame-visible mini-frame-frame) (message "input-pending-p after: %S" (input-pending-p)) (while-no-input (message "NO INPUT AFTER")) (make-frame-invisible mini-frame-frame)) (global-set-key (kbd "C-x C-x") 'repro) What does the help-echo event do exactly? Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-15 11:30 ` Aaron Jensen @ 2021-10-16 7:54 ` martin rudalics 2021-10-16 14:16 ` Aaron Jensen 0 siblings, 1 reply; 85+ messages in thread From: martin rudalics @ 2021-10-16 7:54 UTC (permalink / raw) To: Aaron Jensen; +Cc: Alan Third, Gregory Heytings, Eli Zaretskii, emacs-devel > It's already there, but it doesn't appear to be effective with either > while-no-input or input-pending-p. Here's an updated repro: You could try to report the values of 'unread-command-events', 'unread-post-input-method-events' and 'unread-input-method-events' in (message "input-pending-p after: %S" (input-pending-p)) martin ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-16 7:54 ` martin rudalics @ 2021-10-16 14:16 ` Aaron Jensen 2021-10-16 14:45 ` Aaron Jensen 0 siblings, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-10-16 14:16 UTC (permalink / raw) To: martin rudalics; +Cc: Alan Third, Gregory Heytings, Eli Zaretskii, emacs-devel On Sat, Oct 16, 2021 at 3:54 AM martin rudalics <rudalics@gmx.at> wrote: > > > It's already there, but it doesn't appear to be effective with either > > while-no-input or input-pending-p. Here's an updated repro: > > You could try to report the values of 'unread-command-events', > 'unread-post-input-method-events' and 'unread-input-method-events' in > > (message "input-pending-p after: %S" (input-pending-p)) I know 19 (help event) is pending from a patch I have to report what is pending: modified src/keyboard.c @@ -10488,9 +10488,19 @@ DEFUN ("input-pending-p", Finput_pending_p, Sinput_pending_p, 0, 1, 0, /* Process non-user-visible events (Bug#10195). */ process_special_events (); - return (get_input_pending ((NILP (check_timers) + bool input_pending; + + input_pending = get_input_pending ((NILP (check_timers) ? 0 : READABLE_EVENTS_DO_TIMERS_NOW) - | READABLE_EVENTS_FILTER_EVENTS) + | READABLE_EVENTS_FILTER_EVENTS); + + if (input_pending) { + printf ( "Input Pending event type: %d %d\n", + kbd_fetch_ptr->kind, HELP_EVENT); + fflush(stdout); + } + + return (input_pending ? Qt : Qnil); That prints: Input Pending event type: 19 19 When I reproduce it. ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-16 14:16 ` Aaron Jensen @ 2021-10-16 14:45 ` Aaron Jensen 2021-10-16 15:09 ` Aaron Jensen 0 siblings, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-10-16 14:45 UTC (permalink / raw) To: martin rudalics; +Cc: Alan Third, Gregory Heytings, Eli Zaretskii, emacs-devel On Sat, Oct 16, 2021 at 10:16 AM Aaron Jensen <aaronjensen@gmail.com> wrote: > > On Sat, Oct 16, 2021 at 3:54 AM martin rudalics <rudalics@gmx.at> wrote: > > > > > It's already there, but it doesn't appear to be effective with either > > > while-no-input or input-pending-p. Here's an updated repro: > > > > You could try to report the values of 'unread-command-events', > > 'unread-post-input-method-events' and 'unread-input-method-events' in > > > > (message "input-pending-p after: %S" (input-pending-p)) > > I know 19 (help event) is pending from a patch I have to report what is pending: I wonder if the problem is just that `input-pending-p' does not respect `while-no-input-ignore-events'? `while-no-input' actually uses `input-pending-p' before it even attempts to run the body: (setq val (or (input-pending-p) (progn ,@body))) I think that `readable_events' needs to be modified to do exactly what `kbd_buffer_store_buffered_event' does with regard to ignoring events if `READABLE_EVENTS_FILTER_EVENTS' is set. I have no idea why `USE_TOOLKIT_SCROLL_BARS' is considered when determining whether or not to require `READABLE_EVENTS_FILTER_EVENTS' when filtering out the focus events. I imagine that that focus event filtering could be replaced with a check against `while-no-input-ignore-events' Does that make sense? Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-16 14:45 ` Aaron Jensen @ 2021-10-16 15:09 ` Aaron Jensen 2021-10-16 16:49 ` martin rudalics 0 siblings, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-10-16 15:09 UTC (permalink / raw) To: martin rudalics; +Cc: Alan Third, Gregory Heytings, Eli Zaretskii, emacs-devel [-- Attachment #1: Type: text/plain, Size: 1659 bytes --] On Sat, Oct 16, 2021 at 10:45 AM Aaron Jensen <aaronjensen@gmail.com> wrote: > > On Sat, Oct 16, 2021 at 10:16 AM Aaron Jensen <aaronjensen@gmail.com> wrote: > > > > On Sat, Oct 16, 2021 at 3:54 AM martin rudalics <rudalics@gmx.at> wrote: > > > > > > > It's already there, but it doesn't appear to be effective with either > > > > while-no-input or input-pending-p. Here's an updated repro: > > > > > > You could try to report the values of 'unread-command-events', > > > 'unread-post-input-method-events' and 'unread-input-method-events' in > > > > > > (message "input-pending-p after: %S" (input-pending-p)) > > > > I know 19 (help event) is pending from a patch I have to report what is pending: > > I wonder if the problem is just that `input-pending-p' does not > respect `while-no-input-ignore-events'? `while-no-input' actually uses > `input-pending-p' before it even attempts to run the body: > > (setq val (or (input-pending-p) > (progn ,@body))) > > I think that `readable_events' needs to be modified to do exactly what > `kbd_buffer_store_buffered_event' does with regard to ignoring events > if `READABLE_EVENTS_FILTER_EVENTS' is set. > > I have no idea why `USE_TOOLKIT_SCROLL_BARS' is considered when > determining whether or not to require `READABLE_EVENTS_FILTER_EVENTS' > when filtering out the focus events. I imagine that that focus event > filtering could be replaced with a check against > `while-no-input-ignore-events' > > Does that make sense? Does the attached patch seem reasonable? It fixes the issue for me. Please review for code style and commit message style, I'm still a neophyte with that here. [-- Attachment #2: 0001-Ignore-events-in-input-pending-p.patch --] [-- Type: application/octet-stream, Size: 3813 bytes --] From a5b7edd60e4b279f6388762801c9c20f7b8631d5 Mon Sep 17 00:00:00 2001 From: Aaron Jensen <aaronjensen@gmail.com> Date: Sat, 16 Oct 2021 11:03:50 -0400 Subject: [PATCH] Ignore events in input-pending-p * keyboard.c (while_no_input_ignored_event): New predicate function. (kbd_buffer_store_buffered_event): Use `while_no_input_ignored_event'. (readable_events): Use `while_no_input_ignored_event' if `READABLE_EVENTS_FILTER_EVENTS' is set. Disregard `USE_TOOLKIT_SCROLL_BARS' when considering whether or not to ignore events as it is unclear why it was considered in the first place. --- src/keyboard.c | 56 +++++++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/src/keyboard.c b/src/keyboard.c index be9fad3ac3..1e50f8ff3a 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -375,6 +375,7 @@ #define READABLE_EVENTS_IGNORE_SQUEEZABLES (1 << 2) static void deliver_user_signal (int); static char *find_user_signal_name (int); static void store_user_signal_events (void); +static bool while_no_input_ignored_event (union buffered_input_event *event); /* Advance or retreat a buffered input event pointer. */ @@ -3460,12 +3461,8 @@ readable_events (int flags) do { - if (!( -#ifdef USE_TOOLKIT_SCROLL_BARS - (flags & READABLE_EVENTS_FILTER_EVENTS) && -#endif - (event->kind == FOCUS_IN_EVENT - || event->kind == FOCUS_OUT_EVENT)) + if (!((flags & READABLE_EVENTS_FILTER_EVENTS) && + while_no_input_ignored_event (event)) #ifdef USE_TOOLKIT_SCROLL_BARS && !((flags & READABLE_EVENTS_IGNORE_SQUEEZABLES) && (event->kind == SCROLL_BAR_CLICK_EVENT @@ -3647,29 +3644,10 @@ kbd_buffer_store_buffered_event (union buffered_input_event *event, #endif /* subprocesses */ } - Lisp_Object ignore_event; - - switch (event->kind) - { - case FOCUS_IN_EVENT: ignore_event = Qfocus_in; break; - case FOCUS_OUT_EVENT: ignore_event = Qfocus_out; break; - case HELP_EVENT: ignore_event = Qhelp_echo; break; - case ICONIFY_EVENT: ignore_event = Qiconify_frame; break; - case DEICONIFY_EVENT: ignore_event = Qmake_frame_visible; break; - case SELECTION_REQUEST_EVENT: ignore_event = Qselection_request; break; -#ifdef USE_FILE_NOTIFY - case FILE_NOTIFY_EVENT: ignore_event = Qfile_notify; break; -#endif -#ifdef HAVE_DBUS - case DBUS_EVENT: ignore_event = Qdbus_event; break; -#endif - default: ignore_event = Qnil; break; - } - /* If we're inside while-no-input, and this event qualifies as input, set quit-flag to cause an interrupt. */ if (!NILP (Vthrow_on_input) - && NILP (Fmemq (ignore_event, Vwhile_no_input_ignore_events))) + && !while_no_input_ignored_event (event)) Vquit_flag = Vthrow_on_input; } @@ -11627,6 +11605,32 @@ init_while_no_input_ignore_events (void) return events; } +static bool +while_no_input_ignored_event (union buffered_input_event *event) +{ + Lisp_Object ignore_event; + + switch (event->kind) + { + case FOCUS_IN_EVENT: ignore_event = Qfocus_in; break; + case FOCUS_OUT_EVENT: ignore_event = Qfocus_out; break; + case HELP_EVENT: ignore_event = Qhelp_echo; break; + case ICONIFY_EVENT: ignore_event = Qiconify_frame; break; + case DEICONIFY_EVENT: ignore_event = Qmake_frame_visible; break; + case SELECTION_REQUEST_EVENT: ignore_event = Qselection_request; break; +#ifdef USE_FILE_NOTIFY + case FILE_NOTIFY_EVENT: ignore_event = Qfile_notify; break; +#endif +#ifdef HAVE_DBUS + case DBUS_EVENT: ignore_event = Qdbus_event; break; +#endif + default: ignore_event = Qnil; break; + } + + + return !NILP (Fmemq (ignore_event, Vwhile_no_input_ignore_events)); +} + static void syms_of_keyboard_for_pdumper (void); void -- 2.33.0 ^ permalink raw reply related [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-16 15:09 ` Aaron Jensen @ 2021-10-16 16:49 ` martin rudalics 2021-10-16 17:14 ` Aaron Jensen 0 siblings, 1 reply; 85+ messages in thread From: martin rudalics @ 2021-10-16 16:49 UTC (permalink / raw) To: Aaron Jensen; +Cc: Alan Third, Eli Zaretskii, Gregory Heytings, emacs-devel > Does the attached patch seem reasonable? It fixes the issue for me. It might be what I've been intuitively missing in my prior patch. But my ignorance in this matter is too great to make any useful statement. > Please review for code style and commit message style, I'm still a > neophyte with that here. The only thing I can mention is to move the && to the next line in + if (!((flags & READABLE_EVENTS_FILTER_EVENTS) && + while_no_input_ignored_event (event)) martin ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-16 16:49 ` martin rudalics @ 2021-10-16 17:14 ` Aaron Jensen 2021-10-20 15:27 ` Aaron Jensen 0 siblings, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-10-16 17:14 UTC (permalink / raw) To: martin rudalics; +Cc: Alan Third, Eli Zaretskii, Gregory Heytings, emacs-devel [-- Attachment #1: Type: text/plain, Size: 614 bytes --] On Sat, Oct 16, 2021 at 12:49 PM martin rudalics <rudalics@gmx.at> wrote: > > > Does the attached patch seem reasonable? It fixes the issue for me. > > It might be what I've been intuitively missing in my prior patch. But > my ignorance in this matter is too great to make any useful statement. > > > Please review for code style and commit message style, I'm still a > > neophyte with that here. > > The only thing I can mention is to move the && to the next line in > > + if (!((flags & READABLE_EVENTS_FILTER_EVENTS) && > + while_no_input_ignored_event (event)) Thanks, updated. [-- Attachment #2: 0001-Ignore-events-in-input-pending-p.patch --] [-- Type: application/octet-stream, Size: 3813 bytes --] From 048fb7307fb50828657b7fe3e4ef866c0a8764ed Mon Sep 17 00:00:00 2001 From: Aaron Jensen <aaronjensen@gmail.com> Date: Sat, 16 Oct 2021 11:03:50 -0400 Subject: [PATCH] Ignore events in input-pending-p * keyboard.c (while_no_input_ignored_event): New predicate function. (kbd_buffer_store_buffered_event): Use `while_no_input_ignored_event'. (readable_events): Use `while_no_input_ignored_event' if `READABLE_EVENTS_FILTER_EVENTS' is set. Disregard `USE_TOOLKIT_SCROLL_BARS' when considering whether or not to ignore events as it is unclear why it was considered in the first place. --- src/keyboard.c | 56 +++++++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/src/keyboard.c b/src/keyboard.c index be9fad3ac3..f6f9b5ded7 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -375,6 +375,7 @@ #define READABLE_EVENTS_IGNORE_SQUEEZABLES (1 << 2) static void deliver_user_signal (int); static char *find_user_signal_name (int); static void store_user_signal_events (void); +static bool while_no_input_ignored_event (union buffered_input_event *event); /* Advance or retreat a buffered input event pointer. */ @@ -3460,12 +3461,8 @@ readable_events (int flags) do { - if (!( -#ifdef USE_TOOLKIT_SCROLL_BARS - (flags & READABLE_EVENTS_FILTER_EVENTS) && -#endif - (event->kind == FOCUS_IN_EVENT - || event->kind == FOCUS_OUT_EVENT)) + if (!((flags & READABLE_EVENTS_FILTER_EVENTS) + && while_no_input_ignored_event (event)) #ifdef USE_TOOLKIT_SCROLL_BARS && !((flags & READABLE_EVENTS_IGNORE_SQUEEZABLES) && (event->kind == SCROLL_BAR_CLICK_EVENT @@ -3647,29 +3644,10 @@ kbd_buffer_store_buffered_event (union buffered_input_event *event, #endif /* subprocesses */ } - Lisp_Object ignore_event; - - switch (event->kind) - { - case FOCUS_IN_EVENT: ignore_event = Qfocus_in; break; - case FOCUS_OUT_EVENT: ignore_event = Qfocus_out; break; - case HELP_EVENT: ignore_event = Qhelp_echo; break; - case ICONIFY_EVENT: ignore_event = Qiconify_frame; break; - case DEICONIFY_EVENT: ignore_event = Qmake_frame_visible; break; - case SELECTION_REQUEST_EVENT: ignore_event = Qselection_request; break; -#ifdef USE_FILE_NOTIFY - case FILE_NOTIFY_EVENT: ignore_event = Qfile_notify; break; -#endif -#ifdef HAVE_DBUS - case DBUS_EVENT: ignore_event = Qdbus_event; break; -#endif - default: ignore_event = Qnil; break; - } - /* If we're inside while-no-input, and this event qualifies as input, set quit-flag to cause an interrupt. */ if (!NILP (Vthrow_on_input) - && NILP (Fmemq (ignore_event, Vwhile_no_input_ignore_events))) + && !while_no_input_ignored_event (event)) Vquit_flag = Vthrow_on_input; } @@ -11627,6 +11605,32 @@ init_while_no_input_ignore_events (void) return events; } +static bool +while_no_input_ignored_event (union buffered_input_event *event) +{ + Lisp_Object ignore_event; + + switch (event->kind) + { + case FOCUS_IN_EVENT: ignore_event = Qfocus_in; break; + case FOCUS_OUT_EVENT: ignore_event = Qfocus_out; break; + case HELP_EVENT: ignore_event = Qhelp_echo; break; + case ICONIFY_EVENT: ignore_event = Qiconify_frame; break; + case DEICONIFY_EVENT: ignore_event = Qmake_frame_visible; break; + case SELECTION_REQUEST_EVENT: ignore_event = Qselection_request; break; +#ifdef USE_FILE_NOTIFY + case FILE_NOTIFY_EVENT: ignore_event = Qfile_notify; break; +#endif +#ifdef HAVE_DBUS + case DBUS_EVENT: ignore_event = Qdbus_event; break; +#endif + default: ignore_event = Qnil; break; + } + + + return !NILP (Fmemq (ignore_event, Vwhile_no_input_ignore_events)); +} + static void syms_of_keyboard_for_pdumper (void); void -- 2.33.0 ^ permalink raw reply related [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-16 17:14 ` Aaron Jensen @ 2021-10-20 15:27 ` Aaron Jensen 2021-10-20 16:41 ` Eli Zaretskii 0 siblings, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-10-20 15:27 UTC (permalink / raw) To: martin rudalics; +Cc: Alan Third, Eli Zaretskii, Gregory Heytings, emacs-devel [-- Attachment #1: Type: text/plain, Size: 783 bytes --] On Sat, Oct 16, 2021 at 1:14 PM Aaron Jensen <aaronjensen@gmail.com> wrote: > > On Sat, Oct 16, 2021 at 12:49 PM martin rudalics <rudalics@gmx.at> wrote: > > > > > Does the attached patch seem reasonable? It fixes the issue for me. > > > > It might be what I've been intuitively missing in my prior patch. But > > my ignorance in this matter is too great to make any useful statement. > > > > > Please review for code style and commit message style, I'm still a > > > neophyte with that here. > > > > The only thing I can mention is to move the && to the next line in > > > > + if (!((flags & READABLE_EVENTS_FILTER_EVENTS) && > > + while_no_input_ignored_event (event)) > > Thanks, updated. Any concerns with installing the attached? Thanks, Aaron [-- Attachment #2: 0001-Ignore-events-in-input-pending-p.patch --] [-- Type: application/x-patch, Size: 3813 bytes --] ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-20 15:27 ` Aaron Jensen @ 2021-10-20 16:41 ` Eli Zaretskii 2021-10-20 17:15 ` Aaron Jensen 0 siblings, 1 reply; 85+ messages in thread From: Eli Zaretskii @ 2021-10-20 16:41 UTC (permalink / raw) To: Aaron Jensen; +Cc: rudalics, alan, gregory, emacs-devel > From: Aaron Jensen <aaronjensen@gmail.com> > Date: Wed, 20 Oct 2021 11:27:38 -0400 > Cc: Alan Third <alan@idiocy.org>, Gregory Heytings <gregory@heytings.org>, Eli Zaretskii <eliz@gnu.org>, > emacs-devel@gnu.org > > Any concerns with installing the attached? Yes: I don't think we understand what it will do, apart of fixing this particular problem for you. The original code included conditions that depend on use of the toolkit scroll bars (the reasons for which we don't understand, AFAICT) and ignored just a small group of events, now we will/might ignore much more, and that's in the main source of reading events. Who knows what this will do. I _might_ be okay with installing this on master, conditioned on some new variable, so that if some problem reveals itself, it would be easy to see if it's due to this change. Thanks. ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-20 16:41 ` Eli Zaretskii @ 2021-10-20 17:15 ` Aaron Jensen 2021-10-20 17:40 ` Eli Zaretskii 2021-10-21 6:58 ` YAMAMOTO Mitsuharu 0 siblings, 2 replies; 85+ messages in thread From: Aaron Jensen @ 2021-10-20 17:15 UTC (permalink / raw) To: Eli Zaretskii Cc: martin rudalics, Alan Third, Gregory Heytings, YAMAMOTO Mitsuharu, emacs-devel On Wed, Oct 20, 2021 at 12:41 PM Eli Zaretskii <eliz@gnu.org> wrote: > > > From: Aaron Jensen <aaronjensen@gmail.com> > > Date: Wed, 20 Oct 2021 11:27:38 -0400 > > Cc: Alan Third <alan@idiocy.org>, Gregory Heytings <gregory@heytings.org>, Eli Zaretskii <eliz@gnu.org>, > > emacs-devel@gnu.org > > > > Any concerns with installing the attached? > > Yes: I don't think we understand what it will do, apart of fixing this > particular problem for you. The primary thing that it does is make input-pending-p respect while-no-input-ignore-events, which is necessary to make while-no-input fully respect while-no-input-ignore-events because it uses input-pending-p. It begs the question, should while-no-input-ignore-events be renamed, or should input-pending-p at least document that it respects while-no-input-ignore-events? It was apparently already the intent because input-pending-p passes READABLE_EVENTS_FILTER_EVENTS to get_input_pending. > The original code included conditions > that depend on use of the toolkit scroll bars (the reasons for which > we don't understand, AFAICT) and ignored just a small group of events, > now we will/might ignore much more, and that's in the main source of > reading events. Who knows what this will do. Yeah, that part is the biggest head scratcher to me. I wonder if Yamamoto Mitsuharu may know why this was added this way in 354344a20a06e2052bc23a4b92ac44af1075cdbe > > I _might_ be okay with installing this on master, conditioned on some > new variable, so that if some problem reveals itself, it would be easy > to see if it's due to this change. Okay, let's see if we get any more clarity first and then I can introduce a variable. What would you like to call it? And are you referring to a new ifdef check? Thanks, Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-20 17:15 ` Aaron Jensen @ 2021-10-20 17:40 ` Eli Zaretskii 2021-10-20 17:47 ` Aaron Jensen 2021-10-21 6:58 ` YAMAMOTO Mitsuharu 1 sibling, 1 reply; 85+ messages in thread From: Eli Zaretskii @ 2021-10-20 17:40 UTC (permalink / raw) To: Aaron Jensen; +Cc: rudalics, alan, gregory, mituharu, emacs-devel > From: Aaron Jensen <aaronjensen@gmail.com> > Date: Wed, 20 Oct 2021 13:15:21 -0400 > Cc: martin rudalics <rudalics@gmx.at>, Alan Third <alan@idiocy.org>, > Gregory Heytings <gregory@heytings.org>, emacs-devel@gnu.org, > YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> > > On Wed, Oct 20, 2021 at 12:41 PM Eli Zaretskii <eliz@gnu.org> wrote: > > > > > Any concerns with installing the attached? > > > > Yes: I don't think we understand what it will do, apart of fixing this > > particular problem for you. > > The primary thing that it does is make input-pending-p respect > while-no-input-ignore-events, which is necessary to make > while-no-input fully respect while-no-input-ignore-events because it > uses input-pending-p. Yes. But the change you propose is in readable_events, a function that has many more callers than just input-pending-p. In particular, one of its callers is kbd_buffer_get_event, which is the API through which Emacs reads all of its input. And now, under some circumstances, that API will ignore some events. That's scary, at least for me. > > I _might_ be okay with installing this on master, conditioned on some > > new variable, so that if some problem reveals itself, it would be easy > > to see if it's due to this change. > > Okay, let's see if we get any more clarity first and then I can > introduce a variable. What would you like to call it? And are you > referring to a new ifdef check? No, that must be a variable exposed to Lisp, so users could fiddle with it without rebuilding. ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-20 17:40 ` Eli Zaretskii @ 2021-10-20 17:47 ` Aaron Jensen 2021-10-20 18:24 ` Eli Zaretskii 0 siblings, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-10-20 17:47 UTC (permalink / raw) To: Eli Zaretskii Cc: martin rudalics, Alan Third, Gregory Heytings, YAMAMOTO Mitsuharu, emacs-devel On Wed, Oct 20, 2021 at 1:40 PM Eli Zaretskii <eliz@gnu.org> wrote: > > > From: Aaron Jensen <aaronjensen@gmail.com> > > Date: Wed, 20 Oct 2021 13:15:21 -0400 > > Cc: martin rudalics <rudalics@gmx.at>, Alan Third <alan@idiocy.org>, > > Gregory Heytings <gregory@heytings.org>, emacs-devel@gnu.org, > > YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> > > > > On Wed, Oct 20, 2021 at 12:41 PM Eli Zaretskii <eliz@gnu.org> wrote: > > > > > > > Any concerns with installing the attached? > > > > > > Yes: I don't think we understand what it will do, apart of fixing this > > > particular problem for you. > > > > The primary thing that it does is make input-pending-p respect > > while-no-input-ignore-events, which is necessary to make > > while-no-input fully respect while-no-input-ignore-events because it > > uses input-pending-p. > > Yes. But the change you propose is in readable_events, a function > that has many more callers than just input-pending-p. In particular, > one of its callers is kbd_buffer_get_event, which is the API through > which Emacs reads all of its input. And now, under some > circumstances, that API will ignore some events. That's scary, at > least for me. AFAICT kbd_buffer_get_event calls `readable_events (0)' only, which will disregard any of the code I changed or added. The READABLE_EVENTS_FILTER_EVENTS must be set for it to come into play. Only input-pending-p sets that flag AFAICT. > > > I _might_ be okay with installing this on master, conditioned on some > > > new variable, so that if some problem reveals itself, it would be easy > > > to see if it's due to this change. > > > > Okay, let's see if we get any more clarity first and then I can > > introduce a variable. What would you like to call it? And are you > > referring to a new ifdef check? > > No, that must be a variable exposed to Lisp, so users could fiddle > with it without rebuilding. Ah, I believe that variable exists already and can affect everything I changed other than the reliance on USE_TOOLKIT_SCROLL_BARS: while-no-input-ignore-events Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-20 17:47 ` Aaron Jensen @ 2021-10-20 18:24 ` Eli Zaretskii 2021-10-20 18:55 ` Aaron Jensen 0 siblings, 1 reply; 85+ messages in thread From: Eli Zaretskii @ 2021-10-20 18:24 UTC (permalink / raw) To: Aaron Jensen; +Cc: rudalics, alan, gregory, mituharu, emacs-devel > From: Aaron Jensen <aaronjensen@gmail.com> > Date: Wed, 20 Oct 2021 13:47:57 -0400 > Cc: martin rudalics <rudalics@gmx.at>, Alan Third <alan@idiocy.org>, > Gregory Heytings <gregory@heytings.org>, emacs-devel@gnu.org, > YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> > > > Yes. But the change you propose is in readable_events, a function > > that has many more callers than just input-pending-p. In particular, > > one of its callers is kbd_buffer_get_event, which is the API through > > which Emacs reads all of its input. And now, under some > > circumstances, that API will ignore some events. That's scary, at > > least for me. > > AFAICT kbd_buffer_get_event calls `readable_events (0)' only, which > will disregard any of the code I changed or added. The > READABLE_EVENTS_FILTER_EVENTS must be set for it to come into play. > Only input-pending-p sets that flag AFAICT. I don't see how this helps: who will remember that no caller of readable_events can ever use that flag without invoking this behavior whose justification we don't understand? > > No, that must be a variable exposed to Lisp, so users could fiddle > > with it without rebuilding. > > Ah, I believe that variable exists already and can affect everything I > changed other than the reliance on USE_TOOLKIT_SCROLL_BARS: > while-no-input-ignore-events No, it must be a separate variable, because it's for people who do have non-nil while-no-input-ignore-events. ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-20 18:24 ` Eli Zaretskii @ 2021-10-20 18:55 ` Aaron Jensen 2021-10-20 19:04 ` Eli Zaretskii 0 siblings, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-10-20 18:55 UTC (permalink / raw) To: Eli Zaretskii Cc: martin rudalics, Alan Third, Gregory Heytings, YAMAMOTO Mitsuharu, emacs-devel On Wed, Oct 20, 2021 at 2:24 PM Eli Zaretskii <eliz@gnu.org> wrote: > > > From: Aaron Jensen <aaronjensen@gmail.com> > > Date: Wed, 20 Oct 2021 13:47:57 -0400 > > Cc: martin rudalics <rudalics@gmx.at>, Alan Third <alan@idiocy.org>, > > Gregory Heytings <gregory@heytings.org>, emacs-devel@gnu.org, > > YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> > > > > > Yes. But the change you propose is in readable_events, a function > > > that has many more callers than just input-pending-p. In particular, > > > one of its callers is kbd_buffer_get_event, which is the API through > > > which Emacs reads all of its input. And now, under some > > > circumstances, that API will ignore some events. That's scary, at > > > least for me. > > > > AFAICT kbd_buffer_get_event calls `readable_events (0)' only, which > > will disregard any of the code I changed or added. The > > READABLE_EVENTS_FILTER_EVENTS must be set for it to come into play. > > Only input-pending-p sets that flag AFAICT. > > I don't see how this helps: who will remember that no caller of > readable_events can ever use that flag without invoking this behavior > whose justification we don't understand? Which behavior are you saying the justification is not understood? If it's the behavior I introduced, it should be understood as it is understandable. It is there so that the flag READABLE_EVENTS_FILTER_EVENTS can be actually respected instead of partially respected. Previously, that flag was only respected if USE_TOOLKIT_SCROLL_BARS was set and the event was focus in or focus out. That was not the sum total of events that we want to ignore, I believe. That is determined by while-no-input-ignore-events. > > > No, that must be a variable exposed to Lisp, so users could fiddle > > > with it without rebuilding. > > > > Ah, I believe that variable exists already and can affect everything I > > changed other than the reliance on USE_TOOLKIT_SCROLL_BARS: > > while-no-input-ignore-events > > No, it must be a separate variable, because it's for people who do > have non-nil while-no-input-ignore-events. Ok, let's see if we can get to where we are comfortable without this first. ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-20 18:55 ` Aaron Jensen @ 2021-10-20 19:04 ` Eli Zaretskii 2021-10-20 20:00 ` Aaron Jensen 0 siblings, 1 reply; 85+ messages in thread From: Eli Zaretskii @ 2021-10-20 19:04 UTC (permalink / raw) To: Aaron Jensen; +Cc: rudalics, alan, gregory, mituharu, emacs-devel > From: Aaron Jensen <aaronjensen@gmail.com> > Date: Wed, 20 Oct 2021 14:55:05 -0400 > Cc: martin rudalics <rudalics@gmx.at>, Alan Third <alan@idiocy.org>, > Gregory Heytings <gregory@heytings.org>, emacs-devel@gnu.org, > YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> > > On Wed, Oct 20, 2021 at 2:24 PM Eli Zaretskii <eliz@gnu.org> wrote: > > > > > AFAICT kbd_buffer_get_event calls `readable_events (0)' only, which > > > will disregard any of the code I changed or added. The > > > READABLE_EVENTS_FILTER_EVENTS must be set for it to come into play. > > > Only input-pending-p sets that flag AFAICT. > > > > I don't see how this helps: who will remember that no caller of > > readable_events can ever use that flag without invoking this behavior > > whose justification we don't understand? > > Which behavior are you saying the justification is not understood? If > it's the behavior I introduced, it should be understood as it is > understandable. We are mis-communicating. What bothers me is that in some more or less distant future someone will find a good reason to call readable_events with that flag from some other place, not realizing that doing so will get some of the events filtered out under some subtle conditions. Thus, the fact that this flag has currently just one user, which just happens to be the function whose behavior you are interested to change, doesn't help, because we'd still have a ticking maintenance bomb. ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-20 19:04 ` Eli Zaretskii @ 2021-10-20 20:00 ` Aaron Jensen 2021-10-21 6:02 ` Eli Zaretskii 0 siblings, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-10-20 20:00 UTC (permalink / raw) To: Eli Zaretskii Cc: martin rudalics, Alan Third, Gregory Heytings, YAMAMOTO Mitsuharu, emacs-devel On Wed, Oct 20, 2021 at 3:03 PM Eli Zaretskii <eliz@gnu.org> wrote: > > > From: Aaron Jensen <aaronjensen@gmail.com> > > Date: Wed, 20 Oct 2021 14:55:05 -0400 > > Cc: martin rudalics <rudalics@gmx.at>, Alan Third <alan@idiocy.org>, > > Gregory Heytings <gregory@heytings.org>, emacs-devel@gnu.org, > > YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> > > > > On Wed, Oct 20, 2021 at 2:24 PM Eli Zaretskii <eliz@gnu.org> wrote: > > > > > > > AFAICT kbd_buffer_get_event calls `readable_events (0)' only, which > > > > will disregard any of the code I changed or added. The > > > > READABLE_EVENTS_FILTER_EVENTS must be set for it to come into play. > > > > Only input-pending-p sets that flag AFAICT. > > > > > > I don't see how this helps: who will remember that no caller of > > > readable_events can ever use that flag without invoking this behavior > > > whose justification we don't understand? > > > > Which behavior are you saying the justification is not understood? If > > it's the behavior I introduced, it should be understood as it is > > understandable. > > We are mis-communicating. What bothers me is that in some more or > less distant future someone will find a good reason to call > readable_events with that flag from some other place, not realizing > that doing so will get some of the events filtered out under some > subtle conditions. Thus, the fact that this flag has currently just > one user, which just happens to be the function whose behavior you are > interested to change, doesn't help, because we'd still have a ticking > maintenance bomb. Got it, so I guess the question is, what is the expected behavior of readable_events when READABLE_EVENTS_FILTER_EVENTS is set? Would adding another flag like READABLE_EVENTS_FILTER_WHILE_NO_INPUT_IGNORE_EVENTS make it more clear exactly what it is doing? I could add that w/o changing the behavior of READABLE_EVENTS_FILTER_EVENTS at all, and remove its only usage (which should beg the question "Should we keep that flag?"). So, maybe I could just rename the flag? It seems unlikely that a person would start using a flag that has a single use without understanding what that flag does, but I'm somewhat out of position here and I don't want to create a maintenance burden for anyone. Thanks, Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-20 20:00 ` Aaron Jensen @ 2021-10-21 6:02 ` Eli Zaretskii 0 siblings, 0 replies; 85+ messages in thread From: Eli Zaretskii @ 2021-10-21 6:02 UTC (permalink / raw) To: Aaron Jensen; +Cc: rudalics, alan, gregory, mituharu, emacs-devel > From: Aaron Jensen <aaronjensen@gmail.com> > Date: Wed, 20 Oct 2021 16:00:12 -0400 > Cc: martin rudalics <rudalics@gmx.at>, Alan Third <alan@idiocy.org>, > Gregory Heytings <gregory@heytings.org>, emacs-devel@gnu.org, > YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> > > Got it, so I guess the question is, what is the expected behavior of > readable_events when READABLE_EVENTS_FILTER_EVENTS is set? Yes, and the problem is, we don't really know the answer. Someone at some point made it ignore some events, and also made it conditional on whether toolkit scrollbars are or aren't using. We don't understand why, and we now want to add more ignored events to the list, which will change the (partially unknown) behavior even more. > Would adding another flag like > READABLE_EVENTS_FILTER_WHILE_NO_INPUT_IGNORE_EVENTS make it more clear > exactly what it is doing? A new flag might be a good idea, indeed, but (a) I'd need to see a patch to have a clear idea what you mean, and (b) the application of that flag should be dependent on that variable exposed to Lisp, so that if problems happen, we can ask users to flip the variable and see if the problems go away. > I could add that w/o changing the behavior > of READABLE_EVENTS_FILTER_EVENTS at all, and remove its only usage > (which should beg the question "Should we keep that flag?"). So, maybe > I could just rename the flag? No, it must be a separately controlled behavior, see above. > It seems unlikely that a person would start using a flag that has a > single use without understanding what that flag does In general, yes. But isn't that precisely what you suggest we do here? ;-) ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-20 17:15 ` Aaron Jensen 2021-10-20 17:40 ` Eli Zaretskii @ 2021-10-21 6:58 ` YAMAMOTO Mitsuharu 2021-10-21 7:47 ` Eli Zaretskii 2021-10-21 11:25 ` Aaron Jensen 1 sibling, 2 replies; 85+ messages in thread From: YAMAMOTO Mitsuharu @ 2021-10-21 6:58 UTC (permalink / raw) To: Aaron Jensen Cc: martin rudalics, Eli Zaretskii, Gregory Heytings, Alan Third, emacs-devel On Thu, 21 Oct 2021 02:15:21 +0900, Aaron Jensen wrote: > > > The original code included conditions > > that depend on use of the toolkit scroll bars (the reasons for which > > we don't understand, AFAICT) and ignored just a small group of events, > > now we will/might ignore much more, and that's in the main source of > > reading events. Who knows what this will do. > > Yeah, that part is the biggest head scratcher to me. I wonder if > Yamamoto Mitsuharu may know why this was added this way in > 354344a20a06e2052bc23a4b92ac44af1075cdbe Maybe I've injected some bug with the above change? The original intention was to coalesce redisplays caused by successive scroll thumb dragging events because otherwise we only see partly updated screen when redisplay-dont-pause is nil, which used to be the default. See https://lists.gnu.org/r/emacs-devel/2005-05/msg00297.html . YAMAMOTO Mitsuharu mituharu@math.s.chiba-u.ac.jp ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-21 6:58 ` YAMAMOTO Mitsuharu @ 2021-10-21 7:47 ` Eli Zaretskii 2021-10-21 11:25 ` Aaron Jensen 1 sibling, 0 replies; 85+ messages in thread From: Eli Zaretskii @ 2021-10-21 7:47 UTC (permalink / raw) To: YAMAMOTO Mitsuharu; +Cc: rudalics, alan, gregory, aaronjensen, emacs-devel > Date: Thu, 21 Oct 2021 15:58:39 +0900 > From: YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> > Cc: Eli Zaretskii <eliz@gnu.org>, > martin rudalics <rudalics@gmx.at>, > Alan Third <alan@idiocy.org>, > Gregory Heytings <gregory@heytings.org>, > emacs-devel@gnu.org > > > > The original code included conditions > > > that depend on use of the toolkit scroll bars (the reasons for which > > > we don't understand, AFAICT) and ignored just a small group of events, > > > now we will/might ignore much more, and that's in the main source of > > > reading events. Who knows what this will do. > > > > Yeah, that part is the biggest head scratcher to me. I wonder if > > Yamamoto Mitsuharu may know why this was added this way in > > 354344a20a06e2052bc23a4b92ac44af1075cdbe > > Maybe I've injected some bug with the above change? The original > intention was to coalesce redisplays caused by successive scroll thumb > dragging events because otherwise we only see partly updated screen > when redisplay-dont-pause is nil, which used to be the default. > > See https://lists.gnu.org/r/emacs-devel/2005-05/msg00297.html . Thanks. With this explanation, I think we do need a new flag, and we should use it controlled by some variable exposed to Lisp. If this proves not to have adverse effects, we can in the future discard that variable and make the additional filtering unconditional. ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-21 6:58 ` YAMAMOTO Mitsuharu 2021-10-21 7:47 ` Eli Zaretskii @ 2021-10-21 11:25 ` Aaron Jensen 2021-10-21 11:33 ` Aaron Jensen 2021-10-21 13:40 ` Eli Zaretskii 1 sibling, 2 replies; 85+ messages in thread From: Aaron Jensen @ 2021-10-21 11:25 UTC (permalink / raw) To: YAMAMOTO Mitsuharu Cc: martin rudalics, Eli Zaretskii, Gregory Heytings, Alan Third, emacs-devel On Thu, Oct 21, 2021 at 2:58 AM YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> wrote: > > Maybe I've injected some bug with the above change? The original > intention was to coalesce redisplays caused by successive scroll thumb > dragging events because otherwise we only see partly updated screen > when redisplay-dont-pause is nil, which used to be the default. I understand the change better now and why the `#ifdef USE_TOOLKIT_SCROLL_BARS` was added around the `flags & READABLE_EVENTS_FILTER_EVENTS` check. It was an optimization to avoid an additional check because there was a previous check already done before entering the loop. So, I don't think that a bug was introduced, it just made the code a little more difficult to decipher. I can add that check back into my patch in whatever its final form is. On Thu, Oct 21, 2021 at 2:01 AM Eli Zaretskii <eliz@gnu.org> wrote: > Yes, and the problem is, we don't really know the answer. Someone at > some point made it ignore some events, and also made it conditional on > whether toolkit scrollbars are or aren't using. We don't understand > why, and we now want to add more ignored events to the list, which > will change the (partially unknown) behavior even more. It appears that FOCUS_IN_EVENT has been ignored since 2002: a0ba8995e3c579f4c57a674b1b44d60f6a4fb82d That introduced a bug with X focus handling, so the filtering was made to only work for input-pending-p: 20057d5215674d9c83b79fafedf37bf36b2fd0ae The 2nd bug fix thread is here, with key quotes below: https://lists.gnu.org/archive/html/emacs-devel/2002-06/msg00615.html Richard Stallman wrote: > The code in question ignored FOCUS_IN_EVENT when looking for pending > input. > > That was the intention. There was a bug report that input-pending-p > reported that there was input available, even when it was just a focus > change. I made this change to fix that. > > So when a new frame got focus, the modeline face was not > changed immediately to the "active" looking face. > > It is right to fix that bug, but simply removing the change is not > correct. That would reintroduce the other bug. And: > I think that the input-pending-p problem needs a real fix. > These events should be ignored for the sake of input-pending-p > even if they are not ignored for some other purposes. > > Perhaps there should be two different functions for asking > whether there is input, one for low-level Emacs purposes > and one for high-level purposes. Can you try fixing it that way? So, the original impetus for the filtering code was that input-pending-p was reporting t when only a filter change was made. In other words, when there wasn't actually an input pending. This is the same bug that I am reporting now, there's just a different event involved (help-echo). The flag was intended to be used by input-pending-p alone when added. > > Would adding another flag like > > READABLE_EVENTS_FILTER_WHILE_NO_INPUT_IGNORE_EVENTS make it more clear > > exactly what it is doing? > > A new flag might be a good idea, indeed, but (a) I'd need to see a > patch to have a clear idea what you mean, and (b) the application of > that flag should be dependent on that variable exposed to Lisp, so > that if problems happen, we can ask users to flip the variable and see > if the problems go away. I think that the variable would just change how READABLE_EVENTS_FILTER_EVENTS worked, so I would not add a new flag unless you feel that ultimately renaming it would be beneficial. If the new variable was set to t, it would filter all events in while-no-input-ignore-events, nil would use the current focus-in-only filtering. Perhaps the flag should be input-pending-p-ignores-while-no-input-ignore-events? It's a mouthful, but it's temporary hopefully. Any other better names? > > It seems unlikely that a person would start using a flag that has a > > single use without understanding what that flag does > > In general, yes. But isn't that precisely what you suggest we do > here? ;-) Hah, to be fair I understand exactly what the flag does :). I just didn't until now understand why it came to be. Hopefully the above context is helpful and makes everyone more comfortable with my proposed changes (extra variable or no). Please let me know how you would like me to proceed -- I'm happy to add the extra variable and vary the behavior based on it for now. Thanks, Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-21 11:25 ` Aaron Jensen @ 2021-10-21 11:33 ` Aaron Jensen 2021-10-21 12:40 ` Stefan Monnier 2021-10-21 13:44 ` Eli Zaretskii 2021-10-21 13:40 ` Eli Zaretskii 1 sibling, 2 replies; 85+ messages in thread From: Aaron Jensen @ 2021-10-21 11:33 UTC (permalink / raw) To: YAMAMOTO Mitsuharu Cc: martin rudalics, Eli Zaretskii, Gregory Heytings, Alan Third, emacs-devel On Thu, Oct 21, 2021 at 7:25 AM Aaron Jensen <aaronjensen@gmail.com> wrote: > > It appears that FOCUS_IN_EVENT has been ignored since 2002: > a0ba8995e3c579f4c57a674b1b44d60f6a4fb82d > That introduced a bug with X focus handling, so the filtering was made > to only work for input-pending-p: > 20057d5215674d9c83b79fafedf37bf36b2fd0ae One more addition to the tale: 7cfe2dc415d0a5768f9e6800836ff6887079dc30 That started ignoring FOCUS_OUT_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." Just a little more precedent for changes in this area intended to affect input-pending-p. All of it's the same, we only want input-pending-p to return t if there is an input pending. It does make me wonder if we should rename while-no-input-ignore-events to something like input-ignore-events or non-input-events. Thoughts? Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-21 11:33 ` Aaron Jensen @ 2021-10-21 12:40 ` Stefan Monnier 2021-10-21 13:44 ` Eli Zaretskii 1 sibling, 0 replies; 85+ messages in thread From: Stefan Monnier @ 2021-10-21 12:40 UTC (permalink / raw) To: Aaron Jensen Cc: YAMAMOTO Mitsuharu, martin rudalics, Eli Zaretskii, Gregory Heytings, Alan Third, emacs-devel > It does make me wonder if we should rename > while-no-input-ignore-events to something like input-ignore-events or > non-input-events. Thoughts? I like `non-input-events` whereas I don't like `input-ignore-events` because it sounds like these are events we'll jut send to /dev/null. Stefan ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-21 11:33 ` Aaron Jensen 2021-10-21 12:40 ` Stefan Monnier @ 2021-10-21 13:44 ` Eli Zaretskii 2021-10-21 14:07 ` Aaron Jensen 1 sibling, 1 reply; 85+ messages in thread From: Eli Zaretskii @ 2021-10-21 13:44 UTC (permalink / raw) To: Aaron Jensen; +Cc: rudalics, alan, gregory, mituharu, emacs-devel > From: Aaron Jensen <aaronjensen@gmail.com> > Date: Thu, 21 Oct 2021 07:33:05 -0400 > Cc: Eli Zaretskii <eliz@gnu.org>, martin rudalics <rudalics@gmx.at>, Alan Third <alan@idiocy.org>, > Gregory Heytings <gregory@heytings.org>, emacs-devel@gnu.org > > On Thu, Oct 21, 2021 at 7:25 AM Aaron Jensen <aaronjensen@gmail.com> wrote: > > > It does make me wonder if we should rename > while-no-input-ignore-events to something like input-ignore-events or > non-input-events. Thoughts? I don't see why: the list is still used the same as before. Renaming a variable is a PITA, so it should be reserved to when we have very good reasons, or shortly after the variable was introduced, which isn't the case here. ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-21 13:44 ` Eli Zaretskii @ 2021-10-21 14:07 ` Aaron Jensen 2021-10-21 17:36 ` Eli Zaretskii 0 siblings, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-10-21 14:07 UTC (permalink / raw) To: Eli Zaretskii Cc: martin rudalics, Alan Third, Gregory Heytings, YAMAMOTO Mitsuharu, emacs-devel On Thu, Oct 21, 2021 at 9:44 AM Eli Zaretskii <eliz@gnu.org> wrote: > > > On Thu, Oct 21, 2021 at 7:25 AM Aaron Jensen <aaronjensen@gmail.com> wrote: > > > > > It does make me wonder if we should rename > > while-no-input-ignore-events to something like input-ignore-events or > > non-input-events. Thoughts? > > I don't see why: the list is still used the same as before. Renaming > a variable is a PITA, so it should be reserved to when we have very > good reasons, or shortly after the variable was introduced, which > isn't the case here. The variable name is while-no-input-ignore-events, which implies that it is related to while-no-input alone. In any version of the change I am proposing, that list would also be used to ignore events within input-pending-p, which is not while-no-input. One may find it surprising that while-no-input-ignore-events is respected by input-pending-p, so it seemed worth considering a name change. I'd rather not undertake a PITA, but at the same time I find it helpful when the names of variables are not misleading. > I have no problem with fixing stuff inside input-pending-p. My > problem is that your fix is not in input-pending-p, it is in a general > function called from many places. So its effects are much more > general than on input-pending-p alone. And my concern is that the > change which you want to make will some day affect code unrelated to > input-pending-p, with no one the wiser. I'm not trying to be difficult, but I just want to make sure that I am not missing something. It seems to me that the *only* way that my change would adversely affect anything other than input-pending-p is if someone used the READABLE_EVENTS_FILTER_EVENTS flag in the future without knowing what it does (and/or assuming that it does what it used to do, which is filter only focus in and focus out). Is that what you see as well? Also, there have already been several changes to readable_events that were intended to only affect input-pending-p because they were guarded by READABLE_EVENTS_FILTER_EVENTS (or its predecessor, the filter_events) flag, so we are choosing now to be more cautious than we were, which is fine, again, just want to make sure I'm understanding the reasoning. Here's another proposal (not code yet, hopefully the explanation is enough): Introduce a new variable, non-input-events that is initialized to the same list that while-no-input-ignore-events is In readable_events: Use non-input-events if it is non-nil rather than focus in/out when READABLE_EVENTS_FILTER_EVENTS is set. Revert to the old behavior if it is nil. In while-no-input: Use non-input-events if it is non-nil and while-no-input-ignore-events if it is not (alternatively, respect both lists) Deprecate while-no-input-ignore-events encouraging use of non-input-events instead Update documentation in both input-pending-p and while-no-input to reference non-input-events How does that seem? Thanks, Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-21 14:07 ` Aaron Jensen @ 2021-10-21 17:36 ` Eli Zaretskii 2021-10-21 17:46 ` Aaron Jensen 0 siblings, 1 reply; 85+ messages in thread From: Eli Zaretskii @ 2021-10-21 17:36 UTC (permalink / raw) To: Aaron Jensen; +Cc: rudalics, alan, gregory, mituharu, emacs-devel > From: Aaron Jensen <aaronjensen@gmail.com> > Date: Thu, 21 Oct 2021 10:07:28 -0400 > Cc: YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>, martin rudalics <rudalics@gmx.at>, > Alan Third <alan@idiocy.org>, Gregory Heytings <gregory@heytings.org>, emacs-devel@gnu.org > > On Thu, Oct 21, 2021 at 9:44 AM Eli Zaretskii <eliz@gnu.org> wrote: > > > > > On Thu, Oct 21, 2021 at 7:25 AM Aaron Jensen <aaronjensen@gmail.com> wrote: > > > > > > > It does make me wonder if we should rename > > > while-no-input-ignore-events to something like input-ignore-events or > > > non-input-events. Thoughts? > > > > I don't see why: the list is still used the same as before. Renaming > > a variable is a PITA, so it should be reserved to when we have very > > good reasons, or shortly after the variable was introduced, which > > isn't the case here. > > The variable name is while-no-input-ignore-events, which implies that > it is related to while-no-input alone. In any version of the change I > am proposing, that list would also be used to ignore events within > input-pending-p, which is not while-no-input. One may find it > surprising that while-no-input-ignore-events is respected by > input-pending-p, so it seemed worth considering a name change. I'd > rather not undertake a PITA, but at the same time I find it helpful > when the names of variables are not misleading. I still don't think this justifies renaming. Yes, it would have been better if we used a different name, but that ship has sailed, and the new uses aren't far enough from the old ones to justify the pain of renaming. (I feel like I'm repeating myself, but so do you.) > > I have no problem with fixing stuff inside input-pending-p. My > > problem is that your fix is not in input-pending-p, it is in a general > > function called from many places. So its effects are much more > > general than on input-pending-p alone. And my concern is that the > > change which you want to make will some day affect code unrelated to > > input-pending-p, with no one the wiser. > > I'm not trying to be difficult, but I just want to make sure that I am > not missing something. It seems to me that the *only* way that my > change would adversely affect anything other than input-pending-p is > if someone used the READABLE_EVENTS_FILTER_EVENTS flag in the future > without knowing what it does (and/or assuming that it does what it > used to do, which is filter only focus in and focus out). Is that what > you see as well? Yes. > Also, there have already been several changes to readable_events that > were intended to only affect input-pending-p because they were guarded > by READABLE_EVENTS_FILTER_EVENTS (or its predecessor, the > filter_events) flag, so we are choosing now to be more cautious than > we were, which is fine, again, just want to make sure I'm > understanding the reasoning. Yes. > Here's another proposal (not code yet, hopefully the explanation is enough): > > Introduce a new variable, non-input-events that is initialized to the > same list that while-no-input-ignore-events is > In readable_events: Use non-input-events if it is non-nil rather than > focus in/out when READABLE_EVENTS_FILTER_EVENTS is set. Revert to the > old behavior if it is nil. > In while-no-input: Use non-input-events if it is non-nil and > while-no-input-ignore-events if it is not (alternatively, respect both > lists) > Deprecate while-no-input-ignore-events encouraging use of > non-input-events instead > Update documentation in both input-pending-p and while-no-input to > reference non-input-events > > How does that seem? How is this different from your original proposal, and how does this address my concerns, which you described above and I just confirmed? My concern is precisely that using READABLE_EVENTS_FILTER_EVENTS does NOT tell that this flag is supposed to be used only from input-pending-p, it just tells that the events are somehow filtered. But I'm again repeating myself. ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-21 17:36 ` Eli Zaretskii @ 2021-10-21 17:46 ` Aaron Jensen 2021-10-21 18:04 ` Eli Zaretskii 0 siblings, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-10-21 17:46 UTC (permalink / raw) To: Eli Zaretskii Cc: martin rudalics, Alan Third, Gregory Heytings, YAMAMOTO Mitsuharu, emacs-devel On Thu, Oct 21, 2021 at 1:36 PM Eli Zaretskii <eliz@gnu.org> wrote: > > (I feel like I'm repeating myself, but so do you.) I'm sorry about that. Negotiating meaning over email is tough sometimes and I don't have as much context as I wish I had, hence my probing. I appreciate your patience with me. > > Here's another proposal (not code yet, hopefully the explanation is enough): > > > > Introduce a new variable, non-input-events that is initialized to the > > same list that while-no-input-ignore-events is > > In readable_events: Use non-input-events if it is non-nil rather than > > focus in/out when READABLE_EVENTS_FILTER_EVENTS is set. Revert to the > > old behavior if it is nil. > > In while-no-input: Use non-input-events if it is non-nil and > > while-no-input-ignore-events if it is not (alternatively, respect both > > lists) > > Deprecate while-no-input-ignore-events encouraging use of > > non-input-events instead > > Update documentation in both input-pending-p and while-no-input to > > reference non-input-events > > > > How does that seem? > > How is this different from your original proposal, and how does this > address my concerns, which you described above and I just confirmed? > My concern is precisely that using READABLE_EVENTS_FILTER_EVENTS does > NOT tell that this flag is supposed to be used only from > input-pending-p, it just tells that the events are somehow filtered. > But I'm again repeating myself. Right, READABLE_EVENTS_FILTER_EVENTS does not (and should not) indicate that it is only used from input-pending-p. The flag is named after what it does, not its use case. What its meaning is is ambiguous, so it is up to us to define what it is. We know what it means in code today. We know it is only used in one place today and why it is used there. I posit that it could eventually come to mean "filter all events specified by while-no-input-ignore-events", but since we want to take a cautious approach, the above suggestion is to, rather than provide a boolean flag to enable/disable the new meaning of READABLE_EVENTS_FILTER_EVENTS we would use a new variable that was better named for its use case. A user who discovered problems would be able to set the new variable to nil and get the exact behavior that they get today. Once we feel comfortable that this approach did not introduce any problems, we could deprecate/remove while-no-input-ignore-events. If there is no appetite for renaming the variable at all, I can go with some other temporary variable, perhaps readable-events-filter-events-includes-while-no-input-ignore-events? Thanks, Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-21 17:46 ` Aaron Jensen @ 2021-10-21 18:04 ` Eli Zaretskii 2021-10-21 20:27 ` Aaron Jensen 0 siblings, 1 reply; 85+ messages in thread From: Eli Zaretskii @ 2021-10-21 18:04 UTC (permalink / raw) To: Aaron Jensen; +Cc: rudalics, alan, gregory, mituharu, emacs-devel > From: Aaron Jensen <aaronjensen@gmail.com> > Date: Thu, 21 Oct 2021 13:46:47 -0400 > Cc: martin rudalics <rudalics@gmx.at>, Alan Third <alan@idiocy.org>, > Gregory Heytings <gregory@heytings.org>, > YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>, emacs-devel@gnu.org > > Right, READABLE_EVENTS_FILTER_EVENTS does not (and should not) > indicate that it is only used from input-pending-p. Does not: agree. Should not: why? If we decide that this is its only purpose, why shouldn't limit its use to that caller only? > The flag is named after what it does, not its use case. Well, one solution could be renaming the flag, or documenting that it must not be used by any caller except input-pending-p. ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-21 18:04 ` Eli Zaretskii @ 2021-10-21 20:27 ` Aaron Jensen 2021-10-22 2:28 ` Aaron Jensen 2021-10-22 6:10 ` Eli Zaretskii 0 siblings, 2 replies; 85+ messages in thread From: Aaron Jensen @ 2021-10-21 20:27 UTC (permalink / raw) To: Eli Zaretskii Cc: martin rudalics, Alan Third, Gregory Heytings, YAMAMOTO Mitsuharu, emacs-devel On Thu, Oct 21, 2021 at 2:04 PM Eli Zaretskii <eliz@gnu.org> wrote: > > > From: Aaron Jensen <aaronjensen@gmail.com> > > Date: Thu, 21 Oct 2021 13:46:47 -0400 > > Cc: martin rudalics <rudalics@gmx.at>, Alan Third <alan@idiocy.org>, > > Gregory Heytings <gregory@heytings.org>, > > YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>, emacs-devel@gnu.org > > > > Right, READABLE_EVENTS_FILTER_EVENTS does not (and should not) > > indicate that it is only used from input-pending-p. > > Does not: agree. Should not: why? If we decide that this is its only > purpose, why shouldn't limit its use to that caller only? It's a general principle that that I try to adhere to -- name things for what they do, rather than their use case. We cannot imagine all of the use cases that may come in the future and someone else may want to use readable events with non-input events filtered. If it was named after input-pending-p, they could either use it anyway and create confusing code, or rename it back to what it was, or rewrite it. Also, a reader of the code would no longer get any hints as to what the flag does from its name. Whereas if it were named after what it did they can always grep to find its uses -- no information is lost. If anything, I would suggest renaming it to READABLE_EVENTS_FILTER_NON_INPUT_EVENTS to go along with the non-input-events variable. I'm not here to enforce my norms onto Emacs though, I will conform with Emacs norms. > Well, one solution could be renaming the flag, or documenting that it > must not be used by any caller except input-pending-p. Documentation seems like it could be useful, would you want it to say it can't be used by anything but input-pending-p or that it is currently only used by it? Does the rest of the plan seem reasonable to you? Thanks, Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-21 20:27 ` Aaron Jensen @ 2021-10-22 2:28 ` Aaron Jensen 2021-10-22 6:10 ` Eli Zaretskii 1 sibling, 0 replies; 85+ messages in thread From: Aaron Jensen @ 2021-10-22 2:28 UTC (permalink / raw) To: Eli Zaretskii Cc: martin rudalics, Alan Third, Gregory Heytings, YAMAMOTO Mitsuharu, emacs-devel [-- Attachment #1: Type: text/plain, Size: 184 bytes --] On Thu, Oct 21, 2021 at 4:27 PM Aaron Jensen <aaronjensen@gmail.com> wrote: > Does the rest of the plan seem reasonable to you? Patch attached for your consideration. Thanks, Aaron [-- Attachment #2: 0001-Ignore-non-input-events-in-input-pending-p.patch --] [-- Type: application/octet-stream, Size: 7833 bytes --] From 5c58817e164507d57296f8a22d0d8cc4895dc864 Mon Sep 17 00:00:00 2001 From: Aaron Jensen <aaronjensen@gmail.com> Date: Sat, 16 Oct 2021 11:03:50 -0400 Subject: [PATCH] Ignore non-input events in input-pending-p * keyboard.c (is_non_input_event): New predicate function. (non-input-events): New variable. (while-no-input-ignore-events): Updated documentation. (kbd_buffer_store_buffered_event): Use `is_non_input_event'. (READABLE_EVENTS_FILTER_NON_INPUT_EVENTS): Renamed from `READABLE_EVENTS_FILTER_EVENTS' (read_char): Use `non-input-events' if non-nil. (readable_events): Use `is_non_input_event' if `non-input-events' is non-nil. --- src/keyboard.c | 97 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 63 insertions(+), 34 deletions(-) diff --git a/src/keyboard.c b/src/keyboard.c index be9fad3ac3..d63c6c50ef 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -340,7 +340,7 @@ #define GROW_RAW_KEYBUF \ /* Flags for readable_events. */ #define READABLE_EVENTS_DO_TIMERS_NOW (1 << 0) -#define READABLE_EVENTS_FILTER_EVENTS (1 << 1) +#define READABLE_EVENTS_FILTER_NON_INPUT_EVENTS (1 << 1) #define READABLE_EVENTS_IGNORE_SQUEEZABLES (1 << 2) /* Function for init_keyboard to call with no args (if nonzero). */ @@ -375,6 +375,7 @@ #define READABLE_EVENTS_IGNORE_SQUEEZABLES (1 << 2) static void deliver_user_signal (int); static char *find_user_signal_name (int); static void store_user_signal_events (void); +static bool is_non_input_event (union buffered_input_event *event); /* Advance or retreat a buffered input event pointer. */ @@ -2940,10 +2941,14 @@ read_char (int commandflag, Lisp_Object map, if (!NILP (tem)) { struct buffer *prev_buffer = current_buffer; + Lisp_Object non_input_events = Vnon_input_events; last_input_event = c; call4 (Qcommand_execute, tem, Qnil, Fvector (1, &last_input_event), Qt); - if (CONSP (c) && !NILP (Fmemq (XCAR (c), Vwhile_no_input_ignore_events)) + if (NILP (non_input_events)) + non_input_events = Vwhile_no_input_ignore_events; + + if (CONSP (c) && !NILP (Fmemq (XCAR (c), non_input_events)) && !end_time) /* We stopped being idle for this event; undo that. This prevents automatic window selection (under @@ -3446,11 +3451,12 @@ readable_events (int flags) if (flags & READABLE_EVENTS_DO_TIMERS_NOW) timer_check (); - /* If the buffer contains only FOCUS_IN/OUT_EVENT events, and - READABLE_EVENTS_FILTER_EVENTS is set, report it as empty. */ + /* If the buffer contains only events in Vnon_input_events, or + FOCUS_IN/OUT_EVENT events when Vnon_input_events is nil, and + READABLE_EVENTS_FILTER_NON_INPUT_EVENTS is set, report it as empty. */ if (kbd_fetch_ptr != kbd_store_ptr) { - if (flags & (READABLE_EVENTS_FILTER_EVENTS + if (flags & (READABLE_EVENTS_FILTER_NON_INPUT_EVENTS #ifdef USE_TOOLKIT_SCROLL_BARS | READABLE_EVENTS_IGNORE_SQUEEZABLES #endif @@ -3462,10 +3468,13 @@ readable_events (int flags) { if (!( #ifdef USE_TOOLKIT_SCROLL_BARS - (flags & READABLE_EVENTS_FILTER_EVENTS) && + (flags & READABLE_EVENTS_FILTER_NON_INPUT_EVENTS) && #endif - (event->kind == FOCUS_IN_EVENT - || event->kind == FOCUS_OUT_EVENT)) + ((NILP (Vnon_input_events) + && event->kind == FOCUS_IN_EVENT + || event->kind == FOCUS_OUT_EVENT) + || (!NILP (Vnon_input_events) + && is_non_input_event (event)))) #ifdef USE_TOOLKIT_SCROLL_BARS && !((flags & READABLE_EVENTS_IGNORE_SQUEEZABLES) && (event->kind == SCROLL_BAR_CLICK_EVENT @@ -3647,29 +3656,10 @@ kbd_buffer_store_buffered_event (union buffered_input_event *event, #endif /* subprocesses */ } - Lisp_Object ignore_event; - - switch (event->kind) - { - case FOCUS_IN_EVENT: ignore_event = Qfocus_in; break; - case FOCUS_OUT_EVENT: ignore_event = Qfocus_out; break; - case HELP_EVENT: ignore_event = Qhelp_echo; break; - case ICONIFY_EVENT: ignore_event = Qiconify_frame; break; - case DEICONIFY_EVENT: ignore_event = Qmake_frame_visible; break; - case SELECTION_REQUEST_EVENT: ignore_event = Qselection_request; break; -#ifdef USE_FILE_NOTIFY - case FILE_NOTIFY_EVENT: ignore_event = Qfile_notify; break; -#endif -#ifdef HAVE_DBUS - case DBUS_EVENT: ignore_event = Qdbus_event; break; -#endif - default: ignore_event = Qnil; break; - } - /* If we're inside while-no-input, and this event qualifies as input, set quit-flag to cause an interrupt. */ if (!NILP (Vthrow_on_input) - && NILP (Fmemq (ignore_event, Vwhile_no_input_ignore_events))) + && !is_non_input_event (event)) Vquit_flag = Vthrow_on_input; } @@ -10490,7 +10480,7 @@ DEFUN ("input-pending-p", Finput_pending_p, Sinput_pending_p, 0, 1, 0, return (get_input_pending ((NILP (check_timers) ? 0 : READABLE_EVENTS_DO_TIMERS_NOW) - | READABLE_EVENTS_FILTER_EVENTS) + | READABLE_EVENTS_FILTER_NON_INPUT_EVENTS) ? Qt : Qnil); } @@ -11607,7 +11597,7 @@ init_keyboard (void) }; static Lisp_Object -init_while_no_input_ignore_events (void) +init_non_input_events (void) { Lisp_Object events = listn (9, Qselect_window, Qhelp_echo, Qmove_frame, Qiconify_frame, Qmake_frame_visible, @@ -11627,6 +11617,35 @@ init_while_no_input_ignore_events (void) return events; } +static bool +is_non_input_event (union buffered_input_event *event) +{ + Lisp_Object lisp_event; + Lisp_Object non_input_events = Vnon_input_events; + + if (NILP (non_input_events)) + non_input_events = Vwhile_no_input_ignore_events; + + switch (event->kind) + { + case FOCUS_IN_EVENT: lisp_event = Qfocus_in; break; + case FOCUS_OUT_EVENT: lisp_event = Qfocus_out; break; + case HELP_EVENT: lisp_event = Qhelp_echo; break; + case ICONIFY_EVENT: lisp_event = Qiconify_frame; break; + case DEICONIFY_EVENT: lisp_event = Qmake_frame_visible; break; + case SELECTION_REQUEST_EVENT: lisp_event = Qselection_request; break; +#ifdef USE_FILE_NOTIFY + case FILE_NOTIFY_EVENT: lisp_event = Qfile_notify; break; +#endif +#ifdef HAVE_DBUS + case DBUS_EVENT: lisp_event = Qdbus_event; break; +#endif + default: lisp_event = Qnil; break; + } + + return !NILP (Fmemq (lisp_event, non_input_events)); +} + static void syms_of_keyboard_for_pdumper (void); void @@ -12519,13 +12538,23 @@ syms_of_keyboard (void) If nil, Emacs crashes immediately in response to fatal signals. */); attempt_orderly_shutdown_on_fatal_signal = true; + DEFVAR_LISP ("non-input-events", + Vnon_input_events, + doc: /* Events ignored by input checking. +Events in this list do not count as pending input while running +`while-no-input' or `input-pending-p' and do not cause any idle timers to get +reset when they occur. Setting this to nil will cause `while-no-input' to +respect `while-no-input-ignore-events' instead. */ +); + Vnon_input_events = init_non_input_events (); + DEFVAR_LISP ("while-no-input-ignore-events", Vwhile_no_input_ignore_events, doc: /* Ignored events from `while-no-input'. -Events in this list do not count as pending input while running -`while-no-input' and do not cause any idle timers to get reset when they -occur. */); - Vwhile_no_input_ignore_events = init_while_no_input_ignore_events (); +If `non-input-events' is non-nil, it will be used instead. Events in this list +do not count as pending input while running `while-no-input' and do +not cause any idle timers to get reset when they occur. */); + Vwhile_no_input_ignore_events = init_non_input_events (); DEFVAR_BOOL ("translate-upper-case-key-bindings", translate_upper_case_key_bindings, -- 2.33.0 ^ permalink raw reply related [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-21 20:27 ` Aaron Jensen 2021-10-22 2:28 ` Aaron Jensen @ 2021-10-22 6:10 ` Eli Zaretskii 2021-10-22 13:58 ` Aaron Jensen 1 sibling, 1 reply; 85+ messages in thread From: Eli Zaretskii @ 2021-10-22 6:10 UTC (permalink / raw) To: Aaron Jensen; +Cc: rudalics, alan, gregory, mituharu, emacs-devel > From: Aaron Jensen <aaronjensen@gmail.com> > Date: Thu, 21 Oct 2021 16:27:54 -0400 > Cc: martin rudalics <rudalics@gmx.at>, Alan Third <alan@idiocy.org>, > Gregory Heytings <gregory@heytings.org>, YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>, > emacs-devel@gnu.org > > > Well, one solution could be renaming the flag, or documenting that it > > must not be used by any caller except input-pending-p. > > Documentation seems like it could be useful, would you want it to say > it can't be used by anything but input-pending-p or that it is > currently only used by it? The former. Something like "this is meant to be used only by input-pending-p and similar callers, which aren't interested in all input events". ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-22 6:10 ` Eli Zaretskii @ 2021-10-22 13:58 ` Aaron Jensen 2021-10-26 13:23 ` Aaron Jensen 2021-10-28 15:51 ` Eli Zaretskii 0 siblings, 2 replies; 85+ messages in thread From: Aaron Jensen @ 2021-10-22 13:58 UTC (permalink / raw) To: Eli Zaretskii Cc: martin rudalics, Alan Third, Gregory Heytings, YAMAMOTO Mitsuharu, emacs-devel [-- Attachment #1: Type: text/plain, Size: 1100 bytes --] On Fri, Oct 22, 2021 at 2:10 AM Eli Zaretskii <eliz@gnu.org> wrote: > > > From: Aaron Jensen <aaronjensen@gmail.com> > > Date: Thu, 21 Oct 2021 16:27:54 -0400 > > Cc: martin rudalics <rudalics@gmx.at>, Alan Third <alan@idiocy.org>, > > Gregory Heytings <gregory@heytings.org>, YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>, > > emacs-devel@gnu.org > > > > > Well, one solution could be renaming the flag, or documenting that it > > > must not be used by any caller except input-pending-p. > > > > Documentation seems like it could be useful, would you want it to say > > it can't be used by anything but input-pending-p or that it is > > currently only used by it? > > The former. Something like "this is meant to be used only by > input-pending-p and similar callers, which aren't interested in all > input events". Thanks, updated the original patch "Ignore-non-input-events..." (and corrected some parens). I'm also attaching a second option, "Ignore-more-events..." that is a more minimal change. It only introduces a new variable and doesn't do any renaming. Thanks, Aaron [-- Attachment #2: 0001-Ignore-non-input-events-in-input-pending-p.patch --] [-- Type: application/octet-stream, Size: 7947 bytes --] From cae2e33ffc8ed7bbc61ad4a6897019bd26d5fb4d Mon Sep 17 00:00:00 2001 From: Aaron Jensen <aaronjensen@gmail.com> Date: Sat, 16 Oct 2021 11:03:50 -0400 Subject: [PATCH] Ignore non-input events in input-pending-p * keyboard.c (is_non_input_event): New predicate function. (non-input-events): New variable. (while-no-input-ignore-events): Updated documentation. (kbd_buffer_store_buffered_event): Use `is_non_input_event'. (READABLE_EVENTS_FILTER_NON_INPUT_EVENTS): Renamed from `READABLE_EVENTS_FILTER_EVENTS' (read_char): Use `non-input-events' if non-nil. (readable_events): Use `is_non_input_event' if `non-input-events' is non-nil. --- src/keyboard.c | 99 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 65 insertions(+), 34 deletions(-) diff --git a/src/keyboard.c b/src/keyboard.c index be9fad3ac3..1de045b78f 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -340,7 +340,7 @@ #define GROW_RAW_KEYBUF \ /* Flags for readable_events. */ #define READABLE_EVENTS_DO_TIMERS_NOW (1 << 0) -#define READABLE_EVENTS_FILTER_EVENTS (1 << 1) +#define READABLE_EVENTS_FILTER_NON_INPUT_EVENTS (1 << 1) #define READABLE_EVENTS_IGNORE_SQUEEZABLES (1 << 2) /* Function for init_keyboard to call with no args (if nonzero). */ @@ -375,6 +375,7 @@ #define READABLE_EVENTS_IGNORE_SQUEEZABLES (1 << 2) static void deliver_user_signal (int); static char *find_user_signal_name (int); static void store_user_signal_events (void); +static bool is_non_input_event (union buffered_input_event *event); /* Advance or retreat a buffered input event pointer. */ @@ -2940,10 +2941,14 @@ read_char (int commandflag, Lisp_Object map, if (!NILP (tem)) { struct buffer *prev_buffer = current_buffer; + Lisp_Object non_input_events = Vnon_input_events; last_input_event = c; call4 (Qcommand_execute, tem, Qnil, Fvector (1, &last_input_event), Qt); - if (CONSP (c) && !NILP (Fmemq (XCAR (c), Vwhile_no_input_ignore_events)) + if (NILP (non_input_events)) + non_input_events = Vwhile_no_input_ignore_events; + + if (CONSP (c) && !NILP (Fmemq (XCAR (c), non_input_events)) && !end_time) /* We stopped being idle for this event; undo that. This prevents automatic window selection (under @@ -3446,11 +3451,14 @@ readable_events (int flags) if (flags & READABLE_EVENTS_DO_TIMERS_NOW) timer_check (); - /* If the buffer contains only FOCUS_IN/OUT_EVENT events, and - READABLE_EVENTS_FILTER_EVENTS is set, report it as empty. */ + /* If the buffer contains only events in Vnon_input_events, or + FOCUS_IN/OUT_EVENT events when Vnon_input_events is nil, and + READABLE_EVENTS_FILTER_NON_INPUT_EVENTS is set, report it as empty. This + is meant to be used by input-pending-p and similar callers, which aren't + interested in all input events. */ if (kbd_fetch_ptr != kbd_store_ptr) { - if (flags & (READABLE_EVENTS_FILTER_EVENTS + if (flags & (READABLE_EVENTS_FILTER_NON_INPUT_EVENTS #ifdef USE_TOOLKIT_SCROLL_BARS | READABLE_EVENTS_IGNORE_SQUEEZABLES #endif @@ -3462,10 +3470,13 @@ readable_events (int flags) { if (!( #ifdef USE_TOOLKIT_SCROLL_BARS - (flags & READABLE_EVENTS_FILTER_EVENTS) && + (flags & READABLE_EVENTS_FILTER_NON_INPUT_EVENTS) && #endif - (event->kind == FOCUS_IN_EVENT - || event->kind == FOCUS_OUT_EVENT)) + ((NILP (Vnon_input_events) + && (event->kind == FOCUS_IN_EVENT + || event->kind == FOCUS_OUT_EVENT)) + || (!NILP (Vnon_input_events) + && is_non_input_event (event)))) #ifdef USE_TOOLKIT_SCROLL_BARS && !((flags & READABLE_EVENTS_IGNORE_SQUEEZABLES) && (event->kind == SCROLL_BAR_CLICK_EVENT @@ -3647,29 +3658,10 @@ kbd_buffer_store_buffered_event (union buffered_input_event *event, #endif /* subprocesses */ } - Lisp_Object ignore_event; - - switch (event->kind) - { - case FOCUS_IN_EVENT: ignore_event = Qfocus_in; break; - case FOCUS_OUT_EVENT: ignore_event = Qfocus_out; break; - case HELP_EVENT: ignore_event = Qhelp_echo; break; - case ICONIFY_EVENT: ignore_event = Qiconify_frame; break; - case DEICONIFY_EVENT: ignore_event = Qmake_frame_visible; break; - case SELECTION_REQUEST_EVENT: ignore_event = Qselection_request; break; -#ifdef USE_FILE_NOTIFY - case FILE_NOTIFY_EVENT: ignore_event = Qfile_notify; break; -#endif -#ifdef HAVE_DBUS - case DBUS_EVENT: ignore_event = Qdbus_event; break; -#endif - default: ignore_event = Qnil; break; - } - /* If we're inside while-no-input, and this event qualifies as input, set quit-flag to cause an interrupt. */ if (!NILP (Vthrow_on_input) - && NILP (Fmemq (ignore_event, Vwhile_no_input_ignore_events))) + && !is_non_input_event (event)) Vquit_flag = Vthrow_on_input; } @@ -10490,7 +10482,7 @@ DEFUN ("input-pending-p", Finput_pending_p, Sinput_pending_p, 0, 1, 0, return (get_input_pending ((NILP (check_timers) ? 0 : READABLE_EVENTS_DO_TIMERS_NOW) - | READABLE_EVENTS_FILTER_EVENTS) + | READABLE_EVENTS_FILTER_NON_INPUT_EVENTS) ? Qt : Qnil); } @@ -11607,7 +11599,7 @@ init_keyboard (void) }; static Lisp_Object -init_while_no_input_ignore_events (void) +init_non_input_events (void) { Lisp_Object events = listn (9, Qselect_window, Qhelp_echo, Qmove_frame, Qiconify_frame, Qmake_frame_visible, @@ -11627,6 +11619,35 @@ init_while_no_input_ignore_events (void) return events; } +static bool +is_non_input_event (union buffered_input_event *event) +{ + Lisp_Object lisp_event; + Lisp_Object non_input_events = Vnon_input_events; + + if (NILP (non_input_events)) + non_input_events = Vwhile_no_input_ignore_events; + + switch (event->kind) + { + case FOCUS_IN_EVENT: lisp_event = Qfocus_in; break; + case FOCUS_OUT_EVENT: lisp_event = Qfocus_out; break; + case HELP_EVENT: lisp_event = Qhelp_echo; break; + case ICONIFY_EVENT: lisp_event = Qiconify_frame; break; + case DEICONIFY_EVENT: lisp_event = Qmake_frame_visible; break; + case SELECTION_REQUEST_EVENT: lisp_event = Qselection_request; break; +#ifdef USE_FILE_NOTIFY + case FILE_NOTIFY_EVENT: lisp_event = Qfile_notify; break; +#endif +#ifdef HAVE_DBUS + case DBUS_EVENT: lisp_event = Qdbus_event; break; +#endif + default: lisp_event = Qnil; break; + } + + return !NILP (Fmemq (lisp_event, non_input_events)); +} + static void syms_of_keyboard_for_pdumper (void); void @@ -12519,13 +12540,23 @@ syms_of_keyboard (void) If nil, Emacs crashes immediately in response to fatal signals. */); attempt_orderly_shutdown_on_fatal_signal = true; + DEFVAR_LISP ("non-input-events", + Vnon_input_events, + doc: /* Events ignored by input checking. +Events in this list do not count as pending input while running +`while-no-input' or `input-pending-p' and do not cause any idle timers to get +reset when they occur. Setting this to nil will cause `while-no-input' to +respect `while-no-input-ignore-events' instead. */ +); + Vnon_input_events = init_non_input_events (); + DEFVAR_LISP ("while-no-input-ignore-events", Vwhile_no_input_ignore_events, doc: /* Ignored events from `while-no-input'. -Events in this list do not count as pending input while running -`while-no-input' and do not cause any idle timers to get reset when they -occur. */); - Vwhile_no_input_ignore_events = init_while_no_input_ignore_events (); +If `non-input-events' is non-nil, it will be used instead. Events in this list +do not count as pending input while running `while-no-input' and do +not cause any idle timers to get reset when they occur. */); + Vwhile_no_input_ignore_events = init_non_input_events (); DEFVAR_BOOL ("translate-upper-case-key-bindings", translate_upper_case_key_bindings, -- 2.33.0 [-- Attachment #3: 0001-Ignore-more-events-in-input-pending-p.patch --] [-- Type: application/octet-stream, Size: 5805 bytes --] From 1f6ee151079dd374e71ac98a4fef1ccb05fc9a80 Mon Sep 17 00:00:00 2001 From: Aaron Jensen <aaronjensen@gmail.com> Date: Fri, 22 Oct 2021 09:53:24 -0400 Subject: [PATCH] Ignore more events in input-pending-p * keyboard.c (is_while_no_input_ignored_event): New predicate function. (input-pending-p-ignores-while-no-input-ignore-events): New variable. (kbd_buffer_store_buffered_event): Use `is_while_no_input_ignored_event'. (readable_events): Use `is_while_no_input_ignored_event' if `input-pending-p-ignores-while-no-input-ignore-events' is non-nil. Improved documentation. --- src/keyboard.c | 74 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 50 insertions(+), 24 deletions(-) diff --git a/src/keyboard.c b/src/keyboard.c index be9fad3ac3..4e0d9469ee 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -375,6 +375,7 @@ #define READABLE_EVENTS_IGNORE_SQUEEZABLES (1 << 2) static void deliver_user_signal (int); static char *find_user_signal_name (int); static void store_user_signal_events (void); +static bool is_while_no_input_ignored_event (union buffered_input_event *event); /* Advance or retreat a buffered input event pointer. */ @@ -3446,8 +3447,13 @@ readable_events (int flags) if (flags & READABLE_EVENTS_DO_TIMERS_NOW) timer_check (); - /* If the buffer contains only FOCUS_IN/OUT_EVENT events, and - READABLE_EVENTS_FILTER_EVENTS is set, report it as empty. */ + /* READABLE_EVENTS_FILTER_EVENTS is meant to bu used by input-pending-p and + similar callers, which aren't interested in all input events. If it is + set, and input-pending-p-ignores-while-no-input-ignore-events is non-nil, + and the buffer contains only events in while-no-input-ignore-events, + report it as empty. If it is set and + input-pending-p-ignores-while-no-input-ignore-events is nil, and the + buffer contains only FOCUS_IN/OUT_EVENT events, report it as empty. */ if (kbd_fetch_ptr != kbd_store_ptr) { if (flags & (READABLE_EVENTS_FILTER_EVENTS @@ -3457,6 +3463,8 @@ readable_events (int flags) )) { union buffered_input_event *event = kbd_fetch_ptr; + bool focus_event_only = + NILP (Vinput_pending_p_ignores_while_no_input_ignore_events); do { @@ -3464,8 +3472,11 @@ readable_events (int flags) #ifdef USE_TOOLKIT_SCROLL_BARS (flags & READABLE_EVENTS_FILTER_EVENTS) && #endif - (event->kind == FOCUS_IN_EVENT - || event->kind == FOCUS_OUT_EVENT)) + ((focus_event_only + && event->kind == FOCUS_IN_EVENT + || event->kind == FOCUS_OUT_EVENT) + || (!focus_event_only + && is_while_no_input_ignored_event (event)))) #ifdef USE_TOOLKIT_SCROLL_BARS && !((flags & READABLE_EVENTS_IGNORE_SQUEEZABLES) && (event->kind == SCROLL_BAR_CLICK_EVENT @@ -3647,29 +3658,10 @@ kbd_buffer_store_buffered_event (union buffered_input_event *event, #endif /* subprocesses */ } - Lisp_Object ignore_event; - - switch (event->kind) - { - case FOCUS_IN_EVENT: ignore_event = Qfocus_in; break; - case FOCUS_OUT_EVENT: ignore_event = Qfocus_out; break; - case HELP_EVENT: ignore_event = Qhelp_echo; break; - case ICONIFY_EVENT: ignore_event = Qiconify_frame; break; - case DEICONIFY_EVENT: ignore_event = Qmake_frame_visible; break; - case SELECTION_REQUEST_EVENT: ignore_event = Qselection_request; break; -#ifdef USE_FILE_NOTIFY - case FILE_NOTIFY_EVENT: ignore_event = Qfile_notify; break; -#endif -#ifdef HAVE_DBUS - case DBUS_EVENT: ignore_event = Qdbus_event; break; -#endif - default: ignore_event = Qnil; break; - } - /* If we're inside while-no-input, and this event qualifies as input, set quit-flag to cause an interrupt. */ if (!NILP (Vthrow_on_input) - && NILP (Fmemq (ignore_event, Vwhile_no_input_ignore_events))) + && !is_while_no_input_ignored_event (event)) Vquit_flag = Vthrow_on_input; } @@ -11627,6 +11619,31 @@ init_while_no_input_ignore_events (void) return events; } +static bool +is_while_no_input_ignored_event (union buffered_input_event *event) +{ + Lisp_Object ignore_event; + + switch (event->kind) + { + case FOCUS_IN_EVENT: ignore_event = Qfocus_in; break; + case FOCUS_OUT_EVENT: ignore_event = Qfocus_out; break; + case HELP_EVENT: ignore_event = Qhelp_echo; break; + case ICONIFY_EVENT: ignore_event = Qiconify_frame; break; + case DEICONIFY_EVENT: ignore_event = Qmake_frame_visible; break; + case SELECTION_REQUEST_EVENT: ignore_event = Qselection_request; break; +#ifdef USE_FILE_NOTIFY + case FILE_NOTIFY_EVENT: ignore_event = Qfile_notify; break; +#endif +#ifdef HAVE_DBUS + case DBUS_EVENT: ignore_event = Qdbus_event; break; +#endif + default: ignore_event = Qnil; break; + } + + return !NILP (Fmemq (ignore_event, Vwhile_no_input_ignore_events)); +} + static void syms_of_keyboard_for_pdumper (void); void @@ -12519,6 +12536,15 @@ syms_of_keyboard (void) If nil, Emacs crashes immediately in response to fatal signals. */); attempt_orderly_shutdown_on_fatal_signal = true; + DEFVAR_BOOL ("input-pending-p-ignores-while-no-input-ignore-events", + Vinput_pending_p_ignores_while_no_input_ignore_events, + doc: /* If non-nil, `input-pending-p' and anything else that +uses `readable_events' with the flag meant to filter events will use +`while-no-input-ignore-events' as the list of events to filter. This flag +may eventually be removed once this behavior is deemed safe. */ +); + Vinput_pending_p_ignores_while_no_input_ignore_events = true; + DEFVAR_LISP ("while-no-input-ignore-events", Vwhile_no_input_ignore_events, doc: /* Ignored events from `while-no-input'. -- 2.33.0 ^ permalink raw reply related [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-22 13:58 ` Aaron Jensen @ 2021-10-26 13:23 ` Aaron Jensen 2021-10-26 14:05 ` Eli Zaretskii 2021-10-28 15:51 ` Eli Zaretskii 1 sibling, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-10-26 13:23 UTC (permalink / raw) To: Eli Zaretskii Cc: martin rudalics, Alan Third, Gregory Heytings, YAMAMOTO Mitsuharu, emacs-devel On Fri, Oct 22, 2021 at 9:58 AM Aaron Jensen <aaronjensen@gmail.com> wrote: > > Thanks, updated the original patch "Ignore-non-input-events..." (and > corrected some parens). > > I'm also attaching a second option, "Ignore-more-events..." that is a > more minimal change. It only introduces a new variable and doesn't do > any renaming. Hi Eli, Do either of the previously attached patches look like they could work? Please let me know which you'd prefer and if you have any feedback on them. Thanks, Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-26 13:23 ` Aaron Jensen @ 2021-10-26 14:05 ` Eli Zaretskii 0 siblings, 0 replies; 85+ messages in thread From: Eli Zaretskii @ 2021-10-26 14:05 UTC (permalink / raw) To: Aaron Jensen; +Cc: rudalics, alan, gregory, mituharu, emacs-devel > From: Aaron Jensen <aaronjensen@gmail.com> > Date: Tue, 26 Oct 2021 09:23:47 -0400 > Cc: martin rudalics <rudalics@gmx.at>, Alan Third <alan@idiocy.org>, > Gregory Heytings <gregory@heytings.org>, YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>, > emacs-devel@gnu.org > > On Fri, Oct 22, 2021 at 9:58 AM Aaron Jensen <aaronjensen@gmail.com> wrote: > > > > Thanks, updated the original patch "Ignore-non-input-events..." (and > > corrected some parens). > > > > I'm also attaching a second option, "Ignore-more-events..." that is a > > more minimal change. It only introduces a new variable and doesn't do > > any renaming. > > Hi Eli, > > Do either of the previously attached patches look like they could > work? Please let me know which you'd prefer and if you have any > feedback on them. I didn't forget, and will look at the patches as soon as I have enough time. Sorry for the delay. ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-22 13:58 ` Aaron Jensen 2021-10-26 13:23 ` Aaron Jensen @ 2021-10-28 15:51 ` Eli Zaretskii 2021-10-28 18:12 ` Aaron Jensen 1 sibling, 1 reply; 85+ messages in thread From: Eli Zaretskii @ 2021-10-28 15:51 UTC (permalink / raw) To: Aaron Jensen; +Cc: rudalics, alan, gregory, mituharu, emacs-devel > From: Aaron Jensen <aaronjensen@gmail.com> > Date: Fri, 22 Oct 2021 09:58:28 -0400 > Cc: martin rudalics <rudalics@gmx.at>, Alan Third <alan@idiocy.org>, > Gregory Heytings <gregory@heytings.org>, YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>, > emacs-devel@gnu.org > > > > Documentation seems like it could be useful, would you want it to say > > > it can't be used by anything but input-pending-p or that it is > > > currently only used by it? > > > > The former. Something like "this is meant to be used only by > > input-pending-p and similar callers, which aren't interested in all > > input events". > > Thanks, updated the original patch "Ignore-non-input-events..." (and > corrected some parens). > > I'm also attaching a second option, "Ignore-more-events..." that is a > more minimal change. It only introduces a new variable and doesn't do > any renaming. Thanks, I've installed the minimal change, with some minor changes. The patch didn't apply, so I applied by hand, and made some too-long variables have shorter names while at that. Also, a variable defined via DEFVAR_BOOL conventionally has its C counterpart's name without the leading "V", since it's actually a C int. Please see if the current master solves your problem. ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-28 15:51 ` Eli Zaretskii @ 2021-10-28 18:12 ` Aaron Jensen 2021-10-28 18:20 ` Eli Zaretskii 2021-10-31 10:33 ` Alan Third 0 siblings, 2 replies; 85+ messages in thread From: Aaron Jensen @ 2021-10-28 18:12 UTC (permalink / raw) To: Eli Zaretskii Cc: martin rudalics, Alan Third, Gregory Heytings, YAMAMOTO Mitsuharu, emacs-devel On Thu, Oct 28, 2021 at 11:51 AM Eli Zaretskii <eliz@gnu.org> wrote: > > > From: Aaron Jensen <aaronjensen@gmail.com> > > Date: Fri, 22 Oct 2021 09:58:28 -0400 > > Cc: martin rudalics <rudalics@gmx.at>, Alan Third <alan@idiocy.org>, > > Gregory Heytings <gregory@heytings.org>, YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>, > > emacs-devel@gnu.org > > > > > > Documentation seems like it could be useful, would you want it to say > > > > it can't be used by anything but input-pending-p or that it is > > > > currently only used by it? > > > > > > The former. Something like "this is meant to be used only by > > > input-pending-p and similar callers, which aren't interested in all > > > input events". > > > > Thanks, updated the original patch "Ignore-non-input-events..." (and > > corrected some parens). > > > > I'm also attaching a second option, "Ignore-more-events..." that is a > > more minimal change. It only introduces a new variable and doesn't do > > any renaming. > > Thanks, I've installed the minimal change, with some minor changes. > The patch didn't apply, so I applied by hand, and made some too-long > variables have shorter names while at that. Also, a variable defined > via DEFVAR_BOOL conventionally has its C counterpart's name without > the leading "V", since it's actually a C int. > > Please see if the current master solves your problem. Thank you for making these corrections and describing what was wrong. It's odd that the patch didn't apply, but thanks for doing it by hand. It looks like you inadvertently reversed the condition for the variable check, so I need to set it to nil to get the fixed behavior. This should fix it: diff --git a/src/keyboard.c b/src/keyboard.c index c5400023e6..3933ea84e0 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -3472,10 +3472,10 @@ readable_events (int flags) #ifdef USE_TOOLKIT_SCROLL_BARS (flags & READABLE_EVENTS_FILTER_EVENTS) && #endif - ((input_pending_p_filter_events + ((!input_pending_p_filter_events && (event->kind == FOCUS_IN_EVENT || event->kind == FOCUS_OUT_EVENT)) - || (!input_pending_p_filter_events + || (input_pending_p_filter_events && is_ignored_event (event)))) #ifdef USE_TOOLKIT_SCROLL_BARS && !((flags & READABLE_EVENTS_IGNORE_SQUEEZABLES) Can you or Alan also please install this related change: diff --git a/src/nsterm.m b/src/nsterm.m index aa29c13eb2..f4dbe95965 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -7073,6 +7073,7 @@ - (void)windowDidResignKey: (NSNotification *)notification XSETFRAME (frame, emacsframe); help_echo_string = Qnil; gen_help_event (Qnil, frame, Qnil, Qnil, 0); + any_help_event_p = NO; } if (emacs_event && is_focus_frame) It is referenced earlier in this thread. It's probably not the best way to handle clearing help echos in the long term, but it will help for now. The commit message can be something like "Help echos are only cleared once in NS port" Thanks, ^ permalink raw reply related [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-28 18:12 ` Aaron Jensen @ 2021-10-28 18:20 ` Eli Zaretskii 2021-10-31 10:33 ` Alan Third 1 sibling, 0 replies; 85+ messages in thread From: Eli Zaretskii @ 2021-10-28 18:20 UTC (permalink / raw) To: Aaron Jensen; +Cc: rudalics, alan, gregory, mituharu, emacs-devel > From: Aaron Jensen <aaronjensen@gmail.com> > Date: Thu, 28 Oct 2021 14:12:17 -0400 > Cc: martin rudalics <rudalics@gmx.at>, Alan Third <alan@idiocy.org>, > Gregory Heytings <gregory@heytings.org>, YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>, > emacs-devel@gnu.org > > It looks like you inadvertently reversed the condition for the > variable check, so I need to set it to nil to get the fixed behavior. > This should fix it: Thanks, installed. > Can you or Alan also please install this related change: I'll leave this to Alan. ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-28 18:12 ` Aaron Jensen 2021-10-28 18:20 ` Eli Zaretskii @ 2021-10-31 10:33 ` Alan Third 2021-10-31 16:42 ` Aaron Jensen 1 sibling, 1 reply; 85+ messages in thread From: Alan Third @ 2021-10-31 10:33 UTC (permalink / raw) To: Aaron Jensen Cc: martin rudalics, Eli Zaretskii, Gregory Heytings, YAMAMOTO Mitsuharu, emacs-devel On Thu, Oct 28, 2021 at 02:12:17PM -0400, Aaron Jensen wrote: > > Can you or Alan also please install this related change: > > diff --git a/src/nsterm.m b/src/nsterm.m > index aa29c13eb2..f4dbe95965 100644 > --- a/src/nsterm.m > +++ b/src/nsterm.m > @@ -7073,6 +7073,7 @@ - (void)windowDidResignKey: (NSNotification *)notification > XSETFRAME (frame, emacsframe); > help_echo_string = Qnil; > gen_help_event (Qnil, frame, Qnil, Qnil, 0); > + any_help_event_p = NO; > } > > if (emacs_event && is_focus_frame) > > It is referenced earlier in this thread. It's probably not the best > way to handle clearing help echos in the long term, but it will help > for now. The commit message can be something like "Help echos are only > cleared once in NS port" I've pushed this to master. -- Alan Third ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-31 10:33 ` Alan Third @ 2021-10-31 16:42 ` Aaron Jensen 0 siblings, 0 replies; 85+ messages in thread From: Aaron Jensen @ 2021-10-31 16:42 UTC (permalink / raw) To: Alan Third, Aaron Jensen, Eli Zaretskii, martin rudalics, Gregory Heytings, YAMAMOTO Mitsuharu, emacs-devel On Sun, Oct 31, 2021 at 6:33 AM Alan Third <alan@idiocy.org> wrote: > > I've pushed this to master. Thank you Alan and Eli. Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-21 11:25 ` Aaron Jensen 2021-10-21 11:33 ` Aaron Jensen @ 2021-10-21 13:40 ` Eli Zaretskii 1 sibling, 0 replies; 85+ messages in thread From: Eli Zaretskii @ 2021-10-21 13:40 UTC (permalink / raw) To: Aaron Jensen; +Cc: rudalics, alan, gregory, mituharu, emacs-devel > From: Aaron Jensen <aaronjensen@gmail.com> > Date: Thu, 21 Oct 2021 07:25:44 -0400 > Cc: Eli Zaretskii <eliz@gnu.org>, martin rudalics <rudalics@gmx.at>, Alan Third <alan@idiocy.org>, > Gregory Heytings <gregory@heytings.org>, emacs-devel@gnu.org > > I understand the change better now and why the `#ifdef > USE_TOOLKIT_SCROLL_BARS` was added around the `flags & > READABLE_EVENTS_FILTER_EVENTS` check. It was an optimization to avoid > an additional check because there was a previous check already done > before entering the loop. So, I don't think that a bug was introduced, > it just made the code a little more difficult to decipher. I can add > that check back into my patch in whatever its final form is. Whatever the original reasons, that patch has proven its utility by fixing the original problem and not generating new ones in all the years that passed since then. > > I think that the input-pending-p problem needs a real fix. > > These events should be ignored for the sake of input-pending-p > > even if they are not ignored for some other purposes. > > > > Perhaps there should be two different functions for asking > > whether there is input, one for low-level Emacs purposes > > and one for high-level purposes. Can you try fixing it that way? > > So, the original impetus for the filtering code was that > input-pending-p was reporting t when only a filter change was made. I have no problem with fixing stuff inside input-pending-p. My problem is that your fix is not in input-pending-p, it is in a general function called from many places. So its effects are much more general than on input-pending-p alone. And my concern is that the change which you want to make will some day affect code unrelated to input-pending-p, with no one the wiser. Which is why I must insist on making the change either limited to input-pending-p, come what may, or to have a variable that controls the change if its effect is more general. If the change proves to not cause any harm, in some distant future we can consider removing the condition. > > A new flag might be a good idea, indeed, but (a) I'd need to see a > > patch to have a clear idea what you mean, and (b) the application of > > that flag should be dependent on that variable exposed to Lisp, so > > that if problems happen, we can ask users to flip the variable and see > > if the problems go away. > > I think that the variable would just change how > READABLE_EVENTS_FILTER_EVENTS worked, so I would not add a new flag > unless you feel that ultimately renaming it would be beneficial. The change you propose _does_ change how READABLE_EVENTS_FILTER_EVENTS behaves. I want that change to be controlled by a Lisp variable. I'm not wedded to the specific implementation I suggested. If you can think of a different way to reach that goal, it's fine with me; show me the code. > > > It seems unlikely that a person would start using a flag that has a > > > single use without understanding what that flag does > > > > In general, yes. But isn't that precisely what you suggest we do > > here? ;-) > > Hah, to be fair I understand exactly what the flag does :). Famous last words. > Please let me know how you would like me to proceed -- I'm happy to > add the extra variable and vary the behavior based on it for now. I hope the above answers that question. Thanks. ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-14 11:15 ` Aaron Jensen 2021-10-14 11:32 ` Aaron Jensen 2021-10-14 12:42 ` martin rudalics @ 2021-10-15 17:32 ` Alan Third 2021-10-15 17:54 ` Stefan Monnier 2021-10-15 18:28 ` Aaron Jensen 2 siblings, 2 replies; 85+ messages in thread From: Alan Third @ 2021-10-15 17:32 UTC (permalink / raw) To: Aaron Jensen Cc: martin rudalics, Gregory Heytings, Eli Zaretskii, emacs-devel On Thu, Oct 14, 2021 at 07:15:28AM -0400, Aaron Jensen wrote: > On Tue, Oct 5, 2021 at 11:47 AM Alan Third <alan@idiocy.org> wrote: > > > Not as far as I can tell. Can you reproduce it with Martin's patch? > > > > I don't have access to a Mac just now, so no. ;) > > Ah, that's not permanent, is it? No. > Any other ideas on this? I have absolutely no idea what the point if that any_help_event_p variable is. The comment that goes along with it is: /* Non-zero means that a HELP_EVENT has been generated since Emacs start. */ but why would that be helpful? What is a HELP_EVENT anyway? -- Alan Third ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-15 17:32 ` Alan Third @ 2021-10-15 17:54 ` Stefan Monnier 2021-10-15 18:28 ` Aaron Jensen 1 sibling, 0 replies; 85+ messages in thread From: Stefan Monnier @ 2021-10-15 17:54 UTC (permalink / raw) To: Alan Third Cc: Aaron Jensen, Gregory Heytings, martin rudalics, Eli Zaretskii, emacs-devel > /* Non-zero means that a HELP_EVENT has been generated since Emacs > start. */ > > but why would that be helpful? It seems to be a hack to avoid clearing some help-echo message related to the startup screen. > What is a HELP_EVENT anyway? It's the event generated when the mouse hovers above text with the `help-echo` property. In response to this event with typically popup a tooltip, tho it can also be a message in the echo area. Stefan ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-15 17:32 ` Alan Third 2021-10-15 17:54 ` Stefan Monnier @ 2021-10-15 18:28 ` Aaron Jensen 1 sibling, 0 replies; 85+ messages in thread From: Aaron Jensen @ 2021-10-15 18:28 UTC (permalink / raw) To: Alan Third, Aaron Jensen, Gregory Heytings, martin rudalics, Eli Zaretskii, emacs-devel On Fri, Oct 15, 2021 at 1:32 PM Alan Third <alan@idiocy.org> wrote: > > > Any other ideas on this? > > I have absolutely no idea what the point if that any_help_event_p > variable is. The comment that goes along with it is: > > /* Non-zero means that a HELP_EVENT has been generated since Emacs > start. */ > > but why would that be helpful? From the commit that introduced it, it was a performance improvement. I think it would write an event on every mouse move instead just when it was needed. After the change, if a help echo was shown then it would set a flag so that when the NSWindow lost focus it would clear it. Your change was good (to reset the flag in that case) and should probably be installed but it wasn't sufficient to solve my original problem. Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-10-03 20:55 ` Aaron Jensen 2021-10-03 21:22 ` Gregory Heytings @ 2021-10-04 8:28 ` martin rudalics 1 sibling, 0 replies; 85+ messages in thread From: martin rudalics @ 2021-10-04 8:28 UTC (permalink / raw) To: Aaron Jensen, Eli Zaretskii; +Cc: emacs-devel > Ok, here is a repro: > > emacs -Q > > Eval: > > (defvar mini-frame-frame nil) > > (defun repro () > (interactive) > (setq mini-frame-frame > (or mini-frame-frame > (make-frame `((parent-frame . ,(selected-frame)))))) > (message "input-pending-p before: %S" (input-pending-p)) > (make-frame-visible mini-frame-frame) > (message "input-pending-p after: %S" (input-pending-p)) > (make-frame-invisible mini-frame-frame)) > > (global-set-key (kbd "C-x C-x") 'repro) So IIUC 'mini-frame-frame' is always invisible in this scenario. > Then: > > Switch to messages buffer > C-x C-x > Focus the original frame There is nothing else to focus here. > C-x C-x > > Note that input-pending-p remains nil > > Click the echo area Is this "click" supposed to pop up the *Messages* buffer? > C-x C-x > > Note that input-pending-p is t after showing. You have to focus the > original frame each time, but it is consistent after clicking Not here. But as I said above the original frame always has focus here. I get input-pending-p before: t input-pending-p after: t input-pending-p before: nil input-pending-p after: nil input-pending-p before: nil input-pending-p after: nil with the *Messages* buffer focused before the second C-x C-x and the same if I switch back to *scratch* where you say "Focus the original frame". martin ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-09-27 9:46 ` Aaron Jensen 2021-09-27 17:14 ` martin rudalics @ 2021-09-27 19:26 ` Stefan Monnier 1 sibling, 0 replies; 85+ messages in thread From: Stefan Monnier @ 2021-09-27 19:26 UTC (permalink / raw) To: Aaron Jensen; +Cc: martin rudalics, emacs-devel Aaron Jensen [2021-09-27 05:46:38] wrote: > On Mon, Sep 27, 2021 at 4:51 AM martin rudalics <rudalics@gmx.at> wrote: >> >> > I only see my problem sometimes. It doesn't reproduce if I restart >> > Emacs until it does (some random amount of time later) >> >> So you have to trigger it, somehow. > > Right, and I have no idea how at the moment. > >> > When I do the above, if I focus away from the 2nd frame and back I see >> > nothing. >> >> With and/or without my patch? Please compare the behaviors. > > Same w/o the patch, I don't know if application focus events are not > handled on macos, only window (frame) focus changes > >> > If I minimize it (I'm on macOS, so not sure if that is the >> > closest thing to lowering) then I either get a focus-out-event or >> > switch-frame-event because it ends up giving the focus to the 1st >> > frame, that's just how macOS works. >> >> That's why I told you to provide for a third window (using another Emacs >> process or another application) that gets focus when you minimize the >> Emacs frame. But getting a focus-out event with the patch applied _is_ >> bad - these should be caught by the patch. > > Right, there is a 3rd window, but that's not how macOS works. I think > I found how to do it though. If I minimize the messages frame, then > eval the form, then minimize frame that and raise it, I do get a > focus-out on that frame, with or without the patch. > >> > Maybe I can find a place to put >> > last-input-event if it reproduces again. >> > >> > I'm using your patch now, so I can let you know if it happens again. >> >> You can also set 'while-no-input-ignore-events' to include or rule out >> specific events. > > Ok, I'll see if I can do that once I get it reproducing again. > > Thanks, > > Aaron FWIW, last time I had a similar problem I cooked up the following patch in the hope of catching the offending event in `throw-on-input--trace`. It's not in an acceptable form to be installed into `master`, but maybe someone can be inspired to clean it up (and avoid the implicit memory leak, etc...). Stefan diff --git a/src/keyboard.c b/src/keyboard.c index bc6f97586dd..4e1a1f51ef5 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -3682,7 +3730,11 @@ kbd_buffer_store_buffered_event (union buffered_input_event *event, as input, set quit-flag to cause an interrupt. */ if (!NILP (Vthrow_on_input) && NILP (Fmemq (ignore_event, Vwhile_no_input_ignore_events))) - Vquit_flag = Vthrow_on_input; + { + Vquit_flag = Vthrow_on_input; + Vthrow_on_input__trace = Fcons (make_lispy_event (&event->ie), + Vthrow_on_input__trace); + } } @@ -12412,6 +12387,10 @@ syms_of_keyboard (void) peculiar kind of quitting. */); Vthrow_on_input = Qnil; + DEFVAR_LISP ("throw-on-input--trace", Vthrow_on_input__trace, + doc: /* Trace of events that caused a `throw-on-input`. */); + Vthrow_on_input__trace = Qnil; + DEFVAR_LISP ("command-error-function", Vcommand_error_function, doc: /* Function to output error messages. Called with three arguments: ^ permalink raw reply related [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-09-27 8:51 ` martin rudalics 2021-09-27 9:46 ` Aaron Jensen @ 2021-09-27 23:02 ` Aaron Jensen 2021-09-28 2:29 ` Aaron Jensen 2021-09-28 5:50 ` Eli Zaretskii 1 sibling, 2 replies; 85+ messages in thread From: Aaron Jensen @ 2021-09-27 23:02 UTC (permalink / raw) To: martin rudalics; +Cc: emacs-devel On Mon, Sep 27, 2021 at 4:51 AM martin rudalics <rudalics@gmx.at> wrote: > > > I only see my problem sometimes. It doesn't reproduce if I restart > > Emacs until it does (some random amount of time later) > > So you have to trigger it, somehow. > > > When I do the above, if I focus away from the 2nd frame and back I see > > nothing. > > With and/or without my patch? Please compare the behaviors. > > > If I minimize it (I'm on macOS, so not sure if that is the > > closest thing to lowering) then I either get a focus-out-event or > > switch-frame-event because it ends up giving the focus to the 1st > > frame, that's just how macOS works. > > That's why I told you to provide for a third window (using another Emacs > process or another application) that gets focus when you minimize the > Emacs frame. But getting a focus-out event with the patch applied _is_ > bad - these should be caught by the patch. > > > Maybe I can find a place to put > > last-input-event if it reproduces again. > > > > I'm using your patch now, so I can let you know if it happens again. > > You can also set 'while-no-input-ignore-events' to include or rule out > specific events. last-input-event is 134217848 after I get into that situation w/ M-x. I'm guessing that's M-x, because if I do C-h v, I end up with 118 (v). That won't show non-input events, will it? Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-09-27 23:02 ` Aaron Jensen @ 2021-09-28 2:29 ` Aaron Jensen 2021-09-29 5:10 ` Aaron Jensen 2021-09-28 5:50 ` Eli Zaretskii 1 sibling, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-09-28 2:29 UTC (permalink / raw) To: martin rudalics; +Cc: emacs-devel On Mon, Sep 27, 2021 at 7:02 PM Aaron Jensen <aaronjensen@gmail.com> wrote: > > last-input-event is 134217848 after I get into that situation w/ M-x. > I'm guessing that's M-x, because if I do C-h v, I end up with 118 (v). > > That won't show non-input events, will it? To be clear, this is with your patch, so that patch did not appear to fix this issue. I will try out the throw on input patch to see if I can identify the event Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-09-28 2:29 ` Aaron Jensen @ 2021-09-29 5:10 ` Aaron Jensen 2021-09-29 9:28 ` martin rudalics 0 siblings, 1 reply; 85+ messages in thread From: Aaron Jensen @ 2021-09-29 5:10 UTC (permalink / raw) To: martin rudalics; +Cc: emacs-devel On Mon, Sep 27, 2021 at 10:29 PM Aaron Jensen <aaronjensen@gmail.com> wrote: > > On Mon, Sep 27, 2021 at 7:02 PM Aaron Jensen <aaronjensen@gmail.com> wrote: > > > > last-input-event is 134217848 after I get into that situation w/ M-x. > > I'm guessing that's M-x, because if I do C-h v, I end up with 118 (v). > > > > That won't show non-input events, will it? > > To be clear, this is with your patch, so that patch did not appear to > fix this issue. I will try out the throw on input patch to see if I > can identify the event It reproduced again and whatever is causing the event, it does not trigger throw on input (and so is not traced). Aaron ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-09-29 5:10 ` Aaron Jensen @ 2021-09-29 9:28 ` martin rudalics 0 siblings, 0 replies; 85+ messages in thread From: martin rudalics @ 2021-09-29 9:28 UTC (permalink / raw) To: Aaron Jensen; +Cc: emacs-devel > It reproduced again and whatever is causing the event, it does not > trigger throw on input (and so is not traced). Could you please try to tell in a few sentences what you did and what happened so maybe someone else can understand the issue and chime in. I'm meanwhile completely lost. Thanks, martin ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: input-pending-p after make-frame-visible 2021-09-27 23:02 ` Aaron Jensen 2021-09-28 2:29 ` Aaron Jensen @ 2021-09-28 5:50 ` Eli Zaretskii 1 sibling, 0 replies; 85+ messages in thread From: Eli Zaretskii @ 2021-09-28 5:50 UTC (permalink / raw) To: Aaron Jensen; +Cc: rudalics, emacs-devel > From: Aaron Jensen <aaronjensen@gmail.com> > Date: Mon, 27 Sep 2021 19:02:04 -0400 > Cc: emacs-devel@gnu.org > > > > I'm using your patch now, so I can let you know if it happens again. > > > > You can also set 'while-no-input-ignore-events' to include or rule out > > specific events. > > last-input-event is 134217848 after I get into that situation w/ M-x. > I'm guessing that's M-x, because if I do C-h v, I end up with 118 (v). Yes, it's M-x. The easiest way to see that is M-: 134217848 RET which will show: 134217848 (#o1000000170, #x8000078) And the last representation tells you it's 'x' (#x78) with 27th bit set. And in lisp.h we have: enum char_bits { CHAR_ALT = 0x0400000, CHAR_SUPER = 0x0800000, CHAR_HYPER = 0x1000000, CHAR_SHIFT = 0x2000000, CHAR_CTL = 0x4000000, CHAR_META = 0x8000000, <<<<<<<<<<<<<<<<<<<<<<<< But where does that M-x come from in the recipe in question? ^ permalink raw reply [flat|nested] 85+ messages in thread
end of thread, other threads:[~2021-10-31 16:42 UTC | newest] Thread overview: 85+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2021-09-24 17:12 input-pending-p after make-frame-visible Aaron Jensen 2021-09-26 9:11 ` martin rudalics 2021-09-26 14:02 ` Aaron Jensen 2021-09-26 17:50 ` martin rudalics 2021-09-26 23:55 ` Aaron Jensen 2021-09-27 8:51 ` martin rudalics 2021-09-27 9:46 ` Aaron Jensen 2021-09-27 17:14 ` martin rudalics 2021-09-27 18:57 ` Eli Zaretskii 2021-09-28 7:41 ` martin rudalics 2021-09-28 8:06 ` Eli Zaretskii 2021-09-29 9:28 ` martin rudalics 2021-09-29 12:06 ` Eli Zaretskii 2021-09-29 12:16 ` Aaron Jensen 2021-09-29 13:13 ` Eli Zaretskii 2021-09-29 14:16 ` Aaron Jensen 2021-09-29 15:42 ` Eli Zaretskii 2021-10-01 17:31 ` Aaron Jensen 2021-10-01 17:55 ` Eli Zaretskii 2021-10-01 17:57 ` Eli Zaretskii 2021-10-01 18:25 ` Aaron Jensen 2021-10-03 19:33 ` Aaron Jensen 2021-10-03 20:55 ` Aaron Jensen 2021-10-03 21:22 ` Gregory Heytings 2021-10-04 1:38 ` Aaron Jensen 2021-10-04 8:29 ` martin rudalics 2021-10-04 11:04 ` Gregory Heytings 2021-10-04 15:00 ` Aaron Jensen 2021-10-04 20:37 ` Alan Third 2021-10-04 22:12 ` Aaron Jensen 2021-10-05 15:47 ` Alan Third 2021-10-14 11:15 ` Aaron Jensen 2021-10-14 11:32 ` Aaron Jensen 2021-10-14 12:42 ` martin rudalics 2021-10-14 23:04 ` Aaron Jensen 2021-10-15 7:05 ` martin rudalics 2021-10-15 11:30 ` Aaron Jensen 2021-10-16 7:54 ` martin rudalics 2021-10-16 14:16 ` Aaron Jensen 2021-10-16 14:45 ` Aaron Jensen 2021-10-16 15:09 ` Aaron Jensen 2021-10-16 16:49 ` martin rudalics 2021-10-16 17:14 ` Aaron Jensen 2021-10-20 15:27 ` Aaron Jensen 2021-10-20 16:41 ` Eli Zaretskii 2021-10-20 17:15 ` Aaron Jensen 2021-10-20 17:40 ` Eli Zaretskii 2021-10-20 17:47 ` Aaron Jensen 2021-10-20 18:24 ` Eli Zaretskii 2021-10-20 18:55 ` Aaron Jensen 2021-10-20 19:04 ` Eli Zaretskii 2021-10-20 20:00 ` Aaron Jensen 2021-10-21 6:02 ` Eli Zaretskii 2021-10-21 6:58 ` YAMAMOTO Mitsuharu 2021-10-21 7:47 ` Eli Zaretskii 2021-10-21 11:25 ` Aaron Jensen 2021-10-21 11:33 ` Aaron Jensen 2021-10-21 12:40 ` Stefan Monnier 2021-10-21 13:44 ` Eli Zaretskii 2021-10-21 14:07 ` Aaron Jensen 2021-10-21 17:36 ` Eli Zaretskii 2021-10-21 17:46 ` Aaron Jensen 2021-10-21 18:04 ` Eli Zaretskii 2021-10-21 20:27 ` Aaron Jensen 2021-10-22 2:28 ` Aaron Jensen 2021-10-22 6:10 ` Eli Zaretskii 2021-10-22 13:58 ` Aaron Jensen 2021-10-26 13:23 ` Aaron Jensen 2021-10-26 14:05 ` Eli Zaretskii 2021-10-28 15:51 ` Eli Zaretskii 2021-10-28 18:12 ` Aaron Jensen 2021-10-28 18:20 ` Eli Zaretskii 2021-10-31 10:33 ` Alan Third 2021-10-31 16:42 ` Aaron Jensen 2021-10-21 13:40 ` Eli Zaretskii 2021-10-15 17:32 ` Alan Third 2021-10-15 17:54 ` Stefan Monnier 2021-10-15 18:28 ` Aaron Jensen 2021-10-04 8:28 ` martin rudalics 2021-09-27 19:26 ` Stefan Monnier 2021-09-27 23:02 ` Aaron Jensen 2021-09-28 2:29 ` Aaron Jensen 2021-09-29 5:10 ` Aaron Jensen 2021-09-29 9:28 ` martin rudalics 2021-09-28 5:50 ` Eli Zaretskii
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/emacs.git https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.