From unknown Tue Aug 19 07:26:48 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#24372 <24372@debbugs.gnu.org> To: bug#24372 <24372@debbugs.gnu.org> Subject: Status: 25.1.50; After losing focus, cursor is hidden when moving point Reply-To: bug#24372 <24372@debbugs.gnu.org> Date: Tue, 19 Aug 2025 14:26:48 +0000 retitle 24372 25.1.50; After losing focus, cursor is hidden when moving poi= nt reassign 24372 emacs submitter 24372 Philipp Stephani
> From: Philipp Stephani <p.stephani2@gmail.com>
> Date: Mon, 05 Sep 2016 21:16:40 +0200
>
> emacs -Q -eval '(setq blink-cursor-delay 0.0)'
>
> Move point around in the scratch buffer (e.g. press C-b a couple of
> times): the cursor stays visible, as it should be.=C2=A0 Then put the = mouse
> focus on a different GTK window (not Emacs window), put the mouse focu= s
> back on Emacs, and move point again: the cursor is hidden, making it > impossible to see until you stop moving.
Does it happen even if you wait with cursor motion until after the
cursor blinks one time, i.e. if you start moving point with the cursor
already visible after Emacs gets focus?
> From: Philipp Stephani <p.stephani2@gmail.com>
> Date: Fri, 09 Sep 2016 15:59:02 +0000
> Cc: 24372@debbugs.gnu.org
>
> Eli Zaretskii <eliz@gnu.org> schrieb am Di., 6. Sep. 2016 um 18:0= 3 Uhr:
>
>=C2=A0 > From: Philipp Stephani <p.stephani2@gmail.com>= ;
>=C2=A0 > Date: Mon, 05 Sep 2016 21:16:40 +0200
>=C2=A0 >
>=C2=A0 > emacs -Q -eval '(setq blink-cursor-delay 0.0)'
>=C2=A0 >
>=C2=A0 > Move point around in the scratch buffer (e.g. press C-b a c= ouple of
>=C2=A0 > times): the cursor stays visible, as it should be. Then put= the mouse
>=C2=A0 > focus on a different GTK window (not Emacs window), put the= mouse focus
>=C2=A0 > back on Emacs, and move point again: the cursor is hidden, = making it
>=C2=A0 > impossible to see until you stop moving.
>
>=C2=A0 Does it happen even if you wait with cursor motion until after t= he
>=C2=A0 cursor blinks one time, i.e. if you start moving point with the = cursor
>=C2=A0 already visible after Emacs gets focus?
>
> Yes. No matter what state the cursor is in and how often it has alread= y blinked, it becomes invisible when
> moving.
So what is the importance of moving focus out of the Emacs frame and
then back into it?=C2=A0 Is the problem reproducible without that?=C2=A0 Or= are
you saying that focus-out followed by focus-in event somehow changes
the behavior wrt displaying the cursor?
> From: Ph= ilipp Stephani <p.stephani2@gmail.com>
> Date: Fri, 09 Sep 2016 15:59:02 +0000
> Cc: 24372@debbugs.gnu.org
>
> Eli Zaretskii <eliz@gnu.org> schrieb am Di., 6. Sep. 2016 um 18:0= 3 Uhr:
>
>=C2=A0 > From: Philipp Stephani <p.stephani2@gmail.com>= ;
>=C2=A0 > Date: Mon, 05 Sep 2016 21:16:40 +0200
>=C2=A0 >
>=C2=A0 > emacs -Q -eval '(setq blink-cursor-delay 0.0)'
>=C2=A0 >
>=C2=A0 > Move point around in the scratch buffer (e.g. press C-b a c= ouple of
>=C2=A0 > times): the cursor stays visible, as it should be. Then put= the mouse
>=C2=A0 > focus on a different GTK window (not Emacs window), put the= mouse focus
>=C2=A0 > back on Emacs, and move point again: the cursor is hidden, = making it
>=C2=A0 > impossible to see until you stop moving.
>
>=C2=A0 Does it happen even if you wait with cursor motion until after t= he
>=C2=A0 cursor blinks one time, i.e. if you start moving point with the = cursor
>=C2=A0 already visible after Emacs gets focus?
>
> Yes. No matter what state the cursor is in and how often it has alread= y blinked, it becomes invisible when
> moving.
So what is the importance of moving focus out of the Emacs frame and
then back into it?=C2=A0 Is the problem reproducible without that?=C2=A0 Or= are
you saying that focus-out followed by focus-in event somehow changes
the behavior wrt displaying the cursor?
Eli Zaretskii <eliz@gnu.org= > schrieb am Fr., 9. Sep. 2016 um 18:07=C2=A0Uhr:> From: Philipp Stephani= <p.stephani2@gmail.com>
> Date: Fri, 09 Sep 2016 15:59:02 +0000
> Cc: 24372@debbugs.gnu.org
>
> Eli Zaretskii <eliz@gnu.org> schrieb am Di., 6. Sep. 2016 um 18:0= 3 Uhr:
>
>=C2=A0 > From: Philipp Stephani <p.stephani2@gmail.com>= ;
>=C2=A0 > Date: Mon, 05 Sep 2016 21:16:40 +0200
>=C2=A0 >
>=C2=A0 > emacs -Q -eval '(setq blink-cursor-delay 0.0)'
>=C2=A0 >
>=C2=A0 > Move point around in the scratch buffer (e.g. press C-b a c= ouple of
>=C2=A0 > times): the cursor stays visible, as it should be. Then put= the mouse
>=C2=A0 > focus on a different GTK window (not Emacs window), put the= mouse focus
>=C2=A0 > back on Emacs, and move point again: the cursor is hidden, = making it
>=C2=A0 > impossible to see until you stop moving.
>
>=C2=A0 Does it happen even if you wait with cursor motion until after t= he
>=C2=A0 cursor blinks one time, i.e. if you start moving point with the = cursor
>=C2=A0 already visible after Emacs gets focus?
>
> Yes. No matter what state the cursor is in and how often it has alread= y blinked, it becomes invisible when
> moving.
So what is the importance of moving focus out of the Emacs frame and
then back into it?=C2=A0 Is the problem reproducible without that?=C2=A0 Or= are
you saying that focus-out followed by focus-in event somehow changes
the behavior wrt displaying the cursor?Yes. The cursor only become invisible after a focus-out/fo= cus-in event.This isn't surprising given= that blink-cursor-mode changes focus-in-hook and focus-out-hook. Probably = the bug is hidden somewhere in the complex interaction between the various = blink-cursor timers and hooks.=C2=A0
Philipp Stephani <p.s= tephani2@gmail.com> schrieb am Fr., 9. Sep. 2016 um 18:20=C2=A0Uhr:<= br class=3D"gmail_msg">Eli Zaretskii <eliz@gnu.org> schrieb am= Fr., 9. Sep. 2016 um 18:07=C2=A0Uhr:> From: Philipp Stephani <p.step= hani2@gmail.com>
> Date: Fri, 09 Sep 2016 15:59:02 +0000
> Cc: 24372@debbugs.gnu.org
>
> Eli Zaretskii <eliz@gnu.org> schrieb am Di., 6. Sep. 2016 um 18:0= 3 Uhr:
>
>=C2=A0 > From: Philipp Stephani <p.stephani2@gmail.com>= ;
>=C2=A0 > Date: Mon, 05 Sep 2016 21:16:40 +0200
>=C2=A0 >
>=C2=A0 > emacs -Q -eval '(setq blink-cursor-delay 0.0)'
>=C2=A0 >
>=C2=A0 > Move point around in the scratch buffer (e.g. press C-b a c= ouple of
>=C2=A0 > times): the cursor stays visible, as it should be. Then put= the mouse
>=C2=A0 > focus on a different GTK window (not Emacs window), put the= mouse focus
>=C2=A0 > back on Emacs, and move point again: the cursor is hidden, = making it
>=C2=A0 > impossible to see until you stop moving.
>
>=C2=A0 Does it happen even if you wait with cursor motion until after t= he
>=C2=A0 cursor blinks one time, i.e. if you start moving point with the = cursor
>=C2=A0 already visible after Emacs gets focus?
>
> Yes. No matter what state the cursor is in and how often it has alread= y blinked, it becomes invisible when
> moving.
So what is the importance of moving focus out of the Emacs frame and
then back into it?=C2=A0 Is the problem reproducible without that?=C2=A0 Or= are
you saying that focus-out followed by focus-in event somehow changes
the behavior wrt displaying the cursor?Yes. The cursor only become invisible after a focus-out/fo= cus-in event.This isn't surprising given= that blink-cursor-mode changes focus-in-hook and focus-out-hook. Probably = the bug is hidden somewhere in the complex interaction between the various = blink-cursor timers and hooks.=C2=A0A simpler recipe that doesn't need explicit focus events isemacs -Q -eval '(progn (setq blink-cursor-delay 0.0) (blink-curs= or-suspend) (blink-cursor-check))'=C2=A0=and then start movin= g point.
> From: Philipp Stephani <p.stephani2@gmail.com>
> Date: Fri, 09 Sep 2016 17:18:12 +0000
> Cc: 24372@debbugs.gnu.org
>
>=C2=A0 A simpler recipe that doesn't need explicit focus events is<= br class=3D"gmail_msg"> >
>=C2=A0 emacs -Q -eval '(progn (setq blink-cursor-delay 0.0) (blink-= cursor-suspend) (blink-cursor-check))'
>
>=C2=A0 and then start moving point.
>
> OK, I guess one issue is that setting blink-cursor-delay doesn't r= estart blink-cursor-idle-timer. (Similarly,
> changing blink-cursor-interval doesn't restart blink-cursor-timer.= ) While obviously we can't fix that when using
> setq, I'd suggest adding custom setters to the variables neverthel= ess.
>
> The direct cause of the issue seems to be that, when blink-cursor-dela= y is idle, after every command
> blink-cursor-start is called immediately, which hides the cursor.
Thanks.=C2=A0 Does the patch below fix the issue, without introducing any adverse side effects?