From 88a37c4d87ec916146430bfef0a5e90f175b6a2e Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sun, 6 Nov 2011 20:21:52 +0200 Subject: [PATCH] Fix bug #9963 with abort in "temacs -nw". src/xdisp.c (init_iterator, reseat_to_string): Don't set the iterator's bidi_p flag if Vpurify_flag is non-nil. (Fcurrent_bidi_paragraph_direction): If Vpurify_flag is non-nil, return Qleft_to_right. --- src/ChangeLog | 7 +++++++ src/xdisp.c | 21 ++++++++++++++++----- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 12e9a5c9e57..e393da21cc2 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2011-11-06 Eli Zaretskii + + * xdisp.c (init_iterator, reseat_to_string): Don't set the + iterator's bidi_p flag if Vpurify_flag is non-nil. (Bug#9963) + (Fcurrent_bidi_paragraph_direction): If Vpurify_flag is non-nil, + return Qleft_to_right. + 2011-11-06 Chong Yidong * window.c (Fwindow_live_p, Fwindow_frame, Fframe_root_window) diff --git a/src/xdisp.c b/src/xdisp.c index f358cdd6270..197fb748598 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -2763,9 +2763,13 @@ init_iterator (struct it *it, struct window *w, /* Do we need to reorder bidirectional text? Not if this is a unibyte buffer: by definition, none of the single-byte characters are strong R2L, so no reordering is needed. And - bidi.c doesn't support unibyte buffers anyway. */ + bidi.c doesn't support unibyte buffers anyway. Also, don't + reorder while we are loading loadup.el, since the tables of + character properties needed for reordering are not yet + available. */ it->bidi_p = - !NILP (BVAR (current_buffer, bidi_display_reordering)) + NILP (Vpurify_flag) + && !NILP (BVAR (current_buffer, bidi_display_reordering)) && it->multibyte_p; /* If we are to reorder bidirectional text, init the bidi @@ -6136,8 +6140,12 @@ reseat_to_string (struct it *it, const char *s, Lisp_Object string, it->multibyte_p = multibyte > 0; /* Bidirectional reordering of strings is controlled by the default - value of bidi-display-reordering. */ - it->bidi_p = !NILP (BVAR (&buffer_defaults, bidi_display_reordering)); + value of bidi-display-reordering. Don't try to reorder while + loading loadup.el, as the necessary character property tables are + not yet available. */ + it->bidi_p = + NILP (Vpurify_flag) + && !NILP (BVAR (&buffer_defaults, bidi_display_reordering)); if (s == NULL) { @@ -19460,7 +19468,10 @@ See also `bidi-paragraph-direction'. */) } if (NILP (BVAR (buf, bidi_display_reordering)) - || NILP (BVAR (buf, enable_multibyte_characters))) + || NILP (BVAR (buf, enable_multibyte_characters)) + /* When we are loading loadup.el, the character property tables + needed for bidi iteration are not yet available. */ + || !NILP (Vpurify_flag)) return Qleft_to_right; else if (!NILP (BVAR (buf, bidi_paragraph_direction))) return BVAR (buf, bidi_paragraph_direction); -- 2.11.4.GIT