根据文件名而不是 mimetype 设置默认应用程序

根据文件名而不是 mimetype 设置默认应用程序

我想定义一个根据文件名打开文件的应用程序。

例如,我想要一个名为Gemfile或 的文件Dockerfile用 sublime 或atom 打开。

我知道我可以使用 mime 类型,但对于这两个文件来说,它都是text/plain.

或者有哑剧类型吗Gemfile

答案1

基于文件名的匹配是定义 mimetype 的最简单方法之一。 Gemfiles 或 Dockerfiles 没有官方的 mimetype,但是看一下/usr/share/mime/packages/ ,您会发现许多非官方的 mimetypes 具有<sub-class-of type="text/plain"/> 并且通常命名为text/x-*,例如text/x-pythontext/x-markdown

添加自定义 mimetypes 通常很简单,特别是在我们可以只使用文件名的情况下。

正如您观察到的当前 mimetypeDockerfileGemfile都是text/plain

$ xdg-mime query filetype Dockerfile 
text/plain
$ xdg-mime query filetype Gemfile 
text/plain

我们将为名为 或 的text/x-dockerfile文件创建一个新的 mimetype ,并为名为 的文件创建一个新的 mimetype 。为此,请创建一个以以下内容命名的 XML 文件:Dockerfile*.dockerfiletext/x-gemfileGemfilex-dockerfile.xml

<?xml version="1.0"?>
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
    <mime-type type="text/x-dockerfile">
        <comment>Dockerfile</comment>
        <sub-class-of type="text/plain"/>
        <glob pattern="Dockerfile"/>
        <glob pattern="*.dockerfile"/>
    </mime-type>
</mime-info>

以及另一个x-gemfile.xml以这些内容命名的文件:

<?xml version="1.0"?>
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
    <mime-type type="text/x-gemfile">
        <comment>Gemfile</comment>
        <sub-class-of type="text/plain"/>
        <glob pattern="Gemfile"/>
    </mime-type>
</mime-info>

接下来,安装 mimetypes。对于本地用户,运行以下命令:

xdg-mime install --mode user x-dockerfile.xml
xdg-mime install --mode user x-gemfile.xml
update-mime-database ~/.local/share/mime

要在系统范围内安装,请运行以下命令:

xdg-mime install --mode system x-dockerfile.xml
xdg-mime install --mode system x-gemfile.xml
update-mime-database /usr/share/mime

观察到检测到的 mimetype 现在已更改。

$ xdg-mime query filetype Dockerfile 
text/x-dockerfile
$ xdg-mime query filetype Gemfile
text/x-gemfile

现在您可以将它们分配给您喜欢的任何文本编辑器。

相关内容