* bug#9034: point adjustment after `end-of-visual-line' moves to the next line
@ 2011-07-09 13:04 Dmitry Kurochkin
2011-07-11 4:16 ` Stefan Monnier
2021-08-25 16:32 ` bug#9034: point adjustment (with invisible text) " Lars Ingebrigtsen
0 siblings, 2 replies; 11+ messages in thread
From: Dmitry Kurochkin @ 2011-07-09 13:04 UTC (permalink / raw)
To: 9034
Package: emacs
Version: 24.0.50
If a line ends with invisible text, point adjustment moves to the next
line after `end-of-visual-line'. To reproduce run:
(progn (switch-to-buffer "test")
(insert "aline1\nbline2\ncline3\n")
(put-text-property 7 14 'invisible t) ; region [\nbline2]
(goto-char (point-min)))
After that in the test buffer do M-: (progn (end-of-visual-line)
(point)). `end-of-visual-line' moves point to position 14 as expected.
But after that the point is adjusted to position 15, as can be checked
by C-x =.
Sometimes the point is not adjusted to position 15 the first time you
run `end-of-visual-line'. But it is if you run it more than once.
Perhaps it is related to the last point position.
It is definitely happens because of point adjustment, setting
global-disable-point-adjustment to non-nil fixes the problem.
Also, `move-end-of-line` always behaves correctly, so it it something
specific to `end-of-visual-line' or `vertical-motion'.
The issue was originally reported on the emacs-devel ML [1].
Regards,
Dmitry
[1] http://lists.gnu.org/archive/html/emacs-devel/2011-07/msg00255.html
^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#9034: point adjustment after `end-of-visual-line' moves to the next line
2011-07-09 13:04 bug#9034: point adjustment after `end-of-visual-line' moves to the next line Dmitry Kurochkin
@ 2011-07-11 4:16 ` Stefan Monnier
2011-07-11 8:27 ` Dmitry Kurochkin
2021-08-25 16:32 ` bug#9034: point adjustment (with invisible text) " Lars Ingebrigtsen
1 sibling, 1 reply; 11+ messages in thread
From: Stefan Monnier @ 2011-07-11 4:16 UTC (permalink / raw)
To: Dmitry Kurochkin; +Cc: 9034
> If a line ends with invisible text, point adjustment moves to the next
> line after `end-of-visual-line'. To reproduce run:
> (progn (switch-to-buffer "test")
> (insert "aline1\nbline2\ncline3\n")
> (put-text-property 7 14 'invisible t) ; region [\nbline2]
> (goto-char (point-min)))
> After that in the test buffer do M-: (progn (end-of-visual-line)
> (point)). `end-of-visual-line' moves point to position 14 as expected.
> But after that the point is adjusted to position 15, as can be checked
> by C-x =.
> Sometimes the point is not adjusted to position 15 the first time you
> run `end-of-visual-line'. But it is if you run it more than once.
> Perhaps it is related to the last point position.
I can reproduce it with M-: (progn (goto-char 14) > (point))
> Also, `move-end-of-line` always behaves correctly, so it it something
> specific to `end-of-visual-line' or `vertical-motion'.
Apparently not since I can reproduce the problem with just goto-char.
Maybe it has to do with the use of M-: instead.
Stefan
^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#9034: point adjustment after `end-of-visual-line' moves to the next line
2011-07-11 4:16 ` Stefan Monnier
@ 2011-07-11 8:27 ` Dmitry Kurochkin
0 siblings, 0 replies; 11+ messages in thread
From: Dmitry Kurochkin @ 2011-07-11 8:27 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 9034
On Mon, 11 Jul 2011 00:16:31 -0400, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
> > If a line ends with invisible text, point adjustment moves to the next
> > line after `end-of-visual-line'. To reproduce run:
>
> > (progn (switch-to-buffer "test")
> > (insert "aline1\nbline2\ncline3\n")
> > (put-text-property 7 14 'invisible t) ; region [\nbline2]
> > (goto-char (point-min)))
>
> > After that in the test buffer do M-: (progn (end-of-visual-line)
> > (point)). `end-of-visual-line' moves point to position 14 as expected.
> > But after that the point is adjusted to position 15, as can be checked
> > by C-x =.
>
> > Sometimes the point is not adjusted to position 15 the first time you
> > run `end-of-visual-line'. But it is if you run it more than once.
> > Perhaps it is related to the last point position.
>
> I can reproduce it with M-: (progn (goto-char 14) > (point))
>
indeed
> > Also, `move-end-of-line` always behaves correctly, so it it something
> > specific to `end-of-visual-line' or `vertical-motion'.
>
> Apparently not since I can reproduce the problem with just goto-char.
If visual-line-mode is enabled (so that C-e is mapped to
`end-of-visual-line' instead of `move-end-of-line'),
`end-of-visual-line' works correctly when run with C-e.
> Maybe it has to do with the use of M-: instead.
>
Seems plausible.
Regards,
Dmitry
>
> Stefan
^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#9034: point adjustment (with invisible text) moves to the next line
2011-07-09 13:04 bug#9034: point adjustment after `end-of-visual-line' moves to the next line Dmitry Kurochkin
2011-07-11 4:16 ` Stefan Monnier
@ 2021-08-25 16:32 ` Lars Ingebrigtsen
2021-08-25 16:43 ` Eli Zaretskii
1 sibling, 1 reply; 11+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-25 16:32 UTC (permalink / raw)
To: Dmitry Kurochkin; +Cc: 9034
Dmitry Kurochkin <dmitry.kurochkin@gmail.com> writes:
> (progn (switch-to-buffer "test")
> (insert "aline1\nbline2\ncline3\n")
> (put-text-property 7 14 'invisible t) ; region [\nbline2]
> (goto-char (point-min)))
>
> After that in the test buffer do M-: (progn (end-of-visual-line)
> (point)). `end-of-visual-line' moves point to position 14 as expected.
> But after that the point is adjusted to position 15, as can be checked
> by C-x =.
(I'm going through old bug reports that unfortunately got weren't
resolved at the time.)
This problem is still present in Emacs 28, and as previously noted, any
command you do (with `M-:') makes point advance to the next line. (It's
not 100% reproducible -- sometimes nothing happens, and sometimes it
advances.)
So `C-e' and then, for instance `M-: 4 RET' will advance point here.
Also as previously noted, if Vglobal_disable_point_adjustment is on,
then this doesn't happen, so the problem almost has to be here:
command_loop_1
...
if (current_buffer == prev_buffer
&& XBUFFER (XWINDOW (selected_window)->contents) == current_buffer
&& last_point_position != PT
&& NILP (Vdisable_point_adjustment)
&& NILP (Vglobal_disable_point_adjustment))
{
if (last_point_position > BEGV
&& last_point_position < ZV
&& (composition_adjust_point (last_point_position,
last_point_position)
!= last_point_position))
/* The last point was temporarily set within a grapheme
cluster to prevent automatic composition. To recover
the automatic composition, we must update the
display. */
windows_or_buffers_changed = 21;
if (!already_adjusted)
adjust_point_for_property (last_point_position,
MODIFF != prev_modiff);
}
I haven't tried to debug any further -- is it obvious to anybody what's
failing here, by any chance? :-)
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#9034: point adjustment (with invisible text) moves to the next line
2021-08-25 16:32 ` bug#9034: point adjustment (with invisible text) " Lars Ingebrigtsen
@ 2021-08-25 16:43 ` Eli Zaretskii
2021-08-26 13:48 ` Lars Ingebrigtsen
0 siblings, 1 reply; 11+ messages in thread
From: Eli Zaretskii @ 2021-08-25 16:43 UTC (permalink / raw)
To: Lars Ingebrigtsen; +Cc: dmitry.kurochkin, 9034
> From: Lars Ingebrigtsen <larsi@gnus.org>
> Date: Wed, 25 Aug 2021 18:32:15 +0200
> Cc: 9034@debbugs.gnu.org
>
> Also as previously noted, if Vglobal_disable_point_adjustment is on,
> then this doesn't happen, so the problem almost has to be here:
>
> command_loop_1
> ...
> if (current_buffer == prev_buffer
> && XBUFFER (XWINDOW (selected_window)->contents) == current_buffer
> && last_point_position != PT
> && NILP (Vdisable_point_adjustment)
> && NILP (Vglobal_disable_point_adjustment))
> {
> if (last_point_position > BEGV
> && last_point_position < ZV
> && (composition_adjust_point (last_point_position,
> last_point_position)
> != last_point_position))
> /* The last point was temporarily set within a grapheme
> cluster to prevent automatic composition. To recover
> the automatic composition, we must update the
> display. */
> windows_or_buffers_changed = 21;
> if (!already_adjusted)
> adjust_point_for_property (last_point_position,
> MODIFF != prev_modiff);
> }
>
> I haven't tried to debug any further -- is it obvious to anybody what's
> failing here, by any chance? :-)
This code is chock-full of questionable heuristics, and in particular
tries to guess in which direction to move point out of the invisible
text. The results are sometimes surprising. The upside is that it
"mostly works". But if someone can come up with a better heuristics,
I'm all ears.
^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#9034: point adjustment (with invisible text) moves to the next line
2021-08-25 16:43 ` Eli Zaretskii
@ 2021-08-26 13:48 ` Lars Ingebrigtsen
2021-08-26 15:46 ` Eli Zaretskii
0 siblings, 1 reply; 11+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-26 13:48 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: dmitry.kurochkin, 9034
Eli Zaretskii <eliz@gnu.org> writes:
> This code is chock-full of questionable heuristics, and in particular
> tries to guess in which direction to move point out of the invisible
> text. The results are sometimes surprising. The upside is that it
> "mostly works". But if someone can come up with a better heuristics,
> I'm all ears.
Ah, right. But... the super-confusing thing about this is that we're
not moving point in the buffer at all. Just doing `M-: 4 RET' will
result in this code adjusting point in the buffer. Doing, for instance,
`M-x foo RET' (where `foo' does nothing) does not result in this point
movement.
So is `M-:' doing some weird thing in the original buffer to trigger
this oddity?
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#9034: point adjustment (with invisible text) moves to the next line
2021-08-26 13:48 ` Lars Ingebrigtsen
@ 2021-08-26 15:46 ` Eli Zaretskii
2021-08-26 16:33 ` Lars Ingebrigtsen
0 siblings, 1 reply; 11+ messages in thread
From: Eli Zaretskii @ 2021-08-26 15:46 UTC (permalink / raw)
To: Lars Ingebrigtsen; +Cc: dmitry.kurochkin, 9034
> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: dmitry.kurochkin@gmail.com, 9034@debbugs.gnu.org
> Date: Thu, 26 Aug 2021 15:48:32 +0200
>
> Eli Zaretskii <eliz@gnu.org> writes:
>
> > This code is chock-full of questionable heuristics, and in particular
> > tries to guess in which direction to move point out of the invisible
> > text. The results are sometimes surprising. The upside is that it
> > "mostly works". But if someone can come up with a better heuristics,
> > I'm all ears.
>
> Ah, right. But... the super-confusing thing about this is that we're
> not moving point in the buffer at all.
The original recipe moved from point-min to an end of a line.
> Just doing `M-: 4 RET' will result in this code adjusting point in
> the buffer. Doing, for instance, `M-x foo RET' (where `foo' does
> nothing) does not result in this point movement.
>
> So is `M-:' doing some weird thing in the original buffer to trigger
> this oddity?
Doing M-: in what part of the recipe?
^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#9034: point adjustment (with invisible text) moves to the next line
2021-08-26 15:46 ` Eli Zaretskii
@ 2021-08-26 16:33 ` Lars Ingebrigtsen
2021-08-26 16:48 ` Eli Zaretskii
0 siblings, 1 reply; 11+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-26 16:33 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: dmitry.kurochkin, 9034
Eli Zaretskii <eliz@gnu.org> writes:
>> Just doing `M-: 4 RET' will result in this code adjusting point in
>> the buffer. Doing, for instance, `M-x foo RET' (where `foo' does
>> nothing) does not result in this point movement.
>>
>> So is `M-:' doing some weird thing in the original buffer to trigger
>> this oddity?
>
> Doing M-: in what part of the recipe?
Eval this:
(progn (switch-to-buffer "test")
(insert "aline1\nbline2\ncline3\n")
(put-text-property 7 14 'invisible t) ; region [\nbline2]
(goto-char (point-min)))
Then
C-e
M-: 4 RET
This will move point to the start of the next line about half the time.
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#9034: point adjustment (with invisible text) moves to the next line
2021-08-26 16:33 ` Lars Ingebrigtsen
@ 2021-08-26 16:48 ` Eli Zaretskii
2021-08-26 17:05 ` Lars Ingebrigtsen
0 siblings, 1 reply; 11+ messages in thread
From: Eli Zaretskii @ 2021-08-26 16:48 UTC (permalink / raw)
To: Lars Ingebrigtsen; +Cc: dmitry.kurochkin, 9034
> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: dmitry.kurochkin@gmail.com, 9034@debbugs.gnu.org
> Date: Thu, 26 Aug 2021 18:33:29 +0200
>
> Eval this:
>
> (progn (switch-to-buffer "test")
> (insert "aline1\nbline2\ncline3\n")
> (put-text-property 7 14 'invisible t) ; region [\nbline2]
> (goto-char (point-min)))
>
> Then
>
> C-e
> M-: 4 RET
>
> This will move point to the start of the next line about half the time.
I cannot reproduce this: no matter how many times I do the "C-e M-:"
dance, point stays put.
^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#9034: point adjustment (with invisible text) moves to the next line
2021-08-26 16:48 ` Eli Zaretskii
@ 2021-08-26 17:05 ` Lars Ingebrigtsen
2021-08-26 17:13 ` Eli Zaretskii
0 siblings, 1 reply; 11+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-26 17:05 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: dmitry.kurochkin, 9034
Eli Zaretskii <eliz@gnu.org> writes:
> I cannot reproduce this: no matter how many times I do the "C-e M-:"
> dance, point stays put.
Does it help if you only do the `C-e' once?
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#9034: point adjustment (with invisible text) moves to the next line
2021-08-26 17:05 ` Lars Ingebrigtsen
@ 2021-08-26 17:13 ` Eli Zaretskii
0 siblings, 0 replies; 11+ messages in thread
From: Eli Zaretskii @ 2021-08-26 17:13 UTC (permalink / raw)
To: Lars Ingebrigtsen; +Cc: dmitry.kurochkin, 9034
> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: dmitry.kurochkin@gmail.com, 9034@debbugs.gnu.org
> Date: Thu, 26 Aug 2021 19:05:15 +0200
>
> Eli Zaretskii <eliz@gnu.org> writes:
>
> > I cannot reproduce this: no matter how many times I do the "C-e M-:"
> > dance, point stays put.
>
> Does it help if you only do the `C-e' once?
I tried that as well, to no avail.
I think a more efficient way of understanding what's going on with M-:
is to step through the code in keyboard.c with a debugger.
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2021-08-26 17:13 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-07-09 13:04 bug#9034: point adjustment after `end-of-visual-line' moves to the next line Dmitry Kurochkin
2011-07-11 4:16 ` Stefan Monnier
2011-07-11 8:27 ` Dmitry Kurochkin
2021-08-25 16:32 ` bug#9034: point adjustment (with invisible text) " Lars Ingebrigtsen
2021-08-25 16:43 ` Eli Zaretskii
2021-08-26 13:48 ` Lars Ingebrigtsen
2021-08-26 15:46 ` Eli Zaretskii
2021-08-26 16:33 ` Lars Ingebrigtsen
2021-08-26 16:48 ` Eli Zaretskii
2021-08-26 17:05 ` Lars Ingebrigtsen
2021-08-26 17:13 ` Eli Zaretskii
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).