Emacs helm с несколькими источниками
Я использую helm для Emacs с несколькими источниками и задаюсь вопросом, как мне извлечь список всех записей, которые пользователь пометил с помощью Ctrl+Space. В качестве примера выполните в своем
*scratch*
буфер
(require 'helm)
(defun helm-test-action (candidate)
"Test."
(interactive)
(message (concat "candidate = " (prin1-to-string candidate)
"\n, helm-marked-candidates = " (prin1-to-string (helm-marked-candidates)))))
(defun helm-test-case ()
"Test."
(interactive)
(helm :sources (list (helm-build-sync-source "First Source"
:candidates '("one" "two" "three")
:action #'helm-test-action)
(helm-build-sync-source "Second Source"
:candidates '("four" "five")
:action #'helm-test-action))))
а потом
M-x helm-test-case
.
Когда вы отмечаете, скажем, "один" и "четыре" с помощью Ctrl+Space и нажимаете Enter, как мне получить две отмеченные записи из моего действия? Это выглядит
candidate
всегда строка, на которой был установлен курсор, и
(helm-marked-candidates)
выводит список отмеченных записей текущего источника. Как мне получить список отмеченных записей по всем источникам?
Спасибо за вашу помощь,
HPF
1 ответ
Ответ - использовать
(helm-marked-candidates :all-sources t)
. Это возвращает список всех отмеченных записей или, если ни одна не была отмечена, запись под курсором, когда вы нажимаете Enter.
Конечно, это имеет смысл, только если все ваши источники содержат кандидатов одной и той же формы и если действие по умолчанию одинаково для всех источников. Однако, похоже, это требование не соблюдается.
С Уважением,
HPF