I have:
(setq mode-line-end-spaces "string")
That displays string
in the mode-line.
How can I get string
in red there?
You need to create a string with the appropriate face. You do that by attaching a face
text property to the string, giving it value of some face (predefined or defined for the specific purpose - you can look at all the predefined faces with M-x list-faces-display
and pick one from there, or you can define your own face).
E.g. here's a snippet to use a predefined face:
(setq s (copy-sequence "sring"))
(put-text-property 0 6 'face 'custom-invalid s)
(setq mode-line-end-spaces s)
(setq s (copy-sequence "string"))
.
@NickD provided a good answer: use a face.
OP's comment to Nick's answer says that he'll try to write a function that, given a string, returns a propertized string. Such functions already exist: propertize
does that, and so does add-face-text-property
.
For example:
(setq ss (propertize "abcde" 'face '(:foreground "red")))
or
(setq ss "abcde")
(add-face-text-property 0 (length ss) '(:foreground "red") nil ss)
(setq ss (copy-sequence "abcde"))
.
copy-sequence
.
copy-sequence
allows to create a mutable string (c.f. Elisp manual version 27, section 2.9 Mutability). In your sample code, add-face-text-property
modifies a literal string.
ss
is a string", instead of the setq
. The point of the answer is that you can use add-face-text-property
to add color to a string.