根据次要模式更改光标颜色

时间:2013-01-03 16:00:41

标签: emacs mode

我编写了一个次模式,它定义了一些键绑定并进行了一些初始化。该模式正确设置了Navi模式和Navi模式映射。

如何在启用导航模式时增强此次模式以更改光标的颜色,并在禁用模式时将其更改回来?我可以使用钩子Navi-mode-hook吗?

2 个答案:

答案 0 :(得分:4)

试试这个:

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

或者,如果您预期cursor-type已经具有非默认值,则可以在启用模式时保存它,并在禁用时恢复已保存的值。

答案 1 :(得分: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)