伪·通向Fcitx 4之路(一)——配置

本来题目是用来吐槽我拍拍脑袋想的配置架构……后来觉得还是这个题目比较好……

Fcitx的配置文件可以说还是比较复杂的,数一数的话config profile tables.conf 码表配置,今后还有个皮肤的配置文件,杯具的是每个文件格式都不大统一,不能说不统一,说貌合神离更加合适,除了config和profile是用的同一个接口,这为gui开发也带来了麻烦。所以就考虑用统一的格式进行开发。

当时想玩玩compiz的插件的时候看到,没有gui部分,compiz config setting manager是怎么把界面搞定的呢?后来看了看发现是用xml描述配置实现的,这给我了一个启发…想把类似的机制用在Fcitx上面。不过原来Fcitx用的就是类Ini的格式,所以也没有用Xml而是用Ini的格式。

配置文件最后就变成了这样的结构:

配置文件描述->配置文件,然而他们的格式又本质是相同的Ini格式。另外的一个启发就是KDE的Desktop file的极大应用,我以前一直以为Desktop file只能支持xdg的那些,KDE把这个拿过来扩展了一下,结果看起来很美好。

老的配置文件是中文,当时是为了简化用户的应用,但是编码问题却仍然困扰着很多人……做utf8的Fcitx也是为了解决这个问题。后来想到还是用英文的好……省得不同Locale的人打架。那么英文->中文的转化就是必要的了,于是想到了gettext,配置文件的描述当中可以抽取出必要的信息进行翻译,在GUI显示时就可以翻译了,Locale也没问题。

同时为了给GUI提供更多的Hint,定义了比较多的配置选项类型:

String,Integer,Boolean,Enum,File,Font,Color,Hotkey,可以针对不同的类型生成不同的GUI。其中Enum是我特别想说的……以前配置文件里面有些0,1,2……不看文档确实没人知道是干什么用的,所以就在Integer之外再分离出Enum类型用做选项。

另外的一个问题就是如何读取这些选项,Fcitx以前用了太多的全局变量,这是一个将全局变量整合起来的机会。如果每次都需要用Group,Name这样的键值读取选项,未免有些浪费,于是又想实现一个Binding的机制。同步变量的值和配置文件中读取的值,以前Fcitx是通过指针实现的,其实是个不错的想法,变量名和选项名是不用面向用户的,代码中描述就行。

另外一个新的问题就是某些选项的限制,一方面可以通过配置文件描述,这样描述的信息可能不足,另一方面可能需要代码配合支持,所以打算给一个filter函数的属性位置,这和原来的读写函数可能很像。

嗯就这样,这部分代码改动很大,还没敢往svn上提交(其实是还没改出个能用的……)

Posted in fcitx development | Tagged | 2 Comments

Hadoop你就是个杯具

小版本号之间的差别够大的,一添加库一堆deprecated,都不知道用什么好!草你老母……

Posted in 日志 | Tagged | Leave a comment

KDE 4.5 风格的fcitx托盘图标

未发布,欢迎围观,顺便一提,这不是xpm,是png!

看着还行吧

Posted in fcitx development | Tagged , | Leave a comment

KDE4使用技巧——窗口分组

这是4.4的新功能,不过大家恐怕用的不多吧,这里介绍一个小技巧

比如dolphin,有时候确实开了很多窗口吧,尤其是浏览器下载之后肯定会打开一个新的。怎么办呢?

窗口标题栏点击右键,高级,特殊应用程序设置,首选项,条件自动分组,强制,把两个对钩都打上

然后体验一下吧,个人觉得还不错哦

 

Posted in KDE | Tagged , , | 3 Comments

KDE的共享Widget

大家如果更新到KDE 4.4之后,可能会发现一个以前没有出现过的选项:

这个是干什么用的呢?很多人可能完全没有发现这个如何使用。首先来看一个演示视频:

http://saber-personal-project.googlecode.com/files/kde44-remote-widget.mp4

目前我发现的和桌面集成起来的方式如下:

首先安装Avahi,Avahi是什么呢?简单的说Avahi是一个zeroconf的开源实现,可以用于发现或者发布网络内的服务,例如sftp服务等等。同时安装nss-mdns,用于dns发现,根据http://wiki.archlinux.org/index.php/Avahi,需要在/etc/nsswitch.conf将

hosts: file

修改为

hosts: file mdns4_minimal dns mdns4

安装好之后需要先启动Avahi,在Archlinux下面就是执行

/etc/rc.d/avahi-daemon start

或者将它加入到rc.conf的DAEMON当中,需要在dbus之后。如果你是刚刚启动Avahi,你可能需要重新启动plasma(注销即可)。

然后对一个plasmoid选择共享,看看自己的桌面是不是已经有提示了呢?根据测试,需要双方同时启动Avahi才能让对方也接受到这一信息。然后就是密码同步,用过蓝牙的就会发现这和蓝牙的配对很像。需要注意的是,不是所有plasmoid都支持共享。例如文件夹视图,或者桌面像框,通过上述操作就会发现实际上和自己添加一个新的没有区别。

这是一个很有趣的实现,KDE4从开发以来似乎很注重网络方面的应用,例如和kde-look.org的集成,很方便的就可以安装plasma主题,或者下载新的颜色,壁纸。通过这个机制能够实现一些很有趣的应用,比如即时的聊天窗口?目前这个功能还没有很好的集成到plasma桌面当中去(没有浏览某个地址的功能)。不过我们可以期待KDE4.5是否有更好的演化:)

另外如果不想用Avahi,可以命令行执行

plasmoidviewer "plasma://host:4000/plasmoid名称 于 host"

不要惊讶,确实是中文,当然别的locale就是对应的罗。例如

plasmoidviewer "plasma://sslaptop:4000/现在收听 于 sslaptop"

同样从这里可以看出,端口是4000,设置了防火墙的同学注意咯。

Posted in KDE | Tagged , , , , | 1 Comment