Category Archives: fcitx development

Why fcitx need refactor?

首先诸君没必要给Fcitx加上各种定义,定义是人定的。最重要的就是开发者定的。然后不幸,现在这个人是我。 轻量?简洁?快速?这大概是多数人对于fcitx的看法。 我心中的理想的fcitx是什么样的? 可用性(Usability),原生(Native),KISS。 第一条,在这方面做的努力可能注意不到,在3.6时代困扰不少人的方块字问题,后来通过Fontconfig和Pango(如果禁用Pango就是Fontconfig找字体了)得到了相对比较好的解决。 第二条,这单纯是个人喜好,似乎也是很多linux用户的喜好。界面要原生。Fcitx的界面原生吗?没有使用GTK/Qt,谈不上原生,但是这个皮肤引擎给了Fcitx原生的能力,比如我就曾经写过一个小程序,使用KDE的Plasma主题生成Fcitx的皮肤。 即使对于GNOME来说,我其实也没有必要去写什么利用GNOME-Shell做的界面,不过他那个bug如果不给我解决掉(不是那个xim的,是关于界面显示的,其实是影响所有程序的一个bug),那还是只能悲剧。 第三条,Fcitx的架构其实一直非常简单,一直也没有引入什么更多的外部依赖(除非有必要),现在Fcitx需要发展的话,其实将不得不使用更多依赖,不过不用担心,这些不仅可以在编译时确定,同时也可以在安装时,运行时确定。 为什么我一直执着于不引入高级库的抽象?除了为了满足一些人的洁癖之外,更重要的原因就是保持简单。对于内部的事件处理,虽然当然也可以用比如libevent,或者gio,或者别的什么,但是它相对也不会带来什么用户可见的好处。(最影响Fcitx速度的部分是输入法引擎,用sysprof测定过),增加我的各种学习成本…… 另外也就是留下各种余地,如果有一天Fcitx要做更大的跨平台动作,那些某个平台上没有的库希望也不会成为阻碍。 $ ldd /usr/bin/fcitx linux-vdso.so.1 =>  (0x00007fff4e5ff000) libfcitx-core.so.0.1 => /usr/lib/libfcitx-core.so.0.1 (0x00007f8677546000) libfcitx-config.so.4.1 => /usr/lib/libfcitx-config.so.4.1 (0x00007f867733b000) libfcitx-utils.so.0.1 => /usr/lib/libfcitx-utils.so.0.1 (0x00007f86770fa000) libpthread.so.0 => /lib/libpthread.so.0 (0x00007f8676edd000) libc.so.6 => /lib/libc.so.6 (0x00007f8676b7c000) libdl.so.2 => /lib/libdl.so.2 (0x00007f8676978000) … Continue reading

Posted in fcitx development | 3 Comments

我写GTK/GNOME支持不是因为我想写

主要原因是因为他来暴我的菊花。

Posted in fcitx development | 6 Comments

代码行数

fcitx-googlepinyin:695行,scim-googlepinyin:3892行 fcitx-sunpinyin:697行,scim-sunpinyin:1856行,ibus-sunpinyin:引擎 2944 行 + py配置 597行。

Posted in fcitx development | Tagged , , | 12 Comments

Welcome for test

$ pacman -Q fcitx-hg fcitx-hg 600-1 Welcome for test. 我确定它一定会有bug的……我也刚刚开始日常使用而已。 另外皮肤配置有改动(抱歉抱歉……不过功能没少……),改日再写一个新的说明。 PKGBUILD: http://www.wuala.com/csslayer/pkgbuild/

Posted in fcitx development | 16 Comments

关于代码风格和宏

这是个反思的时机。 由于现在fcitx只有我一个人修改,不需要合作的时候怎么写都无所谓。主要是让一位兄弟望而却步。 我的代码风格到底猎奇吗? 他对于libfcitx-config这个库的意见最大 fcitx的代码现在总体上受了很多其他的代码影响,比如插件的设计,灵感来源于compiz,包括配置文件的设计,比如采用独立文件描述配置文件,这样fcitx-config-gtk就可以像ccsm一样简单设计了。同时为了易于手动修改,于是采用了类ini的写法。 然后为了在代码中方便取用配置文件的值,可以将配置文件的值和一个c的struct绑定,为了方便描述这种绑定这里使用了大量的宏。 使用宏的习惯是我从Postgresql继承来的,学校的开发涉及Postgresql,里面也使用了很多宏,比如系统表的初始值,系统表的定义。 CONFIG_BINDING_BEGIN(FcitxPinyinConfig); CONFIG_BINDING_REGISTER(“Pinyin”, “PinyinPriority”, iPinyinPriority); CONFIG_BINDING_REGISTER(“Pinyin”, “ShuangpinPriority”, iShuangpinPriority); CONFIG_BINDING_REGISTER(“Pinyin”, “DefaultShuangpinSchema”, strDefaultSP); CONFIG_BINDING_REGISTER(“Pinyin”, “UseCompletePinyin”, bFullPY); CONFIG_BINDING_REGISTER(“Pinyin”, “AutoCreatePhrase”, bPYCreateAuto); CONFIG_BINDING_REGISTER(“Pinyin”, “SaveAutoPhrase”, bPYSaveAutoAsPhrase); CONFIG_BINDING_REGISTER(“Pinyin”, “AddFreqWordKey”, hkPYAddFreq); CONFIG_BINDING_REGISTER(“Pinyin”, “DeleteFreqWordKey”, hkPYDelFreq); CONFIG_BINDING_REGISTER(“Pinyin”, “DeleteUserPhraseKey”, hkPYDelUserPhr); CONFIG_BINDING_REGISTER_WITH_FILTER(“Pinyin”, “InputWordFromPhraseKey”, strPYGetWordFromPhrase, FilterGetWordFromPhrase); CONFIG_BINDING_REGISTER(“Pinyin”, … Continue reading

Posted in fcitx development | 12 Comments