diff options
| author | Eli Zaretskii | 2011-08-08 19:57:53 +0300 |
|---|---|---|
| committer | Eli Zaretskii | 2011-08-08 19:57:53 +0300 |
| commit | 97bb72a608508d9edbed86ba38d228bf6ed11eb5 (patch) | |
| tree | 4b71cd3ec4c81663c3a305d17b6dbc782526f94d /src | |
| parent | 51a714e101630c9f40d460339123c2bf89d4d1ca (diff) | |
| download | emacs-97bb72a608508d9edbed86ba38d228bf6ed11eb5.tar.gz emacs-97bb72a608508d9edbed86ba38d228bf6ed11eb5.zip | |
Speed up bidi redisplay with selective-display.
src/xdisp.c (forward_to_next_line_start): Allow to use the
no-display-properties-and-no-overlays under bidi display.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 5 | ||||
| -rw-r--r-- | src/xdisp.c | 41 |
2 files changed, 33 insertions, 13 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index cbe2d8659b2..193bb739766 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,8 @@ | |||
| 1 | 2011-08-08 Eli Zaretskii <eliz@gnu.org> | ||
| 2 | |||
| 3 | * xdisp.c (forward_to_next_line_start): Allow to use the | ||
| 4 | no-display-properties-and-no-overlays under bidi display. | ||
| 5 | |||
| 1 | 2011-08-08 Chong Yidong <cyd@stupidchicken.com> | 6 | 2011-08-08 Chong Yidong <cyd@stupidchicken.com> |
| 2 | 7 | ||
| 3 | * editfns.c (Fset_time_zone_rule): Document relationship with the | 8 | * editfns.c (Fset_time_zone_rule): Document relationship with the |
diff --git a/src/xdisp.c b/src/xdisp.c index 6e9474e3c10..2a46fe2dad5 100644 --- a/src/xdisp.c +++ b/src/xdisp.c | |||
| @@ -5532,19 +5532,34 @@ forward_to_next_line_start (struct it *it, int *skipped_p, | |||
| 5532 | 5532 | ||
| 5533 | xassert (!STRINGP (it->string)); | 5533 | xassert (!STRINGP (it->string)); |
| 5534 | 5534 | ||
| 5535 | /* If we are not bidi-reordering, and there isn't any `display' | 5535 | /* If there isn't any `display' property in sight, and no |
| 5536 | property in sight, and no overlays, we can just use the | 5536 | overlays, we can just use the position of the newline in |
| 5537 | position of the newline in buffer text. */ | 5537 | buffer text. */ |
| 5538 | if (!it->bidi_p | 5538 | if (it->stop_charpos >= limit |
| 5539 | && (it->stop_charpos >= limit | 5539 | || ((pos = Fnext_single_property_change (make_number (start), |
| 5540 | || ((pos = Fnext_single_property_change (make_number (start), | 5540 | Qdisplay, Qnil, |
| 5541 | Qdisplay, Qnil, | 5541 | make_number (limit)), |
| 5542 | make_number (limit)), | 5542 | NILP (pos)) |
| 5543 | NILP (pos)) | 5543 | && next_overlay_change (start) == ZV)) |
| 5544 | && next_overlay_change (start) == ZV))) | 5544 | { |
| 5545 | { | 5545 | if (!it->bidi_p) |
| 5546 | IT_CHARPOS (*it) = limit; | 5546 | { |
| 5547 | IT_BYTEPOS (*it) = CHAR_TO_BYTE (limit); | 5547 | IT_CHARPOS (*it) = limit; |
| 5548 | IT_BYTEPOS (*it) = CHAR_TO_BYTE (limit); | ||
| 5549 | } | ||
| 5550 | else | ||
| 5551 | { | ||
| 5552 | struct bidi_it bprev; | ||
| 5553 | |||
| 5554 | do { | ||
| 5555 | bprev = it->bidi_it; | ||
| 5556 | bidi_move_to_visually_next (&it->bidi_it); | ||
| 5557 | } while (it->bidi_it.charpos != limit); | ||
| 5558 | IT_CHARPOS (*it) = limit; | ||
| 5559 | IT_BYTEPOS (*it) = it->bidi_it.bytepos; | ||
| 5560 | if (bidi_it_prev) | ||
| 5561 | *bidi_it_prev = bprev; | ||
| 5562 | } | ||
| 5548 | *skipped_p = newline_found_p = 1; | 5563 | *skipped_p = newline_found_p = 1; |
| 5549 | } | 5564 | } |
| 5550 | else | 5565 | else |