# HG changeset patch # User Eli Zaretskii # Date 1262292967 18000 # Node ID cbca7f94b05721951d86f9bfea601f0f10b84d7f # Parent 35abfc7649e11719d84dd64b8ce04e6f7f5e7c0c Retrospective commit from 2009-08-29. Started working on cursor motion. xdisp.c (set_cursor_from_row): Don't assume glyph->charpos increments linearly. (try_window_reusing_current_matrix): Don't assume glyph->charpos increments linearly. bidi.c : Default to L2R, for now. diff -r 35abfc7649e1 -r cbca7f94b057 src/ChangeLog.bidi --- a/src/ChangeLog.bidi Thu Dec 31 15:49:08 2009 -0500 +++ b/src/ChangeLog.bidi Thu Dec 31 15:56:07 2009 -0500 @@ -1,3 +1,15 @@ +2009-08-29 Eli Zaretskii + + * xdisp.c (set_cursor_from_row): Don't assume glyph->charpos + increments linearly. + (try_window_reusing_current_matrix): Don't assume glyph->charpos + increments linearly. + +2009-08-28 Eli Zaretskii + + * bidi.c : Default to L2R, + for now. + 2009-08-22 Eli Zaretskii * bidi.c (bidi_initialize): staticpro bidi_char_table. diff -r 35abfc7649e1 -r cbca7f94b057 src/bidi.c --- a/src/bidi.c Thu Dec 31 15:49:08 2009 -0500 +++ b/src/bidi.c Thu Dec 31 15:56:07 2009 -0500 @@ -155,7 +155,8 @@ int bidi_ignore_explicit_marks_for_paragraph_level = 1; -bidi_dir_t bidi_overriding_paragraph_direction = NEUTRAL_DIR; +/* FIXME: Should be user-definable. */ +bidi_dir_t bidi_overriding_paragraph_direction = L2R; /* FIXME: Unused? */ #define ASCII_BIDI_TYPE_SET(STR, TYPE) \ diff -r 35abfc7649e1 -r cbca7f94b057 src/xdisp.c --- a/src/xdisp.c Thu Dec 31 15:49:08 2009 -0500 +++ b/src/xdisp.c Thu Dec 31 15:56:07 2009 -0500 @@ -12377,7 +12377,7 @@ while (glyph < end && !INTEGERP (glyph->object) && (!BUFFERP (glyph->object) - || (last_pos = glyph->charpos) < pt_old + || (last_pos = glyph->charpos) != pt_old || glyph->avoid_cursor_p)) { if (! STRINGP (glyph->object)) @@ -14497,15 +14497,39 @@ { struct glyph *glyph = row->glyphs[TEXT_AREA] + w->cursor.hpos; struct glyph *end = glyph + row->used[TEXT_AREA]; + struct glyph *orig_glyph = glyph; + struct cursor_pos orig_cursor = w->cursor; for (; glyph < end && (!BUFFERP (glyph->object) - || glyph->charpos < PT); + || glyph->charpos != PT); glyph++) { w->cursor.hpos++; w->cursor.x += glyph->pixel_width; } + /* With bidi reordering, charpos changes non-linearly + with hpos, so the right glyph could be to the + left. */ + if (!NILP (XBUFFER (w->buffer)->bidi_display_reordering) + && (!BUFFERP (glyph->object) || glyph->charpos != PT)) + { + struct glyph *start_glyph = row->glyphs[TEXT_AREA]; + + glyph = orig_glyph - 1; + orig_cursor.hpos--; + orig_cursor.x -= glyph->pixel_width; + for (; glyph >= start_glyph + && (!BUFFERP (glyph->object) + || glyph->charpos != PT); + glyph--) + { + w->cursor.hpos--; + w->cursor.x -= glyph->pixel_width; + } + if (BUFFERP (glyph->object) && glyph->charpos == PT) + w->cursor = orig_cursor; + } } }