我想做一个击键,说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