如何让 Emacs 中的光标像心跳一样闪烁。就像电脑暂停时笔记本电脑前面板上的 LED 一样。
有blink-cursor-alist
控制光标闪烁的变量,但我不知道如何使用它来满足我的要求。
是否可以?
这种简单的次要模式实现了心跳式闪烁光标。您可以调整heartbeat-cursor-colors
以获得不同的色调或其变化。
该代码在 Emacs 24.2.1 中进行了测试,但很容易移植到旧版 Emacsen。
(require 'cl)
(require 'color)
(defvar heartbeat-fps 16)
(defvar heartbeat-period 5)
(defun heartbeat-range (from to cnt)
(let ((step (/ (- to from) (float cnt))))
(loop for i below cnt collect (+ from (* step i)))))
(defun heartbeat-cursor-colors ()
(let ((cnt (* heartbeat-period heartbeat-fps)))
(mapcar (lambda (r)
(color-rgb-to-hex r 0 0))
(nconc (heartbeat-range .2 1 (/ cnt 2))
(heartbeat-range 1 .2 (/ cnt 2))))))
(defvar heartbeat-cursor-timer nil)
(defvar heartbeat-cursor-old-color)
(define-minor-mode heartbeat-cursor-mode
"Change cursor color with the heartbeat effect."
nil "" nil
:global t
(when heartbeat-cursor-timer
(cancel-timer heartbeat-cursor-timer)
(setq heartbeat-cursor-timer nil)
(set-face-background 'cursor heartbeat-cursor-old-color))
(when heartbeat-cursor-mode
(setq heartbeat-cursor-old-color (face-background 'cursor)
heartbeat-cursor-timer
(run-with-timer
0 (/ 1 (float heartbeat-fps))
(lexical-let ((colors (heartbeat-cursor-colors)) tail)
(lambda ()
(setq tail (or (cdr tail) colors))
(set-face-background 'cursor (car tail))))))))
您猜测该选项与“眨眼”一词有关。因此,您按 Ch a(表示中意)并输入“blink”。在我的 emacs 上,我有两个选择:blink-cursor-mode
和blink-matching-open
. 第一个看起来不错。描述说:“切换闪烁光标模式”。
我的 emacs 上的快捷方式说:<menu-bar> <options> <blink-cursor-mode>
. 所以我猜这个选项在菜单的某个地方,可能在“选项”下。我打开选项菜单,它是:带有复选框的“闪烁光标”。
这听起来也像是一个可以定制的选项。所以我输入M-x customize-option
然后blink-cursor-mode
。这使我可以切换值并将其保存以供将来的会话使用。
编辑:要为光标设置 ON 和 OFF 之间的间隔,有一个名为blink-cursor-interval
. 您可以使用M-x customize-variable
然后blink-cursor-interval
设置间隔。该变量blink-cursor-alist
将 OFF 状态光标类型与 ON 状态光标类型匹配,并且与闪烁速度无关。
EDIT2:据我所知,没有办法让光标逐渐关闭和打开,因为ON状态下的光标形状可能与OFF状态下的形状不同(所以形状会逐渐变化必需的)。