Thunar: Benutzerdefinierter Befehl

userBefehl-Thunar-0

Mal wieder was zum Thema Linux/Computer, genauer zum Dateimanager von Xubuntu und anderen, eine nützliche Kleinigkeit, die vielleicht auch anderen zusagt.

Man kann im Dateimanager im Menü Bearbeiten „Benutzerdefinierte Aktionen“ auswählen, und bekommt dann einen Dialog wie in Abb. 1 angezeigt. Man wählt rechts das Plus und später, wenn man es ändern will, den Stift darunter (siehe Pfeil).

Der Name erscheint im Kontextmenü wenn man eine oder mehrere Dateien ausgewählt hat. Die Beschreibung wird bei der Auswahl unten in der Statusleiste von Thunar angezeigt und kann etwas ausführlicher sein. Davon habe ich keinen Screenshot, weil man, während das Kontextmenü (rechte Maustaste) offen ist keinen machen kann. Vielleicht gibt es dafür einen triftigen Grund, aber man muss damit leben nicht allem auf den Grund gehen zu können. Das nehme ich hier in Anspruch.

Das dritte ist der Name des auszuführenden Programms, hier „Befehl“ genannt, was ich nicht ganz passend find. Ich nenne das Programm, das ich erst schreiben muss, /home/stefan/bin/freierZenityBefehl.sh . Programmierer haben bekanntlich immer 3 Probleme: Off-by-one-Errors und naming-things. Ich bin mit der Benennung ganz zufrieden. Was sehr gut gemacht ist, ist, dass die Parameter nicht aus einer zu suchenden Doku erst herausgesucht werden müssen, sondern unten aufgelistet sind. %F brachte mich erst auf die Idee, dass es günstig wäre, wenn das Programm gleich viele Dateien verarbeiten könnte. Mein Programmaufruf, und mit dem Parameter zusammen ist es dann doch als Befehl gut bezeichnet, ist – im ganzen Satz – also /home/stefan/bin/freierZenityBefehl.sh %F

Wenn ich also 3 Dateien a.foo, b.foo und c.foo markiert habe wird der Aufruf also zu /home/stefan/bin/freierZenityBefehl.sh a.foo b.foo c.foo expandiert. Ob Thunar den Pfad durchsucht habe ich nicht ausprobiert.

userBefehl-Thunar-1

Im Fenster des zweiten Reiters (siehe Pfeil 2) kann man die Dateien auflisten, für die der Kontextmenübefehl überhaupt eingeblendet werden soll, so man die rechte Maustaste betätigt – daher Kontextmenü. Da mein Befehl supergenerell ist wähle ich alle Endungen und Arten.,

Jetzt zum Inhalt des Programms:

 
#!/bin/bash
#
# freierZenityBefehl
#
# eine (oder mehrere) ausgewählte Dateien an einen Befehl reichen, den der User eingibt,
# und das Ergebnis in einem Infofenster ausgeben.

befehl=$(zenity --entry --text="Geben Sie einen Befehl ein")

(($? == 0 )) && zenity --info --text="$($befehl $*)"

Zenity ist ein Vielzwecktool zum erzeugen von Adhoc-Dialogen und einfachsten GUIs. Das Reultat der Zeile befehl=$(zenity –entry –text=“Geben Sie einen Befehl ein“) ist das Fenster 2 in Abb. 2. Wo die Überschrift „einen neuen Eintrag hinzufüg“ herkommt erschließt sich mir nicht. Man gibt den Befehl jedenfalls ein und wenn man OK drückt wird der Variablen befehl diese Zeichenkette zugewiesen.

(($? == 0)) prüft ob der letzte Befehl erfolgreich war. Hat man OK gedrückt war er das meist, hat man Abbruch gedrückt nicht. Das && sagt: Führe den nächsten Befehl nur aus, wenn der  Ausdruck davor zu Wahr evaluierte, also der User (ich) nicht abbrechen wollte.

Der Befehl ist wieder ein  Zenityaufruf, diesmal eine Textanzeige mit dem Resultat des Programmaufrufs, bestehend aus dem Befehl und den markierten Dateien. Ziemlich primitiv, aber manchmal nützlich.

Die Beispielausgabe für den Befehl file mit 2 Dateien sieht man im letzten Fenster.

Mein Progrämmchen ist natürlich Open Source, GPLv3 sage ich mal. Und ich habe noch ein zweites Miniprogramm in der Schublade – doch dazu ein andermal.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.