`
flytreeleft
  • 浏览: 91999 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

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

 

  • 大小: 10.8 KB
  • 大小: 11.1 KB
0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics