Since many users of Emacs/Xemacs find problems with Chinese input, please find attached a short article written by me sometime before on how to improve improve it.
Best! -- | This message was re-posted from debian-chinese-gb@lists.debian.org | and converted from gb2312 to big5 by an automatic gateway.Title: Addition to Input Method
改进Linux下Emacs/XEmacs的输入法
在Linux下最常用的两种编辑器是vi和Emacs/Xemacs,而后者不仅是一个编辑器,还是一个集成环境,在Emacs/Xemacs里几乎可以做所有你想做的。更好的事是它自带了多语种处理环境MULE(多语种环境扩展),可以方便地编辑、显示汉语文件。
Emacs/Xemacs中文输入简介
为了输入中文,需要首先设置语言环境。这可以选择菜单Mule上的Set language envronment,再选Chinese-GB或其他所需的语言环境即可。
下一步是选择输入法:从Mule菜单上选择Select input method或用键盘Ctrl-x Ctrl-m Ctrl-\。Ctrl-x表示同时按Ctrl键和x键,余同。如果想暂时切换到英文输入状态,可以用键盘Ctrl-\,再按Ctrl-\则回到中文输入状态。
如果不知道中文输入法的名称,可以从Mule菜单上选择Describe language suport,看该语言环境(如Chinese-GB)提供哪些输入法,或在按盘Ctrl-x Ctrl-m Ctrl-\后,只输入chinese,让Emacs/Xeamcs提供所有的选项。
中文标点符号输入的麻烦
遗憾的是,其中的中文输入法因为没有输入中文标点符号的功能,在Emacs/Xemacs里使用起来很不方便。要输入中文标点时,必须选择专门的标点输入法chinese-punct或全角输入法chinese-qj,这意味着要按Ctrl-x Ctrl-m Ctrl-\六次键,还要输入输入法的名称,切换回原输入法时还得这样做,非常麻烦。有趣的是,在名为chinese-py-punct的输入法里也没有找到输入中文标点的输入办法。
造成这个问题的根源似乎在于Mule的中文输入法出自中文Xterm上的输入法。因为在CXterm下切换输入法只用按一个功能键如F1,非常方便。所以其他输入法没有增加标点输入功能的必要。
解决办法
笔者刚接触到Emacs/Xemacs时就遇到这个问题,在中国自由软件库站点提供的Linux新闻组中20000多条信息中搜索很久,也没有找到解决这个问题的好办法,只好自己去摸索。也许行家早久找到解决办法了,只是由于某种原因,初学者无缘得识。现将笔者的解决办法提出来供大家参考,希望能省去后来者的重复劳动,更希望有关商家在发行版中做相应修改,省去用户的麻烦。
解决的思路其实极其简单,即在输入法的词典中增加标点符号的词条,使得在中文输入状态下击标点符号键时Mule的有关程序可以转换为中文的标点符号。我们需要有关的lisp源程序,如全拼输入法chinese-py-punct对应的lisp程序名是py-punct.el,对该程序作所需修改后,存盘,选择菜单Emacs-lisp上的Byte-compile this file重新编译该文件。用该文件替换系统中的旧文件即可。
例如Xemacs下的py-punct.el文件,在(quail-define-rules这行下面,加入如下几行,即可实现大部分的中文标点输入:
("\"" [""" "“" "”" "″"]) ("$" ["¥" "$" "¢" "£"]) ("%" ["%" "‰"]) ("'" ["'" "‘" "’" "′"]) ("(" ["("]) (")" [")"]) ("+" ["+" "=" "≠"]) ("," [","]) ("." ["。"]) (":" [":" "∶" "∷"]) (";" [";"]) ("<" "<〈《") (">" [">" "〉" "》"]) ("/" ["?" "×" "÷"]) ("@" ["·" "." "°"]) ("^" ["…"]) ("_" ["_" "-" "ˉ" "—"]) ("!" ["!"]) ("\134" ["、"])
当然,每个人可以根据自己的习惯自行定义,增减对应的中文标点。这正是自由软件与公开源代码的好处。应该注意的是,其他输入法的格式可能不同,读者做相应调整即可。
bruce Last modified: Wed Apr 12 08:16:05 CST 2000