使用 emacs-live 加载 emacs 时出错

Error when loading emacs with emacs-live

当我启动 emacs 时出现错误

Debugger entered--Lisp error: (wrong-type-argument stringp nil)
  string-match("cmd\.exe" nil)
  (if (string-match "cmd\.exe" tramp-encoding-shell) "/c" "-c")
  eval((if (string-match "cmd\.exe" tramp-encoding-shell) "/c" "-c"))

加载 magit 包时似乎会发生这种情况

  eval-buffer(#<buffer  *load*-330059> nil "c:/cygwin64/home/johnstonk/.emacs.d/emacs-live/packs/stable/git-pack/lib/magit/magit.el" nil t)  ; Reading at buffer position 3100

我确认这发生在 emacs-live 的新 git 克隆上。 我尝试从加载实时初始化文件中删除 magit 包,但是当它加载 clojure 包时我又遇到了同样的错误。看起来像 tramp 中的 nil 字符串错误。

有人知道为什么吗?

浏览并加载 tramp-sh.el 的源代码,我在第一行得到了相同的 (wrong-type-argument stringp nil) (require 'tramp)

所以我加载了 tramp.el(版本 22.1)并进入了

部分
(defcustom tramp-encoding-shell
  (if (memq system-type '(windows-nt))
      (getenv "COMSPEC")...

我注意到此系统类型正在设置为 windows-nt(我应该在 windows7 上)但是 (getenv "COMSPEC") 返回 nil。根据我在别处搜索到的内容,这个 COMSPEC 环境变量预计存在于 windows 机器上并指向 shell。 TRAMP 使用 tramp-encoding-shell var 在本地机器上编码和解码命令,例如“~”——至少根据 tramps 评论。

COMSPEC 不作为我的系统环境变量存在,所以我创建了它并将其指向 cmd.exe C:\Windows\System32\cmd.exe 这为我修复了它。

注意 不要将 COMSPEC 设置为 powershell,我先试过了,但是当我尝试使用 lein 时出现了严重的内存泄漏(一直试图创建服务器失败,然后重试但不清理以前的线程)。