我編程使用類似於這個小例子,成語和宏我自己的Emacs的輔助模式: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
可能出現時,我不得不取消切換掉。目前,我正在考慮自從我使用宏define-minor-mode
以來,我無法保釋,但必須以編程方式使用代碼中所示的(foo-mode 1)
再次打開模式。
如果我走這條路線,我將不得不在啓用功能do-enable-foo
中以不同方式處理 - 所以我的第一個問題是如何在上面的代碼中使用佔位符'test-something
來檢測此情況?
或者,是否有一個更清晰的方法來取消,例如,通過發信號通知錯誤而不是(foo-mode 1)
來防止模式切換通過?
你爲什麼要使用'setq'而不是'let'? – Stefan