如何修复 xdg-mime 的文本格式

如何修复 xdg-mime 的文本格式

我的xdg-mime会犯错误。它将包含 Java 代码的 .html 文件识别为 C++ 文件。

我不太了解 xdg 的内部机制(例如它如何确定文件类型)。我想知道如何通过优先通过文件扩展名进行判断来解决这个问题。

当然,欢迎其他解决方案。更欢迎对 xdg-* 机制的解释。

答案1

xdg-mime 是称为 xdg-utils 的脚本集合的一部分,xdg-utils 是“桌面环境 (DE) 的一组通用接口”。在你的具体情况下,我只会引用梅斯特雷恩的评论来自这里:

如果您没有任何桌面环境,则不应使用 xdg-mime (或任何其他 xdg 工具)。 xdg 旨在提供互操作性 在不同的桌面环境之间,但在没有桌面环境时则不然。 将 xdg 视为与桌面无关,但不是“桌面无神论者”

至于 xdg-utils 的内部机制...它们只是检查 DE 的 shell 脚本,如果找到,则调用该特定 DE 的文件工具来执行特定任务。在 GNOME 中xdg-开放来电gvfs-开放xdg哑剧来电gvfs信息(这两个 gvfs-* 工具都优先通过文件扩展名进行判断)。在你的情况下,没有找到DE所以xdg哑剧回落到file[1] 获取有关文件内容类型的信息。以下是 xdg-mime 中“通用”DE(或者更确切地说未知)的代码部分:

info_generic() {
DEBUG 1 "Running file -i \"$1\""
/usr/bin/file -i "$1" 2> /dev/null | cut -d ":" -f 2 | sed s/"^ "//

if [ $? -eq 0 ]; then
    exit_success
else
    exit_failure_operation_failed
fi }

尽管确实file[1] 结果并不总是 100% 准确,但您对此无能为力(在我看来,它仍然是这项工作的最佳工具)。但是,如果您想仅根据文件扩展名(如 Windows)确定 MIME 类型,您可以编写自己的脚本。这是一个简单的 python 示例:

#!/usr/bin/python2

import os
import sys
import mimetypes

if len(sys.argv) != 2:
    print ("Usage: ./pymime filename")
    raise SystemExit

testfile = os.path.abspath(sys.argv[1])
mt = mimetypes.guess_type(testfile, strict=True)[0]
print ("%s" % mt)
sys.exit(0)

命名它pymime并运行:

./pymime yourfile

相关内容