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 (apropos の場合) を押して、「まばたき」と入力します。私のemacsでは、2つのオプションがあります: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 状態の形状とは異なる可能性があるため、カーソルを徐々にオフにしてからオンにする方法はありません (したがって、形状の段階的な変化は必要)。