首页 文章

在自定义REPL中使用Slime autodoc

提问于
浏览
0

我正在使用SLIME和EMACS用于Common LISP,使用SBCL编译器 . SLIME的autodoc功能,其中函数参数显示在迷你缓冲区中,工作正常 .

但是当我执行如下的自定义REPL时:

(defun game-repl ()
  (let ((cmd (game-read)))
    (unless (eq (car cmd) 'quit)
      (game-print (game-eval cmd))
      (game-repl))))

autodoc功能不再起作用 . 不在LISP缓冲区中,而不在我的自定义REPL中 . 可能是因为SBCL进程忙于我的REPL(等待输入)而无法与SLIME通信 .

使用 C-u M-x slime 启动另一个SBCL进程后,autodoc功能再次起作用,但仅在LISP缓冲区中有效 .

So, is there a way to get the SLIME autodoc in my custom REPL?

1 回答

  • 2

    我认为你的结论是swank后端(在你的sbcl进程中)很忙是正确的 . IIRC slime有同步和异步命令,你的 game-repl 将是一个不允许异步文档命令进入后端的同步命令 - 相反,在slime REPL中编写常规命令时,后端是空闲,所以doc查询可以通过 .

    但是请原谅我也想知道你在这个特殊情况下做的是否有意义 - 自定义REPL的目的可能是以下一个或两个:

    • 公开有限或合成的命令集

    • 提供非标准控制/语法结构

    在任何一种情况下,自定义REPL的输入可能与slime可能为您自动doc的常规代码不同 .

    可能一个选项是提供一个有限的"game"命名空间,你可以在常规slime REPL中使用它,然后还提供一个单独的面向 生产环境 的REPL与一个只允许访问该命名空间中的符号的阅读器? (有关common-lisp沙盒的讨论here . )

相关问题