2012-09-19 77 views
1

這樣做的動機如下: 我有各種文件綁定到寄存器。這允許我通過運行C-x r j H或使用C-x r j E運行我的.emacs文件來跳到諸如我的 xmonad config之類的東西。如何評估存儲在emacs寄存器中的elisp?

我希望能夠跳到我的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。

+2

我認爲如果它不涉及「跳轉到註冊表」的右臂,直到它不再跳轉到註冊表,那麼這個任務會更容易。你能否考慮接受一個不同的擊鍵?否則,你可以將'C-x r j'綁定到一個包裝器,該包裝器爲除一個後綴以外的所有後綴調用'jump-to-register',但這會變得非常黑客... – tripleee

+0

這就是我所想的。事情是,跳轉到註冊表似乎根據註冊表中的內容做了不同的事情。文件名=>打開文件;窗口配置=>加載窗口配置; frame config => load frame config,所以我希望爲緩衝區名稱添加一些調度 – Squidly

+0

看了一下register.el,似乎它只是對寄存器內容做了一個大案例說明,戳了一下寄存器內容看到它的類型。我可以在運行時擴展此案例聲明嗎? – Squidly

回答

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,修改應該是微不足道的。我不清楚如何爲了不執行任何隨機的文本而採取合理的保護措施,但是如果你自己承認交互式命令,它甚至不應該太不安全。

+0

我對於評估寄存器並不是很感興趣。畢竟,這就是變量/函數的用途。 – Squidly

+0

然後呢? (函數r)(函數調用)ad(函數調用)(函數調用)(函數調用)(函數調用) do-it)))' – tripleee

相關問題