From 41d24b39c7a261c08e66a9397e128c639cace0bb Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Tue, 29 Aug 2006 22:17:05 +0000 Subject: * indent.c (Fvertical_motion): Don't move back if we were displaying a Lisp string, either. --- src/indent.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'src/indent.c') diff --git a/src/indent.c b/src/indent.c index cc928f2171f..cbb53c3678f 100644 --- a/src/indent.c +++ b/src/indent.c @@ -2074,7 +2074,7 @@ whether or not it is currently displayed in some window. */) { int it_start; int oselective; - int start_on_image_or_stretch_p; + int start_on_image_or_stretch_or_string_p; SET_TEXT_POS (pt, PT, PT_BYTE); start_display (&it, w, pt); @@ -2086,8 +2086,9 @@ whether or not it is currently displayed in some window. */) while the end position is really at some X > 0, the same X that PT had. */ it_start = IT_CHARPOS (it); - start_on_image_or_stretch_p = (it.method == GET_FROM_IMAGE - || it.method == GET_FROM_STRETCH); + start_on_image_or_stretch_or_string_p = (it.method == GET_FROM_IMAGE + || it.method == GET_FROM_STRETCH + || it.method == GET_FROM_STRING); reseat_at_previous_visible_line_start (&it); it.current_x = it.hpos = 0; /* Temporarily disable selective display so we don't move too far */ @@ -2098,10 +2099,10 @@ whether or not it is currently displayed in some window. */) /* Move back if we got too far. This may happen if truncate-lines is on and PT is beyond right margin. - It may also happen if it_start is on an image or a stretch - glyph -- in that case, don't go back. */ + It may also happen if it_start is on an image, stretch + glyph, or string -- in that case, don't go back. */ if (IT_CHARPOS (it) > it_start && XINT (lines) > 0 - && !start_on_image_or_stretch_p) + && !start_on_image_or_stretch_or_string_p) move_it_by_lines (&it, -1, 0); it.vpos = 0; -- cgit v1.2.3 From 7bf120f11daa093a027d12b0ec90850ecfde0e4c Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Fri, 15 Sep 2006 01:53:18 +0000 Subject: (Fcurrent_column, Findent_to): Fix typos in docstring. --- src/indent.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/indent.c') diff --git a/src/indent.c b/src/indent.c index cbb53c3678f..c302c5313e7 100644 --- a/src/indent.c +++ b/src/indent.c @@ -335,8 +335,8 @@ DEFUN ("current-column", Fcurrent_column, Scurrent_column, 0, 0, 0, doc: /* Return the horizontal position of point. Beginning of line is column 0. This is calculated by adding together the widths of all the displayed representations of the character between the start of the previous line -and point. (eg control characters will have a width of 2 or 4, tabs -will have a variable width) +and point (eg. control characters will have a width of 2 or 4, tabs +will have a variable width). Ignores finite width of frame, which means that this function may return values greater than (frame-width). Whether the line is visible (if `selective-display' is t) has no effect; @@ -734,8 +734,8 @@ string_display_width (string, beg, end) DEFUN ("indent-to", Findent_to, Sindent_to, 1, 2, "NIndent to column: ", doc: /* Indent from point with tabs and spaces until COLUMN is reached. -Optional second argument MININUM says always do at least MININUM spaces -even if that goes past COLUMN; by default, MININUM is zero. */) +Optional second argument MINIMUM says always do at least MINIMUM spaces +even if that goes past COLUMN; by default, MINIMUM is zero. */) (column, minimum) Lisp_Object column, minimum; { -- cgit v1.2.3 From 14a7cabfbcb902f8ba56de56a27168d1b8e0d640 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Tue, 26 Sep 2006 19:25:35 +0000 Subject: * indent.c (Fvertical_motion): Do move back if the Lisp string being displayed contains newlines. --- src/ChangeLog | 5 +++++ src/indent.c | 30 +++++++++++++++++++++++------- 2 files changed, 28 insertions(+), 7 deletions(-) (limited to 'src/indent.c') diff --git a/src/ChangeLog b/src/ChangeLog index 147d3533886..5f919ffedef 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2006-09-26 Chong Yidong + + * indent.c (Fvertical_motion): Do move back if the Lisp string + being displayed contains newlines. + 2006-09-26 YAMAMOTO Mitsuharu * macterm.c (mac_compute_glyph_string_overhangs, XLoadQueryFont) diff --git a/src/indent.c b/src/indent.c index c302c5313e7..3cbb105e80f 100644 --- a/src/indent.c +++ b/src/indent.c @@ -2074,7 +2074,7 @@ whether or not it is currently displayed in some window. */) { int it_start; int oselective; - int start_on_image_or_stretch_or_string_p; + int it_overshoot_expected_p; SET_TEXT_POS (pt, PT, PT_BYTE); start_display (&it, w, pt); @@ -2086,9 +2086,26 @@ whether or not it is currently displayed in some window. */) while the end position is really at some X > 0, the same X that PT had. */ it_start = IT_CHARPOS (it); - start_on_image_or_stretch_or_string_p = (it.method == GET_FROM_IMAGE - || it.method == GET_FROM_STRETCH - || it.method == GET_FROM_STRING); + + /* We expect the call to move_it_to, further down, to overshoot + if the starting point is on an image, stretch glyph, or Lisp + string. We won't need to backtrack in this situation, except + for one corner case: when the Lisp string contains a + newline. */ + if (it.method == GET_FROM_STRING) + { + const char *s = SDATA (it.string); + const char *e = s + SBYTES (it.string); + + while (s < e && *s != '\n') + ++s; + + it_overshoot_expected_p = (s == e); + } + else + it_overshoot_expected_p = (it.method == GET_FROM_IMAGE + || it.method == GET_FROM_STRETCH); + reseat_at_previous_visible_line_start (&it); it.current_x = it.hpos = 0; /* Temporarily disable selective display so we don't move too far */ @@ -2099,10 +2116,9 @@ whether or not it is currently displayed in some window. */) /* Move back if we got too far. This may happen if truncate-lines is on and PT is beyond right margin. - It may also happen if it_start is on an image, stretch - glyph, or string -- in that case, don't go back. */ + Don't go back if the overshoot is expected (see above). */ if (IT_CHARPOS (it) > it_start && XINT (lines) > 0 - && !start_on_image_or_stretch_or_string_p) + && !it_overshoot_expected_p) move_it_by_lines (&it, -1, 0); it.vpos = 0; -- cgit v1.2.3