原文在此:
http://thunar.xfce.org/wiki/design:mime-system
MIME(文件类型)系统的设计
对于一个文件系统来说,MIME系统是很重要的。另外一个重要的方面是,MIME系统除了运用在Thunar上,同时还被别的套件所需要,比如:Xfce panel。
目前最重要和困难的任务是如何从已经存在的文件系统中得到MIME -type。下面是一个基本的流程:
一般获取MIME -type基本上就是以上这个流程。但是对于一些联合类型来说,还需要下面的一些子类和规则来进行判断。
对于一个正规的文件如果返回 application/octet-stream 类型的话, 那么也可以返回类型 application/x-extension-<EXTENSION> 作为备选项。
最好能实现全局匹配( Glob Match )这样才能获得最佳的匹配类型。
一些隐含的规则:
要获得文件类型,除非magic规则(就是/usr/share/mime/magic中的匹配) 大于80(前80位都匹配),否则最好不要用程序打开文件。对于大多数文件,我们只需要直接用后缀去匹配Glob 规则( 就是/usr/share/mime/globs中的匹配 ),匹配不到了再使用 magic规则 。
对于glob规则,在 ($XDG_DATA_DIRS/mime/globs ) 会有对应文件。只是通过匹配文件的后缀名来获得文件类型。
对于magic规则,在($XDG_DATA_DIRS/mime/magic )会有对应文件。会去尝试读取文件的内容来获得文件类型。
另外,对于匹配好的规则,我们会在 $XDG_DATA_DIRS/mime 目录中查找对应的类型描述文件(.xml文件)
比如: text.html 符合 /usr/share/mime/globs 里的 text/html 类型,那么我们就去/usr/share/mime/text/html.xml 中查找对应的类型描述文件。
一般来说,我们会保存匹配过的文件和类型,防止过多的磁盘读写。这是除了查找 $XDG_DATA_DIRS/mime/<MEDIA>/<SUBTYPE> 文件之外的另外一种解决方案。
libxfce4util会自动的把 基础的文件类型和信息,当作per MIME -type 储存起来,查找的路径是先找 $XDG_DATA_HOME 然后查 $XDG_DATA_DIRS 。
每30秒到1分钟MIME database会轮询一次,用来确定 $XDG_DATA_DIRS中的 globs /magic 文件是否存在,或者是globs /magic 是否被更新。当 Thunar运行时,改变 $XDG_DATA_HOME里的 globs /magic规则Thunar也能够实时的解析这些文件。
类型匹配好之后Thunar就通过
/usr/share/applications/defaults.list 来确定文件的默认打开方式。
再通过
/usr/share/applications/mimeinfo.cache 来确定右键推荐列表里的打开方式。
相关资源:谷歌安装器(如果Go安装器无法打卡可以使用这个)