From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.devel Subject: Re: `vertical-motion', `goto-line' set point to invisible text Date: Sun, 03 Jul 2011 02:55:31 -0400 Message-ID: References: <87ei28f4re.fsf@gmail.com> Reply-To: Eli Zaretskii NNTP-Posting-Host: lo.gmane.org X-Trace: dough.gmane.org 1309676153 8478 80.91.229.12 (3 Jul 2011 06:55:53 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Sun, 3 Jul 2011 06:55:53 +0000 (UTC) Cc: emacs-devel@gnu.org To: Dmitry Kurochkin Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sun Jul 03 08:55:49 2011 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([140.186.70.17]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1QdGaq-0001qh-79 for ged-emacs-devel@m.gmane.org; Sun, 03 Jul 2011 08:55:48 +0200 Original-Received: from localhost ([::1]:48649 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QdGap-0004ty-3l for ged-emacs-devel@m.gmane.org; Sun, 03 Jul 2011 02:55:47 -0400 Original-Received: from eggs.gnu.org ([140.186.70.92]:53016) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QdGaa-0004tr-BZ for emacs-devel@gnu.org; Sun, 03 Jul 2011 02:55:33 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QdGaZ-0000FG-F6 for emacs-devel@gnu.org; Sun, 03 Jul 2011 02:55:32 -0400 Original-Received: from fencepost.gnu.org ([140.186.70.10]:60989) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QdGaZ-0000FC-BS for emacs-devel@gnu.org; Sun, 03 Jul 2011 02:55:31 -0400 Original-Received: from eliz by fencepost.gnu.org with local (Exim 4.71) (envelope-from ) id 1QdGaZ-0003T2-4z; Sun, 03 Jul 2011 02:55:31 -0400 In-reply-to: <87ei28f4re.fsf@gmail.com> (message from Dmitry Kurochkin on Sun, 03 Jul 2011 06:59:49 +0400) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-Received-From: 140.186.70.10 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:141486 Archived-At: > From: Dmitry Kurochkin > 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.