Get font face under cursor in Emacs
Solution 1
You can define what-face with this code:
(defun what-face (pos)
(interactive "d")
(let ((face (or (get-char-property (pos) 'read-face-name)
(get-char-property (pos) 'face))))
(if face (message "Face: %s" face) (message "No face at %d" pos))))
After that,
M-x what-face
will print the face found at the current point.
(Thanks to thedz for pointing out that what-face wasn’t built in.)
Solution 2
what-cursor-position with a prefix argument shows the face under point, among other information.
Keyboard shortcut is C-u C-x =
Example output (the face property is shown in the last paragraph):
position: 5356 of 25376 (21%), column: 4
character: r (displayed as r) (codepoint 114, #o162, #x72)
preferred charset: ascii (ASCII (ISO646 IRV))
code point in charset: 0x72
syntax: w which means: word
category: .:Base, L:Left-to-right (strong), a:ASCII, l:Latin, r:Roman
buffer code: #x72
file code: #x72 (encoded by coding system undecided-unix)
display: by this font (glyph code)
nil:-apple-Monaco-medium-normal-normal-*-12-*-*-*-m-0-iso10646-1 (#x55)
Character code properties: customize what to show
name: LATIN SMALL LETTER R
general-category: Ll (Letter, Lowercase)
decomposition: (114) ('r')
There are text properties here:
face org-level-2
fontified t
[back]
Solution 3
M-x describe-face
Solution 4
Trey's what face is on the right track. It led me to an email on a mailing list that had this:
(defun what-face (pos)
(interactive "d")
(let ((face (or (get-char-property (point) 'read-face-name)
(get-char-property (point) 'face))))
(if face (message "Face: %s" face) (message "No face at %d" pos))))
Solution 5
There's a bug in the `what-face' code: the function takes "pos" as an argument but then doesn't use it when getting the face -- instead it uses "(point)", even though the message later claims pos in the "No face at %d" case.
Related videos on Youtube
thedz
I'm @dz on Twitter: http://twitter.com/thedz Software Engineer at Vox Media HTML/CSS JS Ruby Python StarCraft Beer
Updated on February 20, 2021Comments
-
thedz over 2 yearsI've been developing my own custom color theme, and it'd be really useful if I could get a list of font-faces affecting the text under the cursor.
Something like Textmate's show current scope command.
That would save me the trouble of doing M-x customize-face and looking through available options, guessing at which one affects the current word I'm on.
Any ideas?
-
Braham Snyder over 5 yearsIn case you're looking for the same functionality using the mouse cursor (if, e.g., you cannot getpointon the text in question), see: emacs.stackexchange.com/a/35449/13444
-
-
Trey Jackson almost 14 yearsDuh, forgot it wasn't bundled with Emacs. May I put the source in my answer w/attribution? :) -
viam0Zah almost 14 yearsWhich invokeswhat-cursor-position. -
davidA almost 13 yearshmmm, sometimes it invokes what-cursor-position, sometimes it displays a list of buffer properties (including font). If I get the former behaviour, moving the cursor and repeating brings on the latter. -
Miserable Variable about 10 yearsI am so happy I found this, with some unknown combinations of the commands and keystrokes I gotemacsto display how I liked it and didn't how to get it back in my next restart -
dolzenko over 9 yearsThis also includes the nice link making it possible to customize the face under cursor immediately -
Adam Spiers over 9 yearsThis would be better placed as a comment on that answer. -
rath about 9 yearsEven better if it had a fix... +1 for spotting it anyway -
Wilfred Hughes over 8 yearsThis ignores faces set as text properties. If enablehl-line-modeyou will only seehl-lineas the face, not the other faces. Consider gist.github.com/Wilfred/f7d61b7cdf9fdbb1d11c -
Samuel Edwin Ward about 7 yearsThis works well most of the time, but sometimes for reasons I can't figure out sometimes it doesn't suggest the face I'm looking for. For example in eshell when there is ansi color it just says "default". -
Rory O'Kane about 6 yearsKarl Fogel pointed out a bug in this code in a separate answer: the output message says it’s describing the face at theposparameter, but the reading of the face is actually done at(point)rather than atpos. -
Zelphir Kaltstahl over 5 yearsThis shows me a prompt where I can enter something. What would I need to enter, in order to describe the font under cursor? -
Mallory-Erik over 5 yearsThis worked for me to customize code block fonts in org-mode. @Zelphir, the text before the prompt showed the face, in my case at least. You might just hitreturn. For example my result readDescribe face (default ‘org-block-background’):. -
Fernando Basso about 5 yearsIt shows the font name on Emacs GUI. On terminal, Emacs is not responsible for setting the font and therefore such information is not available when one doesC-u C-x =in Emacs running on the terminal, likeemacs -nw file.txt. -
luochen1990 over 4 yearsThis doesn't works, you can use "M-x describe-face" instead. -
cebola about 3 yearsposis not a function; in order make the snippet work, you should replace(pos)withposon lines 3 and 4