一般輸入法模組: gen_inp
1. 簡介:
本文組是一般性輸入法通用模組,它可用來套用所有一般常見的 .cin 輸入法表
格如 phone(注音)、array30(行列 30)、cj(倉頡)、pinyin(拼音) .... 等。
對於其他的輸入法 (如: ar40 (行列 40) 、 Boshiamy (嘸蝦米) .... 等等),
只要您準備好一個 .cin 表格檔 (見 Cin 一文的說明),經過 cin2tab 的編譯
之後,即可用此模組套用。
本模組已盡可能支援 xcin-2.3.X 時代 vvvv 兄引入的所有新功能,以及 xcin
早期便已擁有的功能,包括先上字、快速鍵、結束鍵、選擇鍵移位模式 (即
vvvv 兄所引入的 %Bosh mode) .... 等等,可調的參數相當多。同時它也可
以支援一字多碼,相關細節請見 doc/Cin 一文的說明。
雖然只要有一個 phone.cin 即可用本模組套用為注音輸入法,但由於本模組設
計上的特點,可能造成注音輸入時一些限制,例如依使用者的使用習慣不同,注
音輸入法需要支援如許氏鍵盤、倚天鍵盤等不同的鍵盤對應。但其他的輸入法並
無這樣的需要,故 gen_inp 並不實作此功能。
儘管如此,若使用者在做注音輸入時不需要上述功能,依舊可以用本模組套用
注音輸入法來使用。
2. 設定:
您只要在 xcin 的 rcfile 中加入如下幾行即可:
===========================================================================
(define inpname
'((MODULE gen_inp)
(SETKEY 1)))
===========================================================================
其中:
a. "inpname" 是輸入法名。本模組可以接受任何的輸入法名,而其輸入法表格檔
即為 "inpname.tab"。
b. SETKEY: 指定本輸入法的啟動鍵。上例即為: ctrl+alt+1 。
c. MODULE: 指定輸入法模組名。在此一定要填入 "gen_inp" 。但由於一般而言
本模組都會設為預設的輸入法模組 (DEFAULT_IM_MODULE), 在這種情況下
不設此選項亦可。
d. INP_CNAME: 指定本輸入法的中文名稱。這裡的中文名稱有「全名」與「簡名」
的區別。「全名」通常是顯示在 xcin 第一主視窗中,而「簡名」通常是顯
示在 xcin 第二主視窗中,原因是 xcin 第一主視窗較大。在預設情況下,
一個輸入法的「簡名」是以它的「全名」的第一個字來代表,例如「注音」
的簡名即為「注」。如果使用者不喜歡這樣的預設,則可以透過此選項來設
定,其方式如下:
如果 INP_CNAME 的字串中沒有 "%%" 的話,則整個字串即為「全名」,而
其「簡名」就是全名的第一個字。反之,則 "%%" 之前為「全名」,之後則
為「簡名」。例如:
(INP_CNAME "行列30") ; 全名: 行列30, 簡名: 行
(INP_CNAME "行列30%%行30") ; 全名: 行列30, 簡名: 行30
e. AUTO_COMPOSE: 自動組字顯示。若為 yes, 則每當您按下任何鍵, xcin 都
會顯示目前您所輸入的鍵盤碼的組字結果。
f. AUTO_UPCHAR: 自動上字模式。若為 no, 則當您預到重複字選擇時,必須以該
輸入法所提供的選擇鍵來選字。若為 yes, 則您除了可以用選擇鍵選字以外,
您可以按任何一個「非選擇鍵」直接選取第一個字。
g. AUTO_FULLUP: 另外,當您在敲滿該輸入法的最大字鍵數時 (如倉頡輸入法的最
大字鍵數是 5 個字鍵),若這時沒有重複字,則 xcin 會直接將該字輸出,
不需要再多按一個 space 鍵。
h. SPACE_AUTOUP: 空白鍵自動上字模式,本選項只有在 AUTO_UPCHAR 為 yes 時
才能開啟。若設為 no, 當您在做重複字選擇時,您無法用空白鍵直接選取
第一個字。若為 yes 則反之。此選項設定與否與您的輸入法的重複字數有
關。如果您的輸入法重複字相當多,往往不能在一頁中全部列出來,則您往
往需要利用 space 鍵換下一頁,這時您必須將此功能關閉。若您的輸入法重
複字少,所有的重複字情況都能在一頁之內列完,則您可以考慮打開此選項
以加快輸入的速度。
i. SELKEY_SHIFT: 選擇鍵移位模式,本選項只有在 AUTO_UPCHAR 為 yes 時才能
開啟。一般情況 (本選項設為 no 時),第一個選擇鍵對應第一個重複字,第
二個選擇鍵對應第二個重複字,以此類推。但若將本選項設為 yes 時,則第
一個選擇鍵會對應第二個重複字,第二個選擇鍵會對應第三個重複字,其餘
以此類推。而第一個重複字則會以「先上字」預設選第一個的方式輸出。此
選項的一個好處是,如果重複字多的話,每一頁所列出的重複字數可以多一
個 (因為選擇鍵往後移一位) ,但是否開啟端視個人使用習慣而定。
j. SPACE_IGNORE: 滿字根空白鍵忽略模式,本選項只有在 AUTO_FULLUP 為 yes 時
才能開啟。所謂「滿字根」即您所敲入的鍵數已達該輸入法的最大字鍵數。
由自動上字功能,我們可知,在這種情況下若無重複字出現時, xcin 會直
接將該字輸出,不需要再多打一個空白鍵。但可能會有使用者會習慣上仍然
多打一個空白鍵,這時候,如果此選項為 no 時, xcin 會將多打的空白鍵
直接輸出,因此您會見到剛剛輸出的字後會多一個空白。若設為 yes 時,
則 xcin 會將此空白鍵吸收,讓它沒有作用。
k. SPACE_RESET: 若設為 yes 時,則當您輸入錯誤時,可以按一下 space 鍵自動
清除,以重新輸入。
l. AUTO_RESET: 若設為 yes 時,則當您輸入錯誤時, xcin 會馬上自動清除,以
便重新輸入。
m. WILD_ENABLE: 廣字鍵集模式。若本選項設為 yes, 則當您臨時忘記某個字的
輸入法時,您可以在您記得的字鍵碼之後加個 "*" ,例如 "abs*", 則 xcin
會列出以 "abs" 碼開始所有的字供您挑選。
n. SINMD_IN_LINE1: 若設為 yes 時,則原本顯示在 xcin 視窗右下角的字鍵碼
會移到 xcin 視窗的第一行來顯示。此選項開啟只有在使用 xcin 第一主
視窗時才會見到效果。
o. END_KEY: 結束鍵模式,本選項只有在該輸入法有定義 endkey 時才有作用 (請
見 Cin 一文的說明) 。所謂的 endkey 指該輸入法中結束的自鍵,若設此選
項為 yes, 則每次您敲入任何一個定義為 endkey 的字鍵時,xcin 會馬上將
此字輸出,不需要再按額外的按鍵。
p. QPHRASE_MODE: 設定 modifier escape mode 。詳見 im_comm 一文的說明。
q. DISABLE_SEL_LIST: 用來設定在按下某個鍵之後,再按選字鍵時,則此選字
鍵便失去了選字功能,與一般輸入鍵無異。此功能是針對行列 30 輸入法
的特殊需求而設計。在行列 30 輸入法的標準中,選字鍵為 "1234567890",
但當我們輸入 "w" 再輸入 "0" 至 "9" 任何一鍵時,則這時的選字鍵應視
為一般的輸入鍵,而最後的結果是顯示出特殊符號列表。在此情況下,必
須設定此選項為:
(DISABLE_SEL_LIST "w")
則 xcin 在見到您輸入了 "w", 接著在輸入 "0" 至 "1" 的任一鍵時,則
就會直接顯示出特殊符號表 (定義在 array30.cin 中),而不會將它們解
釋為選字鍵了。
您也可以設定多個這一類的字鍵,例如如果您設定此選項為 "wt" 時,則
當您在輸入 "w" 或者 "t",接著再輸入選字鍵時,作用同上,選字鍵會被
視為一般的字鍵。
若您不需要此功能,可以將此選項設為 "NONE", 或者乾脆將此選項自您的
xcinrc 檔中移除即可。
r. KEYSTROKE_REMAP: 此選項可用來設定字鍵重新對應的功能。其格式如下:
(KEYSTROKE_REMAP "<key1>:<char1>;<key2>:<char2>;....")
則表示當您按下 <key1> 再按下 space 鍵上字時,xcin 會忽略原本在 .cin
檔中所定義的 <key1> 所代表的字,而改以 <char1> 字來上字。同理 <key2>
鍵會改以 <char2> 字來上字。此功能是針對行列 30 輸入法的需求而設計的。
如果將它設成 "NONE" 時則取消此功能。
s. BEEP_WRONG: 可以是 yes 或 no, 分別代表輸入錯誤時, 發出「嗶」一聲或靜音。
t. BEEP_DUPCHAR: 若設為 yes 時,則當您遇到重複字時, xcin 會發出「嗶」一
聲,否則為靜音。
3. 全域設定:
由於本模組的設定項目相當多,因此當您需要為許多輸入法進行設定時,可能會
很不方便。再者,很多人在輸入法的使用習慣多半是很固定的,故各輸入法所需
的設定可能大部分都相同,只有少部分不一樣。在這情況下,若使用輸入法的全
域設定,則可以大大減化 xcinrc 的內容。
本模組的全域設定方式如下:
===========================================================================
(define gen_inp_default
'((cmd1 value1)
(.... ......)))
===========================================================================
也就是說,只要將上頭的 inpname (輸入法名) 改成 gen_inp_default 即可,其
餘的設定項與上頭所列的完全相同。通常我們會在這全域設定中設好所有項目,
做為所有採用 gen_inp 模組的輸入法預設值,而各別的輸入法只要針對與這裡的
預設值不同的部分進行設定即可。
4. 範例:
首先我們先做一個輸入法的全域設定。這個全域設定與 locale 環境無關,故對於
任何 locale 都可適用:
(define gen_inp_default
'((AUTO_COMPOSE YES)
(AUTO_UPCHAR YES)
(AUTO_FULLUP NO)
(SPACE_AUTOUP NO)
(SELKEY_SHIFT NO)
(SPACE_IGNORE NO)
(SPACE_RESET YES)
(AUTO_RESET NO)
(WILD_ENABLE YES)
(SINMD_IN_LINE1 NO)
(END_KEY NO)
(QPHRASE_MODE 0) ; 1: shift, 2: ctrl, 4: alt
(DISABLE_SEL_LIST "NONE")
(KEYSTROKE_REMAP "NONE")
(BEEP_WRONG YES)
(BEEP_DUPCHAR NO)))
接下來是各輸入法的細部設定。這裡只以幾個較特殊的輸入法為例,提供建議的設
定項。若是注音輸入法,由於我們希望在打完二聲、三聲或四聲時就自動上字,故
我們需要開啟 END_KEY 功能。同時我們也希望它在重複字選項時也發出「嗶」聲,則:
(define phone@big5
'((SETKEY 3)
(END_KEY YES)
(BEEP_DUPCHAR YES)))
若是行列 30 輸入法,則我們需要 DISABLE_SEL_LIST 與 KEYSTROKE_REMAP 這兩
個功能,其中前者以 w 鍵與後續的選字鍵 (即 123456789) 來輸入特殊符號 (請
見 xcin-2.5/cin/big5/array30.cin), 而後者以 t 鍵來直接輸出 "的" 字:
(define array30@big5
'((SETKEY 8)
(DISABLE_SEL_LIST "w")
(KEYSTROKE_REMAP "t:0xaaba;")))
至於其他的輸入法,方式相同,使用者可以自行參照設定。
5. 輸入法表格列表:
以下是目前 xcin 內含的 gen_inp 輸入法模組的輸入法表格列表,同時也列出一
些特殊輸入法建議的 xcinrc 選項。
big5/: (台灣地區)
1. array30.cin: 行列 30 輸入法表格。
(DISABLE_SEL_LIST "w")
(KEYSTROKE_REMAP "t:0xaaba;")
2. cj.cin: 倉頡輸入法表格。
3. phone.cin: 注音輸入法表格。
(END_KEY "YES")
4. pinyin.cin: 拼音輸入法表格。
(END_KEY "YES")
5. simplex.cin: 簡易輸入法表格。
6. jyutping.cin: 粵語拼音輸入法表格。
(END_KEY "YES")
7. jyutping0.cin: 粵語拼音輸入法表格 (沒有音調)。
big5hkscs/: (香港地區)
1. cj.tab: 倉頡輸入法表格。
gb2312/: (大陸地區)
1. jtcj_gb.tab: 倉頡輸入法表格。
2. pinyin.tab: 拼音輸入法表格。
3. phonegb2.tab: 注音輸入法表格 (繁體注音輸入,簡體字輸出)。
(END_KEY "YES")
4. shuangpin.tab: 雙拼輸入法表格。
5. wubizixing.tab: 五筆輸入法表格。
T.H.Hsieh