我写了一个次要模式,它定义了一些键绑定并进行了一些初始化。该模式正确设置了 Navi-mode 和 Navi-mode-map。
如何在启用导航模式时增强此次要模式以更改光标的颜色,并在禁用模式时将其更改回来?我可以使用 hook Navi-mode-hook 吗?
试试这个:
(define-minor-mode foo-mode "doodad" :lighter ""
(if foo-mode
(setq cursor-type 'bar)
(setq cursor-type (default-value 'cursor-type))))
或者,如果您预计cursor-type
已经有一个非默认值,您可以在启用模式时保存它,并在禁用时恢复保存的值。
您可以完全控制次要模式(因为您编写了它),并且您可以将此行为直接嵌入到您的次要模式函数中,如 Dmitry 的回答中所述:
(define-minor-mode navi-mode
"Navi mode does wonderful things"
:lighter " Navi"
:global t
:init-value 0
(if navi-mode
(progn
(setq old-cursor-color (cdr (assoc 'cursor-color (frame-parameters))))
(set-cursor-color "red"))
(set-cursor-color old-cursor-color)))
或者你不控制次要模式定义,你将不得不使用一个钩子:
(defun navi-change-cursor-color ()
(if navi-mode
(progn
(setq old-cursor-color (cdr (assoc 'cursor-color (frame-parameters))))
(set-cursor-color "red"))
(set-cursor-color old-cursor-color)))
(add-hook 'navi-mode-hook 'navi-change-cursor-color)