AA_123rf-27335989_GiuseppeAnello-123RF.jpg

© Giuseppe Anello, 123RF

Clipboard steuern via Zenity und Xclip

Maßanfertigung

Nicht jeder Fenstermanager bringt ein eigenes Programm für das Verwalten der Zwischenablage mit. Mit Zenity und einem Skript steuern Sie komfortabel das überall verwendbare Xclip.

Typische Programme für das Verwalten der Zwischenablage, wie Klipper für KDE oder Clipit, das sich unter anderem in Gnome integriert, bringen umfangreiche Features für die Verwaltung der Zwischenablage mit. Allerdings lassen sie sich nicht unbedingt so leicht in jeden Fenstermanager integrieren. Wer keinen der Desktop-Platzhirsche nutzt, steht also unter Umständen ohne eine Clipboard-Verwaltung da. Zudem arbeiten diese Programme in der Regel so, dass sie eine Historie der Zwischenablage anlegen, in der ältere Einträge immer weiter nach hinten rutschen und schließlich aus der Liste verschwinden.

Die passenden Tools

Um unter Linux möglichst schnell eine Anwendung zu erstellen, bedarf es oft nur der passenden Tools, etwas Kreativität und ein wenig Fantasie. Das gilt auch für das Implementieren einer selbstgestrickten Verwaltung für die Zwischenablage: Im Folgenden zeigen wir, wie Sie mit Zenity [1] schlanke Dialoge für das Skripten der Zwischenablage mittels Xclip [2] einrichten und die so erstellte GUI-Anwendung schließlich auf effiziente Weise für alltägliche Aufgaben in den Desktop integrieren.

Sowohl Zenity als auch Xclip lassen sich in den gängigen Distributionen schnell über den jeweiligen Paketmanager installiert. Über die Kommandozeile installieren Sie beide via Apt oder Yum auch in einem Rutsch, indem Sie entweder sudo apt-get install zenity xclip auf einem DEB-basierten System oder yum install zenity xclip auf einem RPM-basierten Rechner eingeben.

Die hier vorgestellte Zwischenablage umfasst zehn Speicherplätze, deren Inhalt Sie belegen, abrufen, löschen oder auch nachträglich mit einem Editor manuell bearbeiten können.

Ein paar Zeilen Skript

Listing 1 legt zunächst einen Editor fest, mit dem Sie die einzelnen Stellplätze der Zwischenablage nachträglich manuell bearbeiten, und definiert ein Verzeichnis für die Inhalte der Zwischenablage. Das Kommando test in Zeile 4 überprüft, ob dieses Verzeichnis bereits besteht, und legt es neu an, falls es bislang noch nicht existiert.

Listing 1

#!/bin/bash
EDITOR=gedit
SPEICHERPFAD=~/.zwischenablage
test ! -d $SPEICHERPFAD && mkdir $SPEICHERPFAD
for x in $(seq 1 10); do
  test ! -f ${SPEICHERPFAD}/speicher${x} && > ${SPEICHERPFAD}/speicher${x}
done
aktion=$1
laenge=80
sp=$(zenity --list --title="Speicherplatz auswählen" \
     --text "Speicher ${1}!\nAktuell in der Zwischenablage: \
            $(xclip -o | cut -c 1-${laenge})" \
     --column "Speicherplatz" \
     "Speicher 1: $(cat ${SPEICHERPFAD}/speicher1 | cut -c 1-${laenge})" \
     "Speicher 2: $(cat ${SPEICHERPFAD}/speicher2 | cut -c 1-${laenge})" \
     "Speicher 3: $(cat ${SPEICHERPFAD}/speicher3 | cut -c 1-${laenge})" \
     "Speicher 4: $(cat ${SPEICHERPFAD}/speicher4 | cut -c 1-${laenge})" \
     "Speicher 5: $(cat ${SPEICHERPFAD}/speicher5 | cut -c 1-${laenge})" \
     "Speicher 6: $(cat ${SPEICHERPFAD}/speicher6 | cut -c 1-${laenge})" \
     "Speicher 7: $(cat ${SPEICHERPFAD}/speicher7 | cut -c 1-${laenge})" \
     "Speicher 8: $(cat ${SPEICHERPFAD}/speicher8 | cut -c 1-${laenge})" \
     "Speicher 9: $(cat ${SPEICHERPFAD}/speicher9 | cut -c 1-${laenge})" \
     "Speicher 10: $(cat ${SPEICHERPFAD}/speicher10 | cut -c 1-${laenge})" \
     | sed "1 s/Speicher /speicher/1" | grep -Eo "speicher[0-9]{1,2}")
if [ $aktion = "belegen" ] && [ $(echo -n $sp | wc -m) -gt 0 ] 2>/dev/null; then
  xclip -o > ${SPEICHERPFAD}/${sp}
elif [ $aktion = "abrufen" ] && [ $(echo -n $sp | wc -m) -gt 0 ] 2>/dev/null; then
  cat ${SPEICHERPFAD}/${sp} | xclip -i -selection primary
  cat ${SPEICHERPFAD}/${sp} | xclip -i -selection secondary
  cat ${SPEICHERPFAD}/${sp} | xclip -i -selection clipboard
elif [ $aktion = "löschen" ] && [ $(echo -n $sp | wc -m) -gt 0 ] 2>/dev/null; then
  > ${SPEICHERPFAD}/${sp}
elif [ $aktion = "bearbeiten" ] && [ $(echo -n $sp | wc -m) -gt 0 ] 2>/dev/null; then
  $EDITOR ${SPEICHERPFAD}/${sp}
fi

Der Codeblock in den Zeilen 6 bis 8 legt die einzelnen Speicherplätze für die Zwischenablage an. Dazu arbeitet eine For-Schleife eine Liste ab, die das Kommando seq 1 10 erstellt hat. Innerhalb des Ausführungsblocks zwischen do und done erscheint die jeweilige Ziffer anstelle von ${x}. Zeile 7 testet also zunächst, ob die Dateien speicher1 bis speicher10 im Zielverzeichnis bestehen. Ist dies nicht der Fall, legt der hintere Abschnitt von Zeile 7 diese Dateien durch den Umleitungsoperator > an.

In Zeile 10 fängt das Skript den ersten übergebenen Parameter ab und speichert ihn in der Variablen aktion. Zeile 11 definiert die maximale Länge für die Zeichenkette, die der Zenity-Dialog anzeigen soll. Das verhindert, dass beim Abspeichern einer längeren Textpassage in einem der Speicherplätze der entsprechende Dialog unnötig in die Breite wächst. Die ersten 80 Zeichen dürften völlig genügen, um zu erkennen, welcher Text in den Speicherplatz wandert.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Kommentare

Infos zur Publikation

LU 11/2017: Server für Daheim

Digitale Ausgabe: Preis € 8,50
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 3 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...
Backup mit KUP unter Suse 42.3
Horst Schwarz, 24.09.2017 13:16, 3 Antworten
Ich möchte auch wieder unter Suse 42.3 mit Kup meine Backup durchführen. Eine Installationsmöglic...
kein foto, etc. upload möglich, wo liegt mein fehler?
kerstin brums, 17.09.2017 22:08, 5 Antworten
moin, zum erstellen einer einfachen wordpress website kann ich keine fotos uploaden. vom rechne...
Arch Linux Netzwerkkonfigurationen
Franziska Schley, 15.09.2017 18:04, 0 Antworten
Moin liebe Linux community, ich habe momentan Probleme mit der Einstellung des Lan/Wlan in Arc...