Fcitx中文状态下的英文输入问题解决方案

 

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"):

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值