使用“emacs-helm-ag”(-g 选项)直接搜索文件名的交互式 Elisp 函数

Interactive Elisp Function to Directly Search File Names with `emacs-helm-ag` (-g option)

我使用emacs-helm-ag来搜索项目中的文件内容和文件名。我的 emacs-helm-ag 配置是:

; Helm Ag mode
(add-to-list 'load-path "~/.emacs.d/emacs-helm-ag")
(require 'helm-ag)
(custom-set-variables
    '(helm-ag-base-command "ag --nocolor --nogroup")
    '(helm-ag-command-option "--hidden --ignore *~ --ignore .git --ignore .idea"))
(global-set-key (kbd "M-s s") 'helm-do-ag-project-root)

要搜索文件内容(所有项目文件中的一个词)我按M-s s并输入要搜索的词。

要搜索文件名(项目所有文件列表中的一个文件)我按M-s s然后我必须输入-g(我想自动执行此步骤),然后输入要搜索的文件名。

问题。请你能帮我想出一个 elisp 交互功能,通过自动插入 -g 命令行选项直接搜索项目中的文件名(最好重用 helm-do-ag-project-root 来自 emacs-helm-ag package) 并且只需要最终用户输入文件名。我想要一个交互式函数来搜索项目中的文件名,并能够使用不同的键绑定调用该函数。类似于:

(global-set-key (kbd "M-s f") 'helm-do-ag-project-root-file-names)

根据 DasEwigeLicht on Reddit 的建议,我创建了一个函数,该函数根据我的问题的要求使用 ag -g <pattern> 在项目中搜索文件名。函数为:

(defun helm-do-ag-project-root-search-file-names ()
    "Searches file names in a project using ag -g <pattern> command line tool"
    (interactive)
    (let ((helm-ag-command-option (concat helm-ag-command-option " -g")))
        (helm-do-ag-project-root)))

(global-set-key (kbd "M-s f") 'helm-do-ag-project-root-search-file-names)

非常感谢DasEwigeLicht提出的有用建议!