Я программирования мой собственный 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