2013-04-14 32 views
5

点滅ONと点滅OFFに異なる間隔を設定したい。つまり、カーソルを1秒間表示し、0.2秒間OFFにします。 私はカーソルのドキュメントを読んだが、私が見つけた最も近い点滅と点滅の両方が点滅する点滅カーソル間隔です。Emacs - カーソルの点滅の間隔をオン/オフに設定する

これをEmacsでカスタマイズする最良の方法は何ですか?

答えて

3

ありの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

これはどのように機能するのでしょうか?私はかなり興味があります。 –

+0

答えをありがとう。 blink-cursor-modeを呼び出しても、期待どおりに機能していれば、ブレークします:) – Jesse

+0

壊れたときを詳しく教えてください。 – Thomas

2

blink-cursor-timer-function機能を変更して、私が信じたいものをサポートすることができました。

まず、あなたは、このコードでは、トリックを行う必要があります.2

blink-cursor-intervalの値を変更する必要があります: blink-cursor-timer-functionはすべてのblink-cursor-interval秒と呼ばれています。 この機能は0.2秒ごとに呼び出されますので、5回の呼び出しでカーソルをオンにしてから1回だけオフにします.1回の呼び出しで0.5秒間の呼び出しで1秒間のON時間が得られます。 OFF時間の秒。

;; 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))) 
+0

あなたのソリューションは正常に動作しますが、もう一方の答えはよりクリーンに見え、私は1つしか選択できません。とにかく、ありがとうございます – Jesse

関連する問題