Tag Archives: 输入法

论我遇见的像是那种只活在自己世界里一样的…

好久好久没有更新过 blog 了…非要说的话,还是时代变了,自己也变了。但偶尔实际上还是会有想说点什么的想法。今天的话,其实是憋在心里很久想说的,当然其实也是想说给某些人听的,但是因为很久以前有段时间发觉自己讲话越来越难听,时常和别人起争吵。自从意识到这个事情之后…我有时候就想尝试不要那么激烈的讲。 那么这个标题……和选择发在这个文章分类到底算是有什么关系呢? 首先我得说,我在上大学的时候,是真的见过民科的。详情已经记不得了,但是那会还真的是年轻,只是走在三角地附近,突然被一个大叔搭讪,问能不能帮他输入一些东西。我本来以为也就是帮忙打字,所以就答应了他。但是带他到实验室的工位之后,却意外发现他让我打的是什么什么数学定理的证明。内容大概只有一页纸,已经不记得是什么定理了,但是反正是个有名的未证明的定理,只要看过科普的话就应该能见过的那种,也许是歌德巴赫吧。然后我这会儿,内心是尴尬的,可是又不想弄得非常麻烦还要讨论是否正确,毕竟我内心觉得和他争论这个事情可能很难能说服他,所以就干脆想赶快打完完事。结果输入的过程中还能发现非常低级的错误(等式左右算错那种)……因为影响输入所以还问他怎么办。结果还被他赞同了一下……最后总之赶快输入完打印了完事,结果他还塞给我50块钱说很有启发就跑走了,连我拒绝收钱的机会都没有给我。 非要说的话,十几年过去了…我是没有想到现在还能看见类似民科气质的人。 我一直有订阅着某论坛的某个版面的RSS,曾经还经常去帮他们回答一些 Fcitx 的配置问题,但是这么多年没见了,突然某天开始这个版面就开始有几个活跃的人。让我想起了那个我曾经遇见过的民科。 那么说到底我这里说的是什么…就是那种觉得自己就是正确的,有点完全活在自己的世界里的那种。当然,这里有几个不同的人,真的要说让我感到尴尬的点也不一样。我们只是说其中的某个提出了一个输入法方案的人。 我觉得他提出的那个方案可以说是有用的,但是他自己在推广的时候……实在是吹的太过头了。为什么我要说是像那个民科一样的感觉呢,就是总是一种“我真的是怀才不遇,四处碰壁”,但是“对的是我,错的是这个世界”。 可惜没人相信这种输入法的便利性、好处、以及潜在的市场优势。 我不太想过于直白的说明是谁但…光看他的回帖有多少个叹号……就知道大概是个什么感觉了。 但有的事情,让我不吐不快的就是,开源世界并不是这样的啊…开源世界的开始都是孤独的。这么长时间以来我自己很赞同 Linus 曾经在某个采访中说过的: In many ways, I actually think the real idea of open source is for it to allow everybody to be “selfish”, not about trying … Continue reading

Posted in fcitx development | Tagged , | Leave a comment

为什么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