【问题标题】:Emacs - set different intervals for cursor blinking on and offEmacs - 为光标闪烁设置不同的间隔
【发布时间】:2013-04-14 21:41:40
【问题描述】:

我想为闪烁 ON 和闪烁 OFF 设​​置不同的间隔。我的意思是,我希望光标保持可见 1 秒并关闭 0.2 秒。 我阅读了光标文档,但我发现最接近的是改变 ON 和 OFF 闪烁的闪烁光标间隔。

如何在 Emacs 中自定义它?

【问题讨论】:

    标签: emacs text-cursor


    【解决方案1】:

    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,具体取决于光标是否可见。即每次隐藏或显示光标时,都会改变定时器的延迟时间。

    相当骇人听闻,但它可以解决问题。

    【讨论】:

    • 您介意解释一下这是如何工作的吗?我很感兴趣。
    • 感谢您的回答。如果您调用blink-cursor-mode,它会中断但按预期工作:)
    • 1 将这些行添加到 .emacs 文件中。 2 启动 emacs。 3 按 M-x 并进入闪烁光标模式。它会返回一个错误
    • 啊,对。对于那个很抱歉。现在应该修复(请参阅更新的答案)。
    【解决方案2】:

    我能够修改 blink-cursor-timer-function 函数来支持你想要的我相信的东西。

    首先,您需要将blink-cursor-interval 的值修改为 .2

    那么这段代码应该可以解决问题: blink-cursor-timer-functionblink-cursor-interval 秒调用一次。 因此,此函数将每 0.2 秒调用一次,它将保持光标打开 5 次调用,然后将其关闭 1。因此,每次调用 0.2 秒的 5 次调用将为您提供 1 秒的开启时间,然后只有 0.2 秒关闭时间。

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

    【讨论】:

    • 您的解决方案工作正常,但另一个答案看起来更干净,我只能选择一个。无论如何,也谢谢你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    相关资源
    最近更新 更多