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

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也可以试试。

这个也没用。
我再研究下是post-command-hook 是怎么被 consult-buffer 给吞了,用默认的switch-to-buffer 就没事。

@tumashu 由于post-command-hook的方案和consult-buffer冲突,我使用了你在pyim里的方案+ 上面的函数。现在一切正常了。
需要的朋友可以下载这个im-cursor-chg.el,并 加入到load-path,然后这样设置即可:

(with-eval-after-load 'rime
    (require 'im-cursor-chg)
    (im-start-daemon))

ps:如果不用 consult的话,用一楼的方案更加简单。

有的朋友get不到更改光标颜色的点。这里我录了个动图,更加直观。
全程中英文混输,不需要按切换输入法的按键。只要看到黄颜色就是中文,红颜色就是英文。mode-line 也不需要输入法提示了。 cursor-color-chg

PS: cousult 的bug 已经修复。两种方案都可以使用。

3 个赞

consult 提了个issue,作者反应速度很快,两下就修好了。原来是consult 的预览功能产生的影响,造成 post-command-hook在切换buffer后操作的仍然是上一个buffer。

所以,还是继续使用post-command-hook 的方案了,timer 的延迟看的有点不爽,强迫症😄。

1 个赞

666, 我也试着在 pyim-indicator 中使用 post-command-hook

:+1: 像这种计算量少,对实时要求高的用post-command-hook 是挺合适的。我这边用下来,也没发现有性能问题。其实以前我也一直用 cursor-chg 这个包。

我准备两种方式都支持,万一遇到特殊的场景,也有个用的。

1 个赞

请问下怎么在doom emacs里配置这个?

我没用过 doom,应该只要把 im-cursor-chg.el 加入到你的 load-path,再加上下面的配置就可以了。

(require 'im-cursor-chg)
(cursor-chg-mode 1)

下面是我用的use-package 的配置:

    (use-package im-cursor-chg
      :ensure nil
      :after rime
      :config
      (cursor-chg-mode 1))

PS:其实就两个函数,你直接写到配置里都是可以的 :smile:

一共有几个版本的im-cursor-chg.el呀。我这个版本里没有cursor-chg-mode,而只有im-start-daemon