6 votes

Emacs - définir différents intervalles pour l'activation et la désactivation du curseur

Je veux définir différents intervalles pour le clignotement ON et le clignotement OFF. Je veux dire que je veux que le curseur reste visible pendant 1 seconde et qu'il s'éteigne pendant 0,2 seconde. J'ai lu la documentation sur le curseur, mais ce que j'ai trouvé de plus proche, c'est la fonction blink-cursor-interval qui modifie à la fois le clignotement ON et OFF.

Comment puis-je personnaliser cela dans Emacs ?

5voto

Thomas Points 8142

Cette fonctionnalité n'est pas intégrée à Emacs, mais vous pouvez la modifier en ajoutant les lignes suivantes à votre fichier .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 implémente le clignotement du curseur avec une fonction de basculement appelée par un timer. Chaque fois que la fonction est appelée, elle cache le curseur s'il est actuellement visible, ou l'affiche s'il est invisible. Malheureusement, le timer appelle cette fonction à un intervalle fixe.

Afin de réaliser des délais différents selon l'état du curseur, le code ci-dessus conseille la fonction interne qui permet d'afficher ou de masquer le curseur. Chaque fois que cette fonction est appelée, le conseil modifie le délai de la minuterie à 1 ou 0,2, selon que le curseur est visible ou non. En d'autres termes, chaque fois que le curseur est caché ou affiché, le délai de la minuterie est modifié.

C'est un peu bidon, mais ça fait l'affaire.

3voto

Jordon Biondo Points 3765

J'ai pu modifier le blink-cursor-timer-function fonction pour soutenir ce que vous voulez je crois.

Tout d'abord, vous devez modifier la valeur de l'élément suivant blink-cursor-interval à .2

alors ce code devrait faire l'affaire : blink-cursor-timer-function est appelé chaque blink-cursor-interval secondes. Cette fonction sera donc appelée toutes les 0,2 secondes, elle gardera le curseur allumé pendant 5 appels puis l'éteindra pendant 1 appel. Ainsi, 5 appels à 0,2 seconde par appel vous donneront 1 seconde de temps d'activation, puis seulement 0,2 seconde de temps de désactivation.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X