Integrar/Sincronizar Firefox/Thunderbird com o KDE

Publicado por Claudio Polegato Junior 08/04/2005

[ Hits: 6.241 ]

Download criar_mime.types




Quando clico sobre um arquivo em uma página no Firefox ou anexo no Thunderbird sempre preciso escolher um programa para abrí-lo, mas este já tem um padrão no KDE. Pensando nisso (e no usuário final),  li um pouco da documentação de como é feita a associaçao no KDE e nos Mozilla's Softwares, dei uma raqueada e construi um script que sincroniza o programa padrão que escolho ou já vem pré-configurado no KDE para ser uma opção pronta no Firefox e no Thunderbird.

  



Esconder código-fonte

#!/bin/bash

######################################################
#                                                    #
#  Programa: criar_mime.types                        #
#     Autor: Claudio Polegato Junior                 #
#    Versão: 0.1                                     #
#      Data: 7 de Abril de 2004                      #
#                                                    #
######################################################

################################################################################
#                                                                              #
#     Quando clico sobre um arquivo em uma página no Firefox ou anexo no       #
# Thunderbird sempre preciso escolher um programa para abrí-lo, mas este já    #
# tem um padrão no KDE. Pensando nisso (e na impossibilidade de um usuário     #
# final - mas final mesmo - encontrar o programa correto no sistema de         #
# arquivos do linux), li um pouco da documentação de como é feita a associaçao #
# no KDE e nos Mozilla's Softwares, dei uma raqueada e construi um script que  #
# sincroniza o programa padrão que escolho ou já vem pré-configurado no KDE    #
# para ser uma opção pronta no Firefox e no Thunderbird.                       #
#                                                                              #
#     Este script faz basicamente uma varredura sobre os "mime types" (tipos   #
# que especificam o conteúdo o arquivo) com .desktop contidos nos diretórios   #
# ~/.kde/share/mimelnk (tipos definidos ou alterados pelo usuário),            #
# $KDEDIR/share/mimelnk (tipos padrões do KDE) e /usr/share/mimelnk (tipos que #
# alguns outros softwares definem no Linux). Dessa varredura são então         #
# encontrados os "mime types" e as extensões que estão associadas (isso é uma  #
# tentativa que faço e aparentemente dá certo).                                #
#     Para cada "mime type" encontrado, primeiramente é verificado se este     #
# consta no arquivo ~/.kde/share/config/profilerc (definido pelo usuário e     #
# contém uma lista dos "mime types" seguida por um traço e um número e então   #
# propriedade associadas a esta prioridade de "mime type") ou no arquivo       #
# $KDEDIR/share/config/profilerc (global para o KDE e características ídem ao  #
# anterior). Se for encontrado em um destes arquivos, é escolhido o link para  #
# aplicativo (.desktop) de prioridade 1, senão realiza uma varredura nos links #
# para aplicativos definidos no KDE constantes nos diretórios                  #
# ~/.kde/share/applnk (links definidos pelo usuário) e em $KDEDIR/share/applnk #
# (links globais do KDE), ondem é verificado em cada link se há uma referencia #
# para o "mime type" em questão e cria-se uma lista destes links. A partir     #
# desta lista, verifica-se qual tem o maior valor na propriedade               #
# InitialPreference e este então é dado como o link padrão. Caso houver empate #
# na ordenaçao por InitialPreference, pega o primeiro da lista como link       #
# padrão. Caso não encontre InitialPreference em nenhum, pega o primeiro da    #
# lista para ser o link padrão.                                                #
#     A partir deste arquivo de link padrão encontrado, procura-se a propriede #
# Exec, a qual indica o programa a ser usado para abrir o arquivo que casa com #
# o "mime type" que está sendo analisado.                                      #
#     Ufa! Neste ponto tenho um "mime type", as extensões associadas com ele e #
# o programa padrão utilizado pelo KDE. Então crio uma entrada no arquivo      #
# ~/.mime.types (primeiro o "mime type" e depois as extensões separadas por    #
# espaço) e no arquivo ~/.mailcap (primeiro o "mime type" e depois o programa  #
# separados por ponto e vírgula - ; - e terminado por %s).                     #
#     Fazendo-se isso para cada "mime type" do KDE consigo associar os         #
# programas padrões do KDE para ser o padrão no Firefox e no Thunderbird. Cada #
# vez que se altera o programa padrão no KDE ou insere um tipo novo deve-se    #
# rodar este script para fazer o sincronismo real sem ser necessário sair e/ou #
# reiniciar o Firefox e/ou o Thunderbird.                                      #
#                                                                              #
#     Espero que seja útil para a comunidade...                                #
#                                                                              #
################################################################################


