自己写的用得爽
理论上是支持的,无非就是那些hook,稍微修改应该就可以了
修改下面这些:
(defun imbot--im-active-p ()
(let ((output
(let (deactivate-mark)
(with-temp-buffer
(call-process imbot-command nil t)
(buffer-string)))))
(char-equal
(aref output 0) ?2)))
(defun imbot--activate-im ()
(call-process imbot-command nil nil nil "-o"))
(defun imbot--deactivate-im ()
(call-process imbot-command nil nil nil "-c"))
(defun imbot--save-im-state ()
(unless (minibufferp)
(setq imbot--im-active (imbot--im-active-p))))
多谢。刚才在Windows 上尝试用im-select试用了下,切换buffer 和 进入minibuffer都是可以正常工作的。但是光标颜色没法工作,估计是因为我用的系统切换输入法,请问下有没有切换出入法的命令或者hook?
光标那块估计还要优化。刚才又改了一下,windows里的输入法能记住不同软件的输入法状态吗?如果不行你记得修改一下刚加的那个变量
windows的输入法是可以记住输入状态的。但是如果用系统的命令去切换输入法的话,Emacs是没法捕获这个切换的动作的。要是有一个emacs的内置命令进行切换就可以解决这个问题了,例如smart-input-source里的sis-switch ()
功能。
至于光标的颜色和形状,我可以通过cursor-chg这个工具实现自动切换,重新定义下面的fuction就可以了。
(defun imbot--restore-im-state ()
(unless (minibufferp)
(if imbot--im-active
(progn
(imbot--activate-im)
(setq current-input-method t))
(imbot--deactivate-im)
(setq current-input-method nil))))
另外请问下怎么增加更多的前缀按键?通过下面的方法加入列表不成功,但是直接在源码中增加就能成功。估计是顺序的问题。
(add-to-list 'imbot--prefix-override-keys "C-z")
更新:
增加了一个imbot-switch
命令,可以正常通过shift 切换输入法并且自动更换光标颜色了
(defun imbot-switch ()
"switch input method"
(interactive)
(if (imbot--im-active-p)
(progn
(imbot--deactivate-im)
(setq current-input-method nil))
(imbot--activate-im)
(setq current-input-method t)))
@QiangF 请教关于inline模式的2个问题。
当直接通过输入法的中文模式输入英文字母,按回车接受英文,这时自动切换到英文模式,并且整行高亮。
问题1: 整行高亮如何改为仅仅高亮英文部分
问题2: 如何退出高亮模式?按回车后输入法已经变回中文,但是整行的高亮还在,无法去除。
- 感觉没必要弄得那么复杂啊 2.可能是你windows缘故吧,我这边挺好 又更新了,你试试
好像要update emulated map alist
最新版本下inline模式我这边基本没法用,移动过程中光标遇到英文的就会高亮,而且高亮后并不会消失。 移动过程中,卡顿很明显,看来这个inline模式对整个buffer探测的开销有点大。我没有用evil-mode。
或者有没有方法直接关了inline模式,我用shift切换输入法,对这个需求不大。
优化了inline,变成可选了,我这在高亮区域回车就取消了,必须是高亮区回车取消
关于当前的inline模式,在光标游走的过程中遇到英文就会高亮当前行,需要按回车才会取消。 感觉这个探测英文单词的功能可以和中文后加空格自动切换英文的功能分开,让用户去选择什么情况下开启比较好。不然游走光标的时候经常红一行,还是挺吓人的