iBus

来自Local Chinese Wikipedia
跳转到导航 跳转到搜索

IBus
Intelligent Input Bus (IBus)
Intelligent Input Bus (IBus)
开发者黄鹏
首次发布2008年8月10日 (2008-08-10)
当前版本1.5.27(2022年8月22日,​3年前​(2022-08-22
原始码库
  • {{URL|example.com|可选的显示文本}}
Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
编程语言C, Python
引擎
    Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
    操作系统Unix-like
    语言多语
    类型输入法
    许可协议GNU宽通用公共许可证 v2
    网站IBus 项目页面
    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-BusGlib来实做。尽管如此,IBus已经开始被OSS社群所接受,FreeBSD以及各大Linux发行版FedoraUbuntu已经将 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 模块。

    特点[编辑]

    • 输入法引擎可以随时加载与卸载
    • Systray 支持
    • XKB英语X keyboard extension 支持
    • 配置选项更动可即时生效。
    • 提供 C 与 Python 的界面

    现有输入法引擎列表[编辑]

    • 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 所支持。

    File:IBus Ubuntu 12.04.1 LTS CHT.png
    在Ubuntu 12.04.1 LTS使用IBus 1.4.1(仓颉第五代)及其偏好设置

    官方发布的码表[7]:

    一些table.py手动修改

    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
    

    缺陷[编辑]

    • 由于读取SQLite词库时有大量的IO操作,ibus-pinyin在系统高负载时输入时有卡住的现象。
    • 当用户在火狐浏览器文本框输入文字并希望选中文字时,文字将会自动删除[8]

    参阅[编辑]

    参考资料[编辑]

    1. Northeast Asia Open Source Software Forum页面存档备份,存于互联网档案馆).
    2. Specification of IM engine Service Provider Interface页面存档备份,存于互联网档案馆).
    3. SCIM ABI transition in sid页面存档备份,存于互联网档案馆).
    4. Fedora 11 Feature List页面存档备份,存于互联网档案馆).
    5. 存档副本. [2010-11-06]. (原始内容存档于2010-12-24). 
    6. ibus-table README (in Chinese and English). [2009-05-12]. (原始内容存档于2009-03-18). 
    7. IBus Google Downloads. [2009-05-12]. (原始内容存档于2009-03-01). 
    8. When Chinese ibus input is on, selecting text on Firefox textareas makes the text disappear. [2015-05-13]. (原始内容存档于2015-09-06). 

    外部链接[编辑]