iBus
此條目需要精通或熟悉相關主題的編者參與及協助編輯。 (2014年9月30日) |
Intelligent Input Bus,簡稱IBus,是 Unix-like 作業系統下的多語輸入法平台。因為它採用了匯流排(Bus)式的架構,所以命名為Bus。
開發者 | 黃鵬 |
---|---|
首次釋出 | 2008年8月10日 |
目前版本 | 1.5.27(2022年8月22日 | )
原始碼庫 | |
程式語言 | C, Python |
作業系統 | Unix-like |
語言 | 多語 |
類型 | 輸入法 |
特許條款 | GNU較寬鬆公共許可證 v2 |
網站 | IBus 專案頁面 |
中文輸入法 | |
發明人 | 黃鵬 |
---|---|
發明年份 | 2008年8月10日 |
類別 | 拼音 |
目標
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-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).