Instalando manualmente um pacote com vários arquivos no “elpa /”

7

Quando estou escrevendo um novo pacote, é ótimo poder testar sua instalação apenas emitindo M-x package-install-from-buffer. Isso instalará o pacote com package.el, para que fique abaixo "~/.emacs.d/elpa". No entanto, isso não funciona em pacotes com vários arquivos.

Qual é o procedimento para instalar todos os .elarquivos no diretório atual como um único pacote com vários arquivos?

Malabarba
fonte

Respostas:

7

O Emacs 25.1 agora possui esse recurso . Do NEWSarquivo:

** package-install-from-buffere package-install-filetrabalhe em diretórios. Isso segue as mesmas regras que a instalação a partir de um .tararquivo, exceto que o -pkg.elarquivo é opcional.

Não há novos comandos para lembrar. Basta emitir a package-install-from-bufferpartir de um buffer direcionado ou invocar package-install-filee fornecer um diretório. Qualquer pacote contido nesse diretório será lido e instalado, seja ele único ou multifile, sem tarar ou -pkg.elarquivo necessário.

Malabarba
fonte
O -pkg.elarquivo opcional é interessante. O que os valores padrão nesse caso?
Phillip
O @phils, assim como os repositórios de pacotes, encontra um arquivo elisp com um cabeçalho de pacote completo e gera o arquivo -pkg a partir dele.
Malabarba 21/01
11
Ah, eu não tinha percebido que era assim que eles eram gerados normalmente. Suas mudanças fazem todo sentido, então. Bom trabalho.
Phillip
Malabarba: Percebo que a docstring atual no trunk for package-install-filenão faz menção a ele trabalhando para diretórios (embora, como você disse, o faça).
Phillip #
@phils Obrigado por perceber. Estou consertando agora.
Malabarba 17/07/2015
1

package-install-from-buffer diz:

O buffer atual é considerado um único arquivo .el ou .tar que segue as diretrizes de empacotamento

Portanto, presume-se que você possa arquivar o diretório (assumindo que ele atenda aos critérios), carregar o arquivo tar no Emacs e usá-lo package-install-from-buffercomo antes?

Edit: Ou, como lunaryorn aponta, não visite o arquivo no Emacs e use package-install-file.

phils
fonte
11
Parece uma função para (re) tar o diretório atual e, em seguida, instalar o pacote seria útil.
glucas
11
Alternativamente M-x package-install-file,.
Não funciona Ele tenta encontrar um paradox/paradox-pkg.elarquivo dentro do tar, e erros quando isso não acontece. Mesmo para ambos install-filee install-from-buffer. Acho que preciso criar esse -pkgarquivo como uma espécie de receita.
Malabarba 12/01
11
@ Malabarba Um pacote TAR deve ter um -pkgarquivo, caso contrário, não é um pacote válido, portanto, apenas tarar um diretório aleatório não funcionará. Afinal, o Emacs deve ter algum lugar para procurar os metadados do pacote. Você pode usar MELPAs package-buildou caskcriar pacotes TAR apropriados a partir de uma árvore de diretórios.
Malabarba: Veja C-h i g (elisp) Multi-file Packagespara detalhes.
Phll
1

package.elnão possui um bom suporte para este caso de uso. Você precisa executar novamente package-install-from-buffertoda vez que fizer uma atualização no pacote, e também os M-x find-functionamigos não pularão para o código-fonte, mas para a cópia package.elinserida ~/.emacs.d/elpa. Como conseqüência, eu recomendaria não usá-lo package.elpara este caso de uso (ou de todo, pois ele tem vários outros problemas).

Em vez disso, você pode tentar meu gerenciador de pacotes straight.el, que foi projetado explicitamente para este caso de uso. Com straight.el, não há procedimento de "instalação local". Você acabou de colocar seu repositório ~/.emacs.d/straight/repos/<my-package-repo>e, em seguida, carregar o pacote no seu arquivo init:

(straight-use-package '(<my-package> :local-repo "<my-package-repo>"))

Sempre que você faz uma alteração no código-fonte, a geração de carregamento automático e a compilação de bytes são refeitas (depois de reiniciar o Emacs). Além disso, você está executando diretamente do repositório Git, para que os M-x find-functionamigos funcionem conforme o esperado.

Finalmente, as versões local e upstream são totalmente intercambiáveis. straight.elpermite que você faça as alterações locais desejadas, e elas são tratadas tão sagradas quanto as alterações upstream (embora straight.elpermita reverter automaticamente [e interativamente] seus repositórios para as versões upstream, se desejar). Portanto, não há preocupação em fazer alterações em sua configuração se você deseja fazer o desenvolvimento local: basta fazer o desenvolvimento local. E se você tem um pacote privado que você publica, é trivial: basta empurrá-lo para algum lugar (e provavelmente atualize a receita no seu arquivo init para apontar para o repositório Git, para que você straight.elpossa cloná-lo novamente de uma máquina diferente).

Ao contrário de package.el, não há diferença no tratamento de pacotes com vários arquivos e arquivos únicos.

Para obter uma documentação detalhada sobre straight.el, incluindo comparações com outros gerenciadores de pacotes, consulte o README .

Radon Rosborough
fonte