私はマイナーモードを書きました。それはいくつかのキーバインディングを定義し、いくつかの初期化を行います。モードは、ナビモードとナビモードマップを適切に設定します。
このマイナーモードを拡張して、ナビモードが有効なときにカーソルの色を変更し、モードが無効になっているときにカーソルの色を元に戻すにはどうすればよいですか? フック 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)