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的更新!

<think>嗯,用户问的是如何启动KDE桌面,我之前已经回答过了。现在用户的新问题是关于fcitx5中文输入的。我需要先回忆一下fcitx5的相关知识,然后组织一个清晰的中文回答。 首先,用户可能是在安装完KDE之后想要配置中文输入法,所以可能需要从安装开始讲起。不同的Linux发行版有不同的包管理命令,比如Arch系用pacman,Debian/Ubuntu用apt,Fedora用dnf。我需要分别列出这些命令,方便用户根据系统选择。 然后,fcitx5的配置部分也很重要。用户可能需要知道如何设置环境变量,比如在~/.pam_environment或者~/.xprofile中添加相关变量。这部分需要详细说明,因为环境变量设置不正确的话输入法可能无法启动。 另外,用户可能还会遇到输入法不显示或者无法切换的问题,这时候需要检查日志或者重新配置。常见问题处理部分应该包括检查安装、环境变量、重新启动fcitx5进程等步骤。 还有,主题和词库的配置可能会提升用户体验,比如安装皮肤或者导入搜狗词库。这些虽然不是必须的,但能帮助用户更好地使用输入法。 需要确保回答结构清晰,分步骤说明,并且使用正确的代码块格式。同时,避免使用Markdown表格,改用更简洁的方式呈现信息。可能还需要提醒用户注销重新登录或者重启系统让配置生效。 最后,用户可能是在使用KDE桌面,所以可以特别提一下KDE环境下的配置注意事项,比如在系统设置中调整输入法选项。如果有常见问题,比如与某些应用程序不兼容,也可以简要说明解决方法。 总结一下,回答的结构应该是安装、配置、常见问题处理、优化配置等几个部分,每个部分给出具体的命令和步骤,确保用户能一步步跟着操作。同时,注意使用中文和正确的LaTeX格式,避免技术术语过于复杂,让新手也能理解。</think>以下是 **在 Linux 系统中配置 fcitx5 中文输入法** 的完整指南: --- ### **安装步骤** #### 1. 安装核心组件 ```bash # Arch/Manjaro sudo pacman -S fcitx5 fcitx5-chinese-addons fcitx5-qt fcitx5-gtk # Ubuntu/Debian sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-frontend-qt5 fcitx5-frontend-gtk3 # Fedora sudo dnf install fcitx5 fcitx5-chinese-addons fcitx5-qt5 fcitx5-gtk3 ``` #### 2. 安装输入法引擎 ```bash # 推荐安装拼音+云输入 sudo pacman -S fcitx5-pinyin-zhwiki # Arch(含维基词库) sudo apt install fcitx5-pinyin # Debian系 ``` --- ### **环境配置** #### 1. 设置环境变量(关键步骤!) 在 `~/.pam_environment` 或 `~/.xprofile` 中添加: ```ini GTK_IM_MODULE=fcitx QT_IM_MODULE=fcitx XMODIFIERS=@im=fcitx ``` #### 2. 配置自动启动(针对桌面环境) ```bash cp /usr/share/applications/fcitx5.desktop ~/.config/autostart/ ``` --- ### **输入法配置** #### 1. 图形界面配置 ```bash fcitx5-configtool ``` *操作建议:* - 在 **Add Input Method** 中添加 `Pinyin` - 调整 `Trigger Input Method` 快捷键(默认`Ctrl+Space`) #### 2. 中文标点配置 在配置工具中启用: ``` Pinyin -> 全角标点 ``` --- ### **常见问题处理** #### 现象:输入法候选框不显示 1. 检查环境变量: ```bash echo $GTK_IM_MODULE # 应返回 fcitx ``` 2. 重置配置: ```bash rm -rf ~/.local/share/fcitx5 ``` #### 现象:部分软件无法输入中文 ```bash # 安装额外适配包 sudo pacman -S fcitx5-config-qt # Qt程序支持 sudo apt install fcitx5-module-xorg # Xorg兼容 ``` --- ### **高级配置** #### 1.输入支持 ```bash # 安装云拼音模块 sudo pacman -S fcitx5-pinyin-zhwiki-cloud ``` *配置路径:* `fcitx5-configtool → Pinyin → 启用云拼音` #### 2. 导入搜狗词库 ```bash # 转换 sogou 细胞词库 libime_pinyindict sogou.scel sogou.dict # 将生成的 sogou.dict 放入 ~/.local/share/fcitx5/pinyin/dictionaries/ ``` --- ### **输入法主题更换** ```bash # 安装流行主题 yay -S fcitx5-material-color # Arch sudo apt install fcitx5-ui-classic # Debian ``` *切换主题:* `fcitx5-configtool → Addons → Classic UI → Theme` --- ### **输入法调试命令** ```bash fcitx5-diagnose # 诊断工具 fcitx5-remote # 查看运行状态 journalctl -u fcitx5 --since "5 minutes ago" # 查看服务日志 ``` --- 完成配置后**重启系统**或执行: ```bash killall fcitx5 && fcitx5 & ``` 建议优先在 KDE 系统设置的 `区域设置 → 输入法` 中确认 fcitx5 为默认输入框架。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值