Desejo distribuir um pacote elisp que usa json.el ( http://edward.oconnor.cx/2006/03/json.el ). Preciso que isso funcione para versões do emacs que não vêm com o json pré-instalado (como o OSX, que é fornecido com o emacs 22.1). Existe uma maneira recomendada para eu enviar um pacote de terceiros como o json com o meu pacote?
Vou distribuir isso no formulário de origem diretamente para os clientes.
locate-library
- ou simplesmente agir em caso de(require 'json nil :noerror)
falha - para verificar sejson
já está disponível e, se não, adicionar o subdiretório da sua própria cópia àload-path
anteriorrequire
.json.el
com sua biblioteca? Basta incluir(require 'json)
e adicionar uma observação no comentário (comentários do cabeçalho do arquivo) que informa aos usuários onde obterjson.el
. Isso é educado, suficiente e fácil para os usuários. Se sua biblioteca realmente não exigejson.el
, e é apenas uma coisa boa de se ter ou é necessária apenas para algumas funcionalidades (não todas), use(require 'json nil t)
e adicione condições no seu código que testem sua presença (por exemplo,featurep
oufboundp
ouboundp
). Você também pode usar(require 'json nil t)
em uma determinada definição de função.Respostas:
Como outros já apontaram, se você está alvejando o Emacs 23 ou mesmo 22, não possui um "pacote", mas apenas uma biblioteca. “Pacotes” não existem no Emacs anteriores ao Emacs 24 quando o gerenciador de pacotes foi adicionado.
Empacotando com uma Biblioteca
Empacote.
Como não há uma maneira padrão de instalar bibliotecas antes dos pacotes, você pode agrupar o json.el no que você der aos seus usuários - algum tipo de arquivo que eu presumo. Eles terão que instalá-lo manualmente de qualquer maneira e, assim, poderão escolher os arquivos de que precisam: Apenas sua biblioteca para usuários do Emacs 24/25, sua biblioteca + json.el para aqueles com versões mais antigas.
Enquanto você documentar isso, não causará nenhum problema.
Empacotando com um pacote
Não empacote absolutamente.
No entanto, se você criar um pacote adequado para o Emacs 24 e superior, não deverá incluí-lo
json.el
.O gerenciador de pacotes instalará com prazer sua cópia empacotada
json.el
junto com sua biblioteca real. Como os pacotes que vêm em primeiro lugar naload-path
sua cópia empacotadajson.el
, agora substituirão a incorporada, causando todos os tipos de problemas para os pacotes que esperam uma versão mais recente dojson.el
.O caminho a percorrer (na minha opinião)
Crie duas distribuições do seu pacote:
json.el
, mas sem metadados de pacote para usuários de versões mais antigas do Emacs.A única coisa que você precisa observar é quando os usuários de versões mais antigas do Emacs atualizam para o Emacs 24. Nesse caso, eles terão que remover manualmente a instalação anterior da sua biblioteca
json.el
e instalar o pacote apropriado do Emacs 24 novamente.Uma alternativa
Se você não deseja manter duas distribuições diferentes, é possível agrupar
json.el
, mas com um nome diferente, por exemplomy-library-json-compat.el
. Com um nome diferente, sua cópia do pacotejson.el
nunca substituirá a incorporada.Como as funções e os símbolos da cópia em pacote ainda conflitam com a incorporada, você deve tomar cuidado para não carregar sua cópia em pacote quando o real
json.el
estiver disponível, mas isso é fácil:O Emacs tentará carregar
json.el
e, na sua falta, retornará à sua cópia agrupada com um nome diferente.O verdadeiro caminho a percorrer (na minha opinião)
Diga aos seus usuários para atualizarem para o Emacs 24. A última versão do Emacs 22 é de oito (!) Anos atrás, a última versão do Emacs 23 ainda há quatro anos. Ambas as versões estão desatualizadas e carecem de muitos recursos, e muitos pacotes (por exemplo, Magit) suportam apenas o Emacs 24 atualmente. O Emacs 22/23 é um beco sem saída e não há como avançar com eles.
A atualização para o Emacs 24 é fácil: a maioria das distribuições Linux modernas inclui pelo menos o Emacs 24.1 em seus repositórios de pacotes. Estão disponíveis pacotes de aplicativos pré-criados para o OS X , e o mais recente Emacs 24 estável está incluído no popular Homebrew, gerenciador de pacotes do OS X.
fonte