0

私はマイナーモードを書きました。それはいくつかのキーバインディングを定義し、いくつかの初期化を行います。モードは、ナビモードとナビモードマップを適切に設定します。

このマイナーモードを拡張して、ナビモードが有効なときにカーソルの色を変更し、モードが無効になっているときにカーソルの色を元に戻すにはどうすればよいですか? フック Navi-mode-hook を使用できますか?

4

2 に答える 2

4

これを試して:

(define-minor-mode foo-mode "doodad" :lighter ""
  (if foo-mode
      (setq cursor-type 'bar)
    (setq cursor-type (default-value 'cursor-type))))

または、デフォルト以外の値が既にあると予想cursor-typeされる場合は、モードが有効になっているときにそれを保存し、無効になっているときに保存された値を復元できます。

于 2013-01-03T18:58:16.520 に答える
2

マイナー モードを完全に制御できるか (自分で記述したため)、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)
于 2013-01-03T19:13:16.480 に答える