在KDE和GTK之间同步“最近使用的文件”列表

bsidb | 2013/07/31

在日常使用中,难免会用到GTK写的程序。GTK程序的外观可以通过oxygen-gtk来模拟KDE的样式,但是文件对话框却没办法使用KDE提供的对话框。而文件对话框中的一个比较有用的功能“最近使用的文件”列表,也是没有办法在GTK和KDE之间互通;给人造成困扰。Recently-Used Files Records Synchronizer 就是为了解决这个问题而编写的一个辅助的小程序。该程序能够在GTK和KDE之间同步“最近使用的文件”列表,使两者能更加互通。

有关“最近使用的文件”列表

一个有用的列表

“最近使用的文件 ”这个功能,对于用户,有些像cache对于CPU。cache里缓存的是最近使用的内存数据,而在“最近使用的文件”列表里,缓存的是用户最近打开和保存的文件的快捷链接。如果某个文件最近操作过,那么从这个列表里能够很方便的找到,从而避免了一层一层进入文件夹的困扰。虽然在文件对话框的侧栏中,可以保存若干的快捷书签,也可以达到快速进入某个目录的目的,但是快捷书签的数目一般不会太多(否则从这些书签中找到自己想去的位置,也是一个麻烦的问题),所能覆盖的范围一般仅限于常用文件夹;而且进入特定目录后(例如’工作’目录),还是需要继续寻找特定的文件才行。如果可以从“最近使用的文件”列表里直接定位的话,能方便许多。

什么时候这个列表起作用

好多童鞋一般不怎么用这个列表,原因之一就是这个列表不可靠。啥叫不可靠咧,有时候明明在某个KDE程序中通过菜单打开、编辑了一个文件,但是这个文件却没有出现在“最近使用的文件”列表里,从文件对话框打开时,还得再次找;似乎这个列表没有记录下什么。GTK也是同理。所以,索性不用了。

其实这种现象和该列表的实现机制有关。

表:KDE与GTK的实现方式
桌面环境 操作方式 存储方式
Gnome(GTK) GLib:GtkRecentManager类 文件$HOME/.local/share/recently-used.xbel
KDE KRecentDocument类 在文件夹$HOME/.kde4/share/apps/RecentDocuments/下的众多desktop文件

在程序中,需要显式的对有关类进行操作,才能记录到“最近使用的文件”列表。而大部分程序都不会主动调用这些类的有关方法,因此起作用的范围有限。为了增强这个列表的作用,GTK和KDE都在其自身提供的文件对话框中,隐含内置了有关操作的处理。当用户用GTK或者KDE自身提供的文件对话框(不是WPS那种自定义的;包括打开、保存两种对话框)选择文件并打开时,选择的文件就会被自动记录到有关的列表中去。这时就能在列表里找到文件。而当用户通过程序自身的“最近打开文件”列表打开文件时,如果这个程序没有主动向GTK或者KDE报告文件操作,就不会被系统的“最近使用的文件”列表记录。
 

有关Recently-Used Files Records Synchronizer

工作原理

每次程序启动时,自动做双向同步,将某个列表中出现而在另一个列表没出现的文件,添加过去。以后每隔一段时间(默认为2秒),调用GTK和KDE的有关API去查询当前的“最近使用文件”列表;比对两者的不同,将新增的文件,同步到另一个列表中。因为GTK和KDE中可以接受的“最近使用文件”列表的长度不同,因此两者不能保证完全一致;但可以保证,最近新增的某个记录,一定会反映到另一个列表中。

使用场景示例

写这个程序也是受一些日常使用中遇见的场景的启发。下面抛砖引玉的展示一个例子,权当说明这个程序为啥有一定用处。

例子:截图并上传

现在想截一张图,上传到iKDE.org上。截图使用的工具是Deepin-Screenshot,是基于PyGTK的程序,在保存图片时,用的是GTK的对话框。将图片保存到/tmp/下(也可以是某个更深层次的目录:例如/A/B/C/D/E/f.png,我的一些文档用的图片,一般都保存在类似这么深的文件夹下)。

用GTK对话框保存截屏的图片

用GTK对话框保存截屏的图片

然后利用Chrome浏览器上传。Chrome可以识别KDE,用的是KDialog来选择文件。这时利用’recentdocuments:/’(感谢@csslayer的劳动)来快速找到刚才我们截图保存的那张图片。

用KDE对话框选择最近使用的文件

用KDE对话框选择最近使用的文件

类似的场景还有:

  • 利用Firefox下载了一个PDF文件,在Okular中打开时,可以直接从’recentdocuments:/’中找;
  • 利用Chrome下载保存了一个图片(通过KDialog),然后在GIMP里打开时,直接从“最近使用的文件”列表中,按照“修改时间”降序排序,在很靠上的位置就可以找到刚才的文件;
  • 利用WPS打开、编辑、保存了一个文件(通过KDialog打开/保存的),在Firefox中,给XX邮箱上传附件时(通过GTK文件选择对话框),直接通过“最近使用的文件”来选择文件。
  • 程序下载

    访问kde-apps.org获得更多信息

    源代码

    托管在Github的源代码

    New Arch Linux User
    Tags: , ,

    ONE FEEDBACK

    Leave a Reply

    Your email address will not be published. Required fields are marked *

    Note: Commenter is allowed to use '@User+blank' to automatically notify your reply to other commenter. e.g, if ABC is one of commenter of this post, then write '@ABC '(exclude ') will automatically send your comment to ABC. Using '@all ' to notify all previous commenters. Be sure that the value of User should exactly match with commenter's name (case sensitive).

    This site uses Akismet to reduce spam. Learn how your comment data is processed.