web-dev-qa-db-ja.com

スクリプトから強調表示されたテキストにアクセスしますか?

シェルスクリプトを介して強調表示されたテキストにアクセスすることは可能ですか?

強調表示されたテキストを読むために「espeak」を使用するキーボードショートカットを作成したいと思います。

2

はい、これは比較的簡単です。クリップボードを操作するためのツールはたくさんあります。私はそれらを使用して、Appleデバイス登録と電子メール検証、およびxdotool…を入力しました。フォームに1000回入力するよりも簡単…

したがって、ショートカットを/home/bob/bin/speak.shに設定します

speak.sh

#!/bin/bash

xclip -o | xclip -selection clipboard -i
xclip -o | espeak
2
mikejonesey

短い:通常、これを行うことはできません(選択範囲がクリップボードにコピーされていない限り)

long:いくつかの特殊なケースがあります。たとえば、xtermには、アプリケーションがエスケープシーケンスを介して選択したテキストを読み取ることができる(通常は無効になっている)機能があります。これは XTerm制御シーケンス で説明されています:

        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.

つまり、 allowWindowOps リソースが有効になっている場合、アプリケーションは次のようなことを行うことができます。

printf '\033]52;s;?\007'

選択データをbase64文字列として読み取ります。しかし、それは特別な場合です。

もちろん、一部のアプリケーションはクリップボードにコピーされます(FAQを参照)が、すべてではありません。たとえば、rxvtなどでは、プライマリ選択を使用します。どこでも機能する解決策はありません。

参考文献:

1
Thomas Dickey