Какой менеджер пакетов я должен использовать для emacs?

Я пользуюсь vim уже много лет и недавно начал пробовать emacs. Для этого редактора доступно множество компонентов, таких как почтовые клиенты, IRC-клиенты и т. д. Все эти компоненты нуждаются в менеджере пакетов для их обновления и упрощения работы с ними в целом.

В vim есть множество менеджеров плагинов (например, Vundle или pathogen), и разные люди используют разные вещи.

С другой стороны, emacs включает package.el с последними версиями (что хорошо для начала), но также есть el-get, а список пакетов package.el довольно короткий.

Должен ли я придерживаться package.el (и, возможно, расширить список пакетов с помощью marmalade)? Или мне нужно el-get для нормального управления пакетами?


person Wilhelm Schuster    schedule 21.07.2014    source источник
comment
Также загляните на MELPA: melpa.milkbox.net   -  person legoscia    schedule 21.07.2014
comment
@legoscia Спасибо за ссылку!   -  person Wilhelm Schuster    schedule 21.07.2014
comment
melpa-stable.milkbox.net имеет меньше пакетов, чем его нестабильный старший брат, но имеет вменяемую версию номера и, ну, стабильные пакеты. Лично мне нравится el-get, и я использую его для всего, но package.el, безусловно, является путем наименьшего сопротивления.   -  person phils    schedule 21.07.2014
comment
el-get может включать как ELPA (см. страницу github), так и MELPA (см. этот поток SO), так что это, вероятно, ваш самый гибкий вариант.   -  person Dan    schedule 21.07.2014
comment
@phils: FWIW: Пока что я не согласен с melpa-stable.milkbox.net. По какой-то причине ни одна из моих библиотек не указана там. И все они на обычном MELPA. Тем не менее, все они загружены из надежно заблокированных местоположений EmacsWiki. Пока неясно, что именно отличает эти два сайта и какое кураторство здесь задействовано. (Я жду ответа от Дональда Кертиса об этом.)   -  person Drew    schedule 21.07.2014
comment
@phils: я слышал об этом от Дональда. С его точки зрения, стабильный сайт MELPA находится только в режиме обслуживания. И единственная причина, по которой такого кода, как у меня, нет, заключается в том, что никто не реализовал загрузку с вики для стабильного сайта. Кроме того, никем не курируется — нет фильтрации для определения того, является ли пакет стабильным, рискованным и т. д. Существование двух сайтов было запрошено некоторыми разработчиками пакетов, которые хотели различать версии своих пакетов для разработчиков. из более старых (стабильных) версий.   -  person Drew    schedule 21.07.2014
comment
Точно; Я ожидаю, что melpa-stable (например, melpa) будет работать автоматически, периодически обнаруживая последние доступные версии. Разница в том, что melpa-stable учитывает только те версии, которые были помечены их автором как выпуск. Как вы указываете, есть источники пакетов, для которых это взаимодействие не реализовано. Я, безусловно, согласен с тем, что люди должны знать об обычной мелпе как о (более крупном) источнике пакетов, хотя очень многие люди очень счастливы использовать ее практически для всего, так что явно YMMV.   -  person phils    schedule 22.07.2014


Ответы (1)


Если вы используете последнюю версию Emacs, используйте package.el. И добавьте MELPA в список репозиториев.

Кроме того, не все "пакеты" (или библиотеки) требуют диспетчера пакетов для их обновления и упрощения работы с ними в целом. Существует мир полезного кода Emacs Lisp, который не "упакован" и не загружен в репозиторий package.el.

Что еще более важно, независимо от того, используете ли вы package.el для извлечения и "установки" пакетов, вы должны изучить основы загрузки, компиляции байтов и использования кода Emacs Lisp. Не используйте package.el вслепую, ничего не понимая в коде на Лиспе.

Основы «установки» кода Lisp вручную включают следующее:

  1. В общем, вы захотите скомпилировать библиотеки, которые вы используете, для лучшей производительности. Имейте в виду это предостережение, если вы это сделаете:

    1а. Загрузите любые исходные файлы (*.el), определяющие макросы Лиспа, необходимые для любых других библиотек Лиспа, которые вы используете.

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

  2. Поместите все библиотеки, которые вы используете, в каталог, который находится в вашем load-path. Другими словами: установите переменную load-path в вашем файле инициализации (~/.emacs) на значение, которое включает все каталоги, содержащие код Lisp, который вы используете.

  3. Как правило, вы хотите использовать (require 'foo) в своем собственном коде (например, в вашем файле инициализации), чтобы загрузить библиотеку foo.

  4. Однако № 3 работает, только если библиотека foo (файл foo.el) действительно предоставляет функцию foo: (provide 'foo). Если это не так, вы можете использовать вместо него (load-library "foo").

    (Обратите внимание на разницу между использованием 'foo и "foo": первое относится к объекту foo, второе относится к файлам foo.el и foo.elc.

  5. Наконец, прежде чем пытаться использовать библиотеку, сделайте себе одолжение и взгляните на раздел Commentary заголовка файла. Часто он сообщает вам важные вещи об использовании библиотеки. И даже если он не говорит что-то ужасно важное, он может сказать что-то полезное (например, пару советов).

Я упомянул 1-5, потому что я вижу слишком много (нет, не много, но слишком много) новых пользователей, которые просто «устанавливают» что-то с помощью менеджера пакетов и никогда не смотрят, что это за код, который они устанавливают: что это такое для, как им пользоваться и т.д. Если есть что-то в Commentary то прочтите; автор библиотеки поместил его сюда, чтобы помочь вам.

Кроме того, получайте удовольствие!

person Drew    schedule 21.07.2014
comment
Спасибо за исчерпывающий ответ! - person Wilhelm Schuster; 21.07.2014
comment
Вильгельм: это был действительно хороший ответ. Если он предоставил необходимую вам информацию, подумайте о том, чтобы принять ее, чтобы будущим пользователям было легче ее распознавать. - person Dan; 21.07.2014