Auf markierten Text aus dem Skript zugreifen?

Auf markierten Text aus dem Skript zugreifen?

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:

verwandte Informationen