On 30/08/2023 21:22, Eli Zaretskii wrote: >> Cc: 65632@debbugs.gnu.org >> Date: Wed, 30 Aug 2023 21:35:11 +0300 >> From: Eli Zaretskii >> >>> ;; Display "TEST" in red, bold, italic on yellow background. >>> (insert >>> (propertize >>> "TEST" 'font-lock-face >>> '(bold ((:background "yellow") "italic" >>> ((foreground-color . "red") underline))))) >> >> This is not a valid face, AFAIU. That it works is sheer luck (because >> Emacs is very lenient with this stuff). The correct face definition >> for what you want is this (see 'set-face-attribute's doc string): >> >> (insert >> (propertize >> "TEST" 'font-lock-face >> '(:weight bold :background "yellow" :slant italic >> :foreground "red" :underline t))) >> >> If you use the above, foreground-color-at-point etc. will work as >> expected. >> >> I'm not sure we want to go out of our way to support the kind of face >> specifications that you used. > > However, if we do want that, we already have the technology: > > (face-attributes-as-vector (get-char-property (point) 'font-lock-face)) > > This will return a vector of face attribute values, where you can find > the value of any attribute you like. For example, to get the > foreground color, evaluate: > > (aref 9 > (face-attributes-as-vector (get-char-property (point) 'font-lock-face))) Hi Eli, Thank you very much for letting me know about `face-attributes-as-vector' (maybe its doc string could be improved?). It is exactly the function I need :-) In case you are interested, I attached an updated patch to faces.el that use this function to lookup face attribute, which improves and simplify the functions `faces--attribute-at-point', `foreground-color-at-point' and `background-color-at-point'. Regards