unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Dmitry Kurochkin <dmitry.kurochkin@gmail.com>
Cc: emacs-devel@gnu.org
Subject: Re: `vertical-motion', `goto-line' set point to invisible text
Date: Sun, 03 Jul 2011 02:55:31 -0400	[thread overview]
Message-ID: <E1QdGaZ-0003T2-4z@fencepost.gnu.org> (raw)
In-Reply-To: <87ei28f4re.fsf@gmail.com> (message from Dmitry Kurochkin on Sun,  03 Jul 2011 06:59:49 +0400)

> From: Dmitry Kurochkin <dmitry.kurochkin@gmail.com>
> Date: Sun, 03 Jul 2011 06:59:49 +0400
> 
> While working on notmuch [1] emacs client, I stumbled upon an unexpected
> behavior: `beginning-of-visual-line' places point to invisible text in
> the beginning to the line.  I.e. you have:
> 
>   line1
>   line2    <--- this line is not visible
>   line3    <--- point is on this line
> 
> in this case, `beginning-of-visual-line' will set the position to start
> of line2 (which is invisible), not line3.  It differs from what
> `move-beginning-of-line' and even does not match
> `line-beginning-position'.  `beginning-of-visual-line' uses
> `vertical-motion' to do the job.  `goto-line' has a similar behavior.  I
> believe there are more functions like this.

See the node "Invisible Text" in the ELisp manual.  Some functions are
explicitly programmed to special behavior in the vicinity of invisible
text, others aren't.

> This does not look right to me.  I expect these functions never set
> point inside invisible text and there should be some general way to
> protect from this.

Are you sure you don't mix invisible with intangible?  Invisible means
just that: not shown on the screen.  It doesn't mean point cannot
enter the invisible portion.  Emacs does try to move point out of
invisible range of text, but it does so in its command loop, _after_
the cursor motion functions and the display engine did their job.  So
your test program just shows that cursor motion has no problem getting
into the invisible region, which I think is not a bug.

> But perhaps I am wrong and we have to manually skip
> all invisible text forward after any point move?

Yes.

There is something strange in how we behave in this example, though.
To see it, modify your test program to make each line's 1st character
different from other lines.  Then, after the program ends, C-a on the
3rd line and type "C-x =": Emacs says the character at point is the
first character of the invisible line 2, which seems wrong, as the
display shows line 3.  In fact, you cannot place point on the 1st
character of line 3: C-b from the 2nd character of line 3 gets you to
the 1st character of line 2!  I think this happens because the range
of invisible characters includes the newline of line 2.



  reply	other threads:[~2011-07-03  6:55 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-03  2:59 `vertical-motion', `goto-line' set point to invisible text Dmitry Kurochkin
2011-07-03  6:55 ` Eli Zaretskii [this message]
2011-07-03  7:31   ` Dmitry Kurochkin
2011-07-03 13:33     ` Eli Zaretskii
2011-07-04  2:08       ` Dmitry Kurochkin
2011-07-03 14:50 ` Stefan Monnier
2011-07-03 15:14   ` Eli Zaretskii
2011-07-04 14:01     ` Stefan Monnier
2011-07-04 15:14       ` Eli Zaretskii
2011-07-04 18:10         ` Stefan Monnier
2011-07-04 20:06           ` Eli Zaretskii
2011-07-04 20:06           ` Eli Zaretskii
2011-07-05  2:22           ` Dmitry Kurochkin
2011-07-05  2:55             ` Eli Zaretskii
2011-07-05  3:52             ` Dmitry Kurochkin
2011-07-05  7:56               ` Eli Zaretskii
2011-07-09 13:13                 ` Dmitry Kurochkin

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

  List information: https://www.gnu.org/software/emacs/

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

  git send-email \
    --in-reply-to=E1QdGaZ-0003T2-4z@fencepost.gnu.org \
    --to=eliz@gnu.org \
    --cc=dmitry.kurochkin@gmail.com \
    --cc=emacs-devel@gnu.org \
    /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 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).