找到原因了,
他是直接改的frame的cursor color,
而不是改cursor的background。
找到问题就好办了,你看看怎么弄通用性更好,也方便以后其他人使用。
换成 (set-cursor-color "orange")
试试
这这个命令没法更改颜色。
用我上面的方法在mac 上可以正常改变颜色,但是在windows下不行。
( add-hook 'smart-input-source-set-english-hook
(lambda ()
(setq current-input-method nil)))
(add-hook 'smart-input-source-set-other-hook
(lambda ()
(setq current-input-method "rime")))
所以windows上我需要做的是排查下,为什么hook没正常生效。
更新:windows上也完全解决了,问题是刚才我切换系统的时候忘记更新最新版本。 用我这个方法配合 cursor-chg.el 可以完美工作了。
你把设置光标颜色的语句换成(print "hook enter....")
然后你看message buffer里面有没有相关信息。
你windows上面的smart-input-source
版本对么?
进hook这块,没有任何fancy的部分。
真的不容易出兼容性问题。
windows 上也完全解决了,刚才因为widows的 smart-input-source没更新到最新版。 太赞了 ,目前就剩下C-x 不会自动恢复原来的输入法这个小问题了。
你再测试一下,因为这一块按理说,我昨晚已经解决得很完美了。
你在emacs里面运行 (print emulation-mode-map-alists)
,我看看呢~~
在org-mode下执行,报告的结果如下: (smart-input-source–prefix-override-map-alist yas–direct-keymaps) [2 times]
这个是对的。
C-x
现在还是不能恢复中文输入法么?
昨天的不作数。
作为参考范例的话,最好加上下面的初始化设置,打开全局启动cursor-chg:
(require 'cursor-chg)
(change-cursor-mode 1)
(toggle-cursor-type-when-idle 1)
另外,我还打算写一下范例代码,idle更新cursor,所以通过OS切换输入法,也会及时得到光标颜色。
现在还是不行,在windows和mac 都是一样。如果当前输入法是中文,C-x,b 切换buffer后再回去原来的buffer,发现输入状态会变成英文。 如果当前是英文输入法的话,就永远是英文。
这个没有必要,尽量不依赖于第三方。
那个package特别简单,
而且大多数代码在我们这个场景中是不需要的。
你这么说,我就有眉目了。
之前说得太笼统,没办法定位。
我刚才试了下列步骤:
-
A buf
中文输入法 -
B buf
英文输入法 -
A buf
中 C-x, b ,(在输入b的时候,已经自动切换到了英文输入法) .选中并切换到B buf
- 此时在
B buf
中,是英文输入法 -
B buf
中 C-x, b ,选中并切换到A buf
- 此时在
A buf
中,是中文输入法。
整个过程中并没有问题。
你每次 C-x, b之前,先运行 (print emulation-mode-map-alists)
,
看下smart-input-source–prefix-override-map-alist
是不是在第一个。
如果你那边出错了,请把详细的操作步骤像我这样写下来,
我这么如果能够复现,肯定是能解决的。
按照你说的顺序切换,每次的执行C-x,b 之前 执行命令的结果都是一样
(smart-input-source--prefix-override-map-alist company-emulation-alist yas--direct-keymaps) [2 times]
最后回到 第6步的时候当前输入法是英文。
跟我一样的操作步骤么?
只是在6的时候,是英文输入法?