西西河

主题:【求助】如何在英文LINUX下输入中文? -- 东湖珞珈

共:💬9 🌺2
全看分页树展 · 主题 跟帖
家园 【文摘2】Linux下的中文输入

[SIZE=3]Linux下的中文输入[/SIZE]

作者:于明俭

----------------------------------------------

在汉字输入上, GB 与 Big5 的输入由于历史与习惯的原因, 已截然分化成两种, 这就是在大陆最流行的 Chinput 和 在台湾最流行的 XCIN, 它们都经历了自定义协议阶段, 目的是配合外挂式中文平台, 最终向国际化标准协议靠拢, 即支持XIM协议(日语输入软件kinput2也经历了漫长的过程). 在中文平台TL-ZWinPro下使用Chinput, 它的XIM协议和原来的协议能够无缝接合使用. 

目前Chinput已成为大陆最流行的Linux中文输入软件. 它被众多的Linux中文平台所采用: 

TurboLinux 中文版3.02,4.0: 北京拓林思软件公司 
ZhXWin: 由宫敏博士开发的Linux下的中文平台 
Xteam Linux 1.0: 北京冲浪平台 
BluePoint Linux(preview): 网络工作室 
Chinput 以CXterm的输入引擎为基础, 支持中文GB/GBK/Big5, 日文和韩文输入. 后又增添了李振春先生的智能拼音输入, 使输入法日臻完备. 它具有独特的无边界窗口, 浏览输入模式, 单双行输入模式, 颜色字体可配置性. 如果配合中文平台 TL-ZWinPro, 它可以根据窗口当前的编码自动输入GB/GBK/Big5.极大地方便了中文用户的网上冲浪, 如浏览网页时的输入, 上BBS时输入, 都有可能需要同时输入GB和Big5编码, 这时您不必要重新启动Chinput, 便可以输入这两种不同的编码. 

下面简述Chinput的中文输入接口, 以便有兴趣开发中文软件的Linux 程序员有更深入的认识. 


Chinput 协议 
Chinput的最初协议是基于ClientMessage的Chinput协议. 它的 主要目的是为X Window下的客户程序提供方便的汉子输入接口. 它所提供的主要接口函数有: 

int HZclientInit() -- 初始化输入服务器 
int HZsendKey() -- 以ClientMessage方式把键码发送给输入服务器 
int HZprocInput() -- 处理输入服务器传来的输出 
int HZqueryServer() -- 查寻输入服务器的信息 
在 Chinput 注册的原子(Atom)有: 

"_CHINESE_CONVERSION" -- Chinput 
"_CHINESE_CONTROLBAR" -- 用于控制的控制条 
"_HZ_OUTPUT_ATOM" -- 输出汉字 
"_HZ_INPUT_ATOM" -- 输入汉子 
"_HZ_CONFIG_ATOM" -- 配置属性 
"_HZ_QUERY_ATOM" -- 查询属性 
"_HZ_REPLY_ATOM" -- 答复属性 
"_HZ_GRASP_ATOM" -- 抓词 
上述原子用于 Chinput 和应用软件、控制条、抓词服务器之间进行 通讯. 控制条可以选择输入方法, 应用软件也可以通过热键选择输入 方法. 特别是应用软件可以配置输入条的输出编码. 

使用Chinput协议必须有中文平台支持, 在TurboLinux中, 必须设置 环境变量 LD_PRELOAD=/usr/lib/libZWin.so 


XIM 协议 
Chinput 对X11R6的国际化输入提供了标准接口, 即XIM接口. Chinput 所使用的Locale是zh_CN, 定义的输入服务器名称是"Chinput", 所以 在客户程序找不到 Chinput 时, 应设置XMODIFIERS为"@im=Chinput". 

XIM 的输入风格(preedittype)共有四种: on the spot, over the spot, off the spot, root window, "on the spot" 是在Client软件的当前 输入处输入, "over the spot" 是在当前输入处之上有一预编辑窗口提供 输入, "off the spot" 是在输入窗口的下方提供预编辑取和输入状态显示 区, "root window" 是在独立于输入软件的窗口中(该窗口为根窗口的子 窗口)输入. 可以看出, "root window" 是比较适合汉字输入的. Chinput 目前只支持根窗口输入风格(root-window style). 如果有必要, 其它的输入风格也将被陆续加入. 

XIM 支持与原协议无缝结合, 对用户来说是不透明的. 当用户在中文 平台上使用XIM支持的软件时, 原协议对该应用软件自动失效. 这要求 中文平台需要作特殊处理, 才能避免两种协议的冲突. 

当您使用高层库函数, 如gtk/qt/Motif时, 您不必关心客户端的接口, 当使用Xlib写客户程序时, 请参见文章 编写支持XIM的客户软件. 

支持软件(运行前设置LC_ALL=zh_CN.EUC, LANG=zh_CN.EUC) 

nxterm, 修改源码. 中文显示需中文平台支持 
xemacs, 编译:configure --with-xim=xlib 
rxvt2.60, 编译:configure --enable-xim --enable-gb, 运行: rxvt -im Chinput -pt Root 
netscape: 需改动Netscape.ad, 部份输入区有问题: 
Netscape*fontList: -*-helvetica-bold-r-*-*-*-140-*-*-*-*-iso8859-*;-*-gb13000.1993-1: 
xedit: 资源文件,

 
	xtDefaultFontSet: cclib16,-adobe-*-iso8859-1
	xedit*international: True
	xedit*fontSet: -tlc-*--16-160-75-75-c-160-gb2312.1980-1, -adobe-courier-bold-r-*
	-16-*-iso8859-1
	.Xedit.shellext.inputMethod:    Chinput
	.Xedit.shellext.preeditType:    Root 
vim-5.4 命令:vim -g (aka gvim): X 资源文件
	Vim*international: True
	Vim*.inputMethod: Chinput
	Vim*.preeditType: Root
	Vim.font: -sony-fixed-medium-r-normal--16-120-100-100-c-80-iso8859-1
	Vim*fontSet: -sony-fixed-medium-r-normal--16-120-100-100-c-80-iso8859-1,-tlc-song-medium-r-normal--16-160-75-75-c-160-gb13000.1993-1
	Vim*fontList: -sony-fixed-medium-r-normal--16-120-100-100-c-80-iso8859-1,-tlc-song-medium-r-normal--16-160-75-75-c-160-gb13000.1993-1
	vim 资源文件 .gvimrc(.vimrc):
	:set fileencoding=prc
	:set guifontset=-sony-fixed-medium-r-normal--16-120-100-100-c-80-iso8859-1,-tlc-song-medium-r-normal-*-16-*-*-*-*-*-gb13000.1993-1
	
qt-1.44(i18n patched)/KDE: setenv XMODIFIERS @im=Chinput 
gtk/gnome: 设置 fontset 
gimp: 须修改资源文件 
Motif: 设置 fontset 
全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河