Wie füge ich eine ständig wechselnde (dynamische) Zeichenfolge aus einem Textdokument in .conkyrc als Bildpfad ein?

730
Curtis

Ich möchte das Clementine-Albumcover mit jedem Song ändern. Im Wesentlichen versuche ich, einen Bildpfad in Conky einzufügen, der sich alle paar Sekunden ändert.

Ich habe ein Skript clementine.sh, das in Conky alle 5 Sekunden mit dieser Zeile ausgeführt wird:

$ 

Das Skript führt den folgenden Befehl aus:

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

Was dies tut, ist, dass es das arturlvon Clementine findet, schneidet es ab und legt es in die Datei image. Die Zeile wird jedes Mal überschrieben. Die Zeile, die geschrieben wird, sieht folgendermaßen aus:

/tmp/clementine-art-ED9078.jpg 

Was ich tun möchte, ist eine Möglichkeit, die Zeile /tmp/clementine-art-ED9078.jpgaus der Datei zu kopieren imageund sie in meine .conkyrc-Datei in der Zeile einzufügen:

$ 

Wo xxxxist das, wo soll ich den Text schreiben, so dass die Zeile:

$ 

Sieht eigentlich so aus:

$ 

Natürlich ändert sich die Zeile mit jedem Song.

Ich möchte dies mit einem Skript (oder direkt in Conky usw.) tun und muss keine Programme oder ähnliches installieren, um dies zu erreichen. Ich glaube, es ist "machbar", ich habe einfach keine Ahnung, wie es geht. Ich habe das Internet durchsucht und mir nichts einfallen lassen, was ich verwenden kann. Jede Hilfe, die mir jemand geben kann, wird nicht nur geschätzt, sondern auch meine Kopfschmerzen verschwinden lassen.

Hinweis: Ich kann (von Conky) Künstler, Titel und Album mit den folgenden Zeilen in .conkyrc auflisten:

$$  $$  $$ 
1

1 Antwort auf die Frage

0
John1024

Softlinks verwenden

Fügen Sie in Ihrer ~/.conkyrcDatei die Zeile hinzu:

$ 

Fügen Sie nach der qdbusZeile in Ihrem Skript die Zeile hinzu:

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

Dieser lnBefehl aktualisiert die Link-Datei so /tmp/conky.jpg, dass sie auf den Namen der Image-Datei in der ~/.config/openbox/conky/imageDatei verweist.

Um das gewünschte Verhalten zu erhalten, möchten Sie möglicherweise mit zwei Flags auf der Conky- imageLinie experimentieren: Mit dieser Option -nwird conky angewiesen, das Bild nicht zwischenzuspeichern, während -f intervaldas Cache-Leerlaufintervall von Conky für dieses Bild festgelegt wird.

Verwenden awk

Zusammenfassend ist der Name Ihrer Bilddatei in ~/.config/openbox/conky/imageund Sie möchten sie in Ihre ~/.conkyrcDatei übertragen. Fügen Sie also nach der qdbusZeile in Ihrem Skript die Zeile hinzu:

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

Wo ~/.conkyrc.inist Ihre Prototyp-Conkyrc-Datei, die die Zeile enthält:

$ 

Der Befehl awk ersetzt xxxx durch den Namen Ihrer Image-Datei. Nachdem der awkBefehl ausgeführt wurde, wird eine neue ~/.conkyrcDatei mit dem richtigen Bildnamen erstellt.

Wie es funktioniert:

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

    Dadurch wird eine awkVariable erstellt imgund ihr der Inhalt zugewiesen ~/.config/openbox/conky/image.

  • /image/

    Dies sucht nach Zeilen, die das Wort enthalten image. Für jede Zeile, die dieses Wort enthält, wird das erste Vorkommen von xxxxdurch den Wert der Variablen ersetzt img.

  • 1

    Dieser kryptische Befehl weist awk nur an, jede Zeile zu drucken, die er aus der Eingabedatei erhält.

  • ~/.conkyrc.in

    Dies ist eine Eingabedatei, die die Dummy- $

    Dann renne:

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

    m4wird erkennen translitund includeals Befehle, denen es gehorchen sollte. Wenn es den includeBefehl sieht, liest es Ihren ~/.config/openbox/conky/imageund schließt den Inhalt ein. Diese Datei hat wahrscheinlich ein neues Zeilenzeichen. Der translitBefehl ist dazu da, um den Zeilenumbruch zu entfernen.

    m4ist eine sehr leistungsfähige Makrosprache, mit der Sie viele Teile Ihrer Conkyrc-Datei verwalten können. Wenn Sie sich nicht die Zeit nehmen wollen, eine neue Sprache zu lernen, ist es wahrscheinlich einfacher, an der awkLösung zu bleiben .

Ich habe Ihre erste Antwort mit der -n-Flagge verwendet und es hat wunderbar funktioniert. Danke danke danke! Curtis vor 9 Jahren 0