
Ist es möglich, über ein Shell-Skript auf markierten Text zuzugreifen?
Ich möchte eine Tastenkombination erstellen, um mit „espeak“ markierten Text vorlesen zu können.
Antwort1
Ja, das ist relativ einfach. Es gibt jede Menge Tools zur Zwischenablagebearbeitung. Ich habe sie zum Ausfüllen des Registrierungsformulars für Apple-Geräte und zur E-Mail-Verifizierung verwendet und xdotool
… viel einfacher, als das Formular 1000 Mal auszufüllen …
Richten Sie also eine Verknüpfung ein, um/home/bob/bin/speak.sh
speak.sh
:
#!/bin/bash
xclip -o | xclip -selection clipboard -i
xclip -o | espeak
Antwort2
kurz: normalerweise ist dies nicht möglich (es sei denn, die Auswahl wurde in die Zwischenablage kopiert)
long: es gibt ein paar Spezialfälle, z.B. hat xterm eine Funktion, die (normalerweise deaktiviert) es einer Anwendung ermöglicht, den ausgewählten Text per Escape-Sequenz zu lesen. Das ist beschrieben inXTerm-Steuersequenzen:
Ps = 5 2 -> Manipulate Selection Data. These controls may
be disabled using the allowWindowOps resource. The parameter
Pt is parsed as
Pc; Pd
The first, Pc, may contain zero or more characters from the
set c p s 0 1 2 3 4 5 6 7 . It is used to construct
a list of selection parameters for clipboard, primary, select,
or cut buffers 0 through 7 respectively, in the order given.
If the parameter is empty, xterm uses s 0 , to specify the
configurable primary/clipboard selection and cut buffer 0.
The second parameter, Pd, gives the selection data. Normally
this is a string encoded in base64. The data becomes the new
selection, which is then available for pasting by other appli-
cations.
If the second parameter is a ? , xterm replies to the host
with the selection data encoded using the same protocol.
If the second parameter is neither a base64 string nor ? ,
then the selection is cleared.
Das heißt, wenn dieallowWindowOpsRessource aktiviert ist, könnte eine Anwendung etwas tun wie
printf '\033]52;s;?\007'
und lesen Sie die Auswahldaten als Base64-String. Aber das ist ein Sonderfall.
Manche Anwendungen kopieren natürlich in die Zwischenablage (siehe FAQ), aber nicht alle. Beispielsweise rxvt usw. verwenden die primäre Auswahl. Eine Lösung, die überall funktionieren würde, gibt es nicht.
Weiterführende Literatur:
- Warum kann ich nichts in/aus anderen Programmen auswählen/einfügen?(xterm-FAQ)
- Kopieren und Einfügen mit URxvt
- Ticket Nr. 3229: Einfügen einer umbrochenen Zeile fügt EOL hinzu(Mitternachtskommandant)
- Betreff: X-Auswahlzugriff in xterm (OSC 52)(Emacs-Entwicklung)
- Debian #384593 xterm: allowWindowOps sollte standardmäßig deaktiviert sein