Como corrigir o xdg-mime para formatos de texto

5

Meu xdg-mime comete erros. Ele reconhece um arquivo .html contendo código Java como um arquivo C ++.

Eu não conheço bem o mecanismo interno do xdg (por exemplo, como ele determina o tipo de arquivo). E eu quero saber como corrigir esse problema, dando preferência ao julgamento por extensões de nome de arquivo.

É claro que outras soluções são bem vindas. E a explicação dos mecanismos do xdg- * é ainda mais bem-vinda.

    
por Cyker 08.09.2012 / 05:44

1 resposta

1

O xdg-mime faz parte de uma coleção de scripts chamada xdg-utils, "um conjunto de interfaces comuns para ambientes de desktop (DE)". No seu caso particular, vou apenas citar o comentário do MestreLion de here :

If you dont have any desktop enviroment, you should not use xdg-mime (or any other xdg tool). xdg is meant to provide interoperability between different desktop enviroments, but not when there is none. Think of xdg as desktop-agnostic, but not "desktop-atheist"

Quanto à mecânica interna do xdg-utils ... Eles são apenas scripts de shell verificando um DE e, se encontrado, chamando as ferramentas de arquivo do DE para executar uma determinada tarefa. No GNOME xdg-open chama gvfs-open e xdg-mime chama gvfs-info (ambos gvfs- * ferramentas dando preferência ao julgamento por extensão de arquivo). No seu caso, nenhum DE é encontrado, então xdg-mime retorna para file [1] para obter informações sobre o tipo de conteúdo do arquivo. Aqui está a seção de código do xdg-mime para DE "genérica" (ou melhor, desconhecida):

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 }

Embora seja verdade file [1] os resultados nem sempre são 100% precisos, não há muito o que fazer sobre isso (ainda é a melhor ferramenta para esse trabalho IMO). No entanto, se você quiser determinar os tipos MIME baseados apenas nas extensões de arquivos (a la windows), você poderá escrever seu próprio script. Aqui está um exemplo simples de 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)

Nomeie-o pymime e execute:

./pymime yourfile
    
por 13.04.2017 / 14:37