iBus
此条目需要精通或熟悉相关主题的编者参与及协助编辑。 (2014年9月30日) |
开发者 | 黄鹏 |
---|---|
首次发布 | 2008年8月10日 |
当前版本 | 1.5.27(2022年8月22日 | )
原始码库 | |
编程语言 | C, Python |
操作系统 | Unix-like |
语言 | 多语 |
类型 | 输入法 |
许可协议 | GNU宽通用公共许可证 v2 |
网站 | IBus 项目页面 |
中文输入法 | |
发明人 | 黄鹏 |
---|---|
发明年份 | 2008年8月10日 |
类别 | 拼音 |
Intelligent Input Bus,简称IBus,是 Unix-like 操作系统下的多语输入法平台。因为它采用了总线(Bus)式的架构,所以命名为Bus。
目标
IBus 的主要目标如下:
开发动机
在东北亚开源软件(OSS)论坛第3工作小组[1]提出的“输入法引擎服务提供者界面规格”(Specification of IM engine Service Provider Interface)草案里[2],能实现以Bus为核心的架构被建议采用。SCIM-1.4 的架构并不被看好,因为它是用C++开发的,因此常常会有C++应用二进制接口不符合的情况发生[3]。
从那时起,一些人开始着手开发下一代的输入法平台,像是苏哲领导的IM-Bus,以及胡正的SCIM-2,可惜的是它们的开发进度仍然停滞不前。因此,时任红帽(现任谷歌)的黄鹏开始用Python开发IBus以实现 IM-Bus提出的构想。IBus 并不完全实现东北亚OSS论坛所建议的函数,而是采用D-Bus及Glib来实做。尽管如此,IBus已经开始被OSS社群所接受,FreeBSD以及各大Linux发行版 如Fedora、Ubuntu已经将 IBus 纳入其包库里。在 Fedora 11 里,IBus已经成为默认的多语输入平台[4]。
系统架构
IBus 是用 C 及 Python 开发的,如此可以避免 C++ ABI transition 问题。IBus主要透过下列三种服务(Service)来提供功能:
- 输入法引擎服务:为输入法本身。
- 配置服务:管理IBus以及输入法的设置选项。
- 控制面板服务:提供诸如语言条,候选字菜单等用户界面。
IBus 使用D-Bus作 ibus-daemon服务,以及 IM客户端(像是konsole, gedit, firefox)之间的沟通。 ibus-daemon 透过接受服务登录,以及发送D-Bus消息来管理服务及IM客户端。
IBus支持 XIM 协议及 Gtk IM 模块以及 Qt IM 模块。
特点
现有输入法引擎列表
- ibus-anthy: 日文输入法。
- ibus-array: 行列输入法
- ibus-bopomofo: 使用注音符号的拼音输入法,基于ibus-pinyin引擎开发[5],但输入方式与一般标准智慧形注音输入法(如新酷音输入法或微软新注音)不同。
- ibus-chewing: 新酷音输入法,智慧形注音输入法。
- ibus-hangul: 韩文输入法。
- ibus-kkc:日文假名汉字转换输入法。
- ibus-m17n: 使用m17n-db的多语输入法,细节请参阅 #ibus-m17n。
- ibus-pinyin: 拼音输入法,为IBus主要开发者所开发。
- ibus-libpinyin: 是 Red Hat 工程师主导、基于 n-gram 语言模型的集成性泛拼音输入法引擎。
- ibus-libzhuyin: 与 ibus-libpinyin 系出同源,支持注音符号输入,名为“新注音”(New Zhuyin) 输入法,是智慧形的注音输入法。
- ibus-table: 码表输入引擎,细节请参阅 #ibus-table。
- ibus-googlepinyin: Google拼音输入法的ibus版本(这个并不是官方的Google输入法,而是由爱好者从Android项目上迁移过来)
ibus-m17n
ibus-m17n 利用m17n 架构下的输入法及相对应的图标来达成多语输入。由于m17n架构支持上下文(surrounding text)以及输入状态(state)。像是泰文输入法或是其他需要状态的输入法就由ibus-m17n来支持。输入法状态会显示在 IBus panel (语言条)上。
ibus-table
ibus-table 为余钰炜所开发,针对查表型输入法所设计的码表输入引擎。许多输入法,不需要像是 ibus-chewing 或是 ibus-pinyin 之类的复杂选字算法,只需要一个对照表即可运作[6]。许多字形输入法像是仓颉输入法及五笔输入法都由 ibus-table 所支持。
官方发布的码表[7]:
- latex: 使用 latex 语法来输入特殊符号,ibus-table 自带
- compose: 使用 compose letter 及 diacritical mark 来输入特殊字符,ibus-table 自带。
- Array30: 行列30输入法。
- Cangjie: 仓颉及速成、三代及五代。
- Erbi: 二笔输入法。
- Wubi: 五笔输入法。
- Yong: 永码输入法。
- ZhengMa: 郑码输入法。
1.可选字由默认的1页6个换成主流的1页9个
查找 _page_size = 6
修改为
_page_size = 9
2.空白键跳下一页选字
查找 elif key.code == keysyms.space:
将下面的
o_py = self._editor._py_mode
sp_res = self._editor.space ()
#return (KeyProcessResult,whethercommit,commitstring)
if sp_res[0]:
self.commit_string (sp_res[1])
#self.add_string_len(sp_res[1])
self.db.check_phrase (sp_res[1], sp_res[2])
else:
if sp_res[1] == u' ':
self.commit_string (cond_letter_translate (u" "))
if o_py != self._editor._py_mode:
self._refresh_properties ()
self._update_ui ()
return True
换成
res = self._editor.page_down()
self._update_lookup_table ()
return res
3.backspace键 跳上一页选字
查找 elif key.code == keysyms.BackSpace:
将下面的
res = self._editor.backspace ()
self._update_ui ()
取代为
res = self._editor.page_up ()
self._update_lookup_table ()
4.单一个码空白键自动选字,数字键区选字 查找
if key.mask & modifier.RELEASE_MASK:
return True
if self._editor.is_empty ():
于 return True
与 if self._editor.is_empty ():
之间
新增
if key.code>=65457 and key.code<=65465 :
key.code-=65408
elif key.code == keysyms.space and len(self._editor._chars[0])==1:
key.code=keysyms._1
缺陷
参阅
参考资料
- ^ Northeast Asia Open Source Software Forum (页面存档备份,存于互联网档案馆).
- ^ Specification of IM engine Service Provider Interface (页面存档备份,存于互联网档案馆).
- ^ SCIM ABI transition in sid (页面存档备份,存于互联网档案馆).
- ^ Fedora 11 Feature List (页面存档备份,存于互联网档案馆).
- ^ 存档副本. [2010-11-06]. (原始内容存档于2010-12-24).
- ^ ibus-table README (in Chinese and English). [2009-05-12]. (原始内容存档于2009-03-18).
- ^ IBus Google Downloads. [2009-05-12]. (原始内容存档于2009-03-01).
- ^ When Chinese ibus input is on, selecting text on Firefox textareas makes the text disappear. [2015-05-13]. (原始内容存档于2015-09-06).