if [ -a ~/.mime.types ]; then
  mv ~/.mime.types ~/.mime.types_`date +"%Y.%m.%d_%H.%M.%S"`
fi
if [ -a ~/.mailcap ]; then
  mv ~/.mailcap ~/.mailcap_`date +"%Y.%m.%d_%H.%M.%S"`
fi

# Mime type modified by current user
MIME_USER_DESKTOP=`find ~/.kde/share/mimelnk -name "*.desktop"`

# Mime type global from KDE
MIME_GLOBAL_DESKTOP=`find $KDEDIR/share/mimelnk -name "*.desktop"`

# Mime type global from Linux
MIME_LINUX_DESKTOP=`find /usr/share/mimelnk/application  -name "*.desktop"`

echo
echo "******************************"
echo "*****     User Space     *****"
echo "******************************"
echo

for MIME_DESKTOP in $MIME_USER_DESKTOP; do
  MIME=`expr "$MIME_DESKTOP" : '.*mimelnk/\(.*\).desktop'`
  echo "Mime: $MIME"
  EXTS=`grep "Patterns\=" "$MIME_DESKTOP" | sed s/Patterns=// | sed s/'*'//g | sed s/'\.'//g | sed y/\;/' '/`
  echo "Exts: $EXTS"
  PROFILE=""
  PROFILERC="$HOME/.kde/share/config/profilerc"
  if [ -a "$PROFILERC" ]; then
    PROFILE=`expr "\`grep -n "$MIME - 1" "$PROFILERC"\`" : '\(.*\):.*'`
    if [ -z "$PROFILE" ]; then
      PROFILERC="$KDEDIR/share/config/profilerc"
      if [ -a "$PROFILERC" ]; then
        PROFILE=`expr "\`grep -n "$MIME - 1" "$PROFILERC"\`" : '\(.*\):.*'`
      fi
    fi
  fi
  if [ -z "$PROFILE" ]; then
    DESKTOPS=`grep -rl $MIME ~/.kde/share/applnk $KDEDIR/share/applnk`
    if [ -n "$DESKTOPS" ]; then
      LEVELS=`grep "InitialPreference" $DESKTOPS | rev | sort -r | rev`
      if [ -z "$LEVELS" ]; then
        for DESKTOP in $DESKTOPS; do
          break
        done
      else
        POS=`expr index "$LEVELS" ':'`
        if [ $POS == 0 ]; then
          DESKTOP=`grep -l "InitialPreference" $DESKTOPS`
        else
          DESKTOP=`expr substr "$LEVELS" 1 \`expr $POS \- 1\``
        fi
      fi
    else
     DESKTOP=""
    fi
  else
    PROFILE=`expr $PROFILE \+ 2`
    DESKTOP=`expr "\`sed -n ${PROFILE}p "$PROFILERC"\`" : 'Application=\(.*\)'`
    DESKTOP="$HOME/.kde/share/applnk/$DESKTOP"
  fi
  if [ -n "$DESKTOP" ]; then
    PROG=`expr "\`grep '^Exec' "$DESKTOP"\`" : 'Exec=\(.*\)'`
    POS=`expr index "$PROG" ' '`
    if [ "$POS" != "0" ]; then
      PROG=`expr substr "$PROG" 1 \`expr $POS \- 1\``
    fi
    PROG=`echo "$PROG" | sed s/"'"//g | sed s/'"'//g`
  fi
  echo "Prog: $PROG"
  echo
  if [ -n "$PROG" ]; then
    if [ -z "$EXTS" ]; then
      echo "$MIME" >> ~/.mime.types
    else
      echo "$MIME $EXTS" >> ~/.mime.types
    fi
    echo "$MIME;$PROG %s" >> ~/.mailcap
  fi
done

echo
echo "********************************"
echo "*****     Global Space     *****"
echo "********************************"
echo

for MIME_DESKTOP in $MIME_GLOBAL_DESKTOP; do
  MIME=`expr "$MIME_DESKTOP" : '.*mimelnk/\(.*\).desktop'`
  echo "Mime: $MIME"
  EXTS=`grep "Patterns\=" "$MIME_DESKTOP" | sed s/Patterns=// | sed s/'*'//g | sed s/'\.'//g | sed y/\;/' '/`
  if [ -a ~/.kde/share/mimelnk/$MIME.desktop ]; then
    echo "Exts: ***  Modified in User Space  *** $EXTS"
    echo
    continue
  fi
  echo "Exts: $EXTS"
  PROFILE=""
  PROFILERC="$HOME/.kde/share/config/profilerc"
  if [ -a "$PROFILERC" ]; then
    PROFILE=`expr "\`grep -n "$MIME - 1" "$PROFILERC"\`" : '\(.*\):.*'`
    if [ -z "$PROFILE" ]; then
      PROFILERC="$KDEDIR/share/config/profilerc"
      if [ -a "$PROFILERC" ]; then
        PROFILE=`expr "\`grep -n "$MIME - 1" "$PROFILERC"\`" : '\(.*\):.*'`
      fi
    fi
  fi
  if [ -z "$PROFILE" ]; then
    DESKTOPS=`grep -rl $MIME ~/.kde/share/applnk $KDEDIR/share/applnk`
    if [ -n "$DESKTOPS" ]; then
      LEVELS=`grep "InitialPreference" $DESKTOPS | rev | sort -r | rev`
      if [ -z "$LEVELS" ]; then
        for DESKTOP in $DESKTOPS; do
          break
        done
      else
        POS=`expr index "$LEVELS" ':'`
        if [ $POS == 0 ]; then
          DESKTOP=`grep -l "InitialPreference" $DESKTOPS`
        else
          DESKTOP=`expr substr "$LEVELS" 1 \`expr $POS \- 1\``
        fi
      fi
    else
     DESKTOP=""
     PROG=""
    fi
  else
    PROFILE=`expr $PROFILE \+ 2`
    DESKTOP=`expr "\`sed -n ${PROFILE}p "$PROFILERC"\`" : 'Application=\(.*\)'`
    DESKTOP="$HOME/.kde/share/applnk/$DESKTOP"
  fi
  if [ -n "$DESKTOP" ]; then
    PROG=`expr "\`grep '^Exec' "$DESKTOP"\`" : 'Exec=\(.*\)'`
    POS=`expr index "$PROG" ' '`
    if [ "$POS" != "0" ]; then
      PROG=`expr substr "$PROG" 1 \`expr $POS \- 1\``
    fi
    PROG=`echo "$PROG" | sed s/"'"//g | sed s/'"'//g`
  fi
  echo "Prog: $PROG"
  echo
  if [ -n "$PROG" ]; then
    if [ -z "$EXTS" ]; then
      echo "$MIME" >> ~/.mime.types
    else
      echo "$MIME $EXTS" >> ~/.mime.types
    fi
    echo "$MIME;$PROG %s" >> ~/.mailcap
  fi
done

echo
echo "*******************************"
echo "*****     Linux Space     *****"
echo "*******************************"
echo

for MIME_DESKTOP in $MIME_LINUX_DESKTOP; do
  MIME=`expr "$MIME_DESKTOP" : '.*mimelnk/\(.*\).desktop'`
  echo "Mime: $MIME"
  EXTS=`grep "Patterns\=" "$MIME_DESKTOP" | sed s/Patterns=// | sed s/'*'//g | sed s/'\.'//g | sed y/\;/' '/`
  if [ -a ~/.kde/share/mimelnk/$MIME.desktop ]; then
    echo "Exts: ***  Modified in User Space  *** $EXTS"
    echo
    continue
    if [ -a $KDEDIR/share/mimelnk/$MIME.desktop ]; then
      echo "Exts: ***  Modified in Global Space  *** $EXTS"
      echo
      continue
    fi
  fi
  echo "Exts: $EXTS"
  PROFILE=""
  PROFILERC="$HOME/.kde/share/config/profilerc"
  if [ -a "$PROFILERC" ]; then
    PROFILE=`expr "\`grep -n "$MIME - 1" "$PROFILERC"\`" : '\(.*\):.*'`
    if [ -z "$PROFILE" ]; then
      PROFILERC="$KDEDIR/share/config/profilerc"
      if [ -a "$PROFILERC" ]; then
        PROFILE=`expr "\`grep -n "$MIME - 1" "$PROFILERC"\`" : '\(.*\):.*'`
      fi
    fi
  fi
  if [ -z "$PROFILE" ]; then
    DESKTOPS=`grep -rl $MIME ~/.kde/share/applnk $KDEDIR/share/applnk`
    if [ -n "$DESKTOPS" ]; then
      LEVELS=`grep "InitialPreference" $DESKTOPS | rev | sort -r | rev`
      if [ -z "$LEVELS" ]; then
        for DESKTOP in $DESKTOPS; do
          break
        done
      else
        POS=`expr index "$LEVELS" ':'`
        if [ $POS == 0 ]; then
          DESKTOP=`grep -l "InitialPreference" $DESKTOPS`
        else
          DESKTOP=`expr substr "$LEVELS" 1 \`expr $POS \- 1\``
        fi
      fi
    else
     DESKTOP=""
     PROG=""
    fi
  else
    PROFILE=`expr $PROFILE \+ 2`
    DESKTOP=`expr "\`sed -n ${PROFILE}p "$PROFILERC"\`" : 'Application=\(.*\)'`
    DESKTOP="$HOME/.kde/share/applnk/$DESKTOP"
  fi
  if [ -n "$DESKTOP" ]; then
    PROG=`expr "\`grep '^Exec' "$DESKTOP"\`" : 'Exec=\(.*\)'`
    POS=`expr index "$PROG" ' '`
    if [ "$POS" != "0" ]; then
      PROG=`expr substr "$PROG" 1 \`expr $POS \- 1\``
    fi
    PROG=`echo "$PROG" | sed s/"'"//g | sed s/'"'//g`
  fi
  echo "Prog: $PROG"
  echo
  if [ -n "$PROG" ]; then
    if [ -z "$EXTS" ]; then
      echo "$MIME" >> ~/.mime.types
    else
      echo "$MIME $EXTS" >> ~/.mime.types
    fi
    echo "$MIME;$PROG %s" >> ~/.mailcap
  fi
done

Scripts recomendados

Reiniciar modem via Shell Script

Status do sistema

Removendo primeiras ou últimas linhas do arquivo

Instalação do Asterisk no Debian Etch

verificar os maiores arquivos no HD


  

Comentários
[1] Comentário enviado por Sukkubus em 08/04/2005 - 08:49h

Aeeeeee... vou indicar na Underlinux Girls tbm ;)

[2] Comentário enviado por cpolegatojr em 08/04/2005 - 16:22h

Acho que esqueci de dizer como fazer este script funcionar....
Basta fazer download do script, vá para o diretório onde salvou, torne-o executável (no shell, chmod +x criar_mime.types e no konqueror clique com o botão direito do mouse sobre o arquivo, clique depois em propriedade e então na aba permissões e dae marque todas as caixinhas da coluna Exec) e rode-o (no shell com ./criar_mime.types e no konqueror basta clicar - talves duplo - sobre o arquivo).

[]'s

Claudio

[3] Comentário enviado por cpolegatojr em 12/04/2005 - 12:46h

Olá, eu de novo... Seguinte, após resolver alguns erros reportados e otimizar o script, lancei uma versão 0.2 e esta já vem com suporte ao cron, isto é, pode ser incluído automaticamente pelo usuário no cron que a cada n minutos escolhidos verifica se é preciso fazer o sincronismo e se for o caso faz. Também está bem documentada no início.

[]'s

Claudio

[4] Comentário enviado por gbpenha em 02/06/2005 - 15:18h

Para adaptar esse script ao padrão de atalhos que estará sendo utilizado pelo KDE e pelo GNOME (eu já uso esse padrão aqui: os atalhos para os aplicativos ficam todos em /usr/share/applications, e quem manda em qual submenu ele vai ficar é sua categoria):
- Substitua as linhas originais que contém DESKTOPS (são 3 linhas):
DESKTOPS=`grep -rl $MIME ~/.kde/share/applnk $KDEDIR/share/applnk`
Por esta:
DESKTOPS=`grep -rl $MIME ~/.kde/share/applnk $KDEDIR/share/applnk /usr/share/applications`
Ou coloque o caminho da sua pasta applications de acordo com sua distro. Uso Kurumin aqui, e funcionou redondo! Valeu Claudio!

[5] Comentário enviado por cpolegatojr em 02/06/2005 - 17:38h

Obrigado pela dica, mas não tenho como testar aqui no GNOME ainda, mas quando sair a liberação SARGE do DEBIAN com certeza vou fazer os testes e soltar uma versão mais flexível onde seja possível identificar o ambiente em questão. Mas preste atenção no comentário que fiz acima que tem uma versão 0.2 com alguns erros/problemas corrigidos, mais otimizada e funciona através do cron, não sendo necessário rodar o script toda vez que houver uma alteração do programa padrão para o arquivo dado. Boa sorte!

[6] Comentário enviado por gbpenha em 02/06/2005 - 19:26h

Sim, já baixei a versão 0.2 também. Também funcionou perfeito com a dica q eu postei acima. No 0.2 fica mais fácil a modificação, porque o caminho das pastas está unificado em uma variável, assim, é só modificar em um lugar e pronto. Valeu de novo Cláudio!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts