Estou usando package
para gerenciar minhas extensões do Emacs. Para sincronizar minhas configurações do Emacs em computadores diferentes, gostaria de especificar uma lista de nomes de pacotes em .emacs
arquivo e, em seguida, package
procurar e instalar automaticamente os pacotes, para que eu não precise instalá-los manualmente ligando M-x package-list-packages
. Como fazer isso?
123
Respostas:
fonte
package
.package-refresh-contents
que só seria executado se o pacote não estiver instalado? Como é(or (file-exists-p package-user-dir))
melhor / como ele verifica se os pacotes estão instalados?package-refresh-contents
. Provavelmente, isso só será executado na primeira vez que você abrir o emacs em um computador novo, e eu estou bem com isso. Se um pacote precisar de atualização, isso pode ser feito manualmente.use-package
, poderá usar a:ensure
palavra-chave para instalar pacotes automaticamente. Isso também é configuradopackage-selected-packages
se você precisar acessar a lista de pacotes por meio de personalização ou programaticamente.Com base nos comentários de Profpatsch e respostas abaixo:
fonte
or
? Uau.mapc
é para efeitos colaterais. Mas por que não usarunless
?(package-initialize)
antes da referência apackage-user-dir
O Emacs 25.1+ acompanhará automaticamente os pacotes instalados pelo usuário na
package-selected-packages
variável personalizável .package-install
atualizará a variável customizada e você poderá instalar todos os pacotes selecionados com opackage-install-selected-packages
funçãoOutra vantagem conveniente dessa abordagem é que você pode usar
package-autoremove
para remover automaticamente os pacotes que não estão incluídospackage-selected-packages
(embora preservem as dependências).Fonte: http://endlessparentheses.com/new-in-package-el-in-emacs-25-1-user-selected-packages.html
fonte
Aqui está o código que eu uso para o Emacs Prelude :
Se você não estiver usando o MELPA, não precisará solicitá-lo (e se precisar,
melpa.el
deve estar no seuload-path
(ou instalado via MELPA). O pacote db não é atualizado a cada vez (pois isso tornaria a inicialização significativamente mais lenta) ) - somente onde houver pacotes desinstalados presentes.fonte
Ninguém mencionou Cask ainda, mas é bastante adequado para esta tarefa.
Basicamente, você cria
~/.emacs.d/Cask
listando os pacotes que deseja instalar. Por exemplo:A execução
cask
na linha de comando instalará esses pacotes para você e quaisquer dependências que eles precisem.Além disso, você pode atualizar automaticamente os pacotes instalados usando
cask update
.fonte
/path/to/emacs -Q --script /path/to/cask/cask-cli.el -- [args]
Ligue
package-install
com o nome do pacote como um símbolo. Você pode encontrar os nomes dos pacotes chamandopackage-install
interativamente e completando o nome. A funçãopackage-installed-p
informará se já foi instalada.Por exemplo:
fonte
error: Package
dired + 'não está disponível para instalação`. dired + é um pacote que tentei com seu código.dired+
quando você correpackage-list-packages
? Acredito que você precisará adicionar geléia ou melpa ao seupackage-archives
. Se sim, você pode correr(package-install 'dired+)
?(package-installed-p 'dired+)
deve retornart
e será ignorado no código acima.package-installed-p
sozinho fina funciona, mas todo o bloco de código não. Eu tentei vários pacotes.fonte
Eu gosto de verificar se o usuário deseja instalar os pacotes primeiro, como feito nesta resposta . Também estou atualizando o conteúdo do meu pacote uma vez antes de instalar qualquer coisa. Não tenho certeza se essa é a melhor maneira, mas não acho que as principais respostas estejam fazendo isso por mim.
fonte
Corri para um problema que nada aconteceu depois de adicionar
(package-install 'org)
em.emacs
. Eu queria instalar a versão atualizadaorg-mode
e o built-inorg-mode
é bastante antigo.Eu descobri o código fonte
package-install
do Emacs 25.3.1. A função self já verifica se um pacote está instalado ou não e se recusa a instalá-lo se o pacote já estiver instalado. Portanto, a verificação(unless (package-installed-p package) ...)
da resposta 10093312 é de fato desnecessária.O built-in
org-mode
também conta como instalado epackage-install
se recusa a instalar a versão mais recente do ELPA. Depois de passar algum tempo lendo o package.el, criei a seguinte solução.A razão pela qual funciona é que as
package-*
funções da família lidam com os argumentos de maneira diferente, dependendo se é um símbolo ou umpackage-desc
objeto. Você só pode especificar informações de versão porpackage-install
meio de umpackage-desc
objeto.fonte
Aqui está o meu, é mais curto :)
fonte
Aqui está outra maneira.
fonte