红联Linux门户
Linux帮助
当前位置: 红联Linux门户 > SuSE

SuSE10使用手记Emacs显示中文

发布时间:2007-08-14 00:28:15来源:红联作者:nsformat
  由于 Emacs 是个支持多语言的程序,它支持很多种字符集,而一种字体一般只覆盖一个或几个字符集,因此只用一种字体是无法显示 emacs 支持的所有文字的。

  在emacs中需要设置 fontset,也就是多种字体的集合,或者叫做字体集。Each fontset has a name, like a font. The available X fonts are defined by the X server. Fontset有一个名字,用来标识这个fontset的名字,后边是“字符集:字体”的形式给出一个链表。

  Emacs本身自带着两个fontset,分别是default和standard,当然你还是可以自己定义自己的fontset,elisp函数是create-fontset-from-fontset-spec.

  所有的fontset合成为fontsets。fontsets, however, are defined within Emacs itself. Once you have defined a fontset, you can use it within Emacs by specifying its name, anywhere that you could use a single font. Of course, Emacs fontsets can use only the fonts that the X server supports; if certain characters appear on the screen as hollow boxes, this means that the fontset in use for them has no font for those characters.(http://linux.about.com/od/emacs_doc/a/emacsdoc173.htm

  另外在Emacs下查看fontset的函数是describe-fontset。Emacs默认使用default的,可以看到chinese-gb2312使用的字体是-gb2312-结尾的一个字体。然后使用xlsfonts这个工具查看所有系统可用的字体,并没有发现这种字体存在,所以emacs只能使用a empty box来代替。

  check emacs internationalization HELLO file

  C-h h

  Emacs Wiki有一节叫做display non Ascii characters,它的指导:

  When the display for some characters does not work, you will see little empty boxes instead of

  the glyphs you would like to see.

  One way to debug this is to check whether you have the fonts necessary for this character set. If

  you do, then you will have to check wether your fontset has the correct mapping from charset to

  font (see FontSets).

  check character set的方法:

  把光标放在empty box上,然后按C-u C-x =,弹出的窗口详细叙述了这个字符的Charater Set信息。我确认我的字符是chinese-gb2312.

  在font一栏中为-- none --,说明虽然emacs能够识别这是个中国汉字(Han),但是无法找到对应的显示他的字体(font)。

  其实我一直都使用的XShell来登陆SuSE,因为我的机器很慢,KDE对我来说已经相当昂贵了,我用这非常的卡。习惯于在shell下工作,因此我这能陪只好终端(Terminal),然后远程登录来工作。

  折腾了很久,一直都以为我的SuSE不具备gb2312的字体.但是绝望的我使用Vmware进入SuSE的kde的时候,惊奇的发现情况不一样了。emacs可以显示中文啊. 在使用xlsfonts | grep 2312来查看,有很多gb2312的字体可以使用.原来不能显示字体的问题,都不是SuSE带来的,而是XShell带来的。

  不过一下午的google,也没有白费.至少我明白了Emacs和X11显示字体的基本工作原理.

  X11 fonts有两种来源,一个是X11 core font,这个是比较老的字体系统,现在存在就是为了兼容非常老的程序,Emacs就这种程序之一。另外一个新系统就是font server,就是说使用一个服务器来提供字体服务,需要的时候,程序能够访问到这些字体。这个服务在linux下叫做xfs。linux的X11的xfs的配置文件应该就是/etc/X11/xorg.conf,我一下午在这个文件上作文章。但是我通过Xshell检测效果,而不是跑到SuSE里去,缘木求鱼。

  好了,linux下有X,当你启动KDE的时候就启动了这个linux下的X.但是X可不是linux下才有。windows下也有一个。就是和Xshell一起配合的Xmanager。如果你不用Xshell,可以使用putty,但是只要你启动了Xmanager,并且putty配置了X11 forwarding,那么照样可以启动Emacs, firefox, display这样的X程序。而这个Xmanager就是一个windows下的X实现。linux下的那个叫XFree86。大概就是这个情况吧。具体到X,我也懂得不多了。

  既然发现是Xmanager的缺少中文支持,那么就找它来解决问题吧。在windows右下角的XManager图标点击右键,然后选择properties->font,发现确实缺少Chinese字体的支持,只有Korean.我试图把windows下的Fonts 文件夹加到这个目录下,结果不能成功。翻阅Xmanager的帮助,managing fonts -> To install additional font package指导你到NetSarang的公司主页去下载补充的字体。下了个Chinese.exe的文件回来,安装了之后,再在XShell输入:xlsfonts | grep 2312就能够发现很多gb2312的字体出现了。这样子的话Emacs只要设置好了Language Environment,就可以正常的现实中文了。

  今天只是初步解决了Emacs显示中文,但是C+\也可以输入中文了。看来这都是language environment的一揽子问题。未完成的问题就是gbk和unicode的支持了。另外是如何外挂输入法。
文章评论

共有 0 条评论