Fcitx--企鹅输入法广受Linuxer们的喜爱,我本人也被其小巧/简洁所吸引.
不过在用了一段时间后,发现Fcitx有个小毛病,就是在中文输入状态下,如果我要输入英文单词,并且这个单词以小写字母开头,中间夹着大写字母,这时输入的大写字母就直接输入到编辑器中了,而不是在输入窗口中,这样最终输入的单词就是错位的.也许表述不是很明确,下面贴上图(输入英文"autoEng.c"):
Fcitx在中文输入状态下,如果第一个字母是大写的话,其将自动进入英文输入状态.于是,我就想对其进行一些改造,使其能够在中文输入的状态下输入大小写混用的英文单词(开头是小写字母).
首先,到Google Code上下载Fcitx的源码(http://code.google.com/p/fcitx/downloads/list),我下载的是fcitx-4.1.1_all.tar.bz2.
解压后,进入Fcitx的解压目录,使用vi编辑文件"src/module/autoeng/AutoEng.c",并定位到185行,或是含有如下IF语句的行:
if (autoEngState->owner->input.iCodeInputCount == 0 && IsHotKeyUAZ(sym, state))
将该if语句修改成如下所示:
if (/*autoEngState->owner->input.iCodeInputCount == 0 && */IsHotKeyUAZ(sym, state))
{
/*autoEngState->index = 1;
autoEngState->buf[0] = sym;
autoEngState->buf[1] = '\0';*/
autoEngState->buf[autoEngState->index++] = sym;
autoEngState->buf[autoEngState->index] = '\0';
*retval = IRV_DISPLAY_MESSAGE;
input->bShowCursor = false;
autoEngState->index = strlen(autoEngState->buf);
autoEngState->active = true;
ShowAutoEngMessage(autoEngState);
return true;
}
AutoEng.c文件是用于控制在中文输入法下何时进入英文输入状态,从代码中可以看到,原来判断英文输入状态是通过第一个字母是否为大写来判断的,如果是第一个输入且为大写字母,则进入英文输入,否则,就是中文输入.
在这里,我只需要判断输入的字母中是否有大写字母,如果有大写字母,则也进入英文输入,而不管其是否是第一个输入,并让其紧接着前面的一起构成要输入的英文单词.
修改完毕后,运行如下命令,对fcitx进行重新编译和安装:
$ cmake . && make && sudo make install
退出Fcitx并通过终端输入fcitx命令启动企鹅输入法,然后,在输入大小写混合的英文单词时,你会发现,你成功啦!
下面是截图(仍然输入英文"autoEng.c"):