除了 XDG 規範 (mimeapps.list) 之外,文件副檔名如何確定文件類型
我正在嘗試為 R noweb 文件設置預設應用程序,但找不到指定的位置。這樣做的原因是我的文件管理器似乎通過文件副檔名 (.Rnw) 確定文件類型,而不是或除了freedesktop.org指定的方案(即:mimeapps.list、mimeinfo.cache、defaults.list …)
我嘗試將 pcmanfm 和 thunar 作為文件管理器。他們同意確定文件類型,但與
xdg-mime query filetype
實用程序不同。請參閱下面的最小範例和配置文件。此外,該
xdg-mime
實用程序似乎忽略了 localmimeapps.list
,但文件管理器卻尊重它。問題是:我的假設是正確的,即文件類型是由這些文件管理器中的副檔名決定的,我在哪裡可以找到相關的配置?
我使用 Awesome WM 作為視窗管理器
pcmanfm
和桌面管理器。**更新:**我在 pcmanfm 中找到了有關文件副檔名的本教程,但我的問題仍然是 mime 類型和推斷類型
pcmanfm
不匹配(rnoweb.Rnw
是 MIME 類型text/plain
,rnoweb0.Rnw
是inode/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 filetype
並xdg-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
列為“R Sweave 文件”,將plain*
文件列為純文字文件(德語中的“Einfaches Textdokument”)。RStudio
文件管理器中列出的預設應用程序適用*.Rnw
於plain*
.純文字文件是用 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
.
grep
pingtext/plain
MIME 類型,我得到:/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