Commit a88bbf05 authored by Eli Zaretskii's avatar Eli Zaretskii
Browse files

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 <bidi_overriding_paragraph_direction>: Default to L2R, for now.
parent 2d6e4628
2009-08-29 Eli Zaretskii <eliz@gnu.org>
* 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 <eliz@gnu.org>
* bidi.c <bidi_overriding_paragraph_direction>: Default to L2R,
for now.
2009-08-22 Eli Zaretskii <eliz@gnu.org>
* bidi.c (bidi_initialize): staticpro bidi_char_table.
......
......@@ -155,7 +155,8 @@ typedef enum {
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) \
......
......@@ -12377,7 +12377,7 @@ set_cursor_from_row (w, row, matrix, delta, delta_bytes, dy, dvpos)
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 @@ try_window_reusing_current_matrix (w)
{
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;
}
}
}
 
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment