在Emacs中获取光标下方的字体


96

我一直在开发自己的自定义颜色主题,如果我可以获得影响光标下方文本的字体列表,这将非常有用。

类似于Textmate的show current scope命令。

那将省去我做Mx custom-face并仔细查看可用选项,猜测哪个会影响我当前使用的单词的麻烦。

有任何想法吗?


如果您正在使用鼠标光标寻求相同的功能(例如,如果无法找到point相关文本),请参阅:emacs.stackexchange.com/a/35449/13444
Braham Snyder

Answers:


42

您可以what-face使用以下代码进行定义:

(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))))

之后,

M-x what-face

将打印在当前点找到的人脸。

(感谢thedz指出它what-face不是内置的。)


3
这将忽略设置为文本属性的面。如果启用,hl-line-mode您将仅看到hl-line脸,而不看到其他脸。考虑一下gist.github.com/Wilfred/f7d61b7cdf9fdbb1d11c
Wilfred Hughes,

2
Karl Fogel 在一个单独的答案中指出了此代码中的一个错误:输出消息说它是在pos参数处描述人脸,但是实际上是在at (point)而不是at 读取人脸pos
罗里·奥肯

1
这行不通,您可以改用“ Mx describe-face”。
luochen1990 '18 -10-10

2
pos不是函数;为了使代码段正常工作,您应该在第3行和第4行(pos)pos
中将其

173

what-cursor-position 带有前缀参数的参数显示了指向下方的面部以及其他信息。

键盘快捷键是Cu Cx =

输出示例(face属性显示在最后一段中):

             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]

11
哪个调用what-cursor-position
viam0Zah

hmmm,有时会调用what-c​​ursor-position,有时会显示缓冲区属性(包括字体)的列表。如果我了解前者的行为,则移动光标并重复进行操作会导致后者。
davidA

2
我很高兴我发现了这一点,它结合了命令和按键的一些未知组合,我emacs可以显示自己的喜好,而在下次重启时却不知道如何取回它
悲惨的变量

2
它在Emacs GUI上显示字体名称。在终端上,Emacs不负责设置字体,因此,当C-u C-x =在终端上运行的Emacs中运行时,此类信息将不可用emacs -nw file.txt
Fernando Basso

68

Mx描述脸


5
这也包括一个不错的链接,可以立即自定义光标下的人脸
dolzenko

2
多数情况下,这种方法效果很好,但有时由于某些原因我无法弄清楚,有时并不能说明我要寻找的脸。例如,在eshell中,当有ansi颜色时,它只是说“默认”。
塞缪尔·埃德温·沃德

2
这显示了一个提示,我可以在其中输入内容。为了描述光标下的字体,我需要输入什么?
Zelphir Kaltstahl

1
这对我来说可以自定义组织模式下的代码块字体。@Zelphir,提示之前的文字至少在我看来是这样。你可能只是打return。例如,我的结果为Describe face (default ‘org-block-background’):
马洛里·埃里克'18

8

Trey的面孔正轨。它导致我在邮件列表中收到一封包含以下内容的电子邮件:

(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))))

h,忘了它没有与Emacs捆绑在一起。我可以在来源中加上来源吗?:)
Trey Jackson

2

“ what-face”代码中存在一个错误:该函数将“ pos”作为参数,但是在获取人脸时不使用它-而是使用“(point)”,即使消息稍后声明了 pos在“%d无脸”的情况下。


2
最好将其作为对该答案的评论。
亚当·斯皮尔斯

1
如果有修复,那就更好了……无论如何要为它找到+1
拉斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.