免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1698 | 回复: 3
打印 上一主题 下一主题

[桌面系统] 我是如何搞定Linux上的郑码输入法[原创] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-01-19 14:26 |只看该作者 |倒序浏览
不知道是什么年月的事情,我鬼使神差地喜欢上了郑码,虽然一直没有人为郑码开发出形形色色的智能输入法,但我也用惯了,可是当我换上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文件,如果没有,谁要给我发E-mail。
安装小企鹅输入法:
        # 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可以在拼音和五笔间切换。
6) 增加一些特殊符号的码表:
        # bzip2 -d wbfh.mb.tar.bz2
        # tar xvf wbfh.mb.tar
        # cp wbfh.mb /usr/share/fcitx/
7) 下面是想办法将/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文件有谁要,请给我E-mail,将这个文件直接覆盖/usr/share/fcitx/wbx.mb,然后重启X-Window就行了。

9) 要注意的是五笔中有个z功能键,得在~/.fcitx/config文件中将其去掉。就是打开这个文件将
Z模糊匹配=1改为0

这样,总算可以用了,如上不当之处,还请大虾指正,我的邮件地址:zgx@169ol.com

论坛徽章:
0
2 [报告]
发表于 2004-01-19 15:45 |只看该作者

我是如何搞定Linux上的郑码输入法[原创]

可惜使用“郑码”的人好像不太多
如果有“清华紫光”for LINUX就好了

论坛徽章:
0
3 [报告]
发表于 2004-01-19 15:56 |只看该作者

我是如何搞定Linux上的郑码输入法[原创]

也就是因为用“郑码”的人少,我不得不自己捉摸啊,也许这就是玩Linux的乐趣吧。
有紫光for Linux,SCIM上好象就有。也可以到紫光网站上去下载,Redflag-Linux是肯定带紫光的。

论坛徽章:
1
巳蛇
日期:2014-12-29 11:22:41
4 [报告]
发表于 2004-01-19 16:07 |只看该作者

我是如何搞定Linux上的郑码输入法[原创]

研究精神可嘉,这就是linux的DIY精髓所在
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP