【问题标题】:Trying to get package.el to work on Mac OS X试图让 package.el 在 Mac OS X 上工作
【发布时间】:2011-11-21 22:10:44
【问题描述】:

我的最终目标是让 Clojure/Swank/Slime 在 Mac OS X 上通过 Emacs 运行。为了实现这一目标,我将各种模式安装到 Emacs 中(我正在尝试 Aquamacs 和 EMacsforMacOsx)。我查看了这里和网络上其他地方的一些帖子,目前的建议似乎是使用 ELPA。

我从here 获取了我认为是最新的 package.el(用于 Emacs 23.x),我可以使用它来安装 clojure-mode。正如我想知道一切正常,我还尝试删除已安装的软件包。当我这样做时(我使用 package-list-packages,D 删除,X 执行)我收到以下错误:

condition-case: Wrong type argument: stringp, #[(directory &optional recursive) ... ... [directory handler recursive delete-by-moving-to-trash directory-files-no-dot-files-regexp directory-file-name expand-file-name find-file-name-handler delete-directory directory-files ...] 7 1863281 (let ((dir (expand-file-name (read-file-name "Delete directory: " default- directory default-directory nil nil)))) (list dir (if (directory-files dir nil directory-files-no-dot-files-regexp) (y-or-n-p (format "Directory `%s' is not empty, really delete? " dir)) nil)))]

...s 是一堆十六进制字符

这发生在我尝试过的两个 Emacs 版本上。

我使用的是正确版本的 package.el。

如果是这样,我该怎么做才能解决这个问题?

谢谢

【问题讨论】:

  • 看起来您使用的 package.el 与周围的 Emacs 不兼容。 Aquamacs 与package.el 捆绑在一起,因此您可能不应该使用您自己的版本。我使用来自 EmacsForMacOSX 的夜间构建,它也有一个内置的 package.el。您似乎已经获取了合理版本的软件包,但您需要提供更多信息来帮助诊断问题所在。例如您使用的是哪个 Emacs 版本。
  • 感谢您的评论。在我的 .emacs 文件中,如果我没有在加载路径中包含我的 package.el (需要'package),那么我会得到“文件错误:无法打开加载文件,包”我已经查看了 Emacs.app 和 Aquamacs.app并且看不到 package.el,它们会位于哪里?至于版本,我使用的是 23.3 (9.0) 的 EmacsForMac 和 2.4 的 Aquamacs
  • package.el 仅包含在 Emacs 24 中(意思是夜间构建,而不是 23.x 系列)。我仔细检查了 Aquamacs 的情况,结果我弄错了; package.el 没有与它捆绑在一起。现在回想起来,我想我可能在 Emacs 24 升级过时的包时看到了类似的错误,在此期间 package.el 提示删除过时的版本。我会留意它是否再次发生,但与此同时,您可以手动或从 dired 删除有问题的包目录。
  • 对于任何剩余的 emacs-23 用户:与 emacs-23 兼容的最新版本 package.el 的新 URL 是:git.savannah.gnu.org/gitweb/…>

标签: macos emacs package


【解决方案1】:

假设您拥有正确的package.el(但请参阅 sanityinc 的评论),请显式加载该源文件 (load-file "..../package.el"),然后执行 M-x debug-on-entry package-delete。当您调用该函数时,这将使您进入调试器(这似乎是引发错误的地方)。使用d' to step orc' 在调试器中继续进行评估。将源代码保存在单独的缓冲区中,以便您更轻松地跟踪。

似乎正在发生的事情是在调用(delete-directory dir t t)DIR arg 不是字符串,这意味着package--dir 没有返回目录(字符串)。

此外,您的 delete-directory 版本的参数似乎是 (directory &optional recursive)。至少在 Emacs 24 的package.el 版本中,`delete-directory 在这里实际上是用 3 个 args 调用的。但是您没有收到错误数量的参数错误,因此您的版本可能不同。

无论如何,使用调试器尝试找出问题所在。正如 sanityinc 建议的那样,您的代码版本似乎不匹配。

【讨论】:

  • 只是为了尝试一下,我正在尝试删除版本为 0.1.0 的 color-them 包(color-theme-actress)。如果我在 package-delete 中断,我看到的调用看起来像:package-delete("color-theme-actress" #("0.1.0" 0 5 (font-lock-face font-lock-comment-face)) ) 我猜是错误的。我认为字体锁定的东西不应该在那里
  • 不,这并不表示有问题。语法#("...") 表示应用了 Emacs 文本属性的 Lisp 字符串(在本例中为字符串“0.1.0”)(在本例中,文本属性 font-lock-face 具有值 font-lock-comment-face)。
【解决方案2】:

感谢您的意见。我没有在这上面浪费更多时间,而是转向了 Emacs 24,它提供了我需要的东西。再次感谢,

凯文

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    相关资源
    最近更新 更多