]> git.eshelyaron.com Git - emacs.git/commitdiff
Inherit surrounding text properties when inserting conversion text
authorPo Lu <luangruo@yahoo.com>
Sat, 10 Jun 2023 01:57:41 +0000 (09:57 +0800)
committerPo Lu <luangruo@yahoo.com>
Sat, 10 Jun 2023 01:57:41 +0000 (09:57 +0800)
* src/textconv.c (really_commit_text)
(really_set_composing_text): Improve behavior of certain
fontification mechanisms by inheriting text properties from
surrounding text.

src/textconv.c

index 3303ca246de4d02b28c100739ed3561a462aef86..d86877b5515369c58e30458187c3ab1973dc288d 100644 (file)
@@ -624,7 +624,13 @@ really_commit_text (struct frame *f, EMACS_INT position,
 
       if (SCHARS (text))
        {
-         Finsert (1, &text);
+         /* Insert the new text.  Make sure to inherit text
+            properties from the surroundings: if this doesn't happen,
+            CC Mode fontification can get thrown off and become very
+            slow.  */
+
+         insert_from_string (text, 0, 0, SCHARS (text),
+                             SBYTES (text), true);
          record_buffer_change (start, PT, text);
        }
 
@@ -686,7 +692,14 @@ really_commit_text (struct frame *f, EMACS_INT position,
 
       if (SCHARS (text))
        {
-         Finsert (1, &text);
+         /* Insert the new text.  Make sure to inherit text
+            properties from the surroundings: if this doesn't happen,
+            CC Mode fontification can get thrown off and become very
+            slow.  */
+
+         insert_from_string (text, 0, 0, SCHARS (text),
+                             SBYTES (text), true);
+
          record_buffer_change (wanted, PT, text);
        }
 
@@ -835,8 +848,12 @@ really_set_composing_text (struct frame *f, ptrdiff_t position,
        record_buffer_change (start, start, Qt);
     }
 
-  /* Insert the new text.  */
-  Finsert (1, &text);
+  /* Insert the new text.  Make sure to inherit text properties from
+     the surroundings: if this doesn't happen, CC Mode fontification
+     can get thrown off and become very slow.  */
+
+  insert_from_string (text, 0, 0, SCHARS (text),
+                     SBYTES (text), true);
 
   if (start != PT)
     record_buffer_change (start, PT, Qt);