Como insiro uma string (dinâmica) em constante mudança de um documento de texto em .conkyrc como um caminho de imagem

1

Eu quero mudar a arte do álbum Clementine com cada música. Essencialmente, estou tentando inserir um caminho de imagem no Conky que muda a cada poucos segundos.

Eu tenho um script clementine.sh que é executado a cada 5 segundos no Conky usando esta linha:

${execi 5 sh ~/.config/openbox/conky/clementine.sh}

O script executa o seguinte comando:

qdbus org.mpris.clementine /Player org.freedesktop.MediaPlayer.GetMetadata | grep arturl | cut -c16- > ~/.config/openbox/conky/image

O que isso faz é encontrar o arturl da Clementine, cortá-lo e colocá-lo no arquivo image . A linha sobrescreve cada vez. A linha que está escrita é assim:

/tmp/clementine-art-ED9078.jpg

O que eu gostaria de fazer é encontrar uma maneira de copiar a linha /tmp/clementine-art-ED9078.jpg do arquivo image e colocá-la no meu arquivo .conkyrc na linha:

${image "xxxx" -p 0,620 -s 75x75}

Onde o xxxx é, é onde eu quero escrever o texto, para que a linha:

${image "xxxx" -p 0,620 -s 75x75}

Será realmente parecido com:

${image /tmp/clementine-art-ED9078.jpg -p 0,620 -s 75x75}

Obviamente, a linha mudará com cada música.

Eu estou querendo fazer isso com um script (ou diretamente no Conky, etc.), e não tenho que instalar nenhum programa ou qualquer coisa para fazer isso. Eu acredito que é "capaz de fazer", eu simplesmente não tenho a menor idéia de como fazer isso. Eu vasculhei a Internet e descobri nada que eu possa usar. Qualquer ajuda que alguém possa me dar não será apenas apreciada, fará com que minha dor de cabeça desapareça.

Nota: Eu posso (de Conky) listar artista, título e álbum usando as seguintes linhas em .conkyrc:

${font sans-serif:normal:size=8}${execi 5 qdbus org.mpris.clementine /Player org.freedesktop.MediaPlayer.GetMetadata | grep artist}

${font sans-serif:normal:size=8}${execi 5 qdbus org.mpris.clementine /Player org.freedesktop.MediaPlayer.GetMetadata | grep title}

${font sans-serif:normal:size=8}${execi 5 qdbus org.mpris.clementine /Player org.freedesktop.MediaPlayer.GetMetadata | grep album}
    
por Curtis 17.10.2014 / 06:41

1 resposta

0

Usando links suaves

No seu arquivo ~/.conkyrc , adicione a linha:

${image /tmp/conky.jpg -p 0,620 -s 75x75}

Após a linha qdbus no seu script, adicione a linha:

ln -sf "$(cat ~/.config/openbox/conky/image)" /tmp/conky.jpg

Este comando ln atualiza o arquivo de link /tmp/conky.jpg para apontar para qualquer nome de arquivo de imagem no arquivo ~/.config/openbox/conky/image .

Para obter o comportamento desejado, experimente dois sinalizadores na linha conky image : -n informa ao conky para não armazenar em cache a imagem, enquanto -f interval especifica o intervalo de liberação do cache do conky para essa imagem .

Usando awk

Para resumir, o nome do arquivo de imagem está em ~/.config/openbox/conky/image e você deseja transferi-lo para o arquivo ~/.conkyrc . Então, depois da linha qdbus no seu script, adicione a linha:

awk -v "img=$(cat ~/.config/openbox/conky/image)" '/image/{sub("xxxx", img)} 1' ~/.conkyrc.in >~/.conkyrc

em que ~/.conkyrc.in é seu arquivo conkyrc de protótipo, aquele que contém a linha:

${image xxxx -p 0,620 -s 75x75}

O comando awk substitui o xxxx pelo nome do seu arquivo de imagem. Depois que o comando awk for executado, um novo arquivo ~/.conkyrc será criado com o nome da imagem correto.

Como funciona:

  • -v "img=$(cat ~/.config/openbox/conky/image)"

    Isso cria uma awk variable img e atribui a ela o conteúdo de ~/.config/openbox/conky/image .

  • /image/{sub("xxxx", img)}

    Isso procura linhas contendo a palavra image . Para qualquer linha contendo essa palavra, a primeira ocorrência de xxxx é substituída pelo valor da variável img .

  • 1

    Este comando críptico apenas diz ao awk para imprimir cada linha que recebe do arquivo de entrada.

  • ~/.conkyrc.in

    Este é o arquivo de entrada, aquele que contém a linha fictícia ${image xxxx .... .

  • >~/.conkyrc

    Isto diz ao shell para redirecionar a saída de awk para o seu arquivo conkyrc, sobrescrevendo a cópia anterior.

Usando m4 (avançado)

Crie o arquivo ~/.conkyrc.m4 , que se parece com o seu arquivo normal, exceto que ele contém a linha:

${image translit(include(/home/user/.config/openbox/conky/image), [
])) -p 0,620 -s 75x75}

Em seguida, execute:

m4 ~/.conkyrc.m4 >~/.conkyrc

m4 reconhecerá translit e include como comandos que devem ser obedecidos. Quando ele vir o comando include , ele lerá seu ~/.config/openbox/conky/image e incluirá o conteúdo. Esse arquivo provavelmente terá um novo caractere de linha à direita. O comando translit está lá para remover essa nova linha.

m4 é uma linguagem de macro muito poderosa que você pode usar para gerenciar muitas partes do seu arquivo conkyrc. Se você não quer gastar tempo para aprender um novo idioma, provavelmente é mais simples manter a awk solution.

    
por 17.10.2014 / 07:35

Tags