【发布时间】:2013-10-27 04:09:19
【问题描述】:
我在 Ubuntu Raring 上使用 SLIME/SBCL/Emacs 和 Quicklisp。我有下面定义的功能。我想添加到我的 Lisp 库的顶级 .lisp 文件中,即每隔一个依赖的文件,这样我就可以在我用我的库编写的所有函数中使用它,只需将 (update-swank) 添加到函数而不是必须将下面的整个函数添加到使用它的每段代码中。
(defun update-swank ()
"Grabs SWANK connections and tells it to handle requests.
Call this every loop in the main loop of your program"
(continuable
(let ((connection (or swank::*emacs-connection*
(swank::default-connection))))
(when connection
(swank::handle-requests connection t)))))
当我这样做并重新启动 emacs 时,因为我的 .sbclrc 文件中有 asdf:load-op,所以在此过程中加载我的库,我得到一个
READ error during COMPILE-FILE:
;
; Package SWANK does not exist.
在劣质 lisp 中,SLIME 卡住轮询,因为库没有加载,因为在我当前的设置中,SLIME/SBCL 在加载 update-swank 所在的 .lisp 文件时不知道 swank 是什么。我尝试将(in-package :swank) 添加到update-swank 所在的文件中,但得到了
The name "SWANK" does not designate any package.
当我的库在 emacs 启动时加载时,在劣质 lisp 中。
我搜索了 CEPL(我从 https://github.com/cbaggers/cepl/blob/master/cepl-utils.lisp 获得了 update-swank),然后复制了 CEPL 的创建者所做的并将该函数导出到我的 packages.lisp 中。我确保添加了函数,就像他在 cepl-utils 的第 20 行所做的那样 https://github.com/cbaggers/cepl/blob/master/cepl-utils.lisp......I 顺便加载我的库
(asdf:operate 'asdf:load-op :cl-test)
(in-package #:cl-test)
在我的 .sbclrc 文件中,我假设它是在我的 .emacs 文件在 emacs 启动时加载粘液之前加载的(我的 .emacs 文件中有 (slime))...我刚刚测试了删除 adsf:load-op 和in-package 和我的 .sbclrc 并在加载了 slime/swank 之后运行 asdf:load-op 并且我在这里一直在尝试做的事情没有错误......但我希望能够加载我的库在emacs启动时自动加载,我通常这样做的方式是将asdf:load-op添加到我的.sbclrc....如果有人能告诉我在加载swank后在emacs启动时自动加载我的库的另一种方法,那将回答这个?
【问题讨论】:
-
为什么不把它变成一个真正的库,把它放在 Quicklisp 存储其他本地项目的地方呢?你可以在启动 Lisp 后随时
asdf:load-op或ql:quickload。
标签: common-lisp slime swank