Comment générer et activer les chargements automatiques pour les packages locaux?


9

Il est clair que tous les packages locaux / personnalisés / personnels ne devraient pas être officiellement publiés, et il serait stupide de le faire juste pour bénéficier du support de gestion des packages intégré. Je me demande comment générer et activer les chargements automatiques pour les packages locaux? Cela est similaire à la façon dont package.elcela fonctionne pour les packages installés d'ELPA. Afin d'éviter de réinventer la roue, y a-t-il un moyen de "prétendre" qu'un répertoire local (avec des sous-répertoires dont chacun est un package local / personnalisé / personnel) est ELPA? Je suis également ouvert à savoir el-getsi un tel scénario peut être pris en charge via, par exemple, des recettes personnalisées.

Je suis sûr que la tâche est assez courante et quiconque utilise Emacs à un niveau avancé arrive tôt ou tard à ce point. Quelqu'un pourrait-il partager ses expériences dans ce domaine?


3
update-directory-autoloadspeut être utilisé indépendamment de tout gestionnaire de paquets.
npostavs

@npostavs, je sais mais ce n'est pas récursif et ce n'est pas une solution complète dans ce cas. Pour sûr, ce ne sera pas suffisant et je devrais l'envelopper dans ma propre implémentation.
Alexander Shukaev

1. Vous pouvez fournir une liste de répertoires (par exemple, un répertoire et ses descendants) update-directory-autoloadspour, en fait, le rendre récursif. 2. Vous pouvez utiliser update-file-autoloadspour chaque fichier qui vous intéresse, quel que soit le répertoire dans lequel il se trouve.
Drew

FYI: package.elest également non récursif (c'est-à-dire qu'il ne prend pas en charge les packages avec des sources dans les sous-répertoires).
npostavs

J'ai mis en place un MELPA local sur Linux. Je n'ai pas de bonne solution pour Windows. Je souhaite vraiment qu'emacs prenne en charge ce type de chose hors de la boîte. Cela pourrait valoir la peine de vérifier use-package pour voir si c'est possible.
eflanigan00

Réponses:


7

La solution correcte (IMO) consiste à utiliser un gestionnaire de packages qui prend explicitement en charge ce cas d'utilisation. Ce seraitstraight.el , que j'ai écrit à cet effet.

Vous pouvez lire une documentation détaillée, y compris des comparaisons avec d'autres gestionnaires de packages, dans le fichier README , donc je m'en tiendrai à la façon dont vous pouvez utiliser straight.elpour résoudre votre problème spécifique.

  1. Placez votre référentiel dans ~/.emacs.d/straight/repos/<my-repo>.
  2. Chargez-le en utilisant

    (straight-use-package '(<my-package> :local-repo "<my-repo>"))
    
  3. Vous avez terminé. Chaque fois que vous apportez des modifications au code source, la génération de chargement automatique et la compilation d'octets seront refaites (au prochain démarrage d'Emacs). Vous bénéficiez également gratuitement de fonctionnalités telles que la gestion des dépendances, l'automatisation du contrôle de version en option, etc.

  4. Lorsque (si) vous souhaitez publier le package, poussez-le quelque part et modifiez la recette pour pointer vers ce référentiel Git.
  5. Vous pouvez également utiliser straight.elavec use-packagesi vous préférez (c'est juste du sucre de syntaxe pour la plupart).

3

Je fais ce qui suit sur Linux:

J'ai configuré un référentiel melpa local en clonant melpa.

Je modifie les recettes que je veux pointer vers mes packages locaux. Ce qui suit estlocal-melpa/recipies/ace-window

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

Puis à partir du type local-mepla make allou make recipies/ace-windowpour construire le (s) package (s) danslocal-melpa/packages

Ensuite make packages/archive-contents, qui remplit la liste des packages.

Ensuite, utilisez pour suivre pour dire à emacs d'utiliser mon melpa local

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

Je n'ai pas compris comment exécuter makesur Windows. Mais je peux construire les packages sous local-melpaLinux et les copier sur Windows et emacs comprend et installe les packages correctement.

L'avantage de ceci est que je peux réinitialiser à tout moment en supprimant mon ~/.emacs.d/elpa/*répertoire et en installant toutes les mises à jour personnalisées de n'importe quel package.


Peut-être quelpa serait également intéressant?
npostavs

Je pense que vous avez raison npostavs. Je dois m'asseoir et le regarder.
eflanigan00

2

Si vous avez remplacé un package déjà installé par une version différente et qu'il ne vous manque que le fichier de chargement automatique, vous pouvez utiliser package-generate-autoloads pour le générer:

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

J'ai trouvé plus facile que d'utiliser update-directory-autotools lorsque j'ai besoin de rétrograder un package vers une version antérieure.

En fait, je pense que je n'ai pas vraiment répondu à votre question. Je vais laisser cette réponse ici pour le moment mais ma réponse est plus pertinente ici: /programming/26348561/how-to-generate-autoloads-for-elpa-packages/50100170

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.