iBus

✍ dations ◷ 2024-12-23 11:01:08 #输入法,中文输入法平台

Intelligent Input Bus,简称IBus,是 Unix-like 操作系统下的多语输入法平台。因为它采用了总线(Bus)式的架构,所以命名为Bus。

IBus 的主要目标如下:

在东北亚开源软件(OSS)论坛第3工作小组提出的“输入法引擎服务提供者界面规格”(Specification of IM engine Service Provider Interface)草案里,能实现以Bus为核心的架构被建议采用。SCIM-1.4 的架构并不被看好,因为它是用C++开发的,因此常常会有C++应用二进制接口不符合的情况发生。

从那时起,一些人开始着手开发下一代的输入法平台,像是苏哲领导的IM-Bus,以及胡正的SCIM-2,可惜的是它们的开发进度仍然停滞不前。因此,时任红帽(现任谷歌)的黄鹏开始用Python开发IBus以实现 IM-Bus提出的构想。IBus 并不完全实现东北亚OSS论坛所建议的函数,而是采用D-Bus及Glib来实做。尽管如此,IBus已经开始被OSS社群所接受,FreeBSD以及各大Linux发行版 如Fedora、Ubuntu已经将 IBus 纳入其包库里。在 Fedora 11 里,IBus已经成为默认的多语输入平台。

IBus 是用 C 及 Python 开发的,如此可以避免 C++ ABI transition 问题。IBus主要透过下列三种服务(Service)来提供功能:

IBus 使用D-Bus作 ibus-daemon服务,以及 IM客户端(像是konsole, gedit, firefox)之间的沟通。ibus-daemon 透过接受服务登录,以及发送D-Bus消息来管理服务及IM客户端。

IBus支持 XIM 协议及 Gtk IM 模块以及 Qt IM 模块。

ibus-m17n 利用m17n 架构下的输入法及相对应的图标来达成多语输入。由于m17n架构支持上下文(surrounding tex)t以及输入状态(state)。像是泰文输入法或是其他需要状态的输入法就由ibus-m17n来支持。输入法状态会显示在 IBus panel (语言条)上。

ibus-table 为余钰炜所开发,针对查表型输入法所设计的码表输入引擎。许多输入法,不需要像是 ibus-chewing 或是 ibus-pinyin 之类的复杂选字算法,只需要一个对照表即可运作。许多字形输入法像是仓颉输入法及五笔输入法都由 ibus-table 所支持。

官方发布的码表:

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:          self.commit_string (sp_res)         #self.add_string_len(sp_res)          self.db.check_phrase (sp_res, sp_res)        else:          if sp_res == 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 (): 之间新增

相关