Zwischenablage
-
- Beiträge: 123
- Registriert: 22.11.2020 20:05
- Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint und LMDE
Zwischenablage
Linux bietet ja außer dem Clipboard noch zwei weitere Ablagen.
Ich würde gerne in die primäre Ablage schreiben, um es dann mit der mittleren Maus abrufen zu können.
Die PB Clipboard Funktionen haben ja dafür keinen Parameter, um die Zwischenablage näher zu definieren.
Kennt jemand eine Möglichkeit oder vllt. einen Compiler-Schalter dafür?
Ich würde gerne in die primäre Ablage schreiben, um es dann mit der mittleren Maus abrufen zu können.
Die PB Clipboard Funktionen haben ja dafür keinen Parameter, um die Zwischenablage näher zu definieren.
Kennt jemand eine Möglichkeit oder vllt. einen Compiler-Schalter dafür?
--
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
-
- Beiträge: 123
- Registriert: 22.11.2020 20:05
- Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint und LMDE
Re: Zwischenablage
hab bissl geforscht.
Ich könnte xsel installieren und versuchen mit RunProgram folgendes Kommando abzusetzen:
gibt es vllt. eine ähnliche Funktion, die bereits in Linux nativ enthalten ist und die ich als Linuxbefehl aufrufen könnte?
Ich könnte xsel installieren und versuchen mit RunProgram folgendes Kommando abzusetzen:
Code: Alles auswählen
echo "beliebiger Text" | xsel -pi
--
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Zwischenablage
Du könntest dir anschauen wie xclip die API anspricht, dafür musst du aber C lesen können und das dann in Purebasic übersetzen können. Hier scheint die Funktion zu sein, die vom Clipboard einliest: https://github.com/astrand/xclip/blob/m ... lip.c#L354
Aber wichtig ist dabei, dass ein Fenster initialisiert sein muss. Das passiert wohl weiter unten in der main-Funktion: https://github.com/astrand/xclip/blob/m ... lip.c#L963
Aber wichtig ist dabei, dass ein Fenster initialisiert sein muss. Das passiert wohl weiter unten in der main-Funktion: https://github.com/astrand/xclip/blob/m ... lip.c#L963
Re: Zwischenablage
Oh je mi ne!
Hallo jogo,
unter Linux ist das echt komplex.
Also per Standard gib es ja:
'PRIMARY' (Das mit der mittleren Maustaste)
'SECONDARY'
'CLIPBOARD'
'FOOBAR'
als Clipboard-Möglichkeiten.
Die Gtk-Clipboard-Funktionen nutzen dabei: 'CLIPBOARD'
als Standard.
Die PureBasic-Clipboard-Funktionen nutzen auch diese Möglichkeit.
Deine gewüschte Möglichkeit: "Ich würde gerne in die primäre Ablage schreiben, um es dann mit der mittleren Maus abrufen zu können."
setzt aber leider das Markieren von Text vorraus. (Also der Text muss dabei markiert bleiben.)
Ansonsten sind da weitere Nachforschungen mit der X11-Lib notwendig.
Hallo jogo,
unter Linux ist das echt komplex.
Also per Standard gib es ja:
'PRIMARY' (Das mit der mittleren Maustaste)
'SECONDARY'
'CLIPBOARD'
'FOOBAR'
als Clipboard-Möglichkeiten.
Die Gtk-Clipboard-Funktionen nutzen dabei: 'CLIPBOARD'
als Standard.
Die PureBasic-Clipboard-Funktionen nutzen auch diese Möglichkeit.
Deine gewüschte Möglichkeit: "Ich würde gerne in die primäre Ablage schreiben, um es dann mit der mittleren Maus abrufen zu können."
setzt aber leider das Markieren von Text vorraus. (Also der Text muss dabei markiert bleiben.)
Ansonsten sind da weitere Nachforschungen mit der X11-Lib notwendig.
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
-
- Beiträge: 123
- Registriert: 22.11.2020 20:05
- Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint und LMDE
Re: Zwischenablage
ok - das erklärt, weshalb xclip beim Aufruf ein unsichtbares Fenster baut. Dort schreibt es dann wohl den String rein und markiert ihn...Also der Text muss dabei markiert bleiben.
Das alles nach zubauen, und die API direkt zu nutzen, traue ich mir nicht zu

Wär natürlich cool, wenn das über PB nativ möglich wäre - aber gut..
Aktuell schickt mein Programm die benötigten Strings in die normale Zwischenablage, aus der ich sie dann mit Strg+v bei Bedarf abrufe.
Noch bequemer wäre ja, dies nur mit der mittleren Maus zu tun - deshalb die Idee.
Habe jetzt mal xsel aus den offz. Quellen installiert, um es für meine Zwecke "ein zuspannen". Mit RunProgramm bietet PB ja gute Möglichkeiten.
Hier mal ein funktionierender Testcode, der die gewünschten Strings via xsel in die Primäre Ablage schickt:
Code: Alles auswählen
;thema: mit xsel in die primäre Zwischenablage schreiben
EnableExplicit ;deklarierungszwang
;-deklaration
Global.i ev,pnr
Procedure start_und_schreib(tx.s)
;startet xsel und schreibt den übergebenen string in die standardeingabe von xsel, welches ihn dann in die prim. Zwischenablage schickt
pnr = RunProgram("xsel", "-pi", "",#PB_Program_Open | #PB_Program_Write) ;
Debug pnr
If pnr ;wenn programm erfolgreich gestartet
WriteProgramString(pnr,tx) ; in die standard-eingabe von xsel schreiben
CloseProgram(pnr) ; verbindung mit xsel bereinigen
Else
MessageRequester("xsel fehlt","Lösung: sudo apt install xsel")
End
EndIf ;ob xsel erfolgreich gestartet
EndProcedure
Procedure chk_xsel()
;prüft ob zuvor xsel bereits gestartet wurde bzw. noch läuft beendet es ggf., damit nicht etliche male xsel geöffnet bleibt
If IsProgram(pnr) ;wenn xsel läuft
KillProgram(pnr);xsel schließen
EndIf
EndProcedure
; -Hauptprogramm
OpenWindow(0, 100,30,150,50, "Zwischenablage", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
StickyWindow(0, #True ) ;hauptfenster im vordergrund setzen
; -fensterelemente
ButtonGadget(1, 20, 0, 100, 25, "schreib ZA")
; -ereignischleife
Repeat ;ereignisschleife
ev = WaitWindowEvent() ;auf ereignis warten und ggf. ereignis in ev speichern
Select ev ;fensterereignis auswählen
Case #PB_Event_CloseWindow ;wenn x
Select EventWindow() ;fensternummer des fensters, wo x gedrückt wurde
Case 0 ;wenn hauptfenster
If IsProgram(pnr) ;wenn xsel noch geöffnet sein sollte
KillProgram(pnr)
EndIf
Break ;aus schleife hüpfen
EndSelect ;welches fenster beim beenden aktiv war // also welches fenster beendet wurde
Case #PB_Event_Gadget ;wenn ein gadget(fensterelemnt) geklickt wurde
Select EventGadget() ;gadgeds abfragen /buttons etc
Case 1 ; ZA füllen
chk_xsel() ;schauen, ob noch eine alte xsel-instanz läuft
start_und_schreib("dumdideldum " + Date()) ; testtext in primäre ZA
EndSelect ;welcher button etc.
EndSelect ;fensterereignis
ForEver ;ereignisschleife
End
Aber das hat nicht funktioniert. xsel hat sich dann einfach tot gestellt.
Aber so funzt es ganz gut.
Kleiner Nachteil (aber wirklich nur klein) ist es, das xsel bei Bedarf nachinstalliert werden muß. Ist aber natürlich eine Sache von Sekunden..
Zuletzt geändert von jogo am 12.07.2022 23:50, insgesamt 1-mal geändert.
--
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
Re: Zwischenablage
Hi!
Ich hab da mal noch was gefunden.
Also erstmal: Mit Gtk3 ist es möglich, wenn man diese Konstante mit PureBasic verfügbar macht.
GDK_SELECTION_PRIMARY
Also nicht mehr:
sondern:
Dies setzt eine immer aktive Gtk-Anwendung voraus die mit "gtk_init(..)" Erfolgreich initialisiert wurde und nicht sofort nach dem Aufruf von:
Beispiel:
gtk_clipboard_set_text(clipboard, "Hallo", strlen("Hallo"));
beendet wird, sondern aktiv auf Events wartet.
Aber so richtig fuktioniert das mit Gtk auch nicht.
Also braucht man ein richtiges tolles Linux-Programm was die X11 -Lib auch direkt für die Eventabarbeitung nutzt.
Da kommt die Power der SDL2-Bibliothek ins Spiel:
Hier ein Beispiel:
Der Text sollte während das Programm läuft mit der mittleren Maustaste irgendwo einfügbar sein.
Try it!
Ich hab da mal noch was gefunden.

Also erstmal: Mit Gtk3 ist es möglich, wenn man diese Konstante mit PureBasic verfügbar macht.
GDK_SELECTION_PRIMARY
Also nicht mehr:
Code: Alles auswählen
gClipboard= gtk_clipboard_get_(gdk_atom_intern("CLIPBOARD", #True))
Code: Alles auswählen
gclipboard = gtk_clipboard_get_(#GDK_SELECTION_PRIMARY)
Beispiel:
gtk_clipboard_set_text(clipboard, "Hallo", strlen("Hallo"));
beendet wird, sondern aktiv auf Events wartet.
Aber so richtig fuktioniert das mit Gtk auch nicht.
Also braucht man ein richtiges tolles Linux-Programm was die X11 -Lib auch direkt für die Eventabarbeitung nutzt.
Da kommt die Power der SDL2-Bibliothek ins Spiel:
Hier ein Beispiel:
Code: Alles auswählen
EnableExplicit
ImportC "-lSDL2"
SDL_SetClipboardText(text.p-utf8)
SDL_Init(flags.l)
SDL_SetMainReady()
SDL_WaitEvent(*evt)
EndImport
;SDL_SetMainReady()
If SDL_Init(#SDL_INIT_VIDEO) = 0
SDL_SetClipboardText("PureBasic sagt Hallo mit der Power der SDL-Lib.")
SDL_WaitEvent(0)
Else
Debug "Error!"
EndIf
Try it!
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
-
- Beiträge: 123
- Registriert: 22.11.2020 20:05
- Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint und LMDE
Re: Zwischenablage
das ist natürlich richtig cool, wenn das so direkt mit PureBasic funktioniert.
Schnell mal eben getestet . ich erhalte einen Linker-Error:
/usr/bin/ld:cannot find -lSDL2
collect2:error:ld returned 1 exit status
Vermutlich sind meine Linuxe zu alt?
PS: wie kann ich denn einen Screenshot hochladen? Oder werden lokale Pfade nicht akzeptiert?
Schnell mal eben getestet . ich erhalte einen Linker-Error:
/usr/bin/ld:cannot find -lSDL2
collect2:error:ld returned 1 exit status
Vermutlich sind meine Linuxe zu alt?
PS: wie kann ich denn einen Screenshot hochladen? Oder werden lokale Pfade nicht akzeptiert?
--
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Zwischenablage
Wie alt sind deine Linuxe denn?
Wahrscheinlich ist aber, dass du einfach das Paket "libsdl2-dev" nachinstallieren musst.
Und wir haben hier im Forum auch keine Upload-Funktion für Bilder. Stattdessen musst du Bilder wo anders hochladen und hier verlinken.
Wahrscheinlich ist aber, dass du einfach das Paket "libsdl2-dev" nachinstallieren musst.
Natürlich werden lokale Pfade nicht akzeptiert.jogo hat geschrieben: 12.07.2022 22:45PS: wie kann ich denn einen Screenshot hochladen? Oder werden lokale Pfade nicht akzeptiert?

Und wir haben hier im Forum auch keine Upload-Funktion für Bilder. Stattdessen musst du Bilder wo anders hochladen und hier verlinken.
-
- Beiträge: 123
- Registriert: 22.11.2020 20:05
- Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint und LMDE
Re: Zwischenablage
ich nutze Mint 18.3 / 19.3
entspricht Ubuntu 16.4 / 18.04
Du hast Recht, hab das Paket "libsdl2-dev" installiert und die Linker-Meldung ist weg
Nach Programmstart wird aber nix in die prim. Ablage geschrieben. Zumindest erhalte ich mit der mittleren Maus keine Ausgabe.
Auf diesem Gebiet hab ich keine Erfahrungen - möglicherweise stell ich mich da bissl dumm an.
Ist denn das obige Beispiel, so wie es ist, auf Anhieb lauffähig?
Oder muß ich an anderer Stelle noch was ändern/hinzufügen?
entspricht Ubuntu 16.4 / 18.04
Du hast Recht, hab das Paket "libsdl2-dev" installiert und die Linker-Meldung ist weg

Nach Programmstart wird aber nix in die prim. Ablage geschrieben. Zumindest erhalte ich mit der mittleren Maus keine Ausgabe.
Auf diesem Gebiet hab ich keine Erfahrungen - möglicherweise stell ich mich da bissl dumm an.
Ist denn das obige Beispiel, so wie es ist, auf Anhieb lauffähig?
Oder muß ich an anderer Stelle noch was ändern/hinzufügen?
--
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
Re: Zwischenablage
An jogo:
Läuft den das Programm, während du die mittlere Maustaste in irgendeinen Texteditor drückst?
Anbei:
Der aktuelle PureBasic_Tab in der IDE ist natürlich gesperrt während das Programm über den Debugger läuft.
Bekommst du eine "Error" Textanzeige im Debuggerfenster?
Läuft den das Programm, während du die mittlere Maustaste in irgendeinen Texteditor drückst?
Anbei:
Der aktuelle PureBasic_Tab in der IDE ist natürlich gesperrt während das Programm über den Debugger läuft.
Bekommst du eine "Error" Textanzeige im Debuggerfenster?
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat