2017-12-27 697 views
1

我有一个.emacs文件,其中我使用package-install在初始化时自动从存储库安装所需的包。到目前为止,我正在使用http://melpa.milkbox.net/packages/存储库,我通过在线教程获取了这个存储库。在某些时候,我试图安装auctex软件包,并收到一条错误消息,告诉我该软件包在该存储库下不可用。我检查,这是真的。我发现了在GNU存储库下的auctexis availablehttp://elpa.gnu.org/packages/在emacs中使用不同的包存储库

我试图做的是:添加第二个包库(GNU ELPA在这种情况下)我.emacs从该文件是否需要安装第一个库(MELPA)下没有可用的软件包package-install可以养活。

我不是专家(事实上,我是一个纯粹的初学者)在Elisp,我浏览了各种线索以找到解决方案。这里是我的实际代码:

(package-initialize) 

(require 'package) 

(add-to-list 'package-archives 
      '(("melpa" . "http://melpa.milkbox.net/packages/") 
       ("gnu" . "http://elpa.gnu.org/packages/")) t) 

(package-refresh-contents) 

(dolist (package '(use-package)) 
    (unless (package-installed-p package) 
      (package-install package))) 

(use-package paredit :ensure t) 

(dolist (package '(auctex   ; <-- Not available under MELPA! 
        auto-complete 
        auto-complete-c-headers 
        magit 
        sr-speedbar 
        yasnippet 
        )) 

    (unless (package-installed-p package) 
    (package-install package)) 
    (require package)) 

有了这个代码在我.emacs文件,当我启动emacs的时候,我的配置被忽略。我收到此错误消息:error: Required feature 'auctex' was not provided

如何修改我的代码以查看来自GNU ELPA的auctex软件包?

为了您的信息,我使用Ubuntu 16.04与GNU Emacs 24.5.1。


编辑:我想补充几句什么斯特凡提出:有几个问题,我的代码,并分裂我的两个add-to-list 'package-archives ...)电话似乎没有,上下班(虽然它是正确的事当然是)。这是由于我的(require package)线路试图做到:(require auctex)在某些时候。看到this post,看看为什么这是一个问题。

我读到(require 'package-name)安装后不需要的事实。 This post解释了原因。删除此行确保auctex正确加载,因为它是自动加载的。

从此,一切正常,没有更多的错误或警告。我然后试图删除我的线:

(add-to-list 'package-archives 
      '("gnu" . "http://elpa.gnu.org/packages/")) 

auctex包仍然正确加载。

+0

你想用这个做什么:'(dolist(package'(use-package))...)'?它遍历列表的唯一元素是符号'use-package' - 仅一次迭代,绑定变量'package'为符号'use-package'。 – Drew

回答

2

(add-to-list 'package-archives 
      '(("melpa" . "http://melpa.milkbox.net/packages/") 
       ("gnu" . "http://elpa.gnu.org/packages/")) t) 

不加2项列表:add-to-list只增加单个元素到列表中。在这种情况下,它将添加不是有效元素的元素(("melpa" . "http://melpa.milkbox.net/packages/") ("gnu" . "http://elpa.gnu.org/packages/"))

你想要

(add-to-list 'package-archives 
      '("melpa" . "http://melpa.milkbox.net/packages/")) 
(add-to-list 'package-archives 
      '("gnu" . "http://elpa.gnu.org/packages/")) 

但需要注意的是,第二add-to-list应该是多余的,因为package-archives默认包含("gnu" . "http://elpa.gnu.org/packages/")了。

一两件事:你不应该需要require这些软件包安装它们(像你做你的代码的最后一行)之后,由于包应该有足够的自动加载做出这样require不必要的(以及有害感觉它会放慢你的启动)。

相关问题