1

bash スクリプトから(ユーザーがCmd+を押したかのように) コピー コマンドを呼び出すことは可能ですか? C基本的に、グローバル ホットキーで実行する簡単なスクリプトを作成したいと考えています。アクティブなアプリから現在の選択を取得し、何かを置き換えて結果を貼り付ける必要があります。これは可能ですか?

これまでに思いついたのはpbpasteandを使用pbcopyすることですが、可能であれば自動化したいと思います。

4

1 に答える 1

1

テキストの選択範囲を変更しようとしているだけなら、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するため、必要です。入力がバイトより長い場合は使用できず、一時ファイルに書き込むか、.echoshgetconf ARG_MAXechopbpaste

pbpastepbcopy使用される環境では、デフォルトで非 ASCII 文字を疑問符に置き換えdo shell scriptます。LC_CTYPEUTF-8

システム イベントにメニュー バー項目をクリックするように指示すると、さらに遅くなることが多く、メニュー バーのないアプリケーションや全画面ウィンドウでは機能しません。

もう 1 つのオプションは、Automator サービスを作成することです。ただし、実行されるまでにわずかな遅延もあります。サービス メニューがメニュー バーに一度表示されるまで、サービスのショートカットが常に機能するとは限らないというバグがあります。また、最前面のアプリケーションにメニュー バーやサービス メニューがない場合、サービスは利用できません。

于 2012-08-25T19:37:09.647 に答える