这样做的动机如下:
我有各种文件绑定到寄存器。这让我可以跳到像我这样的东西
通过运行C-x r j H
或我的.emacs文件C-x r j E
来运行xmonad配置。
我希望能够使用run-haskell
跳转到C-x r j H
缓冲区。但是,运行C-x r j
会运行jump-to-register
函数,所以我不能只绑定C-x r j H
,afaik。
对我来说最简单的解决方法是评估存储在寄存器中的elisp,从而将(run-haskell)
存储在寄存器H
中。
但似乎没有内置任何内容来评估寄存器中的elisp,这使我无法正确处理问题。
我该如何解决这个问题?我知道这可能属于超级用户风格问题的范围,但我在这里发布是因为我认为解决方案在于编写elisp。
答案 0 :(得分: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
,那么修改应该是微不足道的。我不清楚为了不执行任何随机文本而如何准确地设置合理的保护措施,但如果你将自己描述为交互式命令,它甚至不应该太不安全。