2013-04-14 6 views
5

Ich möchte verschiedene Intervalle für das Blinken auf ON und das Blinken auf OFF einstellen. Ich meine, ich möchte, dass der Cursor für 1 Sekunde sichtbar und für 0,2 Sekunden ausgeschaltet bleibt. Ich lese die Cursor-Dokumentation, aber am nächsten finde ich das Blink-Cursor-Intervall, das sowohl ON als auch OFF blinkt.Emacs - verschiedene Intervalle für den blinkenden Cursor ein- und ausschalten

Was ist die beste Möglichkeit, dies in Emacs anzupassen?

Antwort

3

Es gibt keine solche Funktionalität in Emacs gebaut, aber man kann es hacken, indem Sie die folgenden Zeilen zu Ihrem .emacs Hinzufügen Datei:

(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 das Blinken des Cursors mit einer Toggle-Funktion implementiert genannt durch einen Timer. Jedes Mal, wenn die Funktion aufgerufen wird, blendet sie den Cursor aus, wenn er gerade sichtbar ist, oder zeigt ihn an, wenn er unsichtbar ist. Leider ruft der Timer diese Funktion in einem festen Intervall auf.

Um verschiedene Verzögerungszeiten abhängig vom Status des Cursors zu realisieren, gibt der obige Code advises die interne Funktion an, die den Cursor anzeigt oder verbirgt. Bei jedem Aufruf dieser Funktion ändert der Hinweis die Verzögerungszeit des Timers auf 1 oder 0,2, je nachdem, ob der Cursor sichtbar ist oder nicht. Das heißt, jedes Mal, wenn der Cursor ausgeblendet oder angezeigt wird, wird die Verzögerungszeit des Timers geändert.

Ziemlich hackisch, aber es macht den Trick.

+1

Würde es Ihnen etwas ausmachen zu erklären, wie das funktioniert? Ich bin sehr interessiert. –

+0

Danke für die Antwort. Es bricht, wenn Sie den Blink-Cursor-Modus aufrufen, aber wie erwartet funktioniert. – Jesse

+0

Würde es Ihnen etwas ausmachen weiter zu machen, wenn es kaputt geht? – Thomas

2

Ich konnte die blink-cursor-timer-function Funktion zu unterstützen, was Sie wollen, glaube ich.

Zuerst müssen Sie den Wert von blink-cursor-interval-,2

dann dieser Code ändern sollte es tun: blink-cursor-timer-function genannt wird alle blink-cursor-interval Sekunden. Diese Funktion wird also alle 0,2 Sekunden aufgerufen. Der Cursor bleibt für 5 Anrufe eingeschaltet und wird für 1 ausgeschaltet. Bei 5 Anrufen mit 0,2 Sekunden pro Anruf erhalten Sie 1 Sekunde Einschaltzeit, dann nur .2 Sekunden der AUS-Zeit.

;; 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

Ihre Lösung funktioniert gut, aber die andere Antwort sieht sauberer aus und ich kann nur eine auswählen. Anyway, danke auch – Jesse

Verwandte Themen