我正在编写自己的Emacs小模式,使用与此最简示例类似的惯用语和宏:
在关闭次要模式时,可能会出现“某种情况”,导致我必须取消切换。目前,我认为由于我正在使用define-minor-mode宏,所以我不能退出,只能在代码中再次编程打开模式,如 (foo-mode 1)。
如果我选择这个方法,我将不得不在启用函数do-enable-foo中以不同的方式处理这个问题 - 所以我的第一个问题是如何使用上述代码中的占位符'test-something'检测这种情况?
或者,是否有更简洁的方法来实现取消,例如通过发出错误信号而不是(foo-mode 1)来防止模式切换进行?
(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
)
在关闭次要模式时,可能会出现“某种情况”,导致我必须取消切换。目前,我认为由于我正在使用define-minor-mode宏,所以我不能退出,只能在代码中再次编程打开模式,如 (foo-mode 1)。
如果我选择这个方法,我将不得不在启用函数do-enable-foo中以不同的方式处理这个问题 - 所以我的第一个问题是如何使用上述代码中的占位符'test-something'检测这种情况?
或者,是否有更简洁的方法来实现取消,例如通过发出错误信号而不是(foo-mode 1)来防止模式切换进行?