貼り付けイベントをインターセプトし、スクリプトでテキストを実行したい。ユースケースはこのようなものです(stdinのテキストを受け入れ、「world」を「potato」に変換してstdoutに書き込むスクリプトがどこかにあると想定しています)。
1と2の間に手動ステップはありません、つまり、テキストが自動的に処理されるように、貼り付けイベント(またはコピーイベント)にフックが必要です。悪意はありません。 Webとの間でコピー/貼り付けを行うときに、ソースコードを自動フォーマットするだけです。
私の質問は選択バッファ(ミドルマウスクリップボード)に関係していますが、質問は一般に他のクリップボードテキストにも当てはまると思います。
次のBash関数を使用できます。それを~/.bashrc
にコピーし、ターミナルから. ~/.bashrc
としてソースします。
cngstr(){
echo `xclip -o` | sed -e "s#$1#$2#g" | xclip
}
ターミナルで実行:
$ cngstr "string" "replacement"
次に、マウスの中央クリックを使用して貼り付けると、選択した単語の「文字列」が「置換」に置き換えられます。
あなたの選択は「hello world!」だとしましょう。次に、ターミナルで実行します。
cngstr world potato
複数のWordで構成される文字列に""
を使用します。次に、マウス中央のクリップを使用して貼り付けると、「hello potato!」現れる。スクリーンショットをご覧ください。
xclip -o
は、ここでsed
にパイプされている標準出力に選択範囲を出力します。sed
は、ユーザーからの入力を受け取る文字列を置き換えます。xclip
に渡され、そこで[ プライマリ選択 に配置され、マウスの中央クリックで貼り付けできるようになります。xclip
にはデフォルトのUbuntuディストリビューションが付属していると思います。それ以外の場合は、apt-get
を使用してインストールします。
Sudo apt-get install xclip
変更されたコンテンツをクリップボードでも利用できるようにします
変更した内容もクリップボードで利用できるようにする場合は、 Ctrl+V 同様に機能します。上記のスクリプトに次の行を追加します。
echo `xclip -o` | xclip -selection c
上記の行は、プライマリ選択の内容をクリップボードに渡します。変更された関数は次のようになります。
cngstr(){
echo `xclip -o` | sed -e "s#$1#$2#g" | xclip
echo `xclip -o` | xclip -selection c
}
クリップボードの内容を変更できるBash関数(つまり、 Ctrl+C または右クリックメニューから)、変更された文字列をプライマリ選択とクリップボードで使用できるようにします。
cngstr1(){
echo `xclip -o -selection c` | sed -e "s#$1#$2#g" | xclip
echo `xclip -o` | xclip -selection c
}
xclip -o
は、デフォルトでプライマリ選択の内容を出力します。 -selection c
を使用して、クリップボードの内容を印刷します。詳細については man xclip
をご覧ください。
スイッチケースを使用して、これらの2つの関数をスクリプトで組み合わせることができます、
#!/bin/sh
string="$2"
replacement="$3"
cngstr(){
echo `xclip -o` | sed -e "s#$1#$2#g" | xclip
echo `xclip -o` | xclip -selection c
}
cngstr1(){
echo `xclip -o -selection c` | sed -e "s#$1#$2#g" | xclip
echo `xclip -o` | xclip -selection c
}
if [ $# -lt 2 ]
then
echo "Usage : $0 [c|p] \"string\" \"replacement\" "
exit
fi
case "$1" in
c) cngstr1 "$string" "$replacement"
;;
p) cngstr "$string" "$replacement"
;;
*) echo "Usage : $0 [c|p] \"string\" \"replacement\" "
;;
esac
使用法
./script.sh [c|p] "string" "replacement"
オプションc
を使用して、クリップボードを使用してコピーされたコンテンツ、つまり、 Ctrl+C または右クリックメニューから。
オプションp
を使用して、プライマリ選択を使用してコピーされたコンテンツを変更します。