* 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).