summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2008-02-12 21:25:45 +0000
committerStefan Monnier <monnier@iro.umontreal.ca>2008-02-12 21:25:45 +0000
commit7927d8e343943980361be2914d4dafd1be98a87c (patch)
tree98a8f3cf04dba2af0ba59edeb90bc2920491506f
parent9e5e233a2f9825aaf0055db72bcf900bc282d032 (diff)
downloademacs-7927d8e343943980361be2914d4dafd1be98a87c.tar.gz
emacs-7927d8e343943980361be2914d4dafd1be98a87c.tar.bz2
emacs-7927d8e343943980361be2914d4dafd1be98a87c.zip
(casify_region): Only call after-change and composition
functions on the part of the region that was changed.
-rw-r--r--src/ChangeLog3
-rw-r--r--src/casefiddle.c22
2 files changed, 15 insertions, 10 deletions
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 <monnier@iro.umontreal.ca>
+ * 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);
}
}