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

Fcitx4.2英文输入切换的改造

阅读更多

    最近Fcitx版本升级到了4.2,由于4.1版本中的英文输入切换考虑的情况太少,其仅在首个输入为大写字母时才切换到英文状态,而对于在中途输入大写字母并不能切换到英文输入.所以,我想看看4.2在这个问题上是否有所改善.于是,便下载/编译并安装试用.


    使用时,发现其还是没有将中途输入大写字母的情况切换到英文输入状态,于是,我又开始尝试修改源代码.


    按照前文<Fcitx中文状态下的英文输入问题解决方案>的方法,我打开文件"src/module/autoeng/AutoEng.c",并找到函数"ProcessAutoEng",结果发现作者对该函数进行了修改,前文的方法已经不适用了.不过,经过分析和调试,我发现,作者新增了一个函数"SwitchToEng",从名字看出,应该是切换到英文输入的判断方法,其源代码如下:

boolean SwitchToEng(FcitxAutoEngState* autoEngState, char *str)
{
    AUTO_ENG*       autoeng;
    for (autoeng = (AUTO_ENG *) utarray_front(autoEngState->autoEng);
            autoeng != NULL;
            autoeng = (AUTO_ENG *) utarray_next(autoEngState->autoEng, autoeng)) {
        printf("switch to english: str-%s,autoeng->str-%s\n", str, autoeng->str);
        if (!strcmp(str, autoeng->str))
            return true;
    }

    return false;
}

     其中,printf语句为便于分析该函数作用而写的调试输入,在编译,安装(由于fcitx将在/usr/lib和/usr/local/lib下搜索运行库,故必须进行安装),运行后发现,autoeng->str输出的为如"https","http:"等,并且在输入开头为这些字符串时,fcitx将自动进入英文状态,这样,可以判断,该函数的确是自动切换英文输入的方法,在返回true时,fcitx进入英文输入状态.

    

    于是,我在for循环之后,增加如下代码:

 

int index = autoEngState->index - 1;
char last = autoEngState->buf[index];
if (index > 0 && ('A' <= last && 'Z' >= last)) {
    return true;
}
 

     autoEngState->buf中存放的是当前输入的字符(最后一个为'\0'),这里,我仅对"中途"输入大写字母的情况进行了判断,如果中途输入了大写字母,则返回true,这样fcitx便自动进入英文输入状态.


    如此,我的目的便轻松地达到了.


    如果,这样的判断还是不能满足要求,那就在if语句中再增加判断条件吧!


    Fcitx-4.2.0的源代码及编译所需的pinyin.tar.gz和table.tar.gz已上传到附件中,可以直接下载.所上传代码为原始代码,并未做修改,需要的童鞋,可以直接打开文件"src/module/autoeng/AutoEng.c",并将函数"SwitchToEng"修改为如下代码:

boolean SwitchToEng(FcitxAutoEngState* autoEngState, char *str)
{
    AUTO_ENG*       autoeng;
    for (autoeng = (AUTO_ENG *) utarray_front(autoEngState->autoEng);
            autoeng != NULL;
            autoeng = (AUTO_ENG *) utarray_next(autoEngState->autoEng, autoeng)) {
        // 如果输入以"http:","https"等开头,则进入英文输入状态
        if (!strcmp(str, autoeng->str))
            return true;
    }
    // 那再对是否含有大写字母或标点进行判断,是,则进入英文输入状态
    int index = autoEngState->index - 1;
    char last = autoEngState->buf[index];
    if (index > 0 && ('A' <= last && 'Z' >= last)) {
        return true;
    }

    return false;
}

      在控制台中输入如下命令进行编译,安装:

$ cmake . && make && sudo make install && pkill fcitx && fcitx
  

    原始下载地址为: http://code.google.com/p/fcitx/downloads/list

 

后记: 现在4.2.2版已经能够支持首字母非大写的英文输入了,非常感谢作者一直对Fcitx的更新!

0
0
分享到:
评论
1 楼 hurricanek 2012-02-20  
嗯,想法很好。

已经修改了。虽然实现方式不太一样。

http://code.google.com/p/fcitx/source/diff?spec=svn5d667f7f20708c651b4ec3a8698c65599318ee0f&r=5d667f7f20708c651b4ec3a8698c65599318ee0f&format=side&path=/src/module/autoeng/AutoEng.c

相关推荐

    fcitx-4.2.6.1 小企鹅输入法

    总的来说,Fcitx-4.2.6.1小企鹅输入法是Linux系统用户的一个强大工具,它提供了高效的中文和其他语言输入体验,而其开源和社区驱动的性质保证了持续的更新和改进。通过阅读和理解这些源文件,开发者甚至可以参与项目...

    fcitx_4.2.9.7-3_all.deb

    是一个以 GPL 方式发布的输入法框架, 编写它的目是为桌面环境提供一个灵活的输入方案,彻底解决在GNU/Linux下没有一个好的中文输入法的问题。

    CentOS7+fcitx+sougou

    然后在系统设置中将默认输入法切换为fcitx。重启系统后,你应该可以在终端或者其他应用中看到并使用搜狗输入法了。 总的来说,这个过程需要一定的Linux操作经验和耐心,但一旦设置成功,就可以在CentOS7上享受熟悉...

    linux上怎么安装fcitx

    重启系统或注销当前登录的用户后重新登录,通过快捷键`Ctrl + Space`尝试切换至Fcitx输入法。如果一切正常,应该能够看到Fcitx的输入法面板。 ##### 6. 配置Fcitx语言环境 为了让Fcitx正确识别中文环境,需要对...

    CenOS7下安装fcitx4.2.8-x86_64主程序及完整依赖RPM包

    fcitx-4.2.8.5git20141209-1.el7.centos.x86_64.rpm fcitx-cloudpinyin-0.3.4-1.el7.centos.x86_64.rpm fcitx-configtool-0.4.8git20141209-1.el7.centos.x86_64.rpm fcitx-data-4.2.8.5git20141209-1.el7.centos....

    fcitx输入法

    **fcitx输入法**是Linux操作系统中广泛使用的开源输入法框架,它为用户提供了一种高效、便捷的方式来输入中文和其他多种语言。这个压缩包文件包含了fcitx输入法的源代码,版本为4.2.9.1。为了正确地解压并编译安装这...

    fcitx-sougou.zip

    FCITX(Fast Common Input Method Framework)是一个轻量级且高效的输入法框架,支持多种语言和输入法引擎,如拼音、五笔、英文等。在Linux系统中,特别是Ubuntu,fcitx为用户提供了一种方便的方式来切换和使用不同...

    fcitx-sougou.rar

    4. **fcitx-libs_4.2.8.3-3_amd64.deb** 和 **fcitx-libs-qt_4.2.8.3-3_amd64.deb**:这两个是FCITX的库文件,一个是基本库,另一个是Qt库的支持,用于与Qt应用程序的兼容。它们提供了运行FCITX及其相关组件所需的...

    麒麟系统v4.02中Qt5切换中文输入法所需的fcitx库

    libfcitxplatforminputcontextplugin.so.tar.gz Qt5.14.1 同为麒麟系统,QT版本一样时,不用再进行编译,直接将libfcitxplatforminputcontextplugin.so库拷贝到对应的目录中即可 详细说明,请参考:...QtCreator4.11

    libfcitxplatforminputcontextplugin.so(ubuntu14.04-qt5.6-fcitx中文输入插件)

    该插件解决ubuntu14.04系统,安装qt5.6,fcitx中文输入法默认不能在Qt creator中切换输入中文的问题。 据说从qt5.4之后的版本没办法直接通过apt-get安装fcitx的平台插件,所以该资源是我按照网上一篇非常棒的博客,...

    fcitx插件-解决qt无法输入中文的问题

    fcitx插件-解决qt无法输入中文的问题

    fcitx 五笔98词库

    此外,Fcitx输入法框架本身也支持多种输入法,用户可以根据需要自由切换,满足不同输入需求。 Fcitx 五笔98词库的使用,对于那些习惯于Windows系统下五笔输入法的Linux用户来说,无疑是一个重要的便利工具,它使得...

    fcitx 配置文件

    码表管理是fcitx的一个重要部分,`fcitx-configtool`允许你添加、删除或切换不同的码表。在fcitx中,你可以选择`wbpy98simple`或其他五笔码表,或者使用拼音、全拼、双拼等输入法。 ### 7. 使用技巧 - 定期更新...

    fcitx-3.2fcitx-3.2

    6. **配置与管理**:FCITX-3.2可能会提供一个方便的配置工具,让用户可以轻松设置输入法的行为,比如切换输入法的快捷键、设定个人词库等。 7. **性能优化**:随着技术的进步,FCITX-3.2可能在内存占用和CPU使用率...

    fcitx-qt5-rstudio.zip

    6. **启动和切换输入法**:配置完成后,用户可以通过快捷键或系统托盘来启动和切换Fcitx输入法,从而在RStudio中输入中文。 7. **更新和维护**:为了保持Fcitx和RStudio的兼容性,需要定期检查并更新它们的版本,...

    fcitx-qt5-source.zip

    FCITX-Qt5 是一个基于Qt5框架的FCITX输入法引擎插件,它为Linux操作系统提供了强大的中文及其他语言的输入支持。FCITX(Fast Chinese Input Method Toolkit eXtended)是一个轻量级且高度可扩展的输入法框架,而...

    Ubuntu fcitx 小企鹅输入法3.6.3

    3. 更新软件源后,你可以使用`sudo apt-get install fcitx`命令安装Fcitx框架,接着安装小企鹅输入法模块,如`sudo apt-get install fcitx-pinyin fcitx-table-wubi`等,以支持拼音和五笔输入。 4. 安装完成后,需要...

    fcitx输入法源码

    Linux下的fcitx输入法引擎是一款广泛使用的开源输入法框架,尤其在中文输入领域具有很高的知名度。它基于X Input Method(XIM)框架构建,旨在为Linux桌面环境提供高效、灵活且可定制的输入体验。fcitx不仅支持多种...

    fcitx-4.0.0.tar.gz

    1. **多语言支持**:除了中文拼音,FCITX还支持五笔、注音、仓颉等多种输入方式,并且可以切换到日语、韩语等其他语种的输入,满足了不同语言使用者的需求。 2. **轻量级设计**:相比其他输入法引擎,FCITX占用的...

Global site tag (gtag.js) - Google Analytics