changeset 107744:02181f9edbbf

xdisp.c (set_cursor_from_row): Improve comments.
author Eli Zaretskii <eliz@gnu.org>
date Fri, 02 Apr 2010 12:35:01 +0300
parents 155a24f82f81
children df7bafcc5fb7 accaa16963c3
files src/xdisp.c
diffstat 1 files changed, 12 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/xdisp.c	Fri Apr 02 12:12:21 2010 +0300
+++ b/src/xdisp.c	Fri Apr 02 12:35:01 2010 +0300
@@ -12606,7 +12606,8 @@
 	    }
 	  if (INTEGERP (glyph->object) && glyph->charpos < 0)
 	    --glyph;
-	  /* By default, put the cursor on the rightmost glyph.  */
+	  /* By default, in reversed rows we put the cursor on the
+	     rightmost (first in the reading order) glyph.  */
 	  for (g = end + 1; g < glyph; g++)
 	    x += g->pixel_width;
 	  cursor_x = x;
@@ -12683,7 +12684,16 @@
 		bpos_covered = bpos_max + XINT (chprop);
 		/* If the `cursor' property covers buffer positions up
 		   to and including point, we should display cursor on
-		   this glyph.  */
+		   this glyph.  Note that overlays and text properties
+		   with string values stop bidi reordering, so every
+		   buffer position to the left of the string is always
+		   smaller than any position to the right of the
+		   string.  Therefore, if a `cursor' property on one
+		   of the string's characters has an integer value, we
+		   will break out of the loop below _before_ we get to
+		   the position match above.  IOW, integer values of
+		   the `cursor' property override the "exact match for
+		   point" strategy of positioning the cursor.  */
 		/* Implementation note: bpos_max == pt_old when, e.g.,
 		   we are in an empty line, where bpos_max is set to
 		   MATRIX_ROW_START_CHARPOS, see above.  */