Ich habe eine besetzte Zeichenfolge. Ich möchte eine tiefe Kopie davon erstellen, um weitere Eigenschaften hinzuzufügen, während die Eigenschaften in der ursprünglichen Zeichenfolge erhalten bleiben. Wie kann ich das (leicht) machen?
Beispiel
Nacheinander bewerten:
(setq test-str-1
#(";; This `is' a test"
0 3 (fontified nil face font-lock-comment-delimiter-face)
3 9 (fontified nil face font-lock-comment-face)
9 11 (fontified nil face (font-lock-constant-face font-lock-comment-face))
11 19 (fontified nil face font-lock-comment-face)))
(setq test-str-2 (concat test-str-1))
(add-face-text-property 0 (length test-str-2) 'foobar t test-str-2)
Und das Ergebnis:
test-str-2
;; =>
#(";; This `is' a test" 0 3 (fontified nil face (font-lock-comment-delimiter-face foobar))
3 9 (fontified nil face (font-lock-comment-face foobar))
9 11 (fontified nil face (font-lock-constant-face font-lock-comment-face foobar))
11 19 (fontified nil face (font-lock-comment-face foobar)))
test-str-1
;; =>
#(";; This `is' a test" 0 3 (face font-lock-comment-delimiter-face fontified nil)
3 9 (face font-lock-comment-face fontified nil)
9 11 (face (font-lock-constant-face font-lock-comment-face foobar) ; <= foobar is here
fontified nil)
11 19 (face font-lock-comment-face fontified nil))
add-face-text-property
. Die Liste sollte nicht destruktiv geändert werden, da dies fehlschlägt, wenn andere auf diese Liste verweisen.