Make Ibus-pinyin 1.2.99.20091211 Support Xiaohe Double Pinyin Schema
自从某次因为安装 Windows 7 把我的 GRUB 弄坏了,我一直懒得修复(看来我不算一个比较忠实的 Ubuntu 用户),导致我很久没有进去过我的 Ubuntu 9.10。
Ubuntu 10.04 发布了一段时间了,看着这个全新 LTS 版本的出现又让我心动了,终于还是安装了。用 Linux 最纠结的还是输入法的问题。之前用过 SCIM ,小企鹅,感觉都不怎么好用。一直到 iBus 的出现,至少它的用户体验和记忆联想都做得很不错。
可惜本人是个双拼用户,而且用的还是目前比较小众的小鹤双拼方案(虽然比较小众,但是我个人觉得它的设置更科学)。这次的 Ubuntu 10.04 自带的 iBus-pinyin 1.2.99.20091211-1ubuntu1_i386 版本竟然支持双拼了,太兴奋了。高兴之余,也看到了遗憾,双拼方案里面还是没有小鹤双拼方案,而且还不支持自定义双拼方案,唉!
我抱着试试看的心情,查看了一下 iBus-pinyin 的相关文件,结果是:无任何和双拼配置相关的文件。无奈之下,我只能下了 iBus-pinyin 的源代码看看
apt-get source ibus-pinyin
意外地在在源码包 src 文件中找到了 DoublePinyinTable.h ,里面正是关于双拼方案的代码,我一直没法理解为什么不把双拼方案做在配置文件里面。我去了 Google Code 找到了 iBus-pinyin 的最新源码,再一次意外地发现,最新的 1.3.10 里面已经预设小鹤双拼方案,哈哈。
赶紧准备编译
./configure make
竟然报错:
LookupTable.h: In member function ‘guint PY::LookupTable::orientation()’: LookupTable.h:39: error: ‘ibus_lookup_table_get_orientation’ was not declared in this scope LookupTable.h: In member function ‘void PY::LookupTable::setOrientation(gint)’: LookupTable.h:50: error: ‘ibus_lookup_table_set_orientation’ was not declared in this scope
看了下源码, iBus-pinyin 的代码中 include 了一些 iBus 的头文件。而且这几个头文件,我已经安装了 libibus-dev 已经有了。于是下了最新版的 iBus 1.3.7 的源码一看,这个是新版本才有的新函数,看来如果不安装新版本的 iBus 即使利用最新版里面的文件通过了编译,使用也是有这个那个的问题。但是现在 Ubuntu 已经把 iBus 作为默认输入法框架了,针对系统做了优化整合,如果擅自通过非 Ubuntu 源内的安装包进行更新的话,有可能会出现问题,真是悲剧,看来还是得在 iBus-pinyin 1.2.99.20091211-1ubuntu1_i386 上面下功夫了。
DoublePinyinTable.h 里面放着的是支持的几个双拼方案中声母韵母的键盘映射。反正我不会用里面其他的双拼方案,我就挑了个和小鹤双拼最接近的自然码对应表下手,把自然码的映射换成小鹤的。
具体替换如下:
$ diff DoublePinyinTable.h Xiaohe/DoublePinyinTable.h 2c2 < PINYIN_ID_VOID, // A --- > PINYIN_ID_ZERO, // A 6c6 < PINYIN_ID_VOID, // E --- > PINYIN_ID_ZERO, // E 28c28 < PINYIN_ID_VOID, // ; --- > PINYIN_ID_ZERO, // ; 60c60 < PINYIN_ID_VOID, // A --- > PINYIN_ID_ZERO, // A 64c64 < PINYIN_ID_VOID, // E --- > PINYIN_ID_ZERO, // E 90,92c90,92 < { PINYIN_ID_OU, PINYIN_ID_VOID }, // B < { PINYIN_ID_IAO, PINYIN_ID_VOID }, // C < { PINYIN_ID_UANG, PINYIN_ID_IANG }, // D --- > { PINYIN_ID_IN, PINYIN_ID_VOID }, // B > { PINYIN_ID_AO, PINYIN_ID_VOID }, // C > { PINYIN_ID_AI, PINYIN_ID_VOID }, // D 99,100c99,100 < { PINYIN_ID_AO, PINYIN_ID_VOID }, // K < { PINYIN_ID_AI, PINYIN_ID_VOID }, // L --- > { PINYIN_ID_UAI, PINYIN_ID_ING }, // K > { PINYIN_ID_UANG, PINYIN_ID_IANG }, // L 102c102 < { PINYIN_ID_IN, PINYIN_ID_VOID }, // N --- > { PINYIN_ID_IAO, PINYIN_ID_VOID }, // N 104c104 < { PINYIN_ID_UN, PINYIN_ID_VOID }, // P --- > { PINYIN_ID_IE, PINYIN_ID_VOID }, // P 111,114c111,114 < { PINYIN_ID_IA, PINYIN_ID_UA }, // W < { PINYIN_ID_IE, PINYIN_ID_VOID }, // X < { PINYIN_ID_UAI, PINYIN_ID_ING }, // Y < { PINYIN_ID_EI, PINYIN_ID_VOID }, // Z --- > { PINYIN_ID_EI, PINYIN_ID_VOID }, // W > { PINYIN_ID_IA, PINYIN_ID_UA }, // X > { PINYIN_ID_UN, PINYIN_ID_VOID }, // Y > { PINYIN_ID_OU, PINYIN_ID_VOID }, // Z
改完后,马上试试吧。这会可不忙着马上编译。先看看 configure 文件里面的内容,发现它默认的文件夹和 Ubuntu 源安装用的文件夹不同。看来 configure 的时候需要加几个参数。
./configure --prefix=/usr --exec-prefix=/usr --libexecdir=/usr/lib/ibus-pinyin make
编译通过后可别忙着安装,这是完全没有必要的。这套源码包是源里面最新版的,所以我们只需先安装源里面最新的 iBus-pinyin 先。
未安装 iBus-pinyin 的朋友只需
sudo apt-get install ibus-pinyin
就OK了。
已安装的则需要保证它是最新版本的。
sudo apt-get update sudo apt-get upgrade
然后将刚刚我们修改了双拼方案编译出来的 iBus-pinyin 中的 ibus-engine-pinyin 覆盖掉系统中没有小鹤双拼方案的 ibus-engine-pinyin ,如果不放心的话就备份一下旧的(记得把 iBus-Daemon 关了,不然你是没法复制过去的,嚯嚯)。为了确保没有问题,记得修改一下用户组和用户。
killall ibus-daemon sudo chown root:root ibus-engine-pinyin cp /usr/lib/ibus-pinyin/ibus-engine-pinyin /usr/lib/ibus-pinyin/ibus-engine-pinyin_bak cp ibus-engine-pinyin /usr/lib/ibus-pinyin/ibus-engine-pinyin ibus-daemon &
这样子基本就OK了。哈哈!进入配置选择双拼,方案选择“自然码”(当然已经被替换成小鹤双拼方案了),开始使用我习惯的小鹤双拼方案。虽然还有不少不尽如人意的地方,不过至少能忍了![]()
最近附上本文的一些相关数据,不保证文中一些方法在其他环境下适用。
- 操作系统:Ubuntu 10.04
- 内核:2.6.32-24-generic
- iBus版本:1.2.0.20091215-1ubuntu4
- iBus-pinyin版本:1.2.99.20091211-1ubuntu1
- g++ gcc版本:(Ubuntu 4.4.3-4ubuntu5) 4.4.3
相关文件
- iBus-pinyin 1.2.99.20091211-1ubuntu1_i386 源码包:ibus-pinyin_1.2.99.20091211.orig.tar.gz
- 小鹤双拼方案修改文件:DoublePinyinTable.h (直接替换源码包的内的相同文件)
- 小鹤双拼方案的补丁文件:DoublePinyin_ZRM2XH.patch (用于向源码包中 DoublePinyinTable.h 打补丁)
对于输入法我只要可以暂时使用小鹤双拼方案就行了,所以直接把自然码替换成小鹤就OK了。相信我不少完美主义者会希望直接多了个小鹤的选项。
各位完美主义者们可以试试:直接在 DoublePinyinTable.h 添加了小鹤的映射数组,然后在 setup 文件夹中的界面文件 ibus-pinyin-preferences.ui 里面中增加一下小鹤的选择项,同时还需要把 po 文件夹中的各个语言包 po 文件中将小鹤选项的语言翻译添加进去,然后就OK了。当然如果用这种方法修改的,就不能用上面的替换法来做了,编译完后需要安装
sudo checkinstall建议使用上面的 checkinstall ,通过这个命令安装后它会生成一个 deb 文件以备以后用来安装,如果安装失败的话它会回滚,以免残留垃圾文件。需要注意的是 checkinstall 需要另外安装一个包
sudo apt-get install checkinstall
先写到这吧。最后希望 iBus 能够早日支持自定义双拼方案,方便大众![]()















Recent Comments