Skip to content

Latest commit

 

History

History
123 lines (93 loc) · 6.3 KB

README-zh.org

File metadata and controls

123 lines (93 loc) · 6.3 KB

fcitx.el

优化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 命令用来开启或者关闭该 功能。

通过prefix keys来暂时禁用fcitx

在开启了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”,然后也开启了这个功能)。

Evil支持

和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-!, M-&, M-: 支持

如果通常你在使用 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-xcounsel-M-x ,都应该都可以正常工作。

使用上面的 M-x fcitx-default-setup 将默认开始这些功能。

注意: 如果你重新绑定 M-xsmexhelm-M-x, 那么你应该在你重新绑定键 以后调用 fcitx-default-setup 或者 fcitx-M-x-turn-on

Aggressive setup

我个人来说,我并不需要在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-setupfcitx-aggressive-setup 中都没有开启。如果 需要以下的这些功能,你需要手动开启。

I-search 支持

大部分情况下当你使用 fcitx 的时候,你也会在 I-search 中使用中文进行搜索,所以 默认情况下这个功能没有开启。 当这个功能开启后,=fcitx= 将在 I-search 的时候被 禁用。 通过以下设置开启这个功能:

(fcitx-isearch-turn-on)

字符和按键输入的支持

如果你使用 ace-pinyin=,在你使用 =ace-pinyin 跳转的时候,你需要输入一个英文 字符作为拼音的首字母。 使用以下设置,使得在 Emacs 提示你输入英文字母的时候, fcitx 可以自动关闭:

(fcitx-read-funcs-turn-on)

但是,目前的实现方法有一些问题。参见 issue #12issue #14.

那么什么时候开启这个功能呢?

  1. 如果你使用 Linuxfcitx-use-dbus 设置为了 =t=,你可以开启这个功能, 尽管某些情况下不一定像你所期望的那样工作(见issue #12),但对于正常使用没 有影响。
  2. 如果你使用 OSX 且使用 Evil 的话, issue #14 中的情况可能会发生。你仍然可以 使用以下的设置来开启这个功能:
    (fcitx-read-funcs-turn-on)
    (fcitx-read-key-sequence-turn-off)
        

D-Bus 版本

Linux用户可以设置 fcitx-use-dbus 变量为 t ,可以稍稍提高运行效率:

(setq fcitx-use-dbus t)

使用 fcitx-remote-for-osx 的OSX用户不要设置这个变量。

TODO

  • 更好的Evil支持

如果有其他好的新的功能,欢迎提交pull request。