package-initialize: argumento do tipo errado: arrayp, nil

29

ao passar pelo emacs como editor de ac / c ++ , me deparei com as seguintes linhas de código para incluir no meu ~/.emacsarquivo, para conectar-me melpa archivesà instalação de pacotes

(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/"))
(package-initialize)

depois de salvar essas linhas no emacs, quando iniciei o emacs, ele me mostrava wrong type argument: arrayp, nilna área de minibuffer

quando tentei $ emacs --debug -init, obtive:

Debugger entered--Lisp error: (wrong-type-argument arrayp nil)
  package--add-to-archive-contents(nil "melpa")
  package-read-archive-contents("melpa")
  package-read-all-archive-contents()
  package-initialize()
  eval-buffer(#<buffer  *load*> nil "/home/anupam/.emacs" nil t)  ; Reading at buffer position 905
  load-with-code-conversion("/home/anupam/.emacs" "/home/anupam/.emacs" t t)
  load("~/.emacs" t t)
  #[0 "\205\262�    \306=\203�\307\310Q\202;�   \311=\204�\307\312Q\202;�\313\307\314\315#\203*�\316\202;�\313\307\314\317#\203:�\320\nB\321\202;�\316\322\323\322\211#\210\322=\203a�\324\325\326\307\327Q!\"\323\322\211#\210\322=\203`�\210\203\243�\330!\331\232\203\243�\332!\211\333P\334!\203}�\211\202\210�\334!\203\207�\202\210�\314\262\203\241�\335\"\203\237�\336\337#\210\340\341!\210\266\f?\205\260�\314\323\342\322\211#)\262\207" [init-file-user system-type delayed-warnings-list user-init-file inhibit-default-init inhibit-startup-screen ms-dos "~" "/_emacs" windows-nt "/.emacs" directory-files nil "^\\.emacs\\(\\.elc?\\)?$" "~/.emacs" "^_emacs\\(\\.elc?\\)?$" (initialization "`_emacs' init file is deprecated, please use `.emacs'") "~/_emacs" t load expand-file-name "init" file-name-as-directory "/.emacs.d" file-name-extension "elc" file-name-sans-extension ".el" file-exists-p file-newer-than-file-p message "Warning: %s is newer than %s" sit-for 1 "default"] 7 "\n\n(fn)"]()
  command-line()
  normal-top-level()

Eu sou novo no emacs, alguém pode me dizer como posso resolver isso?

Lázaro
fonte

Respostas:

41

Eu encontrei isso no outro dia. Eu acho que foi causado por um arquivo inválido. A correção imediata é excluir <user-emacs-directory>/elpa/archives/melpa/archive-contents; será reconstruído no próximo package-initialize. Infelizmente, o package.el não é muito robusto para esse tipo de falha.

shosti
fonte
você está certo, funcionou para mim cerca de 12 horas, e de repente esse problema surgiu do nada .. além de muitos pacotes mencionados na série de tutoriais não estarem no padrão elpa.gnu.org ..
lazarus
não existe outra alternativa para resolver esse problema?
Lazarus
Acho que é provavelmente um bug no MELPA (combinado com a falta de resiliência no package.el), talvez você queira registrar um problema lá.
Shosti
Não tenho certeza se é relevante, mas o endereço do repositório foi alterado: agora ele recomenda:(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
rvf0068 11/11
Corri no mesmo problema após uma atualização do pacote. A correção funcionou como um encanto. Obrigado.
Rkachach
3

Eu tive o mesmo problema e apliquei a seguinte correção. Isso funcionou para mim:

  • Altere o endereço do arquivo melpa para: " http://melpa.org/packages "
  • Exclua o arquivo ~ / .emacs.d / elpa / archives / melpa / archive-contents
  • Execute package-initialize e package-refresh-contents.

Eu tenho um comando package-refresh-contents no meu arquivo .emacs. Isso garante que os pacotes estejam sempre atualizados, mas adiciona cerca de dois segundos ao tempo de inicialização do emacs.

Meus comandos relacionados ao pacote no .emacs são assim:

;; Package system
(require 'package)
(setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/")
                         ("marmalade" . "https://marmalade-repo.org/packages/")
                         ("melpa" . "http://melpa.org/packages/")
                         ("user42" . "http://download.tuxfamily.org/user42/elpa/packages/")))
(package-initialize)

(package-refresh-contents)
(setq auto-install-packages
      '(color-theme bar-cursor htmlize flycheck flycheck-haskell
                    haskell-mode sml-mode rust-mode fsharp-mode nasm-mode go-mode
                    perl-mode web-mode )) ;;ffap-perl-module markdown-mode))
(dolist (pkg auto-install-packages)
  (unless (package-installed-p pkg)
    (package-install pkg)))
Thorkil Værge
fonte
Estou enfrentando esse problema com bastante frequência. Gostaria de saber se existe uma maneira de automatizar a exclusão do arquivo ~ / .emacs.d / elpa / archives / melpa / archive-contents sempre que esse problema ocorrer.
Thorkil Værge 12/04
1
Você quer dizer alias rm_archive='rm -r <user-emacs-directory>/elpa/archives/melpa/archive-contents'no seu ~/.bashrcarquivo?
snd