[2004年舊文]我是如何搞定Linux上的鄭碼輸入法[原創]

[放到這兒來,只是爲了備份]

不知道是什麼年月的事情,我鬼使神差地喜歡上了鄭碼,雖然一直沒有人爲鄭碼開發出形形色色的智能輸入法,但我也用慣了,可是當我換上Linux後,發現基本上沒有提供這個Windows自帶的形碼輸入法,搜尋了很多Linux發行版上的中文輸入法,發現只有紅旗Linux是自帶鄭碼輸入法,可惡的是紅旗沒有公開它的輸入法源碼,且用了一段時間紅旗4.0覺得不爽,做得太傻,且會無緣無故地崩潰。於是我嘗試着將紅旗的輸入法裝到其它發行版的Linux上,不是裝不上,就是裝上去將KDE搞死,動也不能動。終於絕望:(後來我找到了小企鵝輸入法,用了覺得很不錯。經過一番改造,將其五筆換成了鄭碼,現將過程寫下,以與大家分享經驗:)
到http://www.fcitx.org的網站上下載:http://www.fcitx.org/download/fcitx-2.0.1.tar.bz2輸入法的源程序。
在http://www.fcitx.org的網站上下載:http://www.fcitx.org/download/wbfh.mb.tar.bz2。
在你的Windows操作系統中找到:imegen.exe文件。
安裝小企鵝輸入法:

# bzip2 -d fcitx-2.0.1.tar.bz2

# tar xvf fcitx-2.0.1.tar

# cd fcitx-2.0.1

# make clean ; make ; make install

假設你已經用的是漢化版的Linux,那就找到/etc/X11/xinit/xinitrc文件
將其中原先的輸入法自啓動腳本去掉,比如我的操作系統是Turbolinux10.0,我就將該文件中的如下一段:

        elif [ "${LANG%%.*}" = "zh_CN" ] ; then
        if [ -x /usr/bin/scim ]; then
        /usr/bin/scim -d
        export XMODIFIERS="@im=SCIM"
        fi

修改爲:

        elif [ "${LANG%%.*}" = "zh_CN" ] ; then
        if [ -x /usr/bin/fcitx ]; then
        export XMODIFIERS="@im=fcitx"
        /usr/bin/fcitx
        fi

這樣就完成了一進入圖形界面就自啓動小企鵝輸入法,用Ctrl + Space就可以調出,Ctrl + Shift可以在拼音和五筆間切換。
增加一些特殊符號的碼錶:

# bzip2 -d wbfh.mb.tar.bz2

# tar xvf wbfh.mb.tar

# cp wbfh.mb /usr/share/fcitx/

**下面是想辦法將/usr/share/fcitx/wbx.mb給替換成鄭碼的碼錶: **
用imegen.exe將你機器中C:\WINDOWS\system32\WINZM.MB文件轉成zm.txt文件。由於這個格式和wbx.mb的格式不一樣,是中文字或詞後緊跟編碼,有些是一個編碼,有些是二個編碼。而小企鵝輸入法的wbx.mb文件是一行一個編碼,空格後跟中文的字或詞。所以我就寫了小程序轉換了一下,開始想用標準C寫,後來覺得還是C#方便,就叫我一兄弟花了十分鐘給我寫了一下,下面是C#的源碼:

using System;
using System.IO;

namespace MBConvertor
{
  class MBConvertor {
  static char[] asiic = new char[26];
  [STAThread]
  static void Main(string[] args) {
   if(args.Length==0){
    Console.WriteLine("Usage: MBConvertor srcfile dstfile\r\nAuthor:Liteng copyright@2004-01-19";
    return;
   }
   String sample = "abcdefghijklmnopqrstuvwxyz";
   asiic = sample.ToCharArray();
   StreamWriter sw = new StreamWriter(args[1]);
   sw.AutoFlush = true;
   int counter = 0;
   try{
    using(System.IO.FileStream fs = new FileStream(args[0],FileMode.Open,FileAccess.Read,FileShare.Read)){
     using(StreamReader sr = new StreamReader(fs)){
      while(true){
       String ln = sr.ReadLine();
       if(ln == null)break;

       try{
        int flag = ln.IndexOfAny(asiic);
        String chinese = ln.Substring(0,flag);
        String english = ln.Substring(flag);
        String[] lns = english.Split(' ');
        foreach(String str in lns){
         sw.WriteLine(str + " " + chinese);
        }
       }catch(Exception ex){
        Console.WriteLine(ex.ToString());
        continue;
       }
       counter++;
      }
     }
    }
    sw.Close();
   
    Console.WriteLine("Convert works done,total lines of source file converted:" + counter);
   }catch(Exception ex){
    Console.WriteLine(ex);
   }
  
  }
}
}

轉換的時候有點問題,就是C#讀進去的文件得是UNICODE的,我先用UltraEdit將zm.txt轉成UNICODE的,再用C#小程序轉成zm1.mb文件,然後用Notepad打開zm1.mb,將其重新存儲爲zm.mb,格式選的是ANSI,這樣將這個文件傳到Linux機器上。

生成的zm.mb文件,將這個文件直接覆蓋/usr/share/fcitx/wbx.mb,然後重啓X-Window就行了。

要注意的是五筆中有個z功能鍵,得在~/.fcitx/config文件中將其去掉。就是打開這個文件將
Z模糊匹配=1改爲0

這樣,總算可以用了,如上不當之處,還請大蝦指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章