Was ich jetzt wissen möchte ist,
- Wie kopieren Anwendungen wie Firefox und andere GUI-basierte Apps Text in die X11-Zwischenablage? Wie ich weiß, verwenden sie ihren eigenen internen Puffer zum Kopieren von Text, aber übernehmen sie auch den Besitz der CLIPBOARD-Auswahl und kopieren den Text ins CLIPBOARD?
- Und wenn sie nicht den Besitz von CLIPBOARD übernehmen, wie legen sie dann kopierte Daten im X11-Zwischenablagepuffer ab? Wenn sie kopierte Daten nicht einmal in der X11-Zwischenablage ablegen, wie können dann Tools wie Xclip, die mit X11-Auswahlen arbeiten, an diese kopierten Daten gelangen? weil ich Text, den ich aus Firefox kopiert habe, auf dem Terminal mit dem Befehl „xclip -selection clipboard -o“ drucken kann.
Das Nächste, was ich wissen möchte, ist:
- Wir können Atome und Funktionen wie XConvertSelection und „XGetWindowProperty“ verwenden, um Daten aus CLIPBOARD abzurufen. Hier ist ein Beispiel dafür -
Code: Select all
Display *d = XOpenDisplay(NULL);
if (d == NULL) return 1;
Window w = XCreateSimpleWindow(d, DefaultRootWindow(d), 0, 0, 100, 100, 0, 0, 0);
Atom clip = XInternAtom(d, "CLIPBOARD", True);
Atom target = XInternAtom(d, "UTF8_STRING", True);
Atom prop = XInternAtom(d, "MY_PROP", True);
XConvertSelection(d, clip, str, prop, w, CurrentTime);
XEvent ev;
int quit = 0;
while (!quit) {
XNextEvent(d, &ev);
if (ev.type == SelectionNotify) {
if (ev.xselection.property) {
Atom type;
int fmt;
unsigned long nitmes, bytes_rem;
unsigned char *data;
XGetWindowProperty(d, w, prop, 0, ~0, False, AnyPropertyType,
&type, &fmt, &nitmes, &bytes_rem, &data);
printf("%s\n", data);
quit = 1;
}
}
}
XDestroyWindow(d, w);
XCloseDisplay(d);
Code: Select all
Atom clip = XInternAtom(d, "CLIPBOARD", True);
Atom target = XInternAtom(d, "slajdfas", True);
Atom prop = XInternAtom(d, "MY_PROP", True);
Es tut mir leid, dass ich dumm bin und die Dinge nicht perfekt erklärt habe. Ich hoffe, jemand korrigiert meine Grammatik.
Mobile version