|
|
|
|
 [精华] 英文环境输中文的问题 - jimin [ 2004-02-25 20:38 | 281 byte(s)]
 Re: 英文环境输中文的问题 - jeff_yecn [ 2004-03-19 11:31 | 471 byte(s)]
 Re: 英文环境输中文的问题 - yuking [ 2004-03-19 14:46 | 39 byte(s)]
 Re: 英文环境输中文的问题 - cnchun [ 2004-04-17 16:49 | 796 byte(s)]
 [精华] 可以这样做 - xiaohuo [ 2004-02-26 11:29 | 5,473 byte(s)]
 [精华] 谢谢 - yuking [ 2004-02-26 14:16 | 40 byte(s)]
 Re: 谢谢 - jimin [ 2004-02-29 23:39 | 67 byte(s)]
 还有一些小改动, - xiaohuo [ 2004-02-27 10:41 | 952 byte(s)]
 Re: 还有一些小改动, - xyb [ 2004-02-27 12:12 | 725 byte(s)]
 交作业 - xiaohuo [ 2004-03-01 09:52 | 591 byte(s)]
 Re: 交作业 - yuking [ 2004-03-01 11:23 | 50 byte(s)]
 Re: 交作业 - xyb [ 2004-03-01 10:53 | 262 byte(s)]
 Re: 还有一些小改动, - yuking [ 2004-02-27 11:28 | 92 byte(s)]
 Re: 还有一些小改动, - xyb [ 2004-02-27 12:05 | 61 byte(s)]
