CLISP 尝试在 Windows 10 上加载 SLIME 中的奇怪目录
CLISP tries to load weird directory in SLIME on Windows 10
我之前已经在这台机器上成功安装了 Emacs + SLIME + SBCL。
我正在尝试安装 CLISP 以完成一些特定于 CLISP 的 "Land of Lisp" 示例。
当我使用 CLISP 启动 SLIME 时,它在尝试加载一些 SLIME 文件时中断:
*** - OPEN: Directory #P"C:\Users\GUSTAV~1.BER\AppData\Local\Temp\" does not exist
我已经在 .clisprc.lisp
中明确地将 temporary-file-directory
设置为一个完全展开的目录 ("C:\Users\Gustav.Bertram\AppData\Local\Temp\"
),并且我确保该变量在中断发生时可用.
错误后的回溯显示:
<1/164> #<SYSTEM-FUNCTION SHOW-STACK> 3
<2/157> #<COMPILED-FUNCTION SYSTEM::PRINT-BACKTRACE>
<3/151> #<COMPILED-FUNCTION SYSTEM::DEBUG-BACKTRACE>
<4/142> #<SYSTEM-FUNCTION SYSTEM::READ-EVAL-PRINT> 2
<5/139> #<COMPILED-FUNCTION SYSTEM::BREAK-LOOP-2-3>
<6/135> #<SYSTEM-FUNCTION SYSTEM::SAME-ENV-AS> 2
<7/121> #<COMPILED-FUNCTION SYSTEM::BREAK-LOOP-2>
<8/119> #<SYSTEM-FUNCTION SYSTEM::DRIVER>
<9/79> #<COMPILED-FUNCTION SYSTEM::BREAK-LOOP>
<10/76> #<SYSTEM-FUNCTION INVOKE-DEBUGGER> 1
<11/65> #<SYSTEM-FUNCTION OPEN>
<12/57> #<COMPILED-FUNCTION SWANK::ANNOUNCE-SERVER-PORT>
<13/54> #<COMPILED-FUNCTION SWANK::START-SERVER-1>
<14/49> #<COMPILED-FUNCTION SWANK::SETUP-SERVER>
<15/42> #<COMPILED-FUNCTION SWANK:START-SERVER>
<16/40> #<SYSTEM-FUNCTION FUNCALL> 2
[38] EVAL frame for form (FUNCALL (READ-FROM-STRING "swank:start-server") "c:\Users\GUSTAV~1.BER\AppData\Local\Temp\slime.34812")
<17/35> #<SPECIAL-OPERATOR PROGN>
[34] EVAL frame for form
(PROGN
(LOAD "c:\Users\Gustav.Bertram\AppData\Roaming\.emacs.d\elpa\slime-20170921.1000\swank-loader.lisp" :VERBOSE T)
(FUNCALL (READ-FROM-STRING "swank-loader:init"))
(FUNCALL (READ-FROM-STRING "swank:start-server") "c:\Users\GUSTAV~1.BER\AppData\Local\Temp\slime.34812"))
Printed 17 frames
如何找出函数调用的来源?
在堆栈跟踪中,您可以看到 CLISP 正在评估以下内容:
(PROGN
(LOAD "c:\Users\Gustav.Bertram\AppData\Roaming\.emacs.d\elpa\slime-20170921.1000\swank-loader.lisp" :VERBOSE T)
(FUNCALL (READ-FROM-STRING "swank-loader:init"))
(FUNCALL (READ-FROM-STRING "swank:start-server") "c:\Users\GUSTAV~1.BER\AppData\Local\Temp\slime.34812"))
这是 Slime 在启动后传递给 Common Lisp 的内容,以加载 Swank 并启动服务器进行通信。可以看到这里以字符串的形式传递了错误的临时文件目录路径,这意味着该目录必须在 Emacs 端进行解析。 Emacs 为此有一个变量 temporary-file-directory
,可以在您的初始化文件中设置,或者通过 customize
.
我之前已经在这台机器上成功安装了 Emacs + SLIME + SBCL。
我正在尝试安装 CLISP 以完成一些特定于 CLISP 的 "Land of Lisp" 示例。
当我使用 CLISP 启动 SLIME 时,它在尝试加载一些 SLIME 文件时中断:
*** - OPEN: Directory #P"C:\Users\GUSTAV~1.BER\AppData\Local\Temp\" does not exist
我已经在 .clisprc.lisp
中明确地将 temporary-file-directory
设置为一个完全展开的目录 ("C:\Users\Gustav.Bertram\AppData\Local\Temp\"
),并且我确保该变量在中断发生时可用.
错误后的回溯显示:
<1/164> #<SYSTEM-FUNCTION SHOW-STACK> 3
<2/157> #<COMPILED-FUNCTION SYSTEM::PRINT-BACKTRACE>
<3/151> #<COMPILED-FUNCTION SYSTEM::DEBUG-BACKTRACE>
<4/142> #<SYSTEM-FUNCTION SYSTEM::READ-EVAL-PRINT> 2
<5/139> #<COMPILED-FUNCTION SYSTEM::BREAK-LOOP-2-3>
<6/135> #<SYSTEM-FUNCTION SYSTEM::SAME-ENV-AS> 2
<7/121> #<COMPILED-FUNCTION SYSTEM::BREAK-LOOP-2>
<8/119> #<SYSTEM-FUNCTION SYSTEM::DRIVER>
<9/79> #<COMPILED-FUNCTION SYSTEM::BREAK-LOOP>
<10/76> #<SYSTEM-FUNCTION INVOKE-DEBUGGER> 1
<11/65> #<SYSTEM-FUNCTION OPEN>
<12/57> #<COMPILED-FUNCTION SWANK::ANNOUNCE-SERVER-PORT>
<13/54> #<COMPILED-FUNCTION SWANK::START-SERVER-1>
<14/49> #<COMPILED-FUNCTION SWANK::SETUP-SERVER>
<15/42> #<COMPILED-FUNCTION SWANK:START-SERVER>
<16/40> #<SYSTEM-FUNCTION FUNCALL> 2
[38] EVAL frame for form (FUNCALL (READ-FROM-STRING "swank:start-server") "c:\Users\GUSTAV~1.BER\AppData\Local\Temp\slime.34812")
<17/35> #<SPECIAL-OPERATOR PROGN>
[34] EVAL frame for form
(PROGN
(LOAD "c:\Users\Gustav.Bertram\AppData\Roaming\.emacs.d\elpa\slime-20170921.1000\swank-loader.lisp" :VERBOSE T)
(FUNCALL (READ-FROM-STRING "swank-loader:init"))
(FUNCALL (READ-FROM-STRING "swank:start-server") "c:\Users\GUSTAV~1.BER\AppData\Local\Temp\slime.34812"))
Printed 17 frames
如何找出函数调用的来源?
在堆栈跟踪中,您可以看到 CLISP 正在评估以下内容:
(PROGN
(LOAD "c:\Users\Gustav.Bertram\AppData\Roaming\.emacs.d\elpa\slime-20170921.1000\swank-loader.lisp" :VERBOSE T)
(FUNCALL (READ-FROM-STRING "swank-loader:init"))
(FUNCALL (READ-FROM-STRING "swank:start-server") "c:\Users\GUSTAV~1.BER\AppData\Local\Temp\slime.34812"))
这是 Slime 在启动后传递给 Common Lisp 的内容,以加载 Swank 并启动服务器进行通信。可以看到这里以字符串的形式传递了错误的临时文件目录路径,这意味着该目录必须在 Emacs 端进行解析。 Emacs 为此有一个变量 temporary-file-directory
,可以在您的初始化文件中设置,或者通过 customize
.