web-dev-qa-db-ja.com

テキスト形式のxdg-mimeを修正する方法

ぼくの xdg-mime間違いを犯します。 Javaコードを含む.htmlファイルをC++ファイルとして認識します。

Xdgの内部メカニズム(ファイルタイプの決定方法など)はよくわかりません。そして、ファイル名拡張子による判断を優先して、この問題を解決する方法を知りたいです。

もちろん、他の解決策も歓迎します。そして、xdg- *のメカニズムの説明はさらに歓迎されます。

5
Cyker

xdg-mimeは、「デスクトップ環境(DE)の一般的なインターフェイスのセット」であるxdg-utilsと呼ばれるスクリプトのコレクションの一部です。あなたの特定のケースでは、 MestreLion のコメントを ここ から引用します:

デスクトップ環境がない場合は、xdg-mime(またはその他のxdgツール)を使用しないでください。 xdgは、異なるデスクトップ環境間で相互運用性を提供することを目的としていますが、デスクトップ環境がない場合は提供しません。xdgをデスクトップに依存しないと考えてください。ただし、「デスクトップ無神論者」ではありません

Xdg-utilsの内部メカニズムについて...これらは、DEをチェックし、見つかった場合はその特定のDEのファイルツールを呼び出して特定のタスクを実行するシェルスクリプトにすぎません。 GNOMExdg-openでは、gvfs-openおよびxdg-mime呼び出しgvfs-info(両方のgvfs- *ツールによる判断を優先ファイル拡張子)。あなたの場合、DEが見つからないため、xdg-mimefile [1]にフォールバックします。ファイルのコンテンツタイプに関する情報を取得します。これは、「汎用」DE(または不明)のxdg-mimeのコードセクションです。

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%正確であるとは限りませんが、それについてできることはあまりありません(それでも、このジョブIMOに最適なツールです)。ただし、ファイル拡張子(ウィンドウ)のみに基づいて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
1
don_crissti