一般輸入法模組: 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
