2012年11月28日

archlinux, gnome 3.6, fcitx

我受够了 gnome 3.6 + ibus 这对组合了。为了尝试新人会遇到的问题,我把 .config/dconf/user 这个文件改了个名字,然后在「干净」的 gnome 3.6 环境里无论如何折腾也呼叫不出输入法。

好在除了 gnome 官方「刻意」集成的 ibus,还有 fcitx 可以选择。我对 fcitx 的印象一直还停留在 3.x 的时代,这次尝试才发现,现在伊能提供的用户体验,比起 ibus 岂止是毫不逊色,简直可以令后者蒙羞。

而整个切换过程也异常的顺利,基本上就是按照 wiki 操作一遍(我这是吃狗食已经吃出斯德哥尔摩综合症了么,呵呵)。

  1. 安装 fcitx-rime fcitx-gtk3 fcitx-gtk2 fcitx-qt fcitx-libpinyin fcitx-anthy fcitx-configtool
  2. 修改 ~/.xprofile 的 export 为 fcitx,注释掉  ~/.Xdefaults-`hostname` 里 URxvt.inputMethod 和 URxvt.preeditType 两行
  3. gnome-session-properties 里面去掉自动启动 ibus 的项
  4. 到 https://extensions.gnome.org/extension/261/kimpanel/ 安装 kimpanel 扩展,重启 X 即可。
通常我对新东西是宽容的,比如 gnome 3(到现在为止我也还认为 gnome 3 整体上还不错)。因为创新终归是件很困难的事,总要有人愿意吃狗食,事情才会一点一点好起来。但是宽容是有底线的,正如狗食虽然难吃,但至少不能超越作为食物的底线。作为一个中文用户,无法输入中文,超越了我的底线。gnome 团队,你们再这样折腾下去,你们的狗食我是不会再吃了。

2012年11月22日

c/c++:忽略项目代码以外的 warning

很久以前就曾经想让团队在编译的时候都加上 -Werror,无奈一旦碰到项目以外的头文件里有 warning 就很头疼而不得不放弃。

直到今天遇上了一个比较罕见的情况。

同事 F 的代码用到了 protobuf。之前在某台机器上编译的一直没啥问题,今天换了台机器编译就挂了,而且是挂在 protobuf 的头文件里面。查来查去,发现除了 protobuf 之前是装在系统路径下面,现在是装在用户目录空间里之外,别无区别。



可是如果 protobuf 的头文件里真的有 warning,那无论如何都不应该被编译器放过啊。以 google 在业界神一般的存在,难道也会发布出有 warning 的 c++ sdk 么。

资料不多,不过所幸还真有。google 的 protobuf 2.3 还真就是这个德性。有的人自己 patch 了有瑕疵的头文件了事(这种事鄙厂也干过),还有人提到了本文的核心——gcc 的 -isystem 选项。

以前只知道一个 -I。而 -isystem 的作用和 -I 类似,但是会给附带的目录以系统路径待遇。系统路径有啥待遇?而这个待遇,主要就是扔掉各种 warning(标准答案在这里)。

目前看来,有了 -isystem,用 -Werror 培养团队良好的编程习惯应该是没障碍了。

2012年11月17日

archlinux, gnome 3.6, ibus

archlinux 上 gnome 3.6 了。结果中文输入这块就给搞了个鸡飞狗跳。

gnome 3.6 里,在系统设置-区域和语言-输入源这块管理了很多之前 ibus-setup 的设置,取而代之的,就是 ibus-setup 基本不起作用了。

比如绝大多数中文用户认为是天经地义 ctrl-space 开启/关闭输入法,gnome 3.6 压根就没想到过这种功能。gnome 的出发点是用类似 alt-tab 这样轮询窗口的方式,来轮询输入法。所以只能定义「下一个输入源」、「上一个输入源」。当然,如果输入源只有两个,一个英文,一个中文,那么把「下一个输入源」定义成 ctrl-space 的话,效果也还是一样。

当然上面描述的是 gnome 想要实现的东西。实际送到用户手里,跟他们的想法还是有出入。

比如我用的 ibus-rime,在输入源里根本看不见。而不管我配几个输入源,ibus-rime 始终是生效的,只能用 shift 来切换中英文。而 ibus-setup 现在已经无法给「下一个输入法」设置快捷键了。

还有最近 gnome-setting-daemon 的升级带来了一点意外。之前我是不需要操心启动 ibus-daemon 的。升级了 gnome-setting-daemon 之后,需要自己来做这个事情。写在 .xprofile 里面并不妥当,因为启动的太早了,结果跟 gnome 3.6 集成的效果完全没出来,丑的很。目前我的办法是在 gnome-session-properites 里面自己加了一项 ibus daemon,运行命令是 ibus-daemon -d -x。

总之,目前 gnome 3.6 跟 ibus 之间并没有理的很清楚,功能实现的乱七八糟,不过好在输入中文还是可以的,对于我来说暂时也够用了。就看 gnome 的同学们啥时候能把这事情理清楚了。

最后附一张 gnome 3.6 下 ibus 输入的截图,外观体验的一致性还是不错的。