Mime-Types

除了 XDG 規範 (mimeapps.list) 之外,文件副檔名如何確定文件類型

  • June 19, 2015

我正在嘗試為 R noweb 文件設置預設應用程序,但找不到指定的位置。這樣做的原因是我的文件管理器似乎通過文件副檔名 (.Rnw) 確定文件類型,而不是或除了freedesktop.org指定的方案(即:mimeapps.list、mimeinfo.cache、defaults.list …)

我嘗試將 pcmanfm 和 thunar 作為文件管理器。他們同意確定文件類型,但與xdg-mime query filetype實用程序不同。請參閱下面的最小範例和配置文件。

此外,該xdg-mime實用程序似乎忽略了 local mimeapps.list,但文件管理器卻尊重它。

問題是:我的假設是正確的,即文件類型是由這些文件管理器中的副檔名決定的,我在哪裡可以找到相關的配置?

我使用 Awesome WM 作為視窗管理器pcmanfm和桌面管理器。

**更新:**我在 pcmanfm 中找到了有關文件副檔名的本教程,但我的問題仍然是 mime 類型和推斷類型pcmanfm不匹配(rnoweb.Rnw是 MIME 類型text/plainrnoweb0.Rnwinode/x-empty,但pcmanfm都列為R Sweave file

更新2$$ SOLVED $$: @mji 建議放入一個 xml 文件~/.local/share/mime/packages。此文件已作為/usr/share/mime/text/x-r-sweave.Rnw. 事實證明,更改該<comment>文件中的標記會更改 thunar 和 pcmanfm 中的描述列。它還將 MIME 類型分配給x-r-sweave文件。我已經在我的問題中找到了這個,但忽略了它(我搜尋了x-r-noweb


最小的例子:

我在一個空目錄中創建了四個文件。兩個是空的,兩個是樣本內容:

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

但是,thunarpcmanfm文件類型*.Rnw列為“R Sweave 文件”,將plain*文件列為純文字文件(德語中的“Einfaches Textdokument”)。RStudio文件管理器中列出的預設應用程序適用*.Rnwplain*.

純文字文件是用 GVim 打開的,不同意該xdg-mime實用程序,但符合我本地的設置.local/share/applications/mimeapps.list

我係統上唯一匹配的locate mimeinfo文件locate mimeapps

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

grep對這些文件中出現的 (rstudio.desktop) 執行 pingrstudio操作會產生(類似結果總結在 中{...}

/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.

grepping text/plainMIME 類型,我得到:

/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;

製作 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

引用自:https://unix.stackexchange.com/questions/205649