【问题标题】:Emacs and Slime startup scriptEmacs 和 Slime 启动脚本
【发布时间】:2018-05-02 18:35:50
【问题描述】:

每次我开始工作时,我启动 Emacs,M-x cd 到工作目录,M-x slime 启动 Slime,然后在 slime repl 中运行 (ql:quickload 'myproject),(或者,加载系统 myproject)后跟,+p myproject 切换repl中的当前包。 最后,我在 repl 中运行 call a (start-server) 来启动我的 Web 服务器。

我希望这一切都只是一个 Emacs 按键或命令。我不得不问这个很尴尬,因为它都是 lisp,但我无法完全弄清楚 Emacs 和 Slime 之间的相互作用。然而,作为一名程序员,我觉得我应该将所有繁琐的流程自动化——而且我预见到还会增加几个步骤。

我想棘手的部分是发送 slime 命令,然后在发送下一个命令之前等待 quicklisp 完成。

任何指针将不胜感激!

编辑:感谢 Svante 的 C-c ~ 提示,这对我来说是个新闻

【问题讨论】:

  • 我不使用ql:quickload 来加载我的项目,而是使用, open-system(我认为来自slime-asdf)。使用 helm 或类似的 typeahead 对此很有用。然后C-c ~从项目文件缓冲区切换工作目录和包。例如,您也可以将粘液放在 F 键上。我目前决定不为单个项目编写整个序列(我通常在做多个),因为它对我来说已经足够快了。

标签: emacs common-lisp slime


【解决方案1】:

在 Emacs 方面,您可以将键绑定到命令,而不是使用附加参数调用 slime

(defun my-lisp ()
  (interactive)
  (slime (concat "sbcl --load " <path-to-your-lisp-script>)))

在你的 Lisp 脚本中,例如:

(ql:quickload :my-system)
(in-package :my-package)
(start-server)

【讨论】:

  • 这是个好主意,但它并没有像我写的那样对我有用。但是,通过执行 (setq slime-lisp-implementations '((sbcl ("/usr/local/bin/sbcl" "--load" "start.lisp")))) 我能够让它真正考虑--load 参数。现在唯一缺少的部分是让 emacs 在 lisp 完成其脚本 + 加载 swank 后运行一些命令。我确定有什么钩子什么的?
猜你喜欢
  • 2015-08-23
  • 2012-03-17
  • 1970-01-01
  • 2013-06-27
  • 2015-07-02
  • 2011-05-24
  • 2010-09-29
  • 1970-01-01
  • 2012-06-29
相关资源
最近更新 更多