web-dev-qa-db-ja.com

XDG仕様(mimeapps.list)に加えてファイル名拡張子によるファイルタイプの決定はどのように機能しますか

R nowebファイルのデフォルトアプリケーションを設定しようとしていますが、これが指定されている場所が見つかりません。これは、ファイルマネージャが、 freedesktop.org (つまり、mimeapps.list、 mimeinfo.cache、defaults.list ...)

ファイルマネージャーとしてpcmanfmとthunarを試してみました。それらはファイルタイプの決定に同意しますが、xdg-mime query filetypeユーティリティとは異なります。最小限の例と構成ファイルについては、以下を参照してください。

さらに、xdg-mimeユーティリティはローカルのmimeapps.listを無視しているようですが、ファイルマネージャはそれを尊重します。

質問は次のとおりです。ファイルタイプはこれらのファイルマネージャーの名前拡張子によって決定されるという私の仮定は正しいですか、関連する構成はどこにありますか?

私はAwesomeWMをウィンドウマネージャーとして使用し、pcmanfmをデスクトップマネージャーとして使用しています。

更新:私は pcmanfmのファイル拡張子に関するこのチュートリアル を見つけましたが、私の問題はまだそのmimeタイプとpcmanfmによる推定タイプです一致しません(rnoweb.RnwはMIMEタイプtext/plainrnoweb0.Rnwinode/x-emptyですが、pcmanfmは両方をR Sweave fileとしてリストします)

Update2 [解決済み]:@ mjiは、~/.local/share/mime/packagesに配置するxmlファイルを提案しました。このファイルはすでに/usr/share/mime/text/x-r-sweave.Rnwとして存在します。そのファイルの<comment>タグを変更すると、thunarとpcmanfmの[説明]列が変更されることがわかりました。また、MIMEタイプx-r-sweaveをファイルに割り当てます。これはすでに私の質問で見つかりましたが、見落としていました(x-r-nowebを検索しました)


最小限の例:

空のディレクトリに4つのファイルを作成しました。 2つは空、2つはサンプルコンテンツ付き:

touch plain0 rnoweb0.Rnw

cat > plain <<EOF
text
EOF

cat > rnoweb.Rnw <<EOF
<<>>=
1+1
@
EOF

これらのファイルに対してxdg-mime query filetypexdg-mime query defaultを実行して、次の結果を取得します。

filename      MIME type           Default app
-------------------------------------------------
plain         text/plain          medit.desktop
plain0        inode/x-empty
rnoweb0.Rnw   inode/x-empty
rnoweb.Rnw    text/plain          medit.desktop

ただし、thunarおよびpcmanfmは、*.Rnwファイルのタイプを「RSweaveファイル」としてリストし、plain*ファイルをプレーンテキストドキュメント(ドイツ語で「EinfachesTextdokument」)としてリストします。ファイルマネージャにリストされているデフォルトのアプリケーションは、*.Rnwの場合はRStudioplain*の場合はGVimです。

プレーンテキストファイルはGVimで開かれ、xdg-mimeユーティリティに同意しませんが、ローカルの.local/share/applications/mimeapps.listの設定に従います。

locate mimeinfolocate mimeappsに一致する私のシステム上の唯一のファイルは

/etc/xdg/mimeapps.list
/usr/share/applications/mimeinfo.cache
~/.local/share/applications/mimeapps.list
~/.local/share/applications/mimeinfo.cache

これらのファイルでgrep(rstudio.desktop)が発生した場合のrstudiopingは、次のようになります({...}に要約された同様の結果)

/usr/share/applications/mimeinfo.cache 
    application/x-r-data=rstudio.desktop;
    application/x-r-project=rstudio.desktop;
    text/css=rstudio.desktop;
    text/html=firefox.desktop;abiword.desktop;calibre-ebook-edit.desktop;rstudio.desktop;elinks.desktop;
    text/javascript=rstudio.desktop;
    text/x-R=rstudio.desktop;
    text/x-markdown=rstudio.desktop;
    text/x-r=rstudio.desktop;
    text/x-r-{doc,markdown,history,html,presentation,profile,source,sweave}\
    =rstudio.desktop;
    text/x-tex=texstudio.desktop;gvim.desktop;rstudio.desktop;

xDG仕様に記載されている他のファイルには、rstudioの出現は含まれていません。

text/plainMIMEタイプのgrepping、私は以下を取得します。

/etc/xdg/mimeapps.list : text/plain=medit.desktop;
/usr/share/applications/mimeinfo.cache : text/plain=medit.desktop;libreoffice-writer.desktop;gvim.desktop;abiword.desktop;
~/.local/share/applications/mimeapps.list : text/plain=gvim.desktop
~/.local/share/applications/mimeapps.list : text/plain=gvim.desktop;
3
akraf

Mime-infoファイルを作成します

$ vi ~/.local/share/mime/packages/x-r-noweb.xml

$ cat ~/.local/share/mime/packages/x-r-noweb.xml
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
    <mime-type type="text/x-r-noweb">
        <comment>R noweb</comment>
        <glob pattern="*.Rnw"/>
    </mime-type>
</mime-info>

Mimeデータベースを更新する

$ update-mime-database ~/.local/share/mime/

$ xdg-mime query filetype rnoweb0.Rnw 
text/x-r-noweb
$ mimetype -d rnoweb0.Rnw
rnoweb0.Rnw: R noweb
$ mimetype rnoweb0.Rnw
rnoweb0.Rnw: text/x-r-noweb

これで、デフォルトのアプリケーションを設定できます

$ xdg-mime default Nice-app.desktop text/x-r-noweb
# (or edit ~/.local/share/applications/mimeapps.list)

$ xdg-mime query default text/x-r-noweb
Nice-app.desktop
3
mjy