Como gerar e ativar carregamentos automáticos para pacotes locais?

9

Está claro que nem todos os pacotes locais / personalizados / pessoais devem ser lançados oficialmente, e seria tolo fazê-lo apenas para se beneficiar do suporte integrado ao gerenciamento de pacotes. Gostaria de saber como gerar e ativar carregamentos automáticos para pacotes locais? Isso é semelhante a como package.elocorre nos pacotes instalados do ELPA. Para evitar reinventar a roda, existe uma maneira de "fingir" que algum diretório local (com subdiretórios cada um dos quais é um pacote local / personalizado / pessoal) é ELPA? Também estou aberto a el-getsaber se esse cenário pode ser suportado por, por exemplo, receitas personalizadas.

Tenho certeza de que a tarefa é bastante comum e quem usa o Emacs em nível avançado chega a esse ponto mais cedo ou mais tarde. Alguém poderia compartilhar suas experiências neste campo?

Alexander Shukaev
fonte
3
update-directory-autoloadspode ser usado independentemente de qualquer gerenciador de pacotes.
N18:
@npostavs, eu sei, mas não é recursivo e não é uma solução abrangente neste caso. Com certeza não será suficiente e eu precisaria envolvê-lo em minha própria implementação.
Alexander Shukaev
1. Você pode fornecer uma lista de diretórios (por exemplo, um diretório e seus descendentes) para update-directory-autoloads, com efeito, torná-lo recursivo. 2. Você pode usar update-file-autoloadspara todos os arquivos em que estiver interessado, independentemente de qual diretório ele esteja. #
Drew /
FYI: package.eltambém não é recursivo (ou seja, não suporta pacotes com fontes em subdiretórios).
N18:
Eu configurei um MELPA local no Linux. Eu não tenho nenhuma boa solução para o Windows. Eu realmente gostaria que o emacs apoiasse esse tipo de coisa imediatamente. Pode valer a pena verificar o pacote de uso para ver se pode.
eflanigan00

Respostas:

7

A solução correta (IMO) é usar um gerenciador de pacotes que tenha suporte explícito para esse caso de uso. Isso seria o straight.elque escrevi para esse fim.

Você pode ler detalhada documentação, incluindo comparações com outros gerenciadores de pacotes, no README , então eu vou ficar com como você pode usar straight.elpara resolver o seu problema específico.

  1. Coloque o seu repositório no ~/.emacs.d/straight/repos/<my-repo>.
  2. Carregue usando

    (straight-use-package '(<my-package> :local-repo "<my-repo>"))
    
  3. Você Terminou. Sempre que você fizer alterações no código fonte, a geração de carregamento automático e a compilação de bytes serão refeitas (na próxima inicialização do Emacs). Você também obtém itens como gerenciamento de dependência, automação opcional de controle de versão, etc. gratuitamente.

  4. Quando (se) você quiser publicar o pacote, basta empurrá-lo para algum lugar e modificar a receita para apontar para o repositório Git.
  5. Você também pode usar straight.elcom use-packagese preferir (é apenas açúcar de sintaxe na maior parte).
Radon Rosborough
fonte
3

Eu faço o seguinte no Linux:

Eu configurei um repositório melpa local clonando melpa.

Modifico as receitas que desejo apontar para meus pacotes locais. A seguirlocal-melpa/recipies/ace-window

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

Em seguida, do tipo local-mepla make allou make recipies/ace-windowpara criar o (s) pacote (s) emlocal-melpa/packages

Então make packages/archive-contents, que preenche a lista de pacotes.

Em seguida, use o seguinte para dizer ao emacs para usar o meu melpa local

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

Eu não descobri como executar makeno Windows. Mas eu posso compilar os pacotes no local-melpaLinux e copiá-los para o windows e o emacs entende e instala os pacotes corretamente.

A vantagem disso é que eu posso redefinir a qualquer momento, excluindo meu ~/.emacs.d/elpa/*diretório e instalando atualizações personalizadas em qualquer pacote.

eflanigan00
fonte
Talvez o quelpa também seja interessante?
N
Eu acho que você está certo npostavs. Eu tenho que sentar e olhar para ele.
eflanigan00
2

Se você substituiu um pacote já instalado por uma versão diferente e tudo o que está faltando é o arquivo de carregamento automático, você pode usar o pacote-generate-autoloads para gerá-lo:

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

Achei mais fácil usar o update-directory-autotools quando preciso fazer o downgrade de um pacote para uma versão anterior.

Na verdade, acho que realmente não respondi sua pergunta. Deixarei esta resposta aqui por enquanto, mas minha resposta é mais relevante aqui: /programming/26348561/how-to-generate-autoloads-for-elpa-packages/50100170

Andreas Raster
fonte