unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#11261: 24.1.50; cursor doesn't move in a long line
@ 2012-04-16 23:40 Katsumi Yamaoka
  2012-04-17  2:56 ` Eli Zaretskii
  0 siblings, 1 reply; 3+ messages in thread
From: Katsumi Yamaoka @ 2012-04-16 23:40 UTC (permalink / raw)
  To: 11261

Hi,

When I view an html source, of which lines are very long, I meet
with a symptom that C-f, C-b, and so forth don't move the cursor.
One discovered yesterday that it happens only when the header line
exists in a buffer (we use emacs-w3m that ises the header line for
the tab browsing).  Here's a recipe to reproduce this with Emacs -Q:

(let ((fox "The quick brown fox jumps over the lazy dog."))
  (pop-to-buffer "*testing*")
  (erase-buffer)
  (setq header-line-format fox)
  (dotimes (var 1000)
    (insert fox "  "))
  (goto-char (point-min))
  (search-forward "fox" nil t 500))

Could this be fixed?

Thanks in advance.
Regards,





^ permalink raw reply	[flat|nested] 3+ messages in thread

* bug#11261: 24.1.50; cursor doesn't move in a long line
  2012-04-16 23:40 bug#11261: 24.1.50; cursor doesn't move in a long line Katsumi Yamaoka
@ 2012-04-17  2:56 ` Eli Zaretskii
  2012-04-17 15:29   ` Eli Zaretskii
  0 siblings, 1 reply; 3+ messages in thread
From: Eli Zaretskii @ 2012-04-17  2:56 UTC (permalink / raw)
  To: Katsumi Yamaoka; +Cc: 11261

> Date: Tue, 17 Apr 2012 08:40:40 +0900
> From: Katsumi Yamaoka <yamaoka@jpl.org>
> 
> (let ((fox "The quick brown fox jumps over the lazy dog."))
>   (pop-to-buffer "*testing*")
>   (erase-buffer)
>   (setq header-line-format fox)
>   (dotimes (var 1000)
>     (insert fox "  "))
>   (goto-char (point-min))
>   (search-forward "fox" nil t 500))
> 
> Could this be fixed?

This is a clear regression, so I will look into it ASAP.

Thanks.





^ permalink raw reply	[flat|nested] 3+ messages in thread

* bug#11261: 24.1.50; cursor doesn't move in a long line
  2012-04-17  2:56 ` Eli Zaretskii
@ 2012-04-17 15:29   ` Eli Zaretskii
  0 siblings, 0 replies; 3+ messages in thread
From: Eli Zaretskii @ 2012-04-17 15:29 UTC (permalink / raw)
  To: yamaoka; +Cc: 11261-done

> Date: Tue, 17 Apr 2012 05:56:52 +0300
> From: Eli Zaretskii <eliz@gnu.org>
> Cc: 11261@debbugs.gnu.org
> 
> > Date: Tue, 17 Apr 2012 08:40:40 +0900
> > From: Katsumi Yamaoka <yamaoka@jpl.org>
> > 
> > (let ((fox "The quick brown fox jumps over the lazy dog."))
> >   (pop-to-buffer "*testing*")
> >   (erase-buffer)
> >   (setq header-line-format fox)
> >   (dotimes (var 1000)
> >     (insert fox "  "))
> >   (goto-char (point-min))
> >   (search-forward "fox" nil t 500))
> > 
> > Could this be fixed?
> 
> This is a clear regression, so I will look into it ASAP.

Fixed in revision 107846 on the emacs-24 branch.  The patch is below,
if you don't want to wait for the next pretest.

Thanks.

=== modified file 'src/ChangeLog'
--- src/ChangeLog	2012-04-13 18:08:18 +0000
+++ src/ChangeLog	2012-04-17 15:25:17 +0000
@@ -1,3 +1,14 @@
+2012-04-17  Eli Zaretskii  <eliz@gnu.org>
+
+	* xdisp.c (string_buffer_position_lim): Limit starting position to
+	BEGV.
+	(set_cursor_from_row): If called for a mode-line or header-line
+	row, return zero immediately.
+	(try_cursor_movement): If inside continuation line, don't back up
+	farther than the first row after the header line, if any.  Don't
+	consider the header-line row as "partially visible", even if
+	MATRIX_ROW_PARTIALLY_VISIBLE_P returns non-zero.  (Bug#11261)
+
 2012-04-13  Atsuo Ohki  <ohki@gssm.otsuka.tsukuba.ac.jp>  (tiny change)
 
 	* lread.c (lisp_file_lexically_bound_p): Fix hang at ";-*-\n" (bug#11238).

=== modified file 'src/xdisp.c'
--- src/xdisp.c	2012-04-09 12:46:34 +0000
+++ src/xdisp.c	2012-04-17 15:25:17 +0000
@@ -4979,7 +4979,7 @@ string_buffer_position_lim (Lisp_Object 
   Lisp_Object limit, prop, pos;
   int found = 0;
 
-  pos = make_number (from);
+  pos = make_number (max (from, BEGV));
 
   if (!back_p)	/* looking forward */
     {
@@ -13690,6 +13690,13 @@ set_cursor_from_row (struct window *w, s
      comes from a text property, not from an overlay.  */
   int string_from_text_prop = 0;
 
+  /* Don't even try doing anything if called for a mode-line or
+     header-line row, since the rest of the code isn't prepared to
+     deal with such calamities.  */
+  xassert (!row->mode_line_p);
+  if (row->mode_line_p)
+    return 0;
+
   /* Skip over glyphs not having an object at the start and the end of
      the row.  These are special glyphs like truncation marks on
      terminal frames.  */
@@ -14906,6 +14913,8 @@ try_cursor_movement (Lisp_Object window,
 	  else if (rc != CURSOR_MOVEMENT_SUCCESS
 		   && !NILP (BVAR (XBUFFER (w->buffer), bidi_display_reordering)))
 	    {
+	      struct glyph_row *row1;
+
 	      /* If rows are bidi-reordered and point moved, back up
 		 until we find a row that does not belong to a
 		 continuation line.  This is because we must consider
@@ -14916,24 +14925,28 @@ try_cursor_movement (Lisp_Object window,
 	      /* FIXME: Revisit this when glyph ``spilling'' in
 		 continuation lines' rows is implemented for
 		 bidi-reordered rows.  */
-	      while (MATRIX_ROW_CONTINUATION_LINE_P (row))
+	      for (row1 = MATRIX_FIRST_TEXT_ROW (w->current_matrix);
+		   MATRIX_ROW_CONTINUATION_LINE_P (row);
+		   --row)
 		{
 		  /* If we hit the beginning of the displayed portion
 		     without finding the first row of a continued
 		     line, give up.  */
-		  if (row <= w->current_matrix->rows)
+		  if (row <= row1)
 		    {
 		      rc = CURSOR_MOVEMENT_MUST_SCROLL;
 		      break;
 		    }
 		  xassert (row->enabled_p);
-		  --row;
 		}
 	    }
 	  if (must_scroll)
 	    ;
 	  else if (rc != CURSOR_MOVEMENT_SUCCESS
 	      && MATRIX_ROW_PARTIALLY_VISIBLE_P (w, row)
+	      /* Make sure this isn't a header line by any chance, since
+		 then MATRIX_ROW_PARTIALLY_VISIBLE_P might yield non-zero.  */
+	      && !row->mode_line_p
 	      && make_cursor_line_fully_visible_p)
 	    {
 	      if (PT == MATRIX_ROW_END_CHARPOS (row)






^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-04-17 15:29 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-04-16 23:40 bug#11261: 24.1.50; cursor doesn't move in a long line Katsumi Yamaoka
2012-04-17  2:56 ` Eli Zaretskii
2012-04-17 15:29   ` 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).