我正在尝试为 R noweb 文件设置默认应用程序,但找不到指定它的位置。原因是我的文件管理器似乎通过文件扩展名 (.Rnw) 而不是或除了指定的方案之外来确定文件类型自由桌面网站(即: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/plain
,rnoweb0.Rnw
是inode/x-empty
,但将pcmanfm
两者都列为R Sweave file
)
更新2[已解决]:
@mji 建议将 xml 文件放入~/.local/share/mime/packages
.该文件已作为/usr/share/mime/text/x-r-sweave.Rnw
.事实证明,更改<comment>
该文件中的标签会更改 thunar 和 pcmanfm 中的说明列。它还x-r-sweave
为文件分配 MIME 类型。我已经在我的问题中发现了这一点,但忽略了它(我搜索了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
GVim 适用于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
ping这些文件中 (rstudio.desktop)的出现情况会产生(类似结果总结在{...}
)
/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
ping text/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;
答案1
制作 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