ObjectMappeObjectMappe08-14 09:48

Clozure CL (user-homedir-pathname)问题总结

自己的emacs配置在windows下使用已经很好了,也总结了很多脚本,最近在运行lisp时出现问题,我用的是sbcl和Clozure CL.这两个都是最优秀的开源lisp实现之一.我的配置文件都在我的git仓库目录,这样方便和其他机器上的同步,同样也把quicklisp安装到git仓库,这样不用在其他电脑用时需求下载相应 的库.我的配置文件在http://git.oschina.net/wuhen/emacs-config.

测试LISP步骤:

    一,SBCL:
    1),打开emacs-client.bat,按CTRL+-,Alt+X,输入slime<ret>sbcl
    2),在repl中输入(load "~/quicklisp.lisp")  
                         (quicklisp-quickstart :install) ;;默认安装到HOME变量指向的位置
                        (ql:add-to-init-file)  ;;在HOME目录中添加.sbclrc文件
    3),当再次启动sbcl时一切都正常,ql库已经自动加载了.

   二,Clozure CL   
    1),在HOME变量指向的目录中添加.ccl-init.lisp文件,并加入


;;; The following lines added by ql:add-to-init-file:
#-quicklisp
(let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp" (user-homedir-pathname))))  
  (when (probe-file quicklisp-init)
    (load quicklisp-init)))


    2),在emacs中按CTRL+-,Alt+X,输入slime<ret>ccl
    3),一切正常,ql库自动加载

emacs启动文件如下:

@echo off
set EMACS_HOME=c:/common-tools/emacs-23.4
rem set HOME=c:/common-tools/emacs-23.4
set HOME=D:/GitRepository/emacs-config-git
set SBCL_HOME=c:/common-tools/lisp/sbcl
set CCL_DEFAULT_DIRECTORY=c:/common-tools/lisp/ccl
rem ccl默认采用USERPROFILE做为用户HOME目录,在此设置环境变量改变CCL的HOME目录,以便和sbcl一起使用quicklisp.
set USERPROFILE=%HOME%
set EMACS_SERVER_FILE=%HOME%/.emacs.d/server/server
set PATH=%PATH%;%EMACS_HOME%/bin;%SBCL_HOME%;%CCL_DEFAULT_DIRECTORY%;%HOME%

rem runemacs --debug-init
RunHiddenConsole.exe "c:/common-tools/emacs-23.4/bin/emacsclientw.exe" --alternate-editor="c:/common-tools/emacs-23.4/bin/runemacs.exe" "%1"

如果想从右键菜单打开则执行emacs.reg即可.

总结说明:
    1,sbcl和ccl在windows中默认的用户目录是根据环境变量HOME和USERPROFILE来确定的,sbcl是HOME变量,CCL是USERPROFILE变量,如果不指定则默认为C:\Documents and Settings\XXX(windows XP).
    2,SBCL和CCL的主目录由环境变量SBCL_HOME和CCL_DEFAULT_DIRECTORY指定.
    3,使用方法:直接将git clone到本地,修改bat和reg文件对应的路径即可.

在此要非常感谢@FreeBlues不厌其烦的回答我的问题http://www.oschina.net/question/251613_119214.经测试是因为我手动创建.ccl-init.lisp时在初始化文件第一行加入了(format t (user-homedir-pathname))导致,改为(princ "Clozure CL init file dir is ")
(prin1 (user-homedir-pathname))即可 (卧操,这么低级的错误)


程序之家二维码

小额赞赏

000
评论