(重新设计)中英文混打:OS输入法管理包 smart-input-source

找到原因了,
他是直接改的frame的cursor color,
而不是改cursor的background。

:+1:找到问题就好办了,你看看怎么弄通用性更好,也方便以后其他人使用。

换成 (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没更新到最新版。 太赞了 :+1:,目前就剩下C-x 不会自动恢复原来的输入法这个小问题了。

你再测试一下,因为这一块按理说,我昨晚已经解决得很完美了。
你在emacs里面运行 (print emulation-mode-map-alists),我看看呢~~

@aqua0210 设置cursor的范例代码我放到readme上了。

在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特别简单,
而且大多数代码在我们这个场景中是不需要的。

你这么说,我就有眉目了。
之前说得太笼统,没办法定位。

我刚才试了下列步骤:

  1. A buf 中文输入法
  2. B buf 英文输入法
  3. A buf 中 C-x, b ,(在输入b的时候,已经自动切换到了英文输入法) .选中并切换到 B buf
  4. 此时在B buf中,是英文输入法
  5. B buf 中 C-x, b ,选中并切换到 A buf
  6. 此时在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的时候,是英文输入法?