3

我希望改变*helm ag*缓冲区中某些东西的外观。我发现在某个点使用哪个面(我最喜欢的是M-x customize-face在感兴趣区域中的点)的常用技巧都不起作用,因为没有(明显的)方法可以控制掌舵缓冲区中的光标。

我的问题是:

  • 教我钓鱼,养我一辈子:如何发现缓冲区中无法放置光标的人脸?

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

更新

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

更多信息

这是一张没有启用自定义主题的 emacs 会话的图片。

问题说明

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

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

4

3 回答 3

2

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

  • Call list-faces-display,它将按字母顺序显示所有面孔的列表。

  • 搜索“掌舵”。

于 2017-01-12T15:16:56.220 回答
2

首先是您的“鱼”:我认为您所指的脸是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并输入 and 'all faces',查找helm-*面孔并尝试找到与您正在寻找的面孔匹配的姓名和面孔(因为您可以在此缓冲区中看到面孔样本)。

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

更新:

这是我设置的屏幕截图:

在此处输入图像描述

请注意,对我来说,相关的面孔是helm-matchmatchin继承的replace.el。另外,请注意,匹配在突出显示/选定行中与其他行相比的显示方式的差异不是由于不同的面,而是由线条突出显示的背景颜色如何影响颜色造成的,可以看出当我在此处突出显示示例文本时:

在此处输入图像描述

更新 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)

我想helm-grep-match这就是你要找的。如果不是,那么有问题的面孔很可能在上面的代码片段中,并且所有这些面孔都应该可以使用customize-face. 该代码还使用上述方法 #2 进行了跟踪。

于 2017-01-12T14:32:37.250 回答
0

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

因此有两种方法:

  1. 使用in--color-match选项设置您想要的颜色。aghelm-grep-ag-command

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

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

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

于 2017-01-14T14:33:58.203 回答