1

这样做的动机如下:我有各种文件绑定到寄存器。这允许我通过运行跳转到我的 xmonad 配置C-x r j H或我的 .emacs 文件C-x r j E

我希望能够跳到我的run-haskell缓冲区C-x r j H。但是,运行C-x r j会运行该jump-to-register功能,所以我不能只是 bind C-x r j H,afaik。

对我来说似乎最简单的解决方法是评估存储在寄存器中的 elisp,因此存储(run-haskell)在寄存器中H

但是似乎没有内置用于评估寄存器中的 elisp,这让我觉得我正在错误地解决问题。

我怎么解决这个问题?我知道这可能属于超级用户风格问题的范围,但我在这里发布是因为我认为解决方案在于编写 elisp。

4

1 回答 1

2

jump-to-register不直接支持这个,但你可以很容易地扩展它:

(defadvice jump-to-register (around jump-to-buffer-maybe
                                     (register &optional delete)
                                     activate compile)
  (let ((r (get-register register)))
    (if (bufferp r)
        (switch-to-buffer r)
      ad-do-it) ))

为了使它起作用,您选择的寄存器需要包含一个缓冲区对象。为方便起见,您可能还想定义一个将缓冲区对象放入寄存器的函数:

(defun buffer-to-register (buf reg)
  (interactive "bBuffer: \ncRegister: ")
  (set-register reg (get-buffer buf)) )

如果你真的想eval注册而不是switch-to-buffer,修改应该是微不足道的。我不清楚如何准确地设置合理的保护措施以不执行任何随机文本,但如果你限制自己使用交互式命令,它甚至不应该太不安全。

于 2012-09-19T14:49:41.240 回答