代码写好一段时间了,但最近我没有太多时间可以用在这个 project 上,看到 这个帖子,于是先把这个版本发布,有需要的同学可以拿去使用。
构建环境: VS 2013
使用: fcitx-remote
实现了 fcitx-remote -c
和 fcitx-remote -o
。其他的选项都相当于 fcitx-remote
,即打印出当前的输入法状态。用 VS 打开编译即可。在 Emacs 中做少量配置 fcitx.el
即可使用。见工程主页。
实现:用 SendInput
模拟 win + space 来激活/关闭输入法,打字速度很快的话,有些时候输入法关闭并不及时。有 SSD 的话会好一些。大部分情况下应该都还是比较可用的。
目前状态:接近 60 行 C++ 代码,实现很简单。主力用 Windows 且有兴趣的同学可以考虑一下提高代码。我平时很少用 Windows 写 Windows Desktop 的代码,API 并不非常熟悉。代码有问题到 GitHub 上提 issue。
5 个赞
感谢分享,对于我来说是目前最好的方案,真的解决了中英输入法智能切换的老问题。
按我的使用经验,切换键改成 Alt
+ Shift
更好,而 Win
+ Space
在有两个及以上中文输入法就不太好用了,所以可以在项目下载页提供两个版本的二进制文件
让用户自己编译,是不是有点不方便呀,毕竟 window 用户一般习惯用现成的exe
@maoyan 我觉得你的建议是对的,用 Alt+shift 好一些,已经改为默认。
@tumashu 是的,我刚刚发布了两个二进制的文件,可以下载了。
cutejumper,你好,感谢你制作的这个工具!
我刚刚装上了它,但是有些功能还没实现。
我在init.el文件里面加入了下面这段
(add-to-list 'load-path "C:/Users/Administrator/AppData/Roaming/.emacs.d/fcitx.el-master")
(require 'fcitx)
(let ((fcitx-path "C:/Users/Administrator/AppData/Roaming/.emacs.d/fcitx-remote"))
(setenv "PATH" (concat fcitx-path ";" (getenv "PATH")))
(add-to-list 'exec-path fcitx-path))
(setq fcitx-active-evil-states '(insert emacs hybrid))
保存,启动emacs并不能自动切换输入法。于是我手动执行mx M-x fcitx-evil-turn-on,这时候从evil的插入模式切换到移动模式输入法可以自动切换到英文。但是再切换到插入模式时,不能自动切换回中文输入法。
请问
- 在init.el文件里面如何配置才能让它自动切换?
- 从移动模式切换到插入模式,如何能能自动切换回中文输入法?
我的操作系统是windows 7,使用的中文输入法是搜狗拼音。
把这个命令放到你的 init.el 中,在上面那些配置之后放就行。详细的配置参见 GitHub - cute-jumper/fcitx.el: Better fcitx integration for Emacs. 。
你用什么快捷键切换的输入法?有几个输入法?按两次快捷键能返回原来的状态吗?
没测试 Win 7,也没测试过搜狗,不排除程序本身有问题的可能。
请问这条命令写到init.el文件里应该怎么写?初学EMACS不是很懂。这种m-x执行的命令写到init.el里有固定的转换格式吗?
我平常用Ctrl加空格
但Alt+shift也有效
两次快捷键能返回原来的状态
谢谢回复!
我使用的就是这个版本,只能从搜狗拼音切换到英文,但是不能切换回来。
不错不错,不过fcitx-remote-for-osx已经走入困境了:expressionless:
我没有 Win 7,也不用搜狗,所以没法测试你说的是否是 bug。
GitHub 上有人提过 issue,Rime 输入法只能开启,不能关闭。虽然看上去和你的问题相反,我猜想有可能是类似的问题,是 GetKeyboardLayout(0)
引起的。看其他人是否能够重现这个问题并帮忙解决吧。
Issue 地址: 不能支持 Rime 输入法切换 · Issue #1 · cute-jumper/fcitx-remote-for-windows · GitHub
win8上可以,win7不行,你可以试试cmd直接运行fcitx-remote.exe:
| | win8.1 | win7 |
|----------------------+------------------+------------------|
| fcitx-remote.exe | 返回1或2 | 只有1 |
| fcitx-remote.exe -o | 打开中文键盘 | 只能中英互相切换 |
| fcitex-remote.exe -c | 打开英文键盘 | 无效 |
然后查看源码 fcitx-remote-for-windows/fcitx-remote.cpp at master · cute-jumper/fcitx-remote-for-windows · GitHub , 发现GetKeyboardLayout 在win7下无效,网上也有讨论
vc判断输入法是中文输入状态还是英文输入状态?-CSDN论坛 ,不是很懂代码,我也就止步在此了
但这样还是能配置可以切换输入法,最后效果也是和win8系统差不多
(defun evil-toggle-input-method-1 ()
;; (interactive)
(shell-command "fcitx-remote -o"))
(defun my/toggle-fcitx (&optional arg)
(interactive "P")
(cond
((equal arg '(4))
(remove-hook 'evil-insert-state-exit-hook 'evil-toggle-input-method-1)
(remove-hook 'evil-insert-state-entry-hook 'evil-toggle-input-method-1))
(t
(add-hook 'evil-insert-state-exit-hook 'evil-toggle-input-method-1)
(add-hook 'evil-insert-state-entry-hook 'evil-toggle-input-method-1))
))
(spacemacs/set-leader-keys "oz" 'my/toggle-fcitx)
我把你提供的代码插入到init.el里了,按i、a进入编辑模式依然不能自动从英文切换到中文。
另外我注意到了代码的最后一行和spacemacs有关(不懂代码,我理解是在spacemacs里为fcitx设置的开关)。我没有使用spacemacs,但启用了evil,使用了插件hydra,该如何设置?