|
|
|
|
[Original]
[Print]
[Top]
|
看了精华区基本搞定了,现在就是用fcitx
不过有个小问题,貌似必须把LC_CTYPE设成zh_CN才行
这样一来英文界面的字体就好象变成仿宋体了,不是很习惯,觉得很难看
有什么方法仍然用原来英文的字体吗?
本人初次驾道,看到这里大侠不少,还请多多指教。
:)
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
首先,你所谓“英文环境”准确的讲,应该是“使用UTF-8编码的英文环境”,否
则,如果是用ASCII的英文环境,XIM类的输入法,就没法打中文(不属XIM类
的输入法,自然不在此列)。
以Fcitx为例,为了看是不是用UTF-8编码,他先去查LC_CTYPE,然后查LANG
这些环境变量—这不是个好办法。
该怎么做呢?
Markus Kuhn在《UTF-8 and Unicode FAQ for Unix/Linux》里说得很
详细:对于Linux和FreeBSD这些系统,用什么编码最好问
nl_langinfo(CODESET)
实在不成,才去依次查看LC_ALL,LC_TYPE,LANG这些坏境变量。于是,可对
Fcitx这部分改一下:
Index: main.c
===================================================================
@@ -3,6 +3,8 @@
/*Program closes with a mouse click or keypress */
+#include <langinfo.h>
+
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
@@ -32,8 +35,8 @@
extern IME imeIndex;
extern Bool bBackground;
+extern Bool bIsUtf8;
extern HIDE_MAINWINDOW hideMainWindow;
extern Bool bRunLocal;
@@ -58,9 +59,9 @@
LoadProfile ();
LoadConfig (True);
- GetLocale ();
CreateFont ();
- SetLocale ();
+ setlocale (LC_ALL, "");
+ bIsUtf8 = (strcmp(nl_langinfo(CODESET), "UTF-8") == 0);
if (!LoadPuncDict ())
去掉那两个GetLocale(),SetLocale(),用nl_langinfo(CODESET),简单省
事。
Index: SetLocale.c
===================================================================
@@ -6,29 +6,7 @@
char strUserLocale[20];
-extern Bool bIsUtf8;
-extern char *strDefaultLocale;
extern Bool bUseGBK;
-
-void GetLocale (void)
-{
- if (strUserLocale[0] != ' ')
- strDefaultLocale = strUserLocale;
- else {
- strDefaultLocale = (char *) getenv ("LC_CTYPE");
- if (!strDefaultLocale)
- strDefaultLocale = (char *) getenv ("LANG");
- }
-
- if (!strcasecmp (strDefaultLocale, "zh_CN.UTF8") || !strcasecmp
(strDefaultLocale, "zh_CN.UTF-8"))
- bIsUtf8 = True;
-}
-
-void SetLocale (void)
-{
-// GetLocale ();
- setlocale (LC_CTYPE, strDefaultLocale);
-}
Bool CheckLocale (char *strHZ)
{
Index: SetLocale.h
===================================================================
@@ -3,8 +3,6 @@
#include "xim.h"
-void GetLocale (void);
-void SetLocale (void);
Bool CheckLocale (char *strHZ);
#endif
当然也不要那个strDefaultLocale了:
Index: ui.c
===================================================================
@@ -54,7 +54,6 @@
extern Bool bIsResizingInputWindow;
extern HIDE_MAINWINDOW hideMainWindow;
extern IC *CurrentIC;
-extern char *strDefaultLocale;
Bool InitX (void)
{
Index: xim.c
===================================================================
@@ -11,8 +11,6 @@
long filter_mask = KeyPressMask | KeyReleaseMask;
IC *CurrentIC;
Bool bRunLocal = False;
-char *strDefaultLocale;
Bool bUseCtrlShift = False;
Bool bBackground = True;
@@ -388,7 +386,14 @@
encodings->supported_encodings = zhEncodings;
strcpy (transport, "X/");
- ims = IMOpenIM (dpy, IMModifiers, "Xi18n", IMServerWindow, im_window,
IMServerName, imname, IMLocale, (strcasecmp (strDefaultLocale, "zh_CN.gb2312")) ?
strDefaultLocale : "zh_CN", IMServerTransport, transport, IMInputStyles, input_styles,
NULL);
+ ims = IMOpenIM (dpy,
+ IMModifiers, "Xi18n",
+ IMServerWindow, im_window,
+ IMServerName, imname,
+ IMServerTransport, transport,
+ IMLocale, "zh_CN,en_US.UTF-8",
+ IMInputStyles, input_styles,
+ NULL);
除了重新排了下版,读起来通顺一些外,这一段里最主要的改动是这一行:
IMLocale, "zh_CN,en_US.UTF-8",
即告诉人说,本输入法支持中文和使用UTF-8的英文locale,本来任何使用
UTF-8的locale都没问题,可惜IMdkit不让你说类似
IMLocale, "zh_CN,*.UTF-8",
这样的话,如果你想在使用UTF-8的法文、德文环境中使用Fcitx,你只好加上
fr_FR.UTF-8,de_DE.UTF-8
等一大堆。
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
顺手作的,干脆并作一处:
1. 因为Fcitx未用autotools(就是被人亦称作autofool的那个,你不愿用
可以理解),这样有人想安装至别处时,不易另设;但大概为了方便试用,硬
加了一个install_local—其实用prefix更符合一般习惯。所以改动之一是
由prefix来定安装目录。没特别指定prefix时,就安装在/usr下;如果想安
装在/usr/local下,可以
make prefix=/usr/local
make install prefix=/usr/local
我的习惯则是一律先放到自己的区下做实验(相当于原install_local),比
如
make prefix=$HOME/FCITX
make install prefix=$HOME/FCITX
2. 改动之二是去掉Makefile.noxft,只要一个Makefile就行了。为区别
起见,加了一个make变量usexft:没特别指明时,即用Xft;如不想或不能用
Xft,则
make usexft=no
make install usexft=no
3. 其三就是前面那个locale改动。
Fcitx短小精悍,殊是难得。要说谢也该是谢你才对。
|
|
|
--
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
如果 xiaohuo 感兴趣,可以到 http://cvs.cosoft.org.cn/cgi-bin/viewcvs.cgi/fcitx/fcitx/ 看看现在的 fcitx 代码,请给帮助检查错误,好吗?
# 匿名用户检出源代码
cvs -d:pserver:anonymous@cvs.cosoft.org.cn:/sfroot/cvs/fcitx login
cvs -z3 -d:pserver:anonymous@cvs.cosoft.org.cn:/sfroot/cvs/fcitx co fcitx
# 小组成员通过 SSH 进行 CVS 访问
export CVS_RSH=ssh
#cvs -z3 -d:ext:项目开发者用户名@cvs.cosoft.org.cn:/sfroot/cvs/fcitx co fcitx
#我是这样取开发代码的:
cvs -z3 -d:ext:xyb@cvs.cosoft.org.cn:/sfroot/cvs/fcitx co fcitx
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
小谢,布置的作业做完了,请批改。我在FC1上调试通过,locale是
en_US.UTF-8,步骤如下:
cd fcitx
autogen.sh
configure --prefix=$HOME/FCITX
make
make install
运行
$HOME/FCITX/bin/fcitx
Client是testtext。然而选字框中不能正确显示中文。修改
~/.fcitx/config
中字体一条后,再重来
killall fcitx
$HOME/FCITX/bin/fcitx
就好了。
另: CVS里能否去掉那些自动产生的文件,如Makefile.in,fcitx.spec,
src/version.h之类。
|
|
|
--
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
谢谢!我们会在测试后放到cvs里。
我保留了 Makefile.in 这些文件,这可以让匿名检出代码的人没有automake也可以编译代码,只要有cc就可以了。src/version.h 是代码中必须的一个文件。fcitx.spec 也是为了使用的人方便,检出代码之后,就可以直接开始编译rpm了。
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
我也是乱搞搞好了。不过没有打补丁,这是我的.xinitrc
#FCITX
export XMODIFIERS="@im=fcitx"
export XIM=fcitx
export XIM_PROGRAM=fcitx
#LOCALE setup
export LC_TIME=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LANG=zh_CN
wmaker &
wmCalClock &
#load fcitx
#/root/FCITX/bin/fcitx
/root/fcitxtest/bin/fcitx
xchat &
xxkb &
exec rxvt +vb -ip -bg black -fg white -fn fixed -geometry 80x50+0+0 -name login
我用gentoo-1.4
下了那个fcitx-2.0.2的包。好象本来fcitx就支持utf-8,只是设置的时候要加上lang=zh_cn,同时language=en_us.utf-8就行了。
多谢大家,不错不错,输入法!
|
|
|
[Original]
[Print]
[Top]
|
|
|