Mas para alguns pacotes que não funcionam. Tais como auctex
.
A razão pela qual (use-package tex :ensure t)
não funciona auctex
é porque auctex
nomeia um pacote GNU ELPA (consulte (emacs) Packages
), enquanto tex
nomeia um recurso (consulte (elisp) Named Features
) fornecido pelo auctex
pacote.
Em outras palavras, tex
nomeia um único arquivo tex.el
que é distribuído como parte do auctex
pacote. Considere os seguintes exemplos:
Digitando M-xpp-macroexpand-last-sexp
RETcom ponto após
(use-package tex
:ensure t)
dá uma forma que se resume a
(progn
(use-package-ensure-elpa 'tex '(t) 'nil)
(require 'tex nil t))
considerando que fazer o mesmo com
(use-package tex
:ensure auctex)
expande efetivamente para
(progn
(use-package-ensure-elpa 'tex '(auctex) 'nil)
(require 'tex nil t))
Isso ilustra a diferença de objetivo entre o NAME
argumento to use-package
e sua :ensure
palavra-chave. O primeiro declara que nomeado feature o restante da estrofe pertence / padrões, exatamente com o mesmo significado que em with-eval-after-load
; veja (elisp) Hooks for Loading
.
O último apenas pede que o (s) pacote (s) fornecido (s) seja instalado através do segundo argumento da função use-package-ensure-elpa
, onde t
apenas significa o pacote nomeado pelo atual NAME
. use-package-ensure-elpa
por sua vez, chamadas package-install
; para detalhes sobre isso, consulte (emacs) Package Installation
.
De acordo com este blog / tutorial / site, o motivo é
porque, uma vez instalado, o auctex substitui o pacote tex.
O que isso significa
Infelizmente, isso é errado e enganador. "Substituir" geralmente se refere à substituição ou correção de funcionalidades existentes, por exemplo, através de conselhos . Quando um pacote fornece o mesmo recurso nomeado que outro, ocultando o último das funções de carregamento do Emacs, isso é chamado de "sombreamento".
A distribuição do AUCTeX substitui e estende várias funcionalidades internas relacionadas ao TeX, mas não obscurece nenhuma biblioteca interna. Você pode confirmar isso inspecionando o resultado de M-xlist-load-path-shadows
RET.
Uma autoridade melhor é a use-package
própria documentação: https://github.com/jwiegley/use-package/#package-installation .
como posso saber quando fazer isso para outros pacotes?
Depende de como você deseja agrupar suas use-package
estrofes e o nome do pacote correspondente. Por exemplo, se você deseja colocar todas ou a maioria das configurações relacionadas à sua organização em uma única (use-package org ...)
, mas deseja usar a org-plus-contrib
distribuição da organização em vez da interna, escreva
(use-package org
:ensure org-plus-contrib
...)
Você não escreveria
(use-package org-plus-contrib
:ensure t
...)
porque não há nenhum arquivo chamado org-plus-contrib.el
, mesmo se houver um pacote com o nome org-plus-contrib
. Você da mesma forma não escreveria
(use-package auctex
:ensure t
...)
pela mesma razão - não é recurso não nomeado auctex
(não é um arquivo auctex.el
, mas não chama (provide 'auctex)
).
Observe que nenhuma dessas discrepâncias / semânticas é específica use-package
; esses são todos os recursos (poderosos e úteis) do Emacs que use-package
só podem ir tão longe na abstração.