如何发现掌舵缓冲区中使用了哪些面孔?

How to discover which faces are used in helm buffers?

我想更改 *helm ag* 缓冲区中某些内容的外观。 None 我发现在某个点使用了哪张脸的常用技巧(我最喜欢的是 M-x customize-face 与感兴趣区域中的点)工作,因为没有(明显的)控制方式掌舵缓冲区中的游标。

我的问题是:

更新

*helm-ag* 个由 helm-ag 命令创建的缓冲区的情况下,相关的面是 helm-match。但是,在由 helm-do-grep-ag 命令创建的 *helm ag* 缓冲区(没有破折号!)中,helm-match 面似乎没有效果,如下面的进一步信息所述。

更多信息

这是未启用自定义主题的 emacs 会话的图片。

在左下方有一个 *helm ag* 缓冲区搜索 defun。缓冲区中的第三行被选中。匹配项 (defun) 在所有其他行中突出显示,但不会在所选行中突出显示。

右边是一些适合可能候选人的面部自定义缓冲区。 helm-match 已设置为红色前景,但这并未反映在 *helm-ag* 缓冲区中。这似乎表明 helm-match 不是我要找的鱼。

首先是你的“鱼”:我认为你指的脸是helm-match

如果我需要找到给定的面孔但不能在带有该面孔的文本上放置点,我会亲自尝试以下几种不同的策略:

  1. 使用 M-x describe-face,猜测姓名的第一部分可能是什么(在本例中为 helm),然后浏览可能以此开头的候选人。
  2. 转到可能定义该面的代码(在本例中为 helm-ag.el,您可以使用 M-x describe-function RET helm-ag 找到它),然后在该文件中搜索 face 以找到可能匹配。
  3. 执行 M-x customize-face 并输入 'all faces',寻找 helm-* 面孔并尝试找到姓名和面孔(因为您可以在此缓冲区中看到面孔样本)与您正在寻找的相匹配。

这些方法中的 none 可能与您希望的一样直接,并且可能有更快的解决方案,但这是我会做的(并且已经做了)。在这种情况下,我用方法 #2 找到了脸。

更新:

这是我的设置的屏幕截图:

请注意,对我而言,相关面孔是 helm-match,它继承自 replace.el 中的 match。另外,请注意匹配项在 highlighted/selected 行中出现的方式与其他行相比的差异不是由于不同的面,而是由于行突出显示的背景颜色如何影响颜色,因为可以当我在此处突出显示示例文本时可以看到:

更新 2:

事实证明 OP 使用的是 helm-ag-do-grep,它在另一个文件中定义 - helm-grep.el。这是该代码的 face-setting 部分:

;;; Faces
;;
;;
(defgroup helm-grep-faces nil
  "Customize the appearance of helm-grep."
  :prefix "helm-"
  :group 'helm-grep
  :group 'helm-faces)

(defface helm-grep-match
  '((((background light)) :foreground "#b00000")
    (((background dark))  :foreground "gold1"))
  "Face used to highlight grep matches."
  :group 'helm-grep-faces)

(defface helm-grep-file
    '((t (:foreground "BlueViolet"
          :underline t)))
  "Face used to highlight grep results filenames."
  :group 'helm-grep-faces)

(defface helm-grep-lineno
    '((t (:foreground "Darkorange1")))
  "Face used to highlight grep number lines."
  :group 'helm-grep-faces)

(defface helm-grep-finish
    '((t (:foreground "Green")))
  "Face used in mode line when grep is finish."
  :group 'helm-grep-faces)

(defface helm-grep-cmd-line
    '((t (:inherit diff-added)))
  "Face used to highlight grep command line when no results."
  :group 'helm-grep-faces)

我想 helm-grep-match 就是您要找的。如果不是,则有问题的面孔很可能出现在上面的代码片段中,并且所有这些面孔都应该可以使用 customize-face 进行自定义。此代码还使用上述方法 #2 进行了追踪。

与@elethan 的#3 类似的方法:

  • 调用list-faces-display,它会显示所有面孔的列表 按字母顺序排列。

  • 搜索 "helm".

ag 本身使用颜色来突出显示匹配项。 Helm 使用这些颜色并忽略 helm-grep-match 除非 helm-grep-ag-command 包含 --nocolors 选项。

因此有两种方法:

  1. 使用 --color-match 选项将您想要的颜色设置为 helm-grep-ag-command 中的 ag

  2. 禁用ag's match highlighting with the --nocolor opiton in helm-grep-ag-command and set Emacs'helm-matchhelm-grep-match(不完全确定哪个是正确的)来指定匹配颜色。由于第二个选项使用 elisp 来处理着色,因此它可能比第一个慢。

在这两种情况下,匹配突出显示将被 helm-selection 覆盖,因此在所选行上突出显示匹配的唯一方法是 helm-selection 指定背景或前景,从而留下匹配突出显示的机会。

参考:https://github.com/emacs-helm/helm/issues/1660#