all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Dmitry Gutov <dmitry@gutov.dev>
Cc: alan@idiocy.org, 71866@debbugs.gnu.org
Subject: bug#71866: 30.0.50; [macOS] Cursor hiding char behind it with certain theme customization
Date: Mon, 22 Jul 2024 17:45:44 +0300	[thread overview]
Message-ID: <86wmlda3jb.fsf@gnu.org> (raw)
In-Reply-To: <7ae61592-8319-4b1a-b973-4015ff1db569@gutov.dev> (message from Dmitry Gutov on Mon, 22 Jul 2024 02:58:33 +0300)

> Date: Mon, 22 Jul 2024 02:58:33 +0300
> Cc: alan@idiocy.org, 71866@debbugs.gnu.org
> From: Dmitry Gutov <dmitry@gutov.dev>
> 
> >>>     . Sometimes an Emacs frame shows its window as selected (judging by
> >>>       the way the mode line is displayed), but the 3 colored circles at
> >>>       the top left corner of the frame are shown in gray.  What does
> >>>       this mean, in Emacs terms, and how is that different from the
> >>>       situation where both the mode line is shown as active and the
> >>>       circles are shown in red/yellow/green colors?
> >>
> >> It seems to me a consequence of our having a breakpoint inside a
> >> function that updates how the frame looks (which includes its contents,
> >> the "selected" status and etc) - when I switch the focus away manually
> >> to a different program in the middle of that (to handle the breakpoint),
> >> probably that created a de-synchronization that never happens in other
> >> circumstances.
> > 
> > If you are sure that this happens only when Emacs is stopped at a
> > breakpoint, this aspect of the issue can be disregarded.
> 
> Seems so to me. You could see the way Emacs behaves without breakpoints 
> at the beginning of the previous video.

But note that both at the beginning of this new video and at its end,
where the debugger says "resuming" (which means Emacs is running), the
3 circles of both Emacs frames are gray.  So I guess (a) this does
happen when Emacs runs, and (b) it probably means focus is in some
other window, not in any of the Emacs frames.

> > All of the backtraces from all the calls produced by a single M-`
> > press.  It is best to have only the backtraces that happen when the
> > problem with the cursor is visible, if you can easily arrange for
> > that.
> 
> Yup, done that, see below.

Thanks.  There's a disturbing discrepancy between what the debugger
says about the calls to ns_draw_window_cursor and what I see on
display.  For example, there are only 2 events where one of the two
Emacs frames begins showing a filled-block cursor (from some other
cursor display): at step "1" and step "3".  But the backtraces you
collected tell a different story: the only calls with
FILLED_BOX_CURSOR are at steps "1" and "7".  At step "3", the debugger
claims we called ns_draw_window_cursor with NO_CURSOR, whereas the
video clearly shows that the cursor is drawn as a filled block!  This
issue alone already makes all this quite mysterious and hard to
interpret.

Moreover, the only event in the video where a previously-displayed
cursor disappears in one of the windows is the last part, where you
type "c" and the debugger says "Process 7616 resuming".  And that
happens without ns_draw_window_cursor being called!

So I think there's some factor at work here that we are not
considering.  Perhaps it's the macOS window-system or something.

I also don't understand the calls where cursor_type=NO_CURSOR,
on_p=true, and active_p=false.  I would expect to see
HOLLOW_BOX_CURSOR there, because these are the calls where we display
the cursor in a non-selected window.  Could you step inside
get_window_cursor_type and see how this happens?  To arrange for that,
get to the step before the one where the breakpoint in
ns_draw_window_cursor will break with the above combination of
arguments (for example, get to step "3" in your session), then add a
breakpoint in display_and_set_cursor, trigger the next cursor display
by typing "continue", then step through display_and_set_cursor and
into get_window_cursor_type, and see why we end up deciding to display
NO_CURSOR in that case.

Also, what are your values of cursor-type and
cursor-in-non-selected-windows?

> >> ...and whether that all is a red herring, caused by our breakpoints,
> >> whereas the code reading to the original problem might reside somewhere
> >> else. ;-(
> > 
> > Could be, but in general ns_draw_window_cursor is AFAIK the only way
> > of redrawing the cursor, so I think we are on a good track here.
> 
> Here's hoping.

I'm no longer so sure about the above assertion, sadly.

Thanks.





  reply	other threads:[~2024-07-22 14:45 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-01  3:14 bug#71866: 30.0.50; [macOS] Cursor hiding char behind it with certain theme customization Dmitry Gutov
2024-07-01 11:36 ` Eli Zaretskii
2024-07-02  1:07   ` Dmitry Gutov
2024-07-06  8:56     ` Eli Zaretskii
2024-07-09  2:37       ` Dmitry Gutov
2024-07-09 11:31         ` Eli Zaretskii
2024-07-10  2:46           ` Dmitry Gutov
2024-07-10 11:58             ` Eli Zaretskii
2024-07-19  1:57               ` Dmitry Gutov
2024-07-20  8:30                 ` Eli Zaretskii
2024-07-20 15:46                   ` Dmitry Gutov
2024-07-20 16:03                     ` Eli Zaretskii
2024-07-21  0:53                       ` Dmitry Gutov
2024-07-21  7:20                         ` Eli Zaretskii
2024-07-21  9:04                           ` Eli Zaretskii
2024-07-21 23:22                             ` Dmitry Gutov
2024-07-21 13:50                           ` Dmitry Gutov
2024-07-21 14:55                             ` Eli Zaretskii
2024-07-21 23:58                               ` Dmitry Gutov
2024-07-22 14:45                                 ` Eli Zaretskii [this message]
2024-07-22 15:27                                   ` Alan Third
2024-07-22 16:02                                     ` Alan Third
2024-07-23  1:11                                       ` Dmitry Gutov
2024-07-23 11:19                                         ` Eli Zaretskii
2024-07-24  0:48                                           ` Dmitry Gutov
2024-07-24 11:32                                             ` Eli Zaretskii
2024-07-24 14:34                                               ` Dmitry Gutov
2024-07-24 16:29                                                 ` Eli Zaretskii
2024-07-24 19:22                                                   ` Dmitry Gutov
2024-07-24 20:08                                                     ` Dmitry Gutov
2024-07-25  5:01                                                     ` Eli Zaretskii
2024-07-25 16:14                                                       ` Dmitry Gutov
2024-07-22 16:10                                     ` Eli Zaretskii
2024-07-22 19:02                                       ` Alan Third
2024-07-22 19:15                                         ` Eli Zaretskii
2024-07-22 19:47                                           ` Alan Third
2024-07-23  1:06                                   ` Dmitry Gutov
2024-07-23 11:17                                     ` Eli Zaretskii
2024-07-02 23:42 ` Stefan Kangas
2024-07-07  2:03   ` Dmitry Gutov
2024-07-09 18:22     ` Stefan Kangas
2024-07-10  2:56       ` Dmitry Gutov
2024-07-23  7:40         ` Gerd Möllmann
2024-07-24  0:56           ` Dmitry Gutov
2024-07-24  3:48             ` Gerd Möllmann
2024-07-24 19:16               ` Dmitry Gutov
2024-07-25  3:03                 ` Gerd Möllmann
2024-07-25  5:39                   ` Eli Zaretskii
2024-07-25  5:58                     ` Gerd Möllmann
2024-07-25 14:46                   ` Dmitry Gutov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=86wmlda3jb.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=71866@debbugs.gnu.org \
    --cc=alan@idiocy.org \
    --cc=dmitry@gutov.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.