2014-10-10 31 views
0

运行的Emacs ensime时,我打Mx和写“ensime”我得到一个错误不能在Windows

`flet' is an obsolete macro (as of 24.3); use either `cl-flet' or `cl-letf'. 
    'let: Wrong type argument: arrayp, nil' 

当我在_emacs“需要ensime”,它告诉我更多的东西:

Debugger entered--Lisp error: (wrong-type-argument arrayp nil) 
file-truename(nil) 
(let ((java (file-truename (executable-find "javac")))) (warn "JDK_HOME and JAVA_HOME are not  set, inferring from %s" java) (ensime--parent-dir (ensime--parent-dir java))) 
(cond ((getenv "JDK_HOME")) ((getenv "JAVA_HOME")) ((file-exists-p "/usr/libexec/java_home") (s-chomp (shell-command-to-string "/usr/libexec/java_home"))) ((quote t) (let ((java (file-truename  (executable-find "javac")))) (warn "JDK_HOME and JAVA_HOME are not set, inferring from %s" java)  (ensime--parent-dir (ensime--parent-dir java))))) 
    eval((cond ((getenv "JDK_HOME")) ((getenv "JAVA_HOME")) ((file-exists-p "/usr/libexec/java_home") (s-chomp (shell-command-to-string "/usr/libexec/java_home"))) ((quote t) (let ((java (file-truename (executable-find "javac")))) (warn "JDK_HOME and JAVA_HOME are not set, inferring from %s" java) (ensime--parent-dir (ensime--parent-dir java)))))) 
custom-initialize-reset(ensime-default-java-home (cond ((getenv "JDK_HOME")) ((getenv "JAVA_HOME")) ((file-exists-p "/usr/libexec/java_home") (s-chomp (shell-command-to-string "/usr/libexec/java_home"))) ((quote t) (let ((java (file-truename (executable-find "javac")))) (warn "JDK_HOME and JAVA_HOME are not set, inferring from %s" java) (ensime--parent-dir (ensime--parent-dir java)))))) 
    custom-declare-variable(ensime-default-java-home (cond ((getenv "JDK_HOME")) ((getenv "JAVA_HOME")) ((file-exists-p "/usr/libexec/java_home") (s-chomp (shell-command-to-string "/usr/libexec/java_home"))) ((quote t) (let ((java (file-truename (executable-find "javac")))) (warn "JDK_HOME and JAVA_HOME are not set, inferring from %s" java) (ensime--parent-dir (ensime--parent-dir java))))) "Location of the JDK's base directory" :type string :group ensime-server) 
    eval-buffer(#<buffer *load*-216581> nil "c:/Users/leokr_000/AppData/Roaming/.emacs.d/elpa/ensime-20141007.246/ensime-vars.el" nil t) ; Reading at buffer position 2344 
    load-with-code-conversion("c:/Users/leokr_000/AppData/Roaming/.emacs.d/elpa/ensime-20141007.246/ensime-vars.el" "c:/Users/leokr_000/AppData/Roaming/.emacs.d/elpa/ensime-20141007.246/ensime-vars.el" nil t) 
require(ensime-vars) 
    eval-buffer(#<buffer *load*-524611> nil "c:/Users/leokr_000/AppData/Roaming/.emacs.d/elpa/ensime-20141007.246/ensime.el" nil t) ; Reading at buffer position 1766 
    load-with-code-conversion("c:/Users/leokr_000/AppData/Roaming/.emacs.d/elpa/ensime-20141007.246/ensime.el" "c:/Users/leokr_000/AppData/Roaming/.emacs.d/elpa/ensime-20141007.246/ensime.el" nil t) 
    require(ensime) 
    eval-buffer(#<buffer *load*> nil "c:/Users/leokr_000/AppData/Roaming/_emacs" nil t) ; Reading at buffer position 220 
    load-with-code-conversion("c:/Users/leokr_000/AppData/Roaming/_emacs"    "c:/Users/leokr_000/AppData/Roaming/_emacs" t t) 
    load("~/_emacs" t t) 
    #[0 "\205\262 

这个“_emacs”文件实际上是从这里复制的https://github.com/ensime/ensime-server/wiki/Quick-Start-Guide 我正在运行Windows 8和emacs 24.3。

回答

0

显然,Emas找不到您的javac可执行文件。确保你有javac(或javac.exe也许适合你的平台)某处,而这个某处列在exec-path。详细解释:

Debugger entered--Lisp error: (wrong-type-argument arrayp nil) 

这就是说,代码试图把nil看作是一个数组(字符串也是数组)。

file-truename(nil) 

这是说,它发生在与参数nil调用file-truename,而事实上,file-truename的一个文件名(字符串)作为参数,所以nil不是一个有效的论据。

(let ((java (file-truename (executable-find "javac")))) 

这是说,它发生在评价这段代码中,我们看到的是,对Arg的file-truename实际上是(executable-find "javac")返回的值,这个表达式返回值应该是的javac绝对文件名(如exec-path找到)如果找不到它,则为零。