优化fcitx在Emacs中的使用体验
这个扩展提供一系列的功能让fcitx能更好地在Emacs中使用。
(add-to-list 'load-path "/path/to/fcitx.el") (require 'fcitx)
推荐安装后使用下面的命令完成配置:
M-x fcitx-default-setup
或者,你也可以使用更“激进”的设置:
M-x fcitx-aggressive-setup
这两个设置的区别将在后面说明。
使用 fcitx-default-setup
会开启所有的功能,并且使用默认的配置。详见下文。
对于每一个功能,都有对应的 *-turn-on
和 *-turn-off
命令用来开启或者关闭该
功能。
在开启了fcitx以后,如果要用 “C-x b” 来切换buffer比较麻烦,因为第二个按键 “b” 会被输入法拦截,必须再按一个回车才能输入 “b”。所以这个扩展提供了一个可以通过自 定义prefix keys来暂时禁用fcitx的功能。比如这个例子中,可以让 “C-x” 成为这样的 一个prefix key,按下 “C-x” 之后fcitx就被暂时禁用了,可以直接输入 “b” 进行 buffer切换。按下 “b” 进入buffer切换界面的时候输入法又将被激活,因此你可以输入 中文的buffer名。用以下命令定义 “C-x” 为这样的一个prefix key
(fcitx-prefix-keys-add "C-x")
通常定义 “C-x” 和 “C-c” 为prefix keys就足够了。可以用下面的命令添加 “C-x” 和 “C-c”:
(fcitx-prefix-keys-setup)
定义好了自己想要的prefix key以后,用下面的命令开启这个功能:
(fcitx-prefix-keys-turn-on)
当然,也可以用下列命令关掉这个功能:
(fcitx-prefix-keys-turn-off)
如果使用了上面的 M-x fcitx-default-setup
, 那么以上的步骤都帮你做好了(即定义
了”C-x” 和 “C-c”,然后也开启了这个功能)。
和fcitx.vim类似,如果你想禁用fcitx当你退出insert mode的时候,然后再次激活fcitx 当你进入insert mode的时候,那么可以通过开启下面的功能实现:
(fcitx-evil-turn-on)
目前对于“进入或者退出insert mode”这种模式应该可以正常工作。如果你用
switch-to-buffer
或者 other-window
切换到一个既不在insert mode也不在emacs
mode的buffer,那么fcitx也会被禁用. 比如, 当前你在处于insert mode的buffer A
, 并且开启了fcitx, 然后调用了 switch-to-buffer
切换到buffer B
, 而 B
目
前处于normal mode, 那么在buffer B
fcitx也会被禁用。
当前对Evil的支持还不算完善。如果遇见任何问题,欢迎提交issue或者pull request。
如果使用了上面的 M-x fcitx-default-setup
,这个功能也会自动被启用
如果通常你在使用 M-x
, M-!
(shell-command
), M-&
(async-shell-command
)
或者 M-:
(eval-expression
)时并不想输入中文,那么可以使用
(fcitx-M-x-turn-on) (fcitx-shell-command-turn-on) (fcitx-eval-expression-turn-on)
来在使用这些命令的时候暂时禁用fcitx。
无论 M-x
是原始的 M-x
命令(execute-extended-command
), 或是 smex
,
helm-M-x
和 counsel-M-x
,都应该都可以正常工作。
使用上面的 M-x fcitx-default-setup
将默认开始这些功能。
注意: 如果你重新绑定 M-x
到 smex
或 helm-M-x
, 那么你应该在你重新绑定键
以后调用 fcitx-default-setup
或者 fcitx-M-x-turn-on
。
我个人来说,我并不需要在minibuffer中输入中文,所以我希望无论什么命令,都在 minibuffer中暂时禁用fcitx。如果你和我有一样的需求,那么你也可以选择这种设置。
和 fcitx-default-setup
一样, fcitx-aggressive-setup
会设置好prefix keys的
功能和Evil的支持, 然而它不会开启 M-x
, M-!
, M-&
and M-:
支持。 它会调
用 fcitx-aggressive-minibuffer-turn-on
在所有用minibuffer作为输入的命令中禁
用fcitx,包括,但不局限于, M-x
, M-!
, M-&
和 M-:
。这也就是为什么这种
设置被叫做 “aggressive-setup”。 比如, 你用 “C-x b” 来切换buffer,或者用 “C-x
C-f” 来打开文件, 当你还处于minibuffer的时候,fcitx都会被禁用。 我个人(几乎)
不用中文的文件名和中文buffer名,所以我更倾向这种设置。
这些功能在 fcitx-default-setup
和 fcitx-aggressive-setup
中都没有开启。如果
需要以下的这些功能,你需要手动开启。
大部分情况下当你使用 fcitx 的时候,你也会在 I-search 中使用中文进行搜索,所以 默认情况下这个功能没有开启。 当这个功能开启后,=fcitx= 将在 I-search 的时候被 禁用。 通过以下设置开启这个功能:
(fcitx-isearch-turn-on)
如果你使用 ace-pinyin=,在你使用 =ace-pinyin
跳转的时候,你需要输入一个英文
字符作为拼音的首字母。 使用以下设置,使得在 Emacs 提示你输入英文字母的时候,
fcitx
可以自动关闭:
(fcitx-read-funcs-turn-on)
但是,目前的实现方法有一些问题。参见 issue #12 和 issue #14.
那么什么时候开启这个功能呢?
- 如果你使用 Linux 且
fcitx-use-dbus
设置为了 =t=,你可以开启这个功能, 尽管某些情况下不一定像你所期望的那样工作(见issue #12),但对于正常使用没 有影响。 - 如果你使用 OSX 且使用 Evil 的话, issue #14 中的情况可能会发生。你仍然可以
使用以下的设置来开启这个功能:
(fcitx-read-funcs-turn-on) (fcitx-read-key-sequence-turn-off)
Linux用户可以设置 fcitx-use-dbus
变量为 t
,可以稍稍提高运行效率:
(setq fcitx-use-dbus t)
使用 fcitx-remote-for-osx 的OSX用户不要设置这个变量。
- 更好的Evil支持
如果有其他好的新的功能,欢迎提交pull request。