Есть ли какая-нибудь функция поиска пакетов для Emacs?
В Emacs M-x
связывание клавиш позволяет вам искать и выполнять доступные команды. Я ищу похожую функцию / функциональность, которая позволяет вам искать и устанавливать доступные пакеты из репозиториев Emacs.
Лучшее, что я могу сделать в настоящее время M-x package-list-packages
с последующим C-s
, но это имеет несколько недостатков:
- Это требует, чтобы вы перешли к списку доступных пакетов, в то время как я хотел бы что-то, что работает из большинства мест в Emacs.
- Это только позволяет вам циклически проходить по списку пакетов, тогда как я хотел бы что-то, что отображает сужающийся список результатов.
- Это не поддерживает нечеткое соответствие (как Хелм).
Существует ли функциональность, которую я ищу? Или есть пакет, который обеспечивает эту функциональность для Emacs? И если так, где я могу найти это?
5 ответов
Это звучит как M-x package-install
должен делать то, что вы хотите. Если у вас есть helm
После установки у вас будет интерфейс для поиска и установки пакетов. Даже без helm
, он может быть вызван из любого буфера, он поддерживает сужение, а если у вас установлен helm, он поддерживает нечеткое соответствие.
Я все еще склонен использовать M-x package-list-packages
если я не знаю точно, что я ищу, потому что в отличие от package-install
это позволяет вам видеть детали и описания пакетов. я имею C-s
связан с helm-occur
так что я могу искать через этот буфер с интерфейсом, похожим на helm. Кроме того, в *Packages*
буфер, вы можете использовать f
(package-menu-filter
), который позволяет сузить список пакетов на основе списка ключевых слов, разделенных запятыми. Тем не менее, я могу понять, что вы хотите избежать аспектов package-list-packages
изложил в своем посте.
Установите ido-ubiquitous
пакет и включить (ido-ubiquitous-mode 1)
, а также (setq ido-enable-flex-matching t)
включить гибкое сопоставление (не уверен, если это необходимо, но он у меня установлен). Это в основном делает все завершение использования Ido, в том числе package-install
, Вы можете сузить с C-SPC
или используйте <tab>
открыть буфер завершений.
Я обычно использую list-packages
, я использую flex-isearch
автоматически начинать сопоставление по флексам после isearch
или оборачивается или не имеет спичек.
Судя по найденному здесь скриншоту, есть такая вещь, какM-x list-matching-lines
это делает то, что вам нужно (строковый поиск пакетов). Я пробовал. Последовательность набранного текста показана на скриншоте. Я не устанавливал ничего особенного, чтобы получить эту функциональность.
Это выполняет поиск по именам пакетов и сводкам:
(defun apropos-package--filter (string)
(let (packages)
(dolist (package-assoc package-archive-contents)
(let ((package (cadr package-assoc)))
(when (or (string-match-p (regexp-quote string) (package-desc-summary package))
(string-match-p (regexp-quote string) (prin1-to-string (package-desc-name package))))
(push package packages))))
packages))
(defun apropos-package (string)
(interactive "sSearch for package: ")
;; Initialize the package system if necessary.
(unless package--initialized
(package-initialize t))
(let ((packages (apropos-package--filter string)))
(if (null packages)
(message "No packages")
(package-show-package-list (mapcar 'package-desc-name packages)))))
Вызовите команду с помощью
M-x apropos-package
M-x package-install
ENTER
- Начните вводить пакет, который вы хотите установить (например:
xah-find
) и используйте опцию автозаполнения, чтобы выбрать пакет по вашему выбору.
Кредиты: @elethan