我想做一個擊鍵,說C-F12
,做delete-other-windows
或winner-undo
。如果我已經學習了Emacs Lisp編程,並且設置了一個布爾標誌,我認爲這很容易。也就是說,如果之前運行的是delete-other-window
,現在它將運行winner-undo
。在Emacs中,我們可以做一個按鍵來做不同的命令嗎?
你如何在Emacs Lisp中做到這一點?
感謝
我想做一個擊鍵,說C-F12
,做delete-other-windows
或winner-undo
。如果我已經學習了Emacs Lisp編程,並且設置了一個布爾標誌,我認爲這很容易。也就是說,如果之前運行的是delete-other-window
,現在它將運行winner-undo
。在Emacs中,我們可以做一個按鍵來做不同的命令嗎?
你如何在Emacs Lisp中做到這一點?
感謝
嘗試這樣的事情
(setq c-f12-winner-undo t)
(define-key (current-global-map) [C-f12]
(lambda()
(interactive)
(if c-f12-winner-undo
(winner-undo)
(delete-other-windows))
(setq c-f12-winner-undo (not c-f12-winner-undo))))
(defun swdev-toggle-sole-window()
(interactive)
(if (cdr (window-list))
(delete-other-windows)
(winner-undo)))
(global-set-key (kbd "<C-f12>") 'swdev-toggle-sole-window)
swdev-toggle-sole-window
函數的聲明,不採取任何說法。M-x
或通過鍵綁定來調用。C-f12
。下面是使用Emacs的recenter頂底功能採取的方法解決:
(defun delete-other-window-or-winner-undo()
"call delete-other-window on first invocation and winner-undo on subsequent invocations"
(interactive)
(if (eq this-command last-command)
(winner-undo)
(delete-other-windows)))
(global-set-key (kbd "<C-f12>") 'delete-other-window-or-winner-undo)
真棒!那麼,我試着去了解那些代碼。嗯,..和其他編程語言一樣。我猜第一個代碼是準備布爾標誌。 (我不知道什麼是lambda()),交互式。在那裏你有`如果c-f12-winner-undo` ..和其餘的^ _^ 謝謝@oleg! – swdev 2011-02-18 10:13:12
順便說一句,這感覺很奇怪,當一個文本編輯器可以編程,而不僅僅是定製文件。 .. :) – swdev 2011-02-18 10:14:39
lambda是一個匿名函數。就在這種情況下,你不想給所有在本地使用的小函數提供名字。互動是必要的,以便能夠交互調用此功能(通過C-f12)。其他一切都很簡單。是的,我喜歡Emacs,因爲我可以編程它,因爲我想 – 2011-02-18 10:35:27