【发布时间】:2013-04-14 21:41:40
【问题描述】:
我想为闪烁 ON 和闪烁 OFF 设置不同的间隔。我的意思是,我希望光标保持可见 1 秒并关闭 0.2 秒。 我阅读了光标文档,但我发现最接近的是改变 ON 和 OFF 闪烁的闪烁光标间隔。
如何在 Emacs 中自定义它?
【问题讨论】:
标签: emacs text-cursor
我想为闪烁 ON 和闪烁 OFF 设置不同的间隔。我的意思是,我希望光标保持可见 1 秒并关闭 0.2 秒。 我阅读了光标文档,但我发现最接近的是改变 ON 和 OFF 闪烁的闪烁光标间隔。
如何在 Emacs 中自定义它?
【问题讨论】:
标签: emacs text-cursor
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,具体取决于光标是否可见。即每次隐藏或显示光标时,都会改变定时器的延迟时间。
相当骇人听闻,但它可以解决问题。
【讨论】:
我能够修改 blink-cursor-timer-function 函数来支持你想要的我相信的东西。
首先,您需要将blink-cursor-interval 的值修改为 .2
那么这段代码应该可以解决问题:
blink-cursor-timer-function 每 blink-cursor-interval 秒调用一次。
因此,此函数将每 0.2 秒调用一次,它将保持光标打开 5 次调用,然后将其关闭 1。因此,每次调用 0.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)))
【讨论】: