如何在Common Lisp中实现SLIME-REPL清屏效果及环境交互?
实现SLIME REPL清屏函数的方案
理想方案:直接调用Emacs原生清屏命令
SLIME自带的slime-eval-in-emacs函数可以在Common Lisp代码里临时执行Emacs的Elisp代码,完全不需要设置全局变量,不会带来未知副作用。直接调用slime-clear-repl-buffer(就是快捷键C-c M-o对应的命令),就能实现和快捷键一模一样的清屏效果:
(defun slime-clear-screen () (slime-eval-in-emacs '(slime-clear-repl-buffer)))
退而求其次:按窗口行数输出换行
如果不想直接调用Emacs命令,可以通过slime-eval-in-emacs获取当前REPL窗口的高度,然后输出对应行数的换行,把原有内容顶出可视区域:
(defun slime-clear-screen-fallback () (let ((window-height (slime-eval-in-emacs '(window-height (get-buffer-window (slime-repl-buffer)))))) (dotimes (i window-height) (format t "~%"))))
说明
这两个方案都不需要额外安装开源库,SLIME本身就提供slime-eval-in-emacs函数,它的作用是在Lisp环境中临时请求Emacs执行指定的Elisp代码,属于函数范围内的调用,不会影响全局环境。
内容的提问来源于stack exchange,提问作者Demihm Seinname
相关产品推荐
相关产品推荐

