分享
 
 
 

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

王朝other·作者佚名  2008-06-01
窄屏简体版  字體: |||超大  

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

现在言归正传, 编辑 .Xdefaults 或者 .Xresources 把其中关于 Emacs 的

内容设为:

Emacs.Fontset-0: -*-bitstream-medium-r-normal-*-20-*-*-*-*-*-fontset-20,\

chinese-gb2312:-*-medium-r-normal--20-*-gb2312*-*,\

mule-unicode-0100-24ff:-*-medium-r-normal--20-*-*-*-*-*-iso10646*-*,\

korean-ksc5601:-*-medium-r-normal-*-20-*-ksc5601*-*,\

chinese-cns11643-5:-*-medium-r-normal--20-*-gbk*-*,\

chinese-cns11643-6:-*-medium-r-normal--20-*-gbk*-*,\

chinese-cns11643-7:-*-medium-r-normal--20-*-gbk*-*,\

sjis:-*-medium-r-normal--20-*-jisx0208*-*

Emacs.Font: fontset-20

注重: 其中的 \ 是断行符, 它的后面(在同一行中)不要跟随任何字符(newline 除外).

上面给出的 X resources 的作用是告诉 Emacs 创建一个名为 fontset-20 的 fontset,

并且让 Emacs 把 fontset-20 作为缺省的 fontset 使用.

你可以把其中的 20 替换成其它的数字(比如 16 或者 24, 但最好选用大小一致的字体,

否则你的文本在多语种文字同时出现的情况下会显得参差不齐)以获得不同的字体大小,

在此之前, 你可以用命令

xlsfonts

查看你的 X server 或者 font server 是否提供了你想要的

XLFD(X Logical Font Description) 字体.

关于这些配置的具体含义可以参看 Emacs Manual 中题为

X Resources 和 Defining Fontsets (事实上你可以此定义好几个 fontset)的部分,

这里不再赘述.

编辑完 X resources 配置文件后可以重新启动 X 会话或者使用命令

xrdb -merge ~/.Xdefaults

或者

xrdb -merge ~/.Xresources

以载入新的 X resources.

注: 关于字体安装

其实只有 GBK 字体是其中的要害, 其它字体视需要与否选择安装.

我们前面的 fontset 需要一些特定的 XLFD 字体, 可能效果不一定是最好的,

或者不对你的胃口, 但至少可以用.

gb2312 (中文): Debian 中对应的软件包为 xfonts-intl-chinese

gbk (中文): 网上有很多关于这个的帖子, 大家自己去找吧.

iso10646 (unicode): 同上(通常假如你把上面的安装好了,这个也就有了).

jisx (日文): Debian 中对应的软件包为 xfonts-intl-japanese

korean-ksc5601 (韩文): Debian 中对应的软件包为 xfonts-baekmuk

ascii (英文): Debian 中对应的软件包为 ttf-bitstream-vera

上面我只列出了 Debian 中对应的软件包, 是因为我手头只有 Debian 系统,

其他诸如 Gentoo, Redhat/Fedora, Mandrake, SuSE, Slackware 等我并不

熟悉, 假如你不是 Debian 的用户请在你自己的系统上按照类似的名字寻找

相应的字体软件包, sorry了.

假如你在自己的 distro 上找到了对应的字体软件包, 请来信告诉我, 谢谢.

[4] 假如你只使用 console(非GUI), 你不用关心这一步.

采用 XIM(X Input Method) 输入 GBK 汉字:

用户可以用 SCIM 和 fcitx 等目前广受欢迎的中文(SCIM 似乎还支持其它语言的输入)

XIM 输入法软件输入 GBK 汉字.

这需要配置一下用户的环境, 包括把 Locale 设置成 zh_CN.GBK 等.

具体的设置方法请参考 SCIM 或者 fcitx 自己的使用说明.

当你在 Emacs 中使用 XIM 软件作为中文输入的途径时, 你会碰到这样一个问题:

C-SPC 现在对应于 XIM 的激活而不再是 set-mark-command 了, 解决的途径有两个:

一种是让 XIM 的激活改用其它的快捷键, 可惜我没有找这方面的方法, 假如你知道

请发信告诉我.

另一种改变 set-mark-command 在 Emacs 中的 key binding, 这个很轻易在 Emacs

里做到, 我们已经知道即使不作什么设置 C-@ 就已经对应着 set-mark-command 了.

假如你和我一样对 C-@ 作为 set-mark-command 的 binding 不喜欢的话, 也可以用

把 global-set-key 函数把 set-mark-command 绑定其它你喜欢的按键序列上去.

这里, 我推荐用下面的 elisp 代码把 set-mark-command 绑定到 S-SPC 上.

(global-set-key [?

\S- ] 'set-mark-command)

注重: 在 terminal 模式下这个 key binding 可能不起作用, 因为你的(仿真)终端极

可能根本不识别 S-SPC 这种按键组合.

[5] 这一部分的内容你可能根本不需要用到.

假如你使用 XIM 来作中文输入, 你可以不做这步.

chinese-ucdospy 让 Emacs 本身提供一个GBK编码的拼音输入法, 这个输入法的词库

大部分取自 ucdos 拼音.

把 ucdospy.el, gbk.el, ucdospy1.el ,ccepy.el 和

define-phrase.el 复制到目录 $HOME/emacs 中.

把下面的内容添加到你的 Emacs 的 init file 中去.

;;; Load Libraries for Chinese Input Method

(load-file "~/emacs/ucdospy.el")

(load-file "~/emacs/gbk-mb.el")

(load-file "~/emacs/ucdospy1.el")

(load-file "~/emacs/ccepy.el")

(load-file "~/emacs/define-phrase.el")

(global-set-key "\C-cd" 'quail-define-new-ruler-from-line)

(global-set-key "\C-cn" 'quail-define-new-ruler-for-name-of-people-from-line)

(if (file-exists-p user-py-file)

(load-file user-py-file))

(if (file-exists-p user-people-names-file)

(load-file user-people-names-file))

相应的中/英文输入状态用 C-\ 来切换.

See ucdospy.el for the detail of the key binding of chinese-ucdospy.

[6] 启动 Emacs:

1. 在 console 上可以用命令 emacs 直接启动字符界面的 Emacs. 你需要保证你

的 console 能够显示/输入 GBK 汉字, 为此你可以使用 zhcon 或者 cce 等

console 中文环境.

2. 在 X window 环境下用命令 emacs 可以直接启动 X11 界面的 Emacs, 估计

大多数人使用的是这种情况.

3. 在 X window 环境的支持中文的仿真终端(如 crxvt, mlterm, gnome-terminal 等)

中, 用命令 emacs -nw(假如你没有使用 -nw 选项, 就会变成上一种情况) 来启动

字符界面的 Emacs.

苏勇 <yoyosu@ustc.edu.cn>

Mon, 12 APR 2004 13:33:14 +0800

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有