linux – 获取打开特定文件的应用程序列表

前端之家收集整理的这篇文章主要介绍了linux – 获取打开特定文件的应用程序列表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何获取能够打开特定文件类型/ MIME类型的应用程序列表?我在 Linux上寻找一个独立于桌面环境的解决方案.

我发现获取文件的MIME类型的可能性:

~> xdg-mime query filetype test.svg 
image/svg+xml

然后我可以查询该MIME类型的默认应用程序:

~> xdg-mime query default image/svg+xml
eog.desktop

是否还有一个解决方案来获取我可以用于该文件的程序列表(非默认)?

例如,在GNOME桌面上,如果我选择使用另一个* .json文件的应用程序打开,我可以看到三个(Atom,Gedit,Builder)应用程序,建议打开文件

如果我选择,显示所有应用程序,我还可以看到另一个相关的应用程序(LibreOffice Writer):

我找到了文件/home/user/.config/mimeapps.list,其内容如下:

[Added Associations]
text/html=atom.desktop;firefox.desktop;midori.desktop;org.gnome.gedit.desktop;brackets.desktop;
application/javascript=atom.desktop;org.gnome.Builder.desktop;org.gnome.gedit.desktop;

并且还有mime类型的关联应用程序,但我找不到Arch Linux wiki中提到的全局mimeapps.list文件.

解决方法

GNOME最有可能做的是解析所有.desktop文件并查找声明支持所请求的MIME类型的文件.这是解决问题的唯一方法.使用适当的解析库和低级语言,这应该是相对快速的操作.此外,他们可能会放置一些缓存文件以进一步加快速度.

但是如果不需要“确定”并且“可能”对您来说足够好,那么与它们相关联的所有MIME类型和.desktop文件都存储在mimeinfo.cache文件中.我不确定该文件的实际保证是什么,也许我使用错误的方式,但是以下功能似乎工作得很好

#!/bin/bash

xdg-all-apps() {
    LOCAL="${XDG_DATA_HOME:-$HOME/.local/share}/applications/mimeinfo.cache"
    GLOBAL="/usr/share/applications/mimeinfo.cache"

    MATCHING="$(grep -h "$1" "$LOCAL" "$GLOBAL")"
    if [ -z "$MATCHING" ]; then
        echo "There are no application associated with $1"
        return
    fi
    echo "$MATCHING" |cut -d = -f 2 |\
        sed -z -e 's:\n::;s:;:\n:g' |\
        sort |uniq
}

xdg-all-apps text/plain
xdg-all-apps audio/mpeg
xdg-all-apps image/svg+xml
xdg-all-apps application/json

在我的系统上,运行该代码生成以下输出

gvim.desktop
kde4-kate.desktop
kde4-kwrite.desktop
kde4-okularApplication_txt.desktop
kwrite-usercreated.desktop
libreoffice-writer.desktop
vim.desktop

easytag.desktop
smplayer.desktop
smplayer_enqueue.desktop
vlc.desktop

gimp.desktop
inkscape.desktop
kde4-kolourpaint.desktop
midori.desktop
There are no application associated with application/json

如您所见,某些应用程序提供了多个桌面文件(smplayer.desktop和smplayer_enqueue.desktop).可以删除这些功能重复,但这不是微不足道的.

但请注意,有些桌面完全忽略了XDG.如果你想要真正的跨桌面方式,你应该把mailcap文件放在混合的某个地方.我坚信GNOME实际上忽略了它.

原文链接:https://www.f2er.com/linux/393384.html

猜你在找的Linux相关文章