输入法环境变量的故事

有时候我想想,我是不是应该写一些比较普及的文档(你懂得,我特意纠结了一下措辞)。

那么这次先来介绍一下关于输入法的环境变量配置问题:

在远古时代,世界一片混沌,那时世界上还没有 X 窗口下的输入法支持。

神说,要有输入法,于是就有了 XIM 协议。

这个时代(当然还有个几个XIM协议的版本更新),需要设置的环境变量有

XMODIFIERS=”@im=imname”

比较现代的程序的话,是不用纠结imname这个值的,输入法自己会自己也检测一把这个值,然后启动xim的时候也把自己变成这个值。印象中一定要这个环境变量的程序有xterm。

然后XIM有诸多缺点,至少在输入法程序关闭(不一定是死掉)的时候,可能让程序freeze,或者崩溃。

于是神看到XIM是坏的,授意GTK和QT自己做自己的IM Module。

从此天下大乱。

先来看 Gtk 这边,假设没有环境变量,Gtk是读取一些配置文件里面记录的im module的。每个im module都有指定语言,也就是按环境的语言设置匹配。这里来第一个常见问题:英语环境为什么默认不能用输入法而要纠结 LC_CTYPE=”zh_CN.UTF-8″。就是为了让 Gtk 的匹配能够匹配中文的IM Module。当然我个人是反对这种配置的,因为其实只要 GTK_IM_MODULE 足以。世界上据我所知唯一一个奇葩程序一定要这么设置那就是emacs。(因为作为gtk界面的emacs其实是用XIM协议……鬼知道里面hardcode了啥)

第二个常见问题,为什么卸载了ibus就可以用 fcitx,那是因为系统中同时有两个zh的im module(其实是三个,还包括了xim),你不设置环境变量的话,那就会让gtk自己选择了,这个顺序似乎也不确定,如果选到ibus但你用fcitx,或者选到fcitx你用ibus,都会导致你输入法不能正常使用。

设置了GTK_IM_MODULE之后呢?假设匹配到对应的im module,就会使用对应的im module,假设没匹配到,那就返回之前的没有设置的情况。

LC_CTYPE和设置*_IM_MODULE两种方式我偏好后者。

这里还有个很脑残的问题,GTK一定会去读取 /etc/gtk-2.0/gtk.immodules (按发行版,和cpu架构,以及gtk版本可能不同)里面记录的im module,尽管gtk-query-immodules-2.0和gtk-query-immodules-3.0是可以自己查询的。所以打包者必须自己在安装后脚本内更新这些文件。可能当初Gtk想做缓存……不过现在这年头不缓存也没啥大不了的了。

回到 Qt 这边,情况稍好,首先挑选规则还是如之前所述,按语言。但如果没有环境变量QT_IM_MODUE的干预,这个可以通过 qtconfig 进行选择。以及发行版的打包者们可以不用纠结更新类似GTK那些文件。就这样。

另外顺带一提,QT的环境变量检测是分QT和QT4的,不知道为什么Gtk3发布的时候为什么没有把GTK2和GTK3一起考虑进去。虽然说因此而遭殃的只有一个,那就是scim。如果你不知道它为什么会遭殃的话,请重新学习上文的匹配规则。

(顺带一提其实世界上还有 Clutter 的 IM Module 这种东西。)

话说眺望未来什么的话,那假设进入到了 Wayland 时代,不幸,Wayland 还没有类似 XIM 的统一协议,于是如果程序想支持输入法,最好还是选择 Gtk / Qt 来开发。

Posted in fcitx development | Tagged , , | 11 Comments

Fcitx 的 Kimpanel 自动切换

如题。好处就是,不用做任何复杂的配置(比如选择特定的启动器,或者禁用什么插件),fcitx 的 kimpanel 就已经开箱即用了。如果没有 kimpanel 支持的桌面(比如没添加插件之类的),也不会变得盲打。

另外找到人接手我之前的 Gnome-Shell 的 kimpanel 了。

Posted in fcitx development, KDE | 1 Comment

关于 Fcitx 的用户一些非常想说的话

1、4.x 之后不要问怎么改配置文件。fcitx-configtool 和 kcm-fcitx 是你的朋友。我虽然熟知如何手动修改配置,但别指望我会告诉你们。

2、不要争论关于依赖的问题。

你洁癖你自己靠边站。况且依赖也不多嘛。

3、请用 IM Module,在Ubuntu,Debian上这个包叫做 fcitx-frontend-{gtk2,gtk3,qt4},我已经要求打包者默认安装fcitx的时候安装这些(目前还只默认装 gtk2 gtk3)。在 Fedora,OpenSUSE,Chakra,Archlinux上这个包叫做 fcitx-{gtk2,gtk3,qt4}

4、我在 Issue 的默认模板那里也写了

http://fcitx.github.com/handbook/chapter-config-env.html

http://fcitx.github.com/handbook/faq.html

这两份文档是你不能正常使用 Fcitx 的时候应该阅读的。可以自我检查配置是否正确。(附带一提,Ubuntu 11.10 里面 im-config 带的 fcitx的配置只能把fcitx配置成使用 xim,debian sid 里面的im-config已经修改了……如果你要用 4.1 + 的版本的话,so,要么你手动改 /usr/share/im-config/data/80_fcitx.im 里面把xim改成 fcitx,然后im-config,要么用第一个链接的后半部分 (有关 ~/.xprofile) 自行配置)

Fcitx 在能够成为系统默认输入法之前,这些工作/麻烦是无法避免的。

5、虽然被很多人无视,Issue List 不是提问的地方。fcitx [at] googlegroups.com 才是。googlecode首页上有通过发送邮件的加入的方式。(免得遭遇你懂得的麻烦)

6、这是一个新问题,主要是 googlecode改了代码checkout链接了(github部分不受影响),想抓代码的人请用以下地址。(googlecode页面上是 google.com + https ,如果你不懂为啥这地址有问题就别继续问了)

http[s]://fcitx.googlecode.com/git/

http[s]://子repo名.fcitx.googlecode.com/git/

7、不光针对 fcitx 的,任何时候遇见问题,不要着急确定原因。搞好逻辑关系。可以先提问(提问方式参见上面),但不要先汇报Bug,4.1.2 发布以来 73 个汇报中,超过 60% 的 Issue List里面的,要么不是Bug,要么是Fcitx之外的原因导致的。

P. S.

我写这篇的原因主要是希望我以后可以直接用这个回答问题…… 上面 handbook 里面的两个链接已经是几乎是我每次出手必引用的了……这些不太合适放到 faq 里面的,就放这里好了。

Posted in fcitx development | Tagged , , , , , , , , , , , | 25 Comments

Maliit & Fcitx

Maliit 是什么?Maliit 是一个输入法框架,目前他为 Meego 提供了输入法服务。

实际上 Maliit 也可以运行在 PC上面,并且代码已经和Meego独立了,不必依赖 Meego 的库。

那么 Fcitx + Maliit 能产生什么

键盘是直接grab的Meego Keyboard Quick 的代码。

视频里面的 Fcitx 就是现在在我系统上跑的那个,没做任何代码修改。可以看到现在也就是只能盲打而已,还在起步阶段,还有很多工作需要做。

=-=-=-=-=
Powered by Blogilo

Posted in fcitx development | Tagged , | 2 Comments

Flexible Context-aware Input Tool with eXtension

我蛋疼想的名字。

为什么要想名字的原因参见邮件列表。

Posted in fcitx development | Leave a comment