bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#27433: 25.2; add-face-text-property with APPEND to t mess up with in


From: npostavs
Subject: bug#27433: 25.2; add-face-text-property with APPEND to t mess up with initialized list
Date: Sat, 24 Jun 2017 11:50:56 -0400
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2.50 (gnu/linux)

retitle 27433 add-face-text-property with APPEND=t destructively modifies the 
original property list
severity 27433 minor
quit

Sebastien Chapuis <sebastien@chapu.is> writes:

> Hello, I have found a bug reproducible with emacs -Q (tested with
> emacs 25.2.2 and 25.2.1)
>
> I made a small use case that you can find here:
> - https://gist.github.com/sebastiencs/3b1f33a028d2b8d1ee41c44f5338f8e7
> or here:
> - http://paste.lisp.org/display/349159
>
> I provided explainations in the code.
> When I use edebug, the variable 'list-attributes' in the function
> 'my-icons-in-terminal' is directly set to (:family "icons-in-terminal
> (:background "red") (:background "red") ...), even if it is initialized
> with '(:family "icons-in-terminal).

> ;; If I initialize the variable list-attributes to (list :family "...") 
> instead of '(:family) in my-icons-in-terminal,
> ;;   it doesn't appear.

I think we can fix it by using append instead of nonc, or perhaps we
should just document the side effect?

---   i/src/textprop.c
+++   w/src/textprop.c
@@ -421,7 +421,7 @@ add_properties (Lisp_Object plist, INTERVAL i, Lisp_Object 
object,
                if (set_type == TEXT_PROPERTY_PREPEND)
                  Fsetcar (this_cdr, Fcons (val1, Fcar (this_cdr)));
                else
-                 nconc2 (Fcar (this_cdr), list1 (val1));
+                  Fsetcar (this_cdr, CALLN (Fappend, Fcar (this_cdr), list1 
(val1)));
              else {
                /* The previous value is a single value, so make it
                   into a list. */





reply via email to

[Prev in Thread] Current Thread [Next in Thread]