[geklärt] cmus Shellkommando mit aktuellem Song

Du hast Probleme mit Deinem eMail-Programm, Webbrowser oder Textprogramm? Dein Lieblingsprogramm streikt?
Antworten
dasebastian
Beiträge: 1886
Registriert: 12.07.2020 11:21:17

[geklärt] cmus Shellkommando mit aktuellem Song

Beitrag von dasebastian » 29.01.2024 09:42:51

Aus unterschiedlichen Gründen habe ich mich von Debianmoc verabschiedet und verwende seit einiger Zeit Debiancmus. Finde ich auch gut.

Was ich nicht hinkriege:

Ich möchte in Cmus ein Shellkommando mit dem aktuellen Song ausführen, konkret möchte ich, dass Cmus den aktuellen Song nach ~/dwn kopiert.

Versucht habe ich es mit dem Cmus-internen Kommando "shell":

Code: Alles auswählen

:shell cp %f /home/sebastian/dwn     # nope
:shell cp %F /home/sebastian/dwn     # nope
:shell cp %f/%F /home/sebastian/dwn  # nope
Auch die Ente und Google haben nicht weitergeholfen.

Hat da jemand von euch einen Tipp für mich?
Zuletzt geändert von dasebastian am 29.01.2024 13:20:56, insgesamt 2-mal geändert.

niemand
Beiträge: 503
Registriert: 22.12.2023 16:35:53
Kontaktdaten:

Re: cmus Shellkommando mit aktuellem Song

Beitrag von niemand » 29.01.2024 10:40:09

Sieht aus, als würde die Expansion nicht funktionieren (nachprüfbar mit etwa :shell echo %f > blubblub enthält dann ›%f‹.

Was ich auf die Schnelle gefunden habe: mit cmus-remote -Q lässt sich der aktuelle Status des Players abfragen, dort ist auch die gerade gespielte Datei samt Pfad enthalten. Das ließe sich recht einfach extrahieren und damit das machen, was du möchtest (etwa die Datei in ein gegebenes Verzeichnis kopieren).

Eine andere Möglichkeit wäre, über eine Playlist als Zwischenschritt zu gehen, und dort dann den Pfad zu extrahieren, um die Datei dann zu kopieren – das hab ich aber nun nicht näher angeschaut. Wenn ich vor der Aufgabe stünde, würde ich mir ein Script auf Basis der Ausgabe von cmus-remote -Q basteln, und ggf. innerhalb des Players eine Tastenbelegung zum Aufruf des Scripts definieren.

Mag aber elegantere Methoden geben – vielleicht weiß ja jemand mehr :)
„I fought in the Vim-Emacs-War.“ Quelle

Huo
Beiträge: 614
Registriert: 26.11.2017 14:03:31
Wohnort: Freiburg

Re: cmus Shellkommando mit aktuellem Song

Beitrag von Huo » 29.01.2024 10:57:22

Die "Format Strings" (Expansionen) sind, wenn ich die Manpage richtig deute, bei cmus nicht in Kommandos einsetzbar, sondern funktionieren nur innerhalb von Konfigurations-Optionen. Ich schlage folgende Lösung vor: Erstelle ein ausführbares Skript cmus_copy.sh

Code: Alles auswählen

#!/bin/bash

cp $1 /home/sebastian/dwn
Und führe in cmus bei Bedarf das Kommando

Code: Alles auswählen

:run cmus_copy.sh
aus. Der ausgewählte Song wird beim :run-Kommando (anders als beim :shell-Kommando!) automatisch am Ende des Kommandos angefügt.

Huo
Beiträge: 614
Registriert: 26.11.2017 14:03:31
Wohnort: Freiburg

Re: [geklärt] cmus Shellkommando mit aktuellem Song

Beitrag von Huo » 29.01.2024 13:29:38

Noch zwei Anmerkungen:

(1) Natürlich müssen in Cmus der abgespielte und der ausgewählte/markierte Song nicht unbedingt identisch sein. Meine obige Lösung funktioniert nur für den markierten oder ausgewählten Song. Soll unbedingt der gespielte Song kopiert werden, wäre @niemands Vorschlag mit cmus-remote -Q einen Versuch wert.

(2) Manchmal lohnt es sich, die Manpages banaler Alltagsbefehle zu lesen. cp bietet mittels Option "-t VERZEICHNIS" auch die Möglichkeit, die zu kopierende Datei ans Ende des Befehls zu stellen. So kannst du in cmus per run-Kommando dein Kopiervorhaben direkt, also ohne Hilfsskript, umsetzen:

Code: Alles auswählen

:run cp -t /home/sebastian/dwn
(Der gerade markierte bzw. ausgewählte Song wird automatisch ans Ende des Befehls gesetzt.)

dasebastian
Beiträge: 1886
Registriert: 12.07.2020 11:21:17

Re: [geklärt] cmus Shellkommando mit aktuellem Song

Beitrag von dasebastian » 29.01.2024 13:32:29

Danke euch beiden.

Die Kontrolle via echo hat das bestätigt, da steht dann einfach %f in der Datei.

Den Versuch mittels kleinen Shellskripts habe ich ausprobiert, allerdings will Cmus dann immer die gesamten Songs aus dem jeweiligen Ordner in der linken Ansicht (tree) kopieren, wenn ich ins große Fenster gehe, bekomme ich ein Errorexit bei Aufrufen des Skripts.

Aber ich habe mich jetzt dran erinnert, dass ich dank Forumshilfe hier schon mal ein Shellskript gebastelt habe, dass Dateien aus einer Playlist "extrahieren", also an einen bestimmten Ordner kopieren kann:

Code: Alles auswählen

#!/bin/bash

choice="/home/sebastian/.config/cmus/playlists/default"
target="/home/sebastian/dwn/mixtapesongs"

mkdir "$target"
grep -v ^# "$choice" | tr -d \\r | while read l ; do cp "$l" "$target" ; done

# eof
Das ist jetzt mein Workaround bzw. ist das in Wirklichkeit genauso gut. Ich füge meine Songs einer Playlist hinzu (im Moment einfach "default") und wenn ich alles beisammen habe, dann stoße ich das mittels

Code: Alles auswählen

:shell bash /home/sebastian/dox/syszeug/scripts/xpl
an und das funktioniert einwandfrei.

Den Shortcut dazu habe ich mir noch nicht gesetzt (muss erst mal meine ~/.config/cmus/rc durchstöbern, was frei ist), aber so geht das gut.

Danke für den Anstoß. :THX:

dasebastian
Beiträge: 1886
Registriert: 12.07.2020 11:21:17

Re: [geklärt] cmus Shellkommando mit aktuellem Song

Beitrag von dasebastian » 29.01.2024 13:35:44

Huo hat geschrieben: ↑ zum Beitrag ↑
29.01.2024 13:29:38
Noch zwei Anmerkungen...
Da war der Haken, genau.

Bin mit der jetzigen Lösung aber sehr zufrieden, da ich nicht nachdenken muss, ob markiert (ich markiere nie was) oder gerade gespielt... Ich "adde" zur Playlist und wenn fertig - fertig.

Antworten