Emacs. Completion systems

Системы завершения Emacs.

Содержание

1 Общая информация

2 Фреймворки

2.1 Ido

  • Документация: https://www.gnu.org/software/emacs/manual/html_node/ido/index.html.
  • Включён в Emacs по умолчанию.
  • Отображает кандидатов по горизонтали, а не по вертикали.
  • Пакет ido-vertical-mode который заставляет Ido отображать кандидатов вертикально, а не горизонтально.
  • Не поддерживает какие-либо команды из коробки (только буферы и файлы).

2.2 Helm

2.3 Ivy

  • Репозиторий: https://github.com/abo-abo/swiper#ivy.
  • Минимальная альтернатива Helm с более простым интерфейсом.
  • Реализация переусложнена (большой технический долг).
    • Первоначально Ivy был разработан для использования в качестве бэкэнда для Swiper пакета буферного поиска, который изначально использовал Helm.
    • Когда Ivy стал интерактивным пакетом выбора более общего назначения, было добавлено больше специальных случаев, чтобы попытаться заставить различные команды работать правильно.
  • Ivy отклоняется от API завершения Emacs и изобретает свой собственный API с дополнительными функциями, жертвуя возможностью повторного использования.

2.4 Icomplete

  • Документация: https://www.gnu.org/software/emacs/manual/html_node/emacs/Icomplete.html.
  • Встроенный пакет Emacs для интерактивного выбора.
  • В основном это то же самое, что и стандартный completing-read, за исключением того, что доступные кандидаты отображаются в минибуфере по мере ввода.
  • Кандидаты отображаются горизонтально (по умолчанию).
    • Это можно изменить с помощью некоторой ручной настройки, включая настройку icomplete-separator.
  • Серьезная проблема юзабилити Icomplete заключается в том, что способ выбора кандидата из нижней части списка очень неинтуитивен.
  • Документация Icomplete в основном отсутствует.
  • Существует пакет для настройки Icomplete: icomplete-vertical.
  • Наиболее совместимый с API расширенный пользовательский интерфейс для завершения.

2.5 Vertico

  • Репозиторий: https://github.com/minad/vertico.
  • Минималистичная система, основанная на стандартном интерфейсе Emacs.
  • Расширяет систему завершения по умолчанию аналогично Icomplete и поэтому полностью совместим со всеми функциями completing-read API.
  • Поддерживает как горизонтальное, так и вертикальное отображение.
  • Предоставляет быстрые клавиши и действия отображения в стиле Avy для отображения завершений в буфере.
  • Поддерживает циклический перебор кандидатов.

2.6 Icicles

  • Информация: https://www.emacswiki.org/emacs/Icicles.
  • Пакет, похожий на Helm.
  • Можно загрузить только вручную с EmacsWiki.
  • Был удалён из MELPA из-за консенсуса сообщества о том, что этот механизм распространения имеет неприемлемые риски для безопасности.

2.7 Snails

  • Репозиторий: https://github.com/manateelazycat/snails.
  • Поддерживает нечёткий поиск из коробки.
  • Как и Ivy, он идёт по пути переноса каждой возможной команды в бэкенд, а не использует существующие интерфейсы Emacs для обработки всех возможных команд.

2.8 Sallet

  • Репозиторий: https://github.com/Fuco1/sallet.
  • Идёт по пути предоставления оболочек для всех возможных команд, а не реализует их все через существующий completing-read интерфейс.
  • Отсутствует документация для пользователя.

2.9 Raven

2.10 Swiper

  • Репозиторий: https://github.com/abo-abo/swiper#swiper.
  • Пакет поиска в буфере, использующий интерфейс Ivy и тесно связанный с реализацией Ivy.

2.11 Selectrum

  • Репозиторий: https://github.com/radian-software/selectrum.
  • Кодовая база Selectrum проста и лаконична.
  • Selectrum предоставляет ограниченный набор функций.
  • Selectrum основывается на стандартном API завершения Emacs, и пытается предоставить наилучший пользовательский интерфейс для этого API.
  • Selectrum не поддерживает функции, которые нарушают работу completing-read API.

2.12 CTRLF

2.13 Consult

  • Репозиторий: https://github.com/minad/consult.
  • Предоставляет команду consult-line, которая ведет себя аналогично Swiper.

Дмитрий Сергеевич Кулябов
Дмитрий Сергеевич Кулябов
Профессор кафедры теории вероятностей и кибербезопасности

Мои научные интересы включают физику, администрирование Unix и сетей.

Похожие