bash スクリプトから(ユーザーがCmd+を押したかのように) コピー コマンドを呼び出すことは可能ですか? C基本的に、グローバル ホットキーで実行する簡単なスクリプトを作成したいと考えています。アクティブなアプリから現在の選択を取得し、何かを置き換えて結果を貼り付ける必要があります。これは可能ですか?
これまでに思いついたのはpbpaste
andを使用pbcopy
することですが、可能であれば自動化したいと思います。
bash スクリプトから(ユーザーがCmd+を押したかのように) コピー コマンドを呼び出すことは可能ですか? C基本的に、グローバル ホットキーで実行する簡単なスクリプトを作成したいと考えています。アクティブなアプリから現在の選択を取得し、何かを置き換えて結果を貼り付ける必要があります。これは可能ですか?
これまでに思いついたのはpbpaste
andを使用pbcopy
することですが、可能であれば自動化したいと思います。
テキストの選択範囲を変更しようとしているだけなら、AppleScript を使用できます。
osascript -e 'try
set old to the clipboard
end try
try
delay 0.3
tell application "System Events" to keystroke "c" using command down
delay 0.2
set text item delimiters to linefeed
set input to (paragraphs of (the clipboard as text)) as text
set the clipboard to do shell script "shopt -u xpg_echo; echo -n " & quoted form of input & " | rev" without altering line endings
tell application "System Events" to keystroke "v" using command down
delay 0.05
end try
try
set the clipboard to old
end try'
最初の遅延は、スクリプトがコマンド以外の修飾キーを持つショートカットで実行された場合に、修飾キーを解放するためのものです。2 番目の遅延も 0.05 程度に減らすことができますが、長い選択や Web ビューなどでは、より長い遅延が必要になることがよくあります。3 番目の遅延がないと、テキストが貼り付けthe clipboard
られる前に に設定されることがあります。old
the clipboard as text
デフォルトで行末を改行にdo shell script
変換します。inはデフォルトで一重引用符内のバックスラッシュを解釈shopt -u xpg_echo
するため、必要です。入力がバイトより長い場合は使用できず、一時ファイルに書き込むか、.echo
sh
getconf ARG_MAX
echo
pbpaste
pbpaste
でpbcopy
使用される環境では、デフォルトで非 ASCII 文字を疑問符に置き換えdo shell script
ます。LC_CTYPE
UTF-8
システム イベントにメニュー バー項目をクリックするように指示すると、さらに遅くなることが多く、メニュー バーのないアプリケーションや全画面ウィンドウでは機能しません。
もう 1 つのオプションは、Automator サービスを作成することです。ただし、実行されるまでにわずかな遅延もあります。サービス メニューがメニュー バーに一度表示されるまで、サービスのショートカットが常に機能するとは限らないというバグがあります。また、最前面のアプリケーションにメニュー バーやサービス メニューがない場合、サービスは利用できません。