Emacs / Slime Key绑定/发送命令到Swank Server

时间:2012-04-20 08:20:26

标签: emacs slime

我熟悉方案,但对emacs(从VIM切换)和elisp很新。

我知道如何执行以下操作:

  • 制作一个简单的键绑定
    • C-c iwb =缩进整个缓冲区
    • F2 =打开/关闭折叠
  • 使用来自emacs的slime
  • 一些基本键,如C-x 2,paredit键,一些基本的移动键

我需要帮助做一些更先进的事情:

我希望F3等于:

  • 将emacs置于C-x 2模式
  • 在底部窗口中,切换到“slime-repl”缓冲区
  • 在“slime-repl”缓冲区中,发送命令“(test / run)”< - 注意,这意味着要发送到swank服务器,而不是发送给elisp

我意识到要求别人为我写剧本是一种糟糕的形式;但是,如果有人能做到这一点,我会很快从中学到东西。 [并且它允许我通过研究你的例子来做更复杂的脚本编写。]

谢谢!

2 个答案:

答案 0 :(得分:2)

这不是你想要的,但应该是进一步调整的良好起点:

(defun slime-run-test ()
  (interactive)
  (slime-interactive-eval "(test/run)")
  (slime-pop-to-buffer (slime-output-buffer) t))

(global-set-key (kbd "<f3>") 'slime-run-test)

答案 1 :(得分:1)

我不使用粘液,但假设它使用了comint-mode,那么我认为以下可能会有效:

(defun my-slime-test-run ()
  (interactive)
  (delete-other-windows)
  (split-window-below)
  (with-selected-window (next-window)
    (switch-to-buffer "slime-repl")
    (goto-char (point-max))
    (insert "(test-run)")
    (comint-send-input)))

(global-set-key (kbd "<f3>") 'my-slime-test-run)

可能有一种更好的方法可以做到这一点,但希望这能让您对如何编写elisp函数以在编辑器中执行任务有所了解(并注意函数如何读取非常类似于一组编辑器指令) - 只需将您使用的按键转换为等效代码,甚至根本不编写代码,只需记录和保存键盘宏,就可以做很多事情。

使用 Ch f name-of-the-function RET 获取该函数中任何函数/宏调用的文档。

对于键绑定,我使用 Ch k F3 来检查Emacs如何引用该键,然后将该字符串用作参数到kbd(并注意如何使用该序列来查找绑定到任何给定键序列的函数的名称,如果需要,可以在代码中使用该函数的名称。)

如果您还不了解它们,很多事情就不那么明显了,但只有这样的代码库才会出现这种情况(并且可以追溯到这一点)。

最棒的是,如果你不知道你在寻找什么,你总是可以搜索匹配模式的函数名称 Cu Ch a (类似于变量,值,库和文档;有关此工具的更多信息,请参阅 M - : (info "(emacs) Apropos") RET 。加上信息手册(包含索引 - 在任何特定手册中按Ii,或使用info-apropos命令一次搜索所有信息手册)。

你可以做的最好的事情之一就是学习如何使用Emacs的自我记录性质来找到你还不知道的事情的答案。