Emacs - 为光标闪烁设置不同的间隔

时间:2013-04-14 21:41:40

标签: emacs cursor blink

我想设置不同的间隔以闪烁ON和闪烁OFF。我的意思是,我希望光标在1秒钟内保持可见状态,并在0.2秒内保持关闭状态。 我读了光标文档,但最接近的是blink-cursor-interval,它改变了ON和OFF闪烁。

在Emacs中自定义此功能的最佳方法是什么?

2 个答案:

答案 0 :(得分:4)

Emacs中没有内置的功能,但您可以通过在.emacs文件中添加以下行来破解它:

(defvar blink-cursor-interval-visible 1)
(defvar blink-cursor-interval-invisible 0.2)

(defadvice internal-show-cursor (before unsymmetric-blink-cursor-interval)
  (when blink-cursor-timer
    (setf (timer--repeat-delay blink-cursor-timer)
          (if (internal-show-cursor-p)
              blink-cursor-interval-visible
            blink-cursor-interval-invisible))))
(ad-activate 'internal-show-cursor)

Emacs通过计时器调用的切换功能实现光标的闪烁。每次调用该函数时,它都会隐藏光标(如果它当前可见),或者如果它不可见则显示它。不幸的是,计时器以固定的间隔调用此函数。

为了根据光标的状态实现不同的延迟时间,上面的代码advises显示或隐藏光标的内部函数。每次调用该函数时,建议都会将计时器的延迟时间更改为1或0.2,具体取决于光标是否可见。也就是说,每次隐藏或显示光标时,计时器的延迟时间都会改变。

非常讨厌,但它确实可以解决问题。

答案 1 :(得分:2)

我能够修改blink-cursor-timer-function功能以支持您想要的内容。

首先,您需要将blink-cursor-interval的值修改为.2

那么这段代码应该可以解决问题: 每blink-cursor-timer-function秒调用blink-cursor-interval。 因此,此功能将每隔0.2秒调用一次,它会将光标保持为5次,然后将其关闭为1.因此,每次通话的.2秒5次通话将为您提供1秒的开启时间,然后仅为0.2秒关闭时间。

;; change the interval time to .2
(setq blink-cursor-interval .2)

;; create a variable that counts the timer ticks
(defvar blink-tick-counter 0)

;; this function will be called every .2 seconds
(defun blink-cursor-timer-function ()
  "Timer function of timer `blink-cursor-timer'."
  (if (internal-show-cursor-p)
      (progn
    (if (> blink-tick-counter 4)
        (progn
          (internal-show-cursor nil nil)
          (setq blink-tick-counter 0))
      (setq blink-tick-counter (1+ blink-tick-counter))))
    (internal-show-cursor nil t)))