Como faço para criar tipos Mime para novos documentos (linha de comando)?

5

Como faço para que o documento personalizado do meu aplicativo seja um ícone personalizado? Além disso, como faço com que o gerenciador de arquivos abra esses documentos quando um usuário clica duas vezes neles?

Eu tenho que fazer isso na linha de comando porque a solução será usada dentro de um script de instalação.

    
por user293406 15.06.2014 / 00:05

3 respostas

3

A solução correta pode ser encontrada - & gt; aqui & lt; -, mas uma versão foo é fornecida abaixo para responder diretamente à pergunta.

Por favor, preste muita atenção ao uso de application-x-foo , x-foo e foo à medida que eles mudam.

Observação: Ao atualizar o tutorial do Ubuntu, provavelmente é melhor, em um exemplo, distinguir entre o foo application, foo the extension e foo mimetype para evitar confusão no futuro. ou seja, lmms usa *.mmpz e x-lmms-project , o que ajudou muito a descobrir isso.

  • Obtenha um ícone SVG escalável (fornecido como exemplo)
  • wget http://soqr.fr/testsvg/zebra.svg -O ~/Desktop/application-x-foo.svg
    

  • Crie um arquivo de inserção de mime no formato XML:
  • <?xml version="1.0" encoding="UTF-8"?>
    <mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
    <mime-type type="application/x-foo">  
    <comment>Foo File</comment>
    <glob pattern="*.foo"/>
    </mime-type>
    </mime-info>
    

  • Salve isso em ~/Desktop/x-foo.xml
  • Se ainda não estiver, crie um arquivo da área de trabalho:
  • [Desktop Entry]
    Version=1.0.0
    Encoding=UTF-8
    Name=FooGazi
    GenericName=Foo Application
    Comment=This is my Foo Application
    Exec=/usr/bin/foo
    # Please change, system-shutdown.svg used only as example
    Icon=/usr/share/icons/Humanity/actions/48/system-shutdown.svg
    StartupNotify=true
    Type=Application
    MimeType=application/x-foo;
    

  • Salve isso em ~/Desktop/foo.desktop

  • Implante a descrição do mime
  • sudo xdg-mime install --mode system ~/Desktop/x-foo.xml
    

  • Implante o lançador de aplicativos
  • sudo cp ~/Desktop/foo.desktop /usr/share/applications
    

  • Implemente o ícone SVG
  • sudo cp ~/Desktop/application-x-foo.svg /usr/share/icons/gnome/scalable/mimetypes/
    

  • Registre o lançador de aplicativos com o mimetype registrado
  • sudo xdg-mime default foo.desktop application/x-foo
    

  • Atualize o cache mime
  • sudo update-mime-database /usr/share/mime
    

  • Atualize o cache de ícones
  • sudo gtk-update-icon-cache /usr/share/icons/gnome/ -f
    

  • Como um hábito, também adiciono a linha apropriada a /etc/mime.types , mas confirmo se isso ainda é necessário e edito esta postagem para refletir isso.
  • Faça logoff e volte. O ícone e a associação devem funcionar.
  •     
    por user1466873 16.06.2014 / 21:33
    1

    Nunca, nunca, edite arquivos existentes em / etc do script de instalação! Essa é uma ideia muito ruim. além de você não precisar editar /etc/mime.types

    seu arquivo xml ainda está errado e, no local errado, ele deve estar /usr/share/mime/text/x-foo.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <mime-type xmlns="http://www.freedesktop.org/standards/shared-mime-info" type="text/x-foo">
        <comment>Example file type </comment>
        <glob pattern="*.foo"/>
    </mime-type>
    

    Ícones de terceiros são normalmente instalados para: / usr / share / icons / hicolor / escalável / mimetypes

        
    por user60846 16.06.2014 / 04:31
    0

    Não consegui fazer com que as coisas funcionassem com as outras respostas, mas consegui que as coisas funcionassem da seguinte maneira.

    Isso foi testado e funciona nesses discos:

    Ubuntu 14.04
    Lubuntu 14.04
    Ubuntu-Gnome 14.04
    

    Faça o aplicativo Foo Wrapper

    Para este exemplo, estou criando um wrapper para gedit chamado foo para fins de um exemplo completo de trabalho.

    (1) Como sudo, crie um arquivo com este conteúdo:

      

    gedit% f

    (2) Salve como:

      

    / usr / bin / foo

    (3) Torne-o executável:

      

    sudo chmod + x / usr / bin / foo

    Obtendo o aplicativo Foo para aparecer no menu e é um ícone

    (1) Crie a imagem do aplicativo. Gimp ou Inkscape são excelentes programas para isso. Depois de criar a imagem, exporte-a como um png ou svg.

    (2) Nomeie sua imagem. O nome da imagem deve ser o mesmo nome que você usa para iniciar seu aplicativo na linha de comando. O aplicativo neste exemplo é chamado: foo. Então o nome correto seria foo.png ou foo.svg.

    (3) Copiar imagem para:

    /usr/share/icons/foo.svg
    

    (4) Criar entrada na área de trabalho. Abra o gedit, o leafpad ou o seu IDE. Crie um novo documento com esses dados:

    [Desktop Entry]
    Exec=foo %f
    Icon=foo
    Terminal=false
    Type=Application
    Categories=Office;
    StartupNotify=true
    MimeType=text/foo
    Name=Foo
    GenericName=Foo
    Comment=Compose, Edit, and View Foo Documents
    

    Anote as teclas Exec, Icon e MimeType:

    Exec :% f é adicionado após o nome do executável. Isso deve estar lá, portanto, quando um usuário clica duas vezes em um documento foo, o sistema executará o aplicativo foo e enviará esse caminho de documento foo para o aplicativo por meio do argumento% f.

    Ícone : apenas o nome é necessário. Não obtive bons resultados ao usar caminhos absolutos.

    MimeType : text / foo. texto é o chamado 'tipo de conteúdo'. foo é o nome da aplicação. Essa convenção de mapeamento deve ser seguida nas outras etapas. Por exemplo, você não quer usar o aplicativo / foo em outra etapa. Ao fazer isso, você não manterá o tipo de conteúdo consistente para o foo e as coisas falharão.

    (5) Salve este arquivo como:

    foo.desktop
    

    O nome do arquivo é o nome do nome de inicialização do seu aplicativo e ele deve ter a área de trabalho da extensão. Agora, deve ser copiado para:

    /usr/share/applications
    

    Neste ponto, você verá seu aplicativo na categoria Office no menu e seu ícone também ficará visível.

    Dar ao seu aplicativo os documentos do seu próprio ícone

    (1) Crie um arquivo xml mime com este conteúdo:

    <?xml version="1.0" encoding="UTF-8"?>
    <mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info" type="text/foo">
       <mime-type type="text/foo">
          <magic>
             <match type="string" offset="2" value="0foomagic"/>
          </magic>
       </mime-type>
    </mime-info>
    

    Tome nota do mapeamento do tipo de conteúdo: ambos são text / foo.

    Você tem duas opções quando deseja que um documento personalizado obtenha seu ícone. (1), o sistema procurará por suas extensões e dará a ele um ícone baseado na extensão. (2) o sistema irá procurar por uma string mágica em um deslocamento específico no arquivo. Eu estou escolhendo mágica, porque eu não prefiro ver extensões em meus nomes de arquivos no gerenciador de arquivos.

    Para usar magia, eu salvo todos os meus documentos como arquivos json. É um protocolo de armazenamento universal, então funciona bem para mim. Quando eu salvo o arquivo, classifico as chaves em ordem alfabética, o que faz com que a chave mágica apareça como a primeira chave do arquivo. Isso acontece porque eu coloquei um zero como o primeiro caractere de "0foomagic", e me certificarei de que nenhuma outra chave jamais será feita em meus documentos que atrapalhe isso.

    Referindo-se a esta linha no xml acima,

    <match type="string" offset="2" value="0foomagic"/>
    

    um arquivo json tem dois caracteres antes de atingir minha chave mágica chamada 0foomagic. Então eu defino o deslocamento para 2.

    Se você preferir usar uma extensão, basta remover a entrada mágica e substituí-la por:

    <glob pattern="*.foo"/>
    

    onde .foo é a extensão do seu documento de inscrição.

    (2) Atualize o banco de dados Mime com este comando:

    sudo update-mime-database /usr/share/mime
    

    (3) Os ícones que serão exibidos para documentos personalizados precisam ser nomeados como uma maneira especial de trabalhar. Eles devem ser mapeados com o tipo de conteúdo. Crie um ícone de documento e nomeie-o com a convenção de tipo de conteúdo mapeada mencionada anteriormente (espera que traço seja usado em vez de barra):

    text-foo.svg
    

    text é o tipo de conteúdo e foo é o nome do seu aplicativo, como antes.

    Você precisará copiar este ícone para qualquer tema que estiver usando. Qualquer tema que não seja copiado não exibirá seu documento foo com text-foo.svg.

    Os temas são configurados de duas formas diferentes; você acabará com mais trabalhos com alguns temas, por exemplo:

    Para o Gnome Theme, você só precisará copiar text-foo.svg para um lugar: / usr / share / icons / gnome / escalável / mimetypes /

    Mude para o tema gnome e, em seguida, termine com este passo.

    Mas, por exemplo, se você usar o tema hicolor, terá mais trabalho a fazer. Você deve criar um tamanho de ícone para cada um desses diretórios que o tema exige, por exemplo:

    /usr/share/icons/hicolor/16x16/mimetypes/
    /usr/share/icons/hicolor/22x22/mimetypes/
    ...
    

    etc, etc.

    Agora que você copiou os ícones, a base de dados do ícone deve ser atualizada. Eu notei dois comandos para isso (gtk-update-icon-cache e gtk-update-icon-cache3.0), apenas chamo ambos e não notei nenhum problema.Eles devem ser chamados em qualquer diretório de tema ao qual você tenha adicionado ícones.

    Se você adicionou ao tema gnome, então:

    sudo gtk-update-icon-cache /usr/share/icons/gnome/
    

    Se você adicionou ao tema hicolor, então:

    sudo gtk-update-icon-cache /usr/share/icons/hicolor
    

    Agora, mais uma coisa a fazer, e você deve ver as coisas funcionando sem fazer login e logout. Atualize a base de dados da área de trabalho:

    sudo update-desktop-database

    Teste Foo

    Como sobrecarregaria essa resposta para criar, peça para você criar o arquivo json, apenas use foo, o wrapper gedit, para fazer um foo doc com o 0foomagic dentro dele.

    (1) Digite foo na linha de comando e você verá o lançamento do gedit.

    (2) No arquivo de texto vazio no gedit, adicione dois caracteres e, em seguida, a sequência mágica:

    xx0foomagic
    

    (3) Salve e feche o gedit. Agora olhe dentro do gerenciador de arquivos e você verá que seu novo documento possui o ícone text-foo.svg. Clique duas vezes nele e foo irá abri-lo. Presto! Isso é magia do freedesktoporg!

    Há muitas outras coisas que você pode aprender sobre esse processo, mas isso, no mínimo, fará com que você use seus próprios ícones de documento de lançamento de aplicativos no Ubuntu.

    Por favor, contribua para esta resposta ou crie uma nova resposta se você tiver a melhor prática maneira de fazê-lo.

        
    por user293406 18.06.2014 / 22:11