Anos mais tarde, eu fiz um pequeno utilitário que varre o banco de dados MIME (tanto o sistema quanto o usuário) e registra todos mime-types nativos conhecidos no registro do Windows.
Ele usa xdg-open
para abrir um arquivo se houver um aplicativo padrão (nativo) para esse arquivo.
tipo mime, caso contrário, usa packagekit
para procurar por um pacote que possa manipular
esse arquivo (assim como o Nautilus faz). Portanto, meu requisito inicial de registrar apenas as extensões que têm um aplicativo nativo instalado não era mais necessário. No entanto, uma versão inicial do script filtrou apenas esses tipos. O trecho que tornou possível foi:
perl -e '
use strict; use warnings;
use File::MimeInfo::Magic; use File::MimeInfo::Applications;
while (my $line = <STDIN>) {
chomp($line);
my ($ext, $mime) = (split/\t/, $line);
my ($def, @apps) = mime_applications_all($mime);
print "$line\n" if ($def || @apps)
}'
Por padrão, meu script registra apenas tipos nativos que não possuem manipulador no windows registro, mas também pode substituir tais associações (por exemplo, jpeg os arquivos são abertos no visualizador nativo em vez do navegador de vinhos Gecko padrão). Ele também pode ignorar algumas extensões, mesmo que elas não tenham manipulador nas janelas.
Ele tenta o seu melhor para ser um membro do winemenubuilder, ou seja, todas as associações que cria não é publicado como associações nativas (ou como x-wine-extension mimetypes) por winemenubuilder, o que seria feio e potencialmente causaria loops. Isso é muito complicado e ainda não é perfeito, especialmente com extensões de casos mistos (.C e .c por exemplo)
Dito isso, espero que este roteiro seja útil para todos:
Melhorias bem-vindas!