我正在使用类似于这个最小示例的习语和宏来编写我自己的 Emacs 次要模式:
(define-minor-mode foo-mode
"Toggle Foo mode."
:init-value nil
:lighter " Foo"
:group 'foo
(if foo-mode
(do-enable-foo)
(do-disable-foo))
)
(defun do-enable-foo ()
"Enable foo minor mode"
(message "Enabling foo...")
(if test-something
(message "Foo enabled after disabling was canceled!")
(message "Foo enabled from scratch"))
)
(defun do-disable-foo ()
"Disable foo minor mode"
(message "Disabling foo...")
(if (not certain-situation)
(message "... done.") ; finish disabling foo
;; else forms:
(message "Need to cancel disabling foo!")
(foo-mode 1)) ; turning foo mode on again
)
在切换次要模式期间,'certain-situation
当我必须取消切换时可能会出现a。目前,我在想,因为我正在使用define-minor-mode
宏,所以我无法退出,而只需要以编程方式再次使用(foo-mode 1)
代码中所示的方式打开模式。
如果我走这条路,我将不得不在启用功能中以不同的方式处理这个do-enable-foo
问题——所以我的第一个问题是如何使用上面代码中的占位符来检测这种情况'test-something
?
或者,是否有更简洁的方法来实现取消,例如,通过发出错误信号而不是(foo-mode 1)
阻止模式切换通过?