Category Archives: Linux

为什么Linux下的输入法如此Fxxk

这里不是用来讨论实际算法上的问题的,而是说明一些兼容性的问题。例如你想说输入法不够智能什么的还请不用期待了,这不是本文的关注对象。 先来说说安装问题,众所周知的,输入法安装之后,往往都会提到以下三个环境变量:XMODIFIERS,GTK_IM_MODULE,QT_IM_MODULE。这三个货都是干什么的?为什么要设置这三个货?为什么Linux输入法用起来这么不方便? 这就得从头说起。 首先是XIM协议。更加详细的说明请参考这里:http://www.ibm.com/developerworks/cn/linux/i18n/xim/xim-2/index.html 所有的X程序都应当可以采用XIM作为输入法的协议,这和Qt还是GTK没有关系(X上的Qt和GTK,当然和Windows上的就没什么关系了)。这个协议简单说来就是会把按键事件先交给XIM Server,XIM Server做对应的处理,然后按照处理结果,将输入结果或者按键再交给对应的应用程序。 这里就要提到XMODIFIERS这个东西了,一般来讲,都会设置成@im=xim server name这个值。也就是说,如果XIM Server有多个,那么你可以根据这个变量来指定某个程序是使用这个XIM Server或者哪个XIM Server。这也就是比如fcitx为什么运行两个的时候会提示有同名的XIM Server在运行,是的,这个名称不可重复。 但是Qt和GTK其实都不喜欢这个东西,因为如果需要跨平台的话,这个XServer Only的东西其实说起来并不是那么好使。于是就出现了IM Module这个东西。这个是什么呢?那就是用来处理IM信息的模块,原则上来说替代了XIM的协议,使得按键信息实际上是交给这个模块,然后再交给IM Server(注意已经不是XIM了)。那么如何支持原来的XIM呢?于是Qt和GTK实际上都自带了一个IM Module,这个module负责将它收到的再通过XIM协议和XIM Server通信。 看起来一切都非常美好?我们来说几个常见问题。 1、光标跟随 这个问题不能怪任何一个输入法,事实上由于IM Server负责显示输入框,光标的位置是由应用程序告诉我们的。它不告诉我们输入框在哪,自然也就不能光标跟随。 2、BackSpace按键删除的不是候选输入的文字 例如pidgin的状态吧,大致上,因为这里pidgin为了用户体验,设计了一个键盘的图标,按键时就会让这个图标变化,于是它需要抓取键盘按键,不幸的是它把BackSpace抓走了,于是输入法没有收到BackSpace键,那么自然也不会做应该做的事情。 3、非纯粹的GTK和Qt程序下的问题 比如Firefox,Flash,OpenOffice,Opera。他们在im module上面又包了一层,又或者是自己处理,于是就会出现更加奇妙的问题。 4、非CJK Locale无法输入 我们来看看gtk-query-immodules-2.0的执行结果,以scim和xim为例子,ibus搞了个workaround避过了这个问题。 “/usr/lib/gtk-2.0/immodules/im-scim.so” “scim” “SCIM Input Method” “scim” “/usr/share/locale” “ja:ko:zh” … Continue reading

Posted in Linux, 日志 | Tagged | 8 Comments

Linux & Windows

其实在我是一个Linux用户的同时,我也是个比较坚定的Windows党。 啊,有时候我也挺乐意给Windows辩护一下子的。 虽然没用过Mac,不过心里比较不待见水果公司。 另外说句有点迟到的,诸位新年快乐。

Posted in Linux | 9 Comments

还是很菜的。

API和ABI。 比如c语言的struct,如果struct的大小或者属性的顺序变了,那么以前编译过的程序和共享库之间是不兼容的。 struct s { int a; int b; }; 如果修改之后: struct s { int a; int c; int b; }; 那么如果你按照之前的头文件编译 struct s o; o.b和现在的o.b的地址是不一样的,之间差了s中的c这个长度。那么执行的时候就会得到错误的结果,需要靠重新编译解决。 为什么get和set是有必要的? get和set可以将原有的属性之间ABI的不兼容变化成API。get和set的函数是和包含在共享库当中的,这个函数一定会和共享库一起编译。这样ABI之间的不兼容就被API化解了。 要么保持数据结构不变,要么就不要将它暴露给别人。

Posted in Linux | 6 Comments

我的firefox扩展

其实数量也多到一定程度了。 Adblock Plus,必备神器。 Cookie Exporter,想用wget但是又需要cookie时。 Ease Link,转换迅雷,rayfile,旋风等链接用。 Firebug,不说了,找网络资源,破解简单的访问限制,看http头,万能。 Firefox Sync,同步,firefox4也内置了这个。 Fisson,任务栏进度条。 Flashblock,很多人推荐。 FlashGot,单纯是下载视频挖掘地址方便。 FoxyProxy Standard,代理多的时候。 Oxygen KDE,KDE界面和谐。 Personal Menu,自己整理菜单。 Redirector,自助重定向一些东西,比如reader强制https。 RefControl,破解防盗链图片用。 Smart Stop Reload,刷新和停止是一个按键。 Tabs on top,标签栏在上方。

Posted in Linux | 3 Comments

封怪域名记

话说我的VPS换了服务器,ip也换了,这几日总是从百度来一些搜索超级有碍社会主义精神文明建设(neta详情请点击)词语的人。让人感觉很不爽。调查后发现有一小撮曾经用这个ip建立来妨碍精神文明建设的网站。我这里访问量多了翻了3倍啊3倍……喂,跳转过来的人有没有好好反省反省,改过自新啊? 好吧,总之剩下的人都被我用nginx的rewrite定向回127.0.0.1了,statpresscn的统计也清净了。总之就是非csslayer.tk域名的访问一律再见了。

Posted in Linux | Tagged | 3 Comments