From: Stefan Monnier Date: Tue, 12 Feb 2008 21:25:45 +0000 (+0000) Subject: (casify_region): Only call after-change and composition X-Git-Tag: emacs-pretest-23.0.90~7978 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=7927d8e343943980361be2914d4dafd1be98a87c;p=emacs.git (casify_region): Only call after-change and composition functions on the part of the region that was changed. --- diff --git a/src/ChangeLog b/src/ChangeLog index 0f47ead5f1f..85bbcbbdf87 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,8 @@ 2008-02-12 Stefan Monnier + * casefiddle.c (casify_region): Only call after-change and composition + functions on the part of the region that was changed. + * keyboard.c (read_avail_input): * frame.c (Fdelete_frame): Call Fdelete_terminal. diff --git a/src/casefiddle.c b/src/casefiddle.c index daaa7a228ba..650e046a266 100644 --- a/src/casefiddle.c +++ b/src/casefiddle.c @@ -179,11 +179,11 @@ casify_region (flag, b, e) register int c; register int inword = flag == CASE_DOWN; register int multibyte = !NILP (current_buffer->enable_multibyte_characters); - int start, end; - int start_byte, end_byte; - int changed = 0; - int opoint = PT; - int opoint_byte = PT_BYTE; + EMACS_INT start, end; + EMACS_INT start_byte, end_byte; + EMACS_INT first = -1, last; /* Position of first and last changes. */ + EMACS_INT opoint = PT; + EMACS_INT opoint_byte = PT_BYTE; if (EQ (b, e)) /* Not modifying because nothing marked */ @@ -226,7 +226,10 @@ casify_region (flag, b, e) inword = ((SYNTAX (c) == Sword) && (inword || !SYNTAX_PREFIX (c))); if (c != c2) { - changed = 1; + last = start; + if (first < 0) + first = start; + if (! multibyte) { MAKE_CHAR_UNIBYTE (c); @@ -266,11 +269,10 @@ casify_region (flag, b, e) if (PT != opoint) TEMP_SET_PT_BOTH (opoint, opoint_byte); - if (changed) + if (first >= 0) { - start = XFASTINT (b); - signal_after_change (start, end - start, end - start); - update_compositions (start, end, CHECK_ALL); + signal_after_change (first, last + 1 - first, last + 1 - first); + update_compositions (first, last + 1, CHECK_ALL); } }