Wie kopiere ich mit X11 in die Zwischenablage?

8

Unter Verwendung der Frameworks unter OS X kann ich folgendes verwenden, um ein PNG in die Pasteboard zu kopieren (in C - natürlich könnte ich NSPasteboard mit Cocoa verwenden):

%Vor%

Ich bin daran interessiert, diese Funktionalität auf Linux / * BSD Plattformen zu portieren. Wie kann ich das mit X replizieren?

    
Michael 08.12.2009, 17:59
quelle

2 Antworten

10

Lesen Sie X-Auswahl, Cut-Puffer und Tötungsringe vor allem anderen. X11 hat ein ziemlich einzigartiges System, das anscheinend niemand kopiert hat.

Eine Kuriosität, die sich von den meisten anderen Systemen unterscheidet: Wenn das Programm, das die Auswahl (Zwischenablage) besitzt, wegfällt, ändert sich auch die Auswahl. Wenn Ihr Programm also sagt "Ich habe eine Auswahl (die zufällig ein Bild ist)" und wird dann beendet, kann niemand eine Kopie dieses Bildes von Ihnen anfordern. Um nützlich zu sein, muss der Zwischenablage-Besitzer mindestens so lange herumstehen, bis ein anderes Programm die Auswahl trifft.

Immer noch hier? Hier ist ein kurzes Programm, das mit PyGTK funktioniert (weil C ein Schmerz ist).

%Vor%

Was passiert unter der Haube:

  • Gdk lädt ein Bild.
  • Gtk beansprucht das Eigentum an der CLIPBOARD-Auswahl.
  • Gtk Anfragen , dass der CLIPBOARD_MANAGER die Auswahl kopiert und übernimmt. (Möglicherweise läuft nicht einer, daher könnte dies nicht passieren.)
  • Wenn ein anderes Programm Daten von unserer Auswahl anfordert, übernimmt Gtk die Konvertierung und Übertragung von Daten vom Bild zum Ziel.
  • Das erste OWNER_CHANGE-Ereignis entspricht der Übernahme des Eigentums; warte auf den nächsten, der uns den Verlust des Besitzes bedeutet und verlasse ihn.

Wenn ein Zwischenablage-Manager ausgeführt wird, wird dieses Programm möglicherweise sofort beendet. Andernfalls wird gewartet, bis "Ausschneiden / Kopieren" in einem anderen Programm ausgeführt wird.

    
ephemient 08.12.2009, 21:11
quelle
3

Die Möglichkeit, Daten in der GTK-Zwischenablage zu speichern, nachdem ein Programm beendet wurde, wird nicht gut unterstützt. In GTK.clipboard.store können möglicherweise größere Bilder (größer als einige hundert KB) nicht gespeichert werden, und erweiterte Desktopfunktionen wie compiz können mit diesem Mechanismus in Konflikt geraten. Eine Lösung ohne diese Nachteile besteht darin, eine einfache gtk-Anwendung im Hintergrund auszuführen. Die folgende Python-Serveranwendung verwendet das Pyro-Paket, um die Methoden von ImageToClipboard verfügbar zu machen:

%Vor%

Starten Sie dieses Programm als Hintergrundprozess, d. h.

gipclip-imaged.py & amp;

Im folgenden Beispiel einer Client-Anwendung wird das Clipboard-Bild unter Verwendung eines in der Befehlszeile angegebenen Dateinamens festgelegt:

%Vor%

Um ein Bild in die Zwischenablage zu kopieren, führen Sie

aus

gclipboard-setimage.py picname.png

    
paulgrif 08.08.2010 21:14
quelle

Tags und Links