Есть ли какая-нибудь функция поиска пакетов для Emacs?

В Emacs M-x связывание клавиш позволяет вам искать и выполнять доступные команды. Я ищу похожую функцию / функциональность, которая позволяет вам искать и устанавливать доступные пакеты из репозиториев Emacs.

Лучшее, что я могу сделать в настоящее время M-x package-list-packages с последующим C-s, но это имеет несколько недостатков:

  1. Это требует, чтобы вы перешли к списку доступных пакетов, в то время как я хотел бы что-то, что работает из большинства мест в Emacs.
  2. Это только позволяет вам циклически проходить по списку пакетов, тогда как я хотел бы что-то, что отображает сужающийся список результатов.
  3. Это не поддерживает нечеткое соответствие (как Хелм).

Существует ли функциональность, которую я ищу? Или есть пакет, который обеспечивает эту функциональность для 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

  1. M-x package-install
  2. ENTER
  3. Начните вводить пакет, который вы хотите установить (например: xah-find) и используйте опцию автозаполнения, чтобы выбрать пакет по вашему выбору.

Кредиты: @elethan

Другие вопросы по тегам