Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/cute-jumper/fcitx.el

Better fcitx integration for Emacs.
https://github.com/cute-jumper/fcitx.el

emacs emacs-lisp fcitx

Last synced: about 2 months ago
JSON representation

Better fcitx integration for Emacs.

Awesome Lists containing this project

README

        

#+TITLE: 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-x= 和 =counsel-M-x= ,都应该都可以正常工作。

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

注意: 如果你重新绑定 =M-x= 到 =smex= 或 =helm-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-setup= 和 =fcitx-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)

但是,目前的实现方法有一些问题。参见 [[https://github.com/cute-jumper/fcitx.el/issues/12][issue #12]] 和 [[https://github.com/cute-jumper/fcitx.el/issues/14][issue #14]].

那么什么时候开启这个功能呢?
1. 如果你使用 *Linux* 且 =fcitx-use-dbus= 设置为了 =t=,你可以开启这个功能,
尽管某些情况下不一定像你所期望的那样工作(见[[https://github.com/cute-jumper/fcitx.el/issues/12][issue #12]]),但对于正常使用没
有影响。
2. 如果你使用 OSX 且使用 Evil 的话, [[https://github.com/cute-jumper/fcitx.el/issues/14][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)

使用 [[https://github.com/CodeFalling/fcitx-remote-for-osx][fcitx-remote-for-osx]] 的OSX用户不要设置这个变量。

* TODO TODO
- 更好的Evil支持

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