Emacs 如何发现头盔缓冲器中使用了哪些面?

Emacs 如何发现头盔缓冲器中使用了哪些面?,emacs,emacs-helm,Emacs,Emacs Helm,我希望更改*helm ag*缓冲区中某些内容的外观。我常用的发现某个点正在使用哪张脸的技巧(我最喜欢的是M-x customize face,该点位于感兴趣的区域)都不管用,因为没有(明显的)方法可以控制头盔缓冲区中的光标 我的问题是: 教我钓鱼,养活我一辈子:我如何才能发现缓冲区中使用的面孔,而我无法将光标放在其中 给我一条鱼,喂我一天:在*helm ag*缓冲区中,哪个面用于突出显示当前选定行上的模式匹配 更新 对于由helm ag命令创建的*helm ag*缓冲区,相关面为helm m

我希望更改
*helm ag*
缓冲区中某些内容的外观。我常用的发现某个点正在使用哪张脸的技巧(我最喜欢的是
M-x customize face
,该点位于感兴趣的区域)都不管用,因为没有(明显的)方法可以控制头盔缓冲区中的光标

我的问题是:

  • 教我钓鱼,养活我一辈子:我如何才能发现缓冲区中使用的面孔,而我无法将光标放在其中

  • 给我一条鱼,喂我一天:在
    *helm ag*
    缓冲区中,哪个面用于突出显示当前选定行上的模式匹配

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

进一步资料 下面是一个没有启用自定义主题的emacs会话的图片

左下角有一个
*helm ag*
缓冲区,用于搜索
defun
。选择缓冲区中的第三行。匹配(
defun
)将在所有其他行中高亮显示,但不会在所选行中高亮显示

右侧是一些可能的候选人脸自定义缓冲区<代码>头盔匹配已设置为具有红色前景,但这不会反映在
*头盔ag*
缓冲区中。这似乎表明
helm match
不是我要找的鱼。

首先是你的“鱼”:我想你指的脸是
helm match

如果我需要找到一张给定的脸,并且不能用这张脸在文本上指出要点,我个人会尝试以下几种不同的策略:

  • 使用
    M-x descripe face
    ,猜测名字的第一部分可能是什么(在本例中为
    helm
    ),然后扫描以该名字开头的可能的候选人物
  • 转到可能定义该面的代码(在本例中,您可以使用
    M-x描述函数RET helm ag
    找到
    helm ag.el
    ),并在该文件中搜索
    ,以找到可能的匹配项
  • 执行
    M-x自定义面
    并输入和
    “所有面”
    ,查找
    helm-*
    面,并尝试查找与您要查找的面匹配的名称和面(因为您可以在此缓冲区中看到该面的样本)
  • 也许这些方法都没有你希望的那么直接,可能有更快的解决方案,但这是我会做的(并且已经做了)。在本例中,我使用方法2找到了人脸

    更新: 以下是我的设置的屏幕截图:

    请注意,对于我来说,相关的面是
    helm match
    ,它继承自
    replace.el中的
    match
    。另外,请注意,与其他行相比,高亮显示/选定行中匹配的显示方式之间的差异不是由于不同的面,而是由高亮显示行的背景色如何影响颜色引起的,如我在此处高亮显示示例文本时所示:

    更新2: 原来OP使用的是另一个文件中定义的
    helm-ag-do-grep
    helm-grep.el
    。下面是该代码的面部设置部分:

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

    我想
    掌舵格雷普比赛
    就是你要找的。如果不是,则所讨论的面很可能位于上述代码段中,所有这些面都应该可以使用
    customizeface
    进行自定义。该代码还使用上述方法2进行了跟踪。

    类似于@elethan的方法3:


    • 调用列表面显示
    ,它将显示所有面的列表 按字母顺序

  • 搜索“头盔”


  • ag
    本身使用颜色突出显示匹配项。头盔使用这些颜色并忽略
    头盔grep匹配
    ,除非
    头盔grep ag命令
    包含
    --nocolors
    选项

    因此,有两种方法:

  • helm grep ag命令中,使用
    --color match
    选项将所需颜色设置为
    ag

  • 使用
    helm grep ag命令中的
    --nocolor
    选项禁用
    ag
    的匹配高亮显示,并设置Emacs的
    helm match
    helm grep match
    (不完全确定此处哪一个是正确的)以指定匹配颜色。由于第二个选项使用elisp处理着色,因此它可能比第一个选项慢

  • 在这两种情况下,比赛突出显示将被
    头盔选择
    覆盖,因此在所选行上获得比赛突出显示的唯一方法是让
    头盔选择
    不指定背景或前景,从而留下观看比赛突出显示的机会


    参考资料:

    不错!我不知道这个命令。这个命令提供的列表似乎比
    自定义面
    提供的列表更容易浏览(特别是为了OP的目的),因为只显示样本。
    列表面显示
    (在
    头盔俯冲
    的帮助下)是我最初尝试的第一道攻击线。但这并没有让我的生活发生任何变化。(参见问题编辑。)
    头盔匹配是我尝试的第一件事。这似乎不是我的鱼:请参阅我问题的编辑,了解我为什么认为是这样。@jacg,这很奇怪。您正在使用哪个版本的emacs和
    helm ag
    ?在我的例子中,将匹配面设置为
    helm match