[分享] 切换输入法时自动更换光标颜色

https://emacs-china.org/uploads/default/original/2X/2/272c4f4f56631dee6c63b85a7a671521fa80dc61.gif

这种小绿点提示效果怎么样?

2 个赞

:+1:我觉得你这个方案挺好的,干扰少,就是要一眼就看出输入法变化了就行。 不过我现在习惯使用红色光标,这种方案不知道配什么颜色比较显眼。

不知道,现在我正在摸索阶段

我试了一会,感觉小点不如光标好使,点太小容易忽视,太大又比较难看

确实是有这个问题。我个人是更偏向将整个光标用一种颜色来区分的,比较直观。

很好用,感谢分享!我在 change-cursor-color-on-input-method 函数的 if 里增加了两条断言,可以遵从 emacs-rime 中的 rime-disable-predicates 来改变光标颜色:

  (defun change-cursor-color-on-input-method ()
    "Set cursor color depending on whether an input method is used or not."
    (interactive)
    (set-cursor-color (if (and (rime--should-enable-p)
                               (not (rime--should-inline-ascii-p))
                               current-input-method)
                          input-method-cursor-color
                        default-cursor-color)))

5 个赞

:+1: 赞。我正在想怎么把 emacs-rime 的断言加进来呢,太及时了。
现在按错Shift 都就一点痕迹都看不出来了😄

我是使用timer , 每0.3s探测一次

刚才看了你的实现,本来想用timer的,刚开始担心post-command-hook会影响性能。后来在Windows 下测试 ,发现并没有影响,而且开了emacs-rime的断言判断也是很流畅,同时还开着1.5s 的auto-save :grinning:。其实函数所做的事情就是比对一下条件,并设置光标颜色,计算量应该很低了。

post-command-hook 实现起来简单,如果不存在探测不及时的问题的话,我觉得应该优先考虑。至于性能,一般没问题

目前用下来感觉探测的还是挺准确和实时的,暂时还没发现问题。有待继续观察

这是什么机制,能显示数字吗

这个小点就是一个背景为绿色的posframe

参考 pyim-indicator-with-posframe

确实有探测不到的情况,在切换buffer后,由于没执行任何命令,不会触发颜色更新,得动一下光标才能更新。有什么方法可以在刚切换完buffer的时候,让我执行一次指定的命令吗?
PS: 这个问题是 consult 引入的问题。

可以用window-buffer-change-functions试试。

这个变量是怎么使用的?我把函数名加入这个变量,没看到有触发。

下面的代码我在Linux上测试是能触发test函数的。

(defun test-window-buffer-change (&optional arg)
  (message "arg %S" arg)
  (message "current buff %s" (current-buffer))
  )

(add-hook 'window-buffer-change-functions #'test-window-buffer-change)

多谢,确实可以触发函数。 不过这样还是解决不了问题,这个问题是consult 这个包造成的。关掉consult 是好的。

buffer-list-update-hook也可以试试。