fltk - 如何在 linux 上运行的 fltk 程序中启用 fcitx 输入法?
问题描述
我试图在我在 linux 上运行的 fltk 程序中输入一些汉字,但失败了。我用的是fcitx,专门fcitx-googlepinyin
作为中文输入法的。
以下代码将生成一个包含单个输入框的窗口。
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Input.H>
int main(int argc, char **argv) {
Fl::scheme("GTK+");
Fl::background(35, 35, 35);
Fl::background2(90, 90, 90);
Fl::foreground(240, 240, 240);
Fl_Window *window = new Fl_Window(640, 480);
Fl_Input *input = new Fl_Input(20, 20, 200, 20);
window->end();
window->show(argc, argv);
return Fl::run();
}
ctrl + space
当我点击输入框的时候,在fltk程序中按一下是无法切换到我的中文输入法的。但在 Firefox 或 Atom 等其他 GUI 程序中,中文输入法运行良好。
我设置了一些变量如下:
export XIM="fcitx"
export XIM_PROGRAM="fcitx"
export XMODIFIERS="@im=fcitx"
export GTK_IM_MODULE="fcitx"
export QT_IM_MODULE="fcitx"
如何在 fltk 程序中启用 fcitx 输入法?
解决方案
研究了X输入法后发现这是fltk >= 1.3.4的bug(fltk-1.3.3有正确的实现)。
在第 673 行src/Fl_x.cxx
,正确的代码应该是XSetLocaleModifiers("");
而不是XSetLocaleModifiers("@im=");
。第 1329 行也有同样的问题。
只需更正这两行代码并重新编译库,输入法将再次正常工作。
我还在fltk 的网站上发布了一个错误报告,请查看它以获取更多详细信息。
推荐阅读
- google-api - 使用服务帐户与 OAuth 访问 Google API 时的限制
- r - 使用 R。我需要融化或重塑我的赛马数据框
- java - Java FileInputStream 读取字符不准确????
- macos - 将本地图像嵌入到 Mac 邮件签名中
- c# - 如何在 C# 中动态设置“ItemNullValueHandling”值
- javascript - 如何在javascript中过滤嵌套数组
- angularjs - 如何仅在单击选项卡时才加载页面
- python - 计算多项式系数中的误差
- java - 如何最好地从资源文件夹访问文件
- r - 如何在R中组合具有相同频率的类别名称?