当我没有defaults.list
and时mimeapps.list
,xdg-open
打开text/plain
with gvim
。但是当我创建defaults.list
并/usr/share/applications/
添加以下行时:
[Default Applications]
text/plain=emacs.desktop
它使用 Firefox 打开文本文件。
但是,如果我移动/usr/share/applications/defaults.list
到,它会按预期~/.local/share/applications/mimeapps.list
打开文本文件。emacs
我的问题:
xdg-open
当没有defaults.list
和时如何确定启动哪个应用程序mimeapps.list
?- 为什么
xdg-open
我只是写东西却用firefox/usr/share/applications/defaults.list
?
我正在使用 Arch Linux。
答案1
如果用于xdg-open
打开应用程序,则用于xdg-mime
设置给定 mime 类型的默认应用程序(通常,安装 xdg-utils 会为您提供 xdg-mime 和相关程序)。
例如,要查看给定文件的“文件类型”(mime 类型,如果您愿意的话):
$ xdg-mime query filetype tmp.txt
text/plain
$ xdg-mime query filetype foo.pdf
application/pdf
$ xdg-mime query filetype $PWD
inode/directory
更改打开目录的默认文件管理器的示例(可以选择 caja.desktop(mint 的默认值)、nautilus.desktop(ubuntu)等:
$ xdg-mime default Thunar.desktop inode/directory
并且还要locate -i foo.desktop
验证它foo.desktop
确实存在。
更重要的是,为了查看默认的文本编辑器是什么,
$ xdg-mime query default text/plain
gedit.desktop
要使用不同的默认文本编辑器(再次验证“.desktop”文件是否存在):
$ locate -i vim.desktop
/usr/share/applications/gvim.desktop
$ xdg-mime default gvim.desktop text/plain
现在,双击“foo.txt”(在您的 GUI 文件管理器中)或运行xdg-open foo.txt
将使用gvim
而不是gedit
。
故障排除:确保可以找到给定应用程序的“.desktop”文件,因为该文件必须与该xdg-mime
实用程序一起使用;例如,
$ xdg-mime default emacs text/plain
xdg-mime: malformed argument 'emacs', expected *.desktop
此外,如果“.desktop”文件不存在,则这将无法按预期工作:
$ locate -i emacs.desktop
(none)
$ xdg-mime default emacs.desktop text/plain # won't work
实际的 emacs“.desktop”文件(在我的环境中):
$ locate -r 'emacs.*\.desktop'
/usr/share/applications/emacs24.desktop
$ xdg-mime default emacs24.desktop text/plain # does work
答案2
#!/bin/sh
FILETYPE=$(xdg-mime query filetype $1)
APP=$( find /usr/share -type f -name "*.desktop" -printf "%p\n" | rofi -threads 0 -dmenu -i -p "select default app")
APP=$(basename -- $APP)
xdg-mime default "$APP" "$FILETYPE"
echo "$APP set as default application to open $FILETYPE"
在文件上使用此脚本,然后它会要求您选择用于此文件类型的默认应用程序。
我使用rofi
,但您可以根据您选择的模糊取景器进行调整。之后,您可以使用xdg-open
.