摘录─GBK环境下Emacs与外部程序间拷贝、粘贴问题的解决方法[1]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

mule-gbk 是给 GNU Emacs21 写的 GBK 支持软件包.
在 emacs-unicode 正式融入 Emacs 的主干之前, 你很可能会需要用到 mule-gbk.

警告: 我不保证该软件不会损坏你的中文文本!

GBK 是一套比 GB2312 更大的中文字符集, 确切地说是 GB2312 字符集的一个超集.
GBK 既不是所谓的 94x94 或者 96x96 字符集也不是 UFT-8, UTF-16 等的子集, Emacs 中
处理多国语言的部分被成为 Mule, 它能很好得对付94x94(GB2312 是一个94x94字符集)和
96x96字符集, 对 UFT 也有特殊的照顾, 但就是没提供对 GBK 和 GB18030 这些中文字符
集的支持, 虽然用户可以通过 UCS 来使用 GBK 和 GB18030, 但这样不仅不方便, 而且也
无法使用 GBK 和 GB18030的字库. 根据我对 Mule 的研究和在 Mule 的 mailing list 上
的讨论, 可以断定目前的 Mule 几乎已经没有可供支持 GBK 的发展余地了

所幸, 权宜的方法还是有的, 通过"挤占" Mule 中某几个几乎不会被用到的字符编码的
charset-id, mule-gbk 终于把 GBK 支持硬塞进了 Mule 里面

2001年, 在化了大约一个月的时间后完成了目前 mule-gbk 中绝大部分的代码, 其中很
大部分是参照 Emacs21 的 Mule 中的 elisp 代码修改出来的, 其中有些代码我至今不知
道是什么含义, 只是因为 GB2312 和 big5 对应的 elisp 代码就是那样的, 所以才保留在
mule-gbk 的代码中

当时我查找了很多关于中文编码的资料, 特别是关于 GBK 的. 不过我最后能把这个东西
写出来的关键却是 Mule2 的 info, 是在当时我使用的 Debian GNU/Linux 上找到的, 这
份文档使我了解了 Mule 中 CCL(Code Conversion Language) 的机制和语法.

目前 mule-gbk 只在 GNU Emacs21.3 上作过测试, 不能在 GNU Emacs20 上使用(不过估
计要让它在那上面跑也不是什么难事). 还不知道能否在 XEmacs21 上工作.


取得/安装 mule-gbk:

我会把最新的 mule-gbk 放在 ftp://hua.math.ustc.edu.cn/mule-gbk/ ,
包括它的源代码和相应的 deb 文件(供 Debian系统安装之用).

同时还会把 mule-gbk 的 debian package 放入 debian.ustc.edu.cn 上的
APT 安装源 debian-uo 中, 其相应的配置为:

deb ftp://debian.ustc.edu.cn/debian-uo/misc/i386 ./
deb-src ftp://debian.ustc.edu.cn/debian-uo/misc/source ./

如果你的系统是 Debian, 你可以把上面两行放入你的 /etc/apt/sources.list
然后以 root 身份运行:

apt-get update; apt-get install mule-gbk

就可以把 mule-gbk 安装到你的 Debian 系统上了.
如果你无法访问 debian.ustc.edu.cn, 并且从别处获得了我制作的 mule-gbk_???.deb,
也可以用命令(以 root 身份运行):

dpkg -i mule-gbk_???.deb

来安装它.

对于非 Debian 的系统, 安装方法请参看 INSTALL 文件.


使用方法:

[1] 如果你的系统是 Debian, 并且已经安装了我为 mule-gbk 制作的 debian
package, 现在请直接跳到步骤[2].

如果你的系统不是 Debian, 或者你不想使用我预先制作好的 deb包, 请
参看 INSTALL 文件, 里面介绍了从源代码安装 mule-gbk 的一般方法.

如果你已经按照 INSTALL文件所述把 mule-gbk 安装到自己指定的目录, 那
么你需要先为 mule-gbk 的 .elc 文件指定 load-path, 具体的配置方法是在
你的 Emacs 的 init file(缺省的是 $HOME/.emacs )加上:

(add-to-list 'load-path "PATH/TO/MULE-GBK")

其中, PATH/TO/MULE-GBK 替换成 chinese-gbk.elc 等文件所在的目录的全路
径名, 比如 /home/bob/mule-gbk .

[2] 把下面几行添加到你的 Emacs 的 init file(缺省的是 $HOME/.emacs ) 中去.

;;; Load mule-gbk
(require 'mule-gbk)

;; Setup GBK environment
(set-terminal-coding-system 'chinese-gbk)
(set-keyboard-coding-system 'chinese-gbk)
(set-language-environment 'chinese-gbk)
(setq locale-coding-system 'chinese-gbk)
(setq current-language-environment "Chinese-GBK")

如果你在 X 下使用 Emacs, mule-gbk 使得 Emacs 可以和其它的 X 应用互相复制
/粘贴文本.

不过, 由于当前 XFree86 在实现上的一个 bug, 上述设置还不能马上使你享受
Emacs 和其它 X 应用之间的"无阻的交流". 你还需要做点额外的工作.

检查一下你的系统中的这个文件:

/usr/X11R6/lib/X11/locale/zh_CN.gbk/XLC_LOCALE

在这个文件的最后几行中有没有看到这样一行?

ct_encoding GBK-0:GLGR:\x1b\x25\x2f\x32\x80\x88\x47\x42\x4b\x2d\x30\x02

把 "\x80\x88" 直到行末的内容全删了或者注释掉, 也就是改成:

ct_encoding GBK-0:GLGR:\x1b\x25\x2f\x32

然后, 重新启动 X server 以使新的设置生效.
这样一来, X 的从 GBK 文本到 compound text 的转换才符合 compound text 的编码
规范(详情见 XFree86 代码中所附文档: ctext.ps).

[3] 如果你只在 console/terminal 上使用 Emacs, 这一步对你是没有意义的.

配置 X resources:
用户自己的 X resources 对应的配置文件通常是
$HOME/.Xdefaults 或者 $HOME/.Xresources

一般, 在 X 会话开始的时候, 相应的启动的脚本会读取以上两文件之一以
把其中定义的 X resources 载入 X server.

事实上, 你不妨把其中一个设置为另一个的 symlink(符号连接), 这样使得
原本要维护两个文件的内容变为只要维护其中之一.
做符号连接的相应命令(把 .Xresources 设为 .Xdefaults 的符号连接)为:

ln -s .Xdefaults .Xresources

本文关键:摘录─GBK环境下Emacs与外部程序间拷贝、粘贴问题的解决方法
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top