OS X 的 Launch Services 数据库以多种方式跟踪文档绑定 — 通常,即使您已移动应用程序,它也会尽最大努力匹配应用程序。
您可以运行lsregister -dump
( lsregister
is /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister
) 来查看 Launch Services 数据库对绑定的说明。例如,如果我绑定文本文件以使用 TextWrangler 打开,我会看到:
handler id: 3124
content type: public.plain-text
options:
all roles: com.barebones.textwrangler (0x3ea30180)
public.plain-text
是表示纯文本的统一类型标识符(映射到一个或多个文件扩展名、MIME 类型等,并且可能具有子类型),并且com.barebones.textwrangler
是 TextWrangler 的包 ID。
我不知道有任何 Linux 标准在文档绑定方面如此健壮——要执行类似 Mac 的操作,首先需要有一种标准方法来识别应用程序,而不管它们的位置或名称如何(如 Java 包之类的/reverse-DNS 方法(Mac 上的 /reverse-DNS 方法),然后是用于类型映射和绑定的注册表,随后是足够有用的桌面环境,以及一些在安装应用程序时注册应用程序的方法。
您不一定需要单独的文件(例如Info.plist
Mac 应用程序包中的文件)来存储此信息;即使在 Mac OS X 上,您也可以将信息嵌入到启动服务索引的二进制部分中(请注意,这不是单独的“分叉”或扩展属性;它就像在可执行文件中嵌入调试信息)。.desktop
因此,也许可以嵌入文件的一些派生。另一方面,您需要一种识别内容的方法。理想情况下,您甚至可以进行内容嗅探,例如file(1)
识别文档类型的命令;经典的 Mac OS 使用翻译管理器(它允许注册从一种格式到另一种格式的转换器以及嗅探器)来做到这一点。
UTI 和翻译管理器处理 (d) 剪贴板和拖放内容以及磁盘上的文件;统一这些格式表示非常有用。