Интерактивная функция Elisp для прямого поиска имен файлов с помощью `emacs-helm-ag` (опция -g)

Я использую 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) и требует только ввода имени файла в конце Пользователь. Я хотел бы иметь интерактивную функцию для поиска имен файлов в проекте и иметь возможность вызывать функцию с другой привязкой клавиш. Что-то похожее:

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

person Volodymyr Prokopyuk    schedule 27.01.2018    source источник


Ответы (1)


По предложению DasEwigeLicht на 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 за полезное предложение!

person Volodymyr Prokopyuk    schedule 27.01.2018