最近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的更新!
分享到:
相关推荐
是一个以 GPL 方式发布的输入法框架, 编写它的目是为桌面环境提供一个灵活的输入方案,彻底解决在GNU/Linux下没有一个好的中文输入法的问题。
小企鹅输入法,linux下最好用的输入法,已做好安装程序,运行install.sh即可安装!
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....
libfcitxplatforminputcontextplugin.so.tar.gz Qt5.14.1 同为麒麟系统,QT版本一样时,不用再进行编译,直接将libfcitxplatforminputcontextplugin.so库拷贝到对应的目录中即可 详细说明,请参考:...QtCreator4.11
ubuntu16.04下 sougou输入发离线安装,文件包括: sogou依赖fcitx安装包,sogou安装包,安装脚本.
fcitx-3.2fcitx-3.2fcitx-3.2fcitx-3.2fcitx-3.2
该插件解决ubuntu14.04系统,安装qt5.6,fcitx中文输入法默认不能在Qt creator中切换输入中文的问题。 据说从qt5.4之后的版本没办法直接通过apt-get安装fcitx的平台插件,所以该资源是我按照网上一篇非常棒的博客,...
解决Qt编译出的应用不能输入fcitx中文字符问题,比如搜狗输入法 PS:aarch64 GNU/Linux
fcitx输入法框架,凝思6.0.60可用
麒麟系统QtCreator使用中文输入法的fcitx插件 麒麟系统QtCreator使用中文输入法的fcitx插件 麒麟系统QtCreator使用中文输入法的fcitx插件
fcitx五笔输入法变更码表功能 安装工具(mb2txt與txt2mb) sudo apt-get install fcitx-tools 制作码表 wb86x.mb 原86版 wb98.mb 原98版 wubi-large.mb 大字集86版 yxwb86.mb 亦心86词库新 1.复制码表到/usr/share/...
解决Qt编译出的应用不能输入fcitx中文字符问题,比如搜狗输入法 PS:aarch64 GNU/Linux
fcitx5输入法目前(2022年5月26日)最新版本5.0.16,构建于Ubuntu20.04,因为Ubuntu20.04的源几乎已经不怎么更新fcitx5输入法了(版本老的不行),于是自己用源码编译并打包成了DEB包,依赖的底层组件都是apt能安装的。...
Fcitx──小企鹅输入法:Free Chinese Input Toy for X是一个以 GPL方式发布的、基于XIM的简体中文输入法(即原来的G五笔),包括拼音(全拼和双拼)、区位以及码表输入模块,是在Linux操作系统中使用的中文输入法,当然...
解决QT无法切换fcitx中文输入的时make编译出现的问题-附件资源
Dependencies: cmake build-essential opencc mercurial ...sudo apt-get install fcitx-table-wbpy cd fcitx-googlepinyin mkdir build; cd build cmake .. -DCMAKE_INSTALL_PREFIX=/usr make sudo make install
fctix-4.2.4.2 并不是最新的版本,但确实最容易无差错编译安装的一个版本,如果你编译fcitx 遇到了困难,那么这个tar 正是你需要的。tar 包里包含了fcitx 和一个基本词库,请把两者扔到一起编译安装。
fcitx-frontend-qt5的离线安装包
fcitx 输入法
fcitx输入法 源码包