GNU bug report logs -
#11261
24.1.50; cursor doesn't move in a long line
Previous Next
Reported by: Katsumi Yamaoka <yamaoka <at> jpl.org>
Date: Mon, 16 Apr 2012 23:42:02 UTC
Severity: normal
Found in version 24.1.50
Done: Eli Zaretskii <eliz <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your bug report
#11261: 24.1.50; cursor doesn't move in a long line
which was filed against the emacs package, has been closed.
The explanation is attached below, along with your original report.
If you require more details, please reply to 11261 <at> debbugs.gnu.org.
--
11261: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=11261
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
> Date: Tue, 17 Apr 2012 05:56:52 +0300
> From: Eli Zaretskii <eliz <at> gnu.org>
> Cc: 11261 <at> debbugs.gnu.org
>
> > Date: Tue, 17 Apr 2012 08:40:40 +0900
> > From: Katsumi Yamaoka <yamaoka <at> 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 <at> 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 <at> 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)
[Message part 3 (message/rfc822, inline)]
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,
This bug report was last modified 13 years and 89 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.