Як генерувати та активувати автозавантаження для локальних пакетів?


9

Зрозуміло, що не всі локальні / користувацькі / персональні пакунки повинні бути офіційно випущені, і було б нерозумно це зробити лише для того, щоб скористатися вбудованою підтримкою управління пакетами. Мені цікаво, як генерувати та активувати автозавантаження для локальних пакетів? Це схоже на те, як package.elце робиться для встановлених пакетів від ELPA. Щоб уникнути винаходиння колеса, чи існує спосіб, щоб він "зробив вигляд", що деякий локальний каталог (з підкаталогами, кожен з яких є локальним / спеціальним / персональним пакетом) - ELPA? Я також відкритий, el-getякщо такий сценарій можна підтримати, наприклад, за допомогою спеціальних рецептів.

Я впевнений, що завдання досить поширене, і кожен, хто використовує Emacs на просунутому рівні, рано чи пізно доходить до цього питання. Чи може хтось поділитися своїм досвідом у цій галузі?


3
update-directory-autoloadsможе використовуватися незалежно від будь-якого менеджера пакунків.
nпостаs

@npostavs, я знаю, але це не рекурсивно, і це не комплексне рішення в цьому випадку. Напевно, цього буде недостатньо, і мені доведеться зафіксувати це у власній реалізації.
Олександр Шукаєв

1. Ви можете надати список дрір (наприклад, дір та його нащадків) update-directory-autoloads, щоб фактично зробити його рекурсивним. 2. Ви можете використовувати update-file-autoloadsдля кожного файла, який вас цікавить, незалежно від того, в якому каталозі він знаходиться.
Дрю

FYI: package.elтакож не рекурсивна (тобто не підтримує пакети з джерелами в підкаталогах).
npostavs

Я створив локальний MELPA в Linux. У мене немає хорошого рішення для Windows. Мені дуже хочеться, щоб Emacs підтримував цю річ поза коробкою. Можливо, варто перевірити use-package, щоб побачити, чи може він.
eflanigan00

Відповіді:


7

Правильне рішення (IMO) полягає у використанні менеджера пакунків, який має явну підтримку для цього випадку використання. Це було б straight.el, про що я писав з цією метою.

Ви можете прочитати детальну документацію, включаючи порівняння з іншими менеджерами пакунків, у програмі README , тому я дотримуюся того, як ви можете використовувати straight.elдля вирішення вашої конкретної проблеми.

  1. Помістіть своє сховище ~/.emacs.d/straight/repos/<my-repo>.
  2. Завантажте його, використовуючи

    (straight-use-package '(<my-package> :local-repo "<my-repo>"))
    
  3. Ви закінчили. Щоразу, коли ви вносите зміни до вихідного коду, автоматичне завантаження та складання байтів буде перероблено (при наступному запуску Emacs). Ви також отримуєте такі речі, як управління залежностями, додаткова автоматизація управління версіями тощо.

  4. Коли (якщо) ви хочете опублікувати пакет, просто натисніть його кудись і змініть рецепт, щоб вказати на це сховище Git.
  5. Ви можете також використовувати straight.elз , use-packageякщо ви віддаєте перевагу (це просто синтаксис здебільшого).

3

Я виконую наступні дії в Linux:

Я налаштовую локальне сховище melpa, клонуючи melpa.

Я змінюю рецепти, які хочу вказати на свої місцеві пакунки. Далі йдетьсяlocal-melpa/recipies/ace-window

(ace-window
  :url "/home/my_home/.emacs.d/packages/ace-window/"
  :fetcher git)

Потім від типу "local-mepla" make allабо make recipies/ace-windowдля складання пакунківlocal-melpa/packages

Потім make packages/archive-contents, який заповнює список пакунків.

Потім використовуйте наступне, щоб сказати Emacs використовувати мою локальну melpa

(setq package-archives '(("local-melpa" . "~/.emacs.d/packages/local-melpa/packages/")))

Я не зрозумів, як бігати makeна Windows. Але я можу створювати пакунки в local-melpaLinux і копіювати їх у Windows, а emacs розуміє та встановлює пакунки належним чином.

Перевага в тому, що я можу скинути будь-який час, коли захочу, видаливши свій ~/.emacs.d/elpa/*каталог і встановивши будь-які спеціальні оновлення до будь-якого пакету.


Можливо, quelpa також зацікавила б?
npostavs

Я думаю, що ви праві nstavs. Я повинен сісти і подивитися на це.
eflanigan00

2

Якщо ви замінили вже встановлений пакет на іншу версію, і все, що вам не вистачає, це файл автозавантаження, ви можете використовувати пакет-генерувати-автозавантажувати для його генерації:

(package-generate-autoloads "async" "~/.emacs.d/elpa/async-1.9.3/")

Мені було легше, ніж використовувати оновлення-каталог-autotools, коли мені потрібно повернути пакет до попередньої версії.

Насправді я думаю, що я не дуже відповів на ваше запитання. На даний момент я залишу цю відповідь, але моя відповідь є більш актуальною тут: /programming/26348561/how-to-generate-autoloads-for-elpa-packages/50100170

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.