网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 软件工程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
本月文章推荐
.游戏引擎剖析(七).
.戏说Visual Studio Team System.
.编写优秀技术文档的技巧.
.通过服务模拟来简化SOA开发(1).
.为什么要用UML建模之建模的重要性.
.Visual Studio 2005集成开发环境.
.Microsoft .NET让新一代因特网变.
.壮士断臂 Borland为生存将出售开.
.品质管理简介.
.质量管理的十三项步骤和八项原则.
.VS.NET2005 Beta2初体验.
.终极SOA技术.
.系统设计前的需求探索.
..NET设计模式研究之装饰模式.
.SOA扩展Web服务的前景(一).
.程序设计基础知识.
.SQA报告.
.游戏引擎剖析(五).
.软件开发管理与质量控制(二).
.Mozilla开发组的开发策略(英文).

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

发表日期:2008-3-23


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 的发展余地了 摘录─GBK环境下Emacs与外部程序间拷贝、粘贴问题的解决方法(图一)

所幸, 权宜的方法还是有的, 通过"挤占" Mule 中某几个几乎不会被用到的字符编码的
charset-id, mule-gbk 终于把 GBK 支持硬塞进了 Mule 里面 摘录─GBK环境下Emacs与外部程序间拷贝、粘贴问题的解决方法(图二)

2001年, 在化了大约一个月的时间后完成了目前 mule-gbk 中绝大部分的代码, 其中很
大部分是参照 Emacs21 的 Mule 中的 elisp 代码修改出来的, 其中有些代码我至今不知
道是什么含义, 只是因为 GB2312 和 big5 对应的 elisp 代码就是那样的, 所以才保留在
mule-gbk 的代码中 摘录─GBK环境下Emacs与外部程序间拷贝、粘贴问题的解决方法(图一)

当时我查找了很多关于中文编码的资料, 非凡是关于 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
上一篇:清除window 2000/XP系统中的无用设备的驱动程序 人气:807
下一篇:Linux-C-Socket编程 人气:874
浏览全部软件工程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