2004年9月28日星期二

Cygwin中文How-to

大致写了一下,有待补充。

本来一年前就打算写的,但后来觉得老黄写更合适,但这家伙似乎只对代码有兴趣,总不写文档。
[@more@]

终端

locale支持

Cygwin的locale支持一直都不太好,采用zh_CN.gb2312好像问题很多,我一直采用的是zh_CN.gbk
~/.bashrc
LC_CTYPE=zh_CN.gbk
CHARSET=GBK #(glib2需要使用找个环境变量确定文件名的编码)
export LC_CTYPE CHARSET

一些小问题

允许bash输入、输出中文字符
~/.inputrc
set convert-meta off
set input-meta on
set output-meta on

ls显示中文文件名(而不是一堆问号)
alias ls="/bin/ls --show-control-chars"

less浏览中文文件
less --raw-control-chars
另外LESSCHARSET环境变量也很有用

X下的中文支持

locale支持

Cygwin的locale支持一直都有问题,好在X程序还可以使用XLOCALE。
建议还是使用zh_CN.gbk, 不要使用zh_CN.GB2312

在移植程序时需要注意不要让程序连接libcygwin.a里面的setlocale,而是采用libX11.a里面的_Xsetlocale。方法是:检查被移植程序的全部源代码,发现
#include
就修改为
#define X_LOCALE
#include
同时注意程序的连接库要添加-lX11.
如果对于结果没有把握,可以找个Dependency Walker查看程序是否连接到了cygwin1.dll里面的setlocale,如果是,就说明有遗漏。

中文字体

PCF点阵字体
GTK1.x 和其他一些老的X程序都是用X字体,

注意必须要有编码与locale一致的字体,比如用zh_CN.gbk就必须要由GBK编码的字体,用zh_CN.GB2312就必须要有GB2312编码的字体

如果使用zh_CN.GB2312,这里有一个RedOffice面带的点阵字体包

可以采用ttf2bdf从TTF抽取得到bdf格式,然后再用bdf2pcf得到pcf格式的字体文件。
(这里有一个Windows版本的TTF2BDF,可以将Windows TTF字体转换出BDF字体, 注意得到bdf后要手工编辑一下文件头,将编码声明修改正确)

得到字体之后,放到某个目录下,执行mkfontdir生成fonts.dir,然后用xset +fp /path/to/your/fonts将字体路径加入即可(注意与fontconfig的配置不同,这里路径是不递归的,如果有的字体放在子目录里面,子目录也需要添加进去才行)。
TTF字体
很多新的应用程序(比如GTK2)都使用fontconfig/libxft2来显示字体,它对TTF字体的支持比较好(X以前通过freetype, xft模块也支持TTF字体,但对中日韩字体的支持不是太好,而且也在Cygwin下似乎也没有这些模块)

完全可以使用Linux下的arphic字体包. 如果没有安装Linux,可以到http://packages.debian.org下载相应的包,然后用7zip解压提取出ttf文件。

得到字体文件之后,放到某个目录之下,编辑/etc/fonts/local.conf,将字体路径加入:
/path/to/my/ttf/fonts如果只是自己使用,可以将字体文件放到~/.fonts下,不需要修改任何配置,最多三十秒fontconfig就能够发现这些字体了。

中文输入法

老黄(hzhr)移植了miniChinput到Cygwin,我也移植了fcitx-1.8.5和3.0,均可以从我的网站上找到 http://www.oliwen.com/bamanzi/cygwin/chinese/

一般设置了LC_CTYPE和XMODIFIERS就可以在程序中激活输入输入法了(除非这个程序没有XIM支持):

LC_CTYPE=zh_CN.gbk
XMODIFIERS="@im=Chinput"
export LC_CTYPE XMODIFIERS

对于fcitx而言,XMODIFIERS设置为什么都可以(但必须要设置),所以设置为"@im=Chinput"的话chinput和fcitx都可以正常使用

2004年9月26日星期日

fontconfig/libxft对中文字体的支持似乎改进了很多

今天升级了一下cygwin里面的fontconfig和libxft(fontconfig-2.2.0, freetype-2.1.5 and libXft2-2.1.0),发现中文字体的显示漂亮了不少,原来发虚的问题也没有了。

注: 字体采用了windows里面的simsun字体,配置文件(/etc/fonts/local.conf)如下:
[@more@]


SimSun


false





10


false





bold
black


true

2004年9月20日星期一

制作CHM文件时的未公开的选项

在工程文件(.HHP)中添加窗口定义,然后做相应更改:

添加MSDN菜单:
window定义中将style参数(第一个0x....数值)加上0x10000(比如0x23520->0X33520)

添加字体按钮:
window定义中将buttons参数(第二个0x....数值)加上0x100000(比如0x24385e->0x34385e)

工具条按钮不显示文字:
window定义中将style参数(第一个0x....数值)加上0x40(比如0x23520->0X23560)
[@more@]

工具条按钮说明(带括号者为隐藏选项,可能部分是过时的选项, 至少现在的HtmlHelp Workshop没有提供)

Hide/Show 0x0002
Back 0x0004
Forward 0x0008
Stop 0x0010
Refresh 0x0020
Home 0x0040
(Next) 0x0080 下一步, 不知何用
(Prev) 0x0100 上一步, 不知何用
(Notepad) 0x0200 便笺, 似乎没有作用
(Contents) 0x0400 目录,似乎没有作用
Locate 0x0800
Options 0x1000
Print 0x2000
(Index) 0x4000 索引,似乎没有作用
(Search) 0x8000 搜索,似乎没有作用
(History) 0x010000 历史,似乎没有作用
(Bookmark) 0x020000 书签,似乎没有作用
Jump1 0x040000
Jump2 0x080000
(Fonts) 0x100000 字体
(Next) 0x200000 上一步,不知何用
(Prev) 0x400000 下一步,不知何用

似乎唯一有用的也就是“字体”按钮了