豆腐メンタルは崩れない

小説家ワナビ視点で、主に執筆環境について書きます。

Automatorで半角スペースをタブ記号に変換する

承前。

半角スペース×4をタブに変換するワークフローを作成しました。

参考

ワークフロー概要

  1. シェルスクリプトで取得したテキストを置換
  2. クリップボードにコピー
  3. AppleScriptでペースト(⌘V)を実行

シェルスクリプトコードを以下に記します。

for f in "$@"
do
    echo "$f" | sed -e "s/    / /g"
done

Automatorにはペースト(または⌘V)を実行するアクションがありません。しかし、キーボード操作を記録してからAppleScriptとして展開することで、アプリを問わず「⌘Vを押す」操作を実行させることができます。そのスクリプトコードは以下の通りです。

(修正:2014-07-09)
えらく時間がかかるのでdelayおよびtimeoutSecondsを0に。けっこう速くなった。とりあえずちゃんと動いている。

-- ⌘Vを押す
delay 0
set timeoutSeconds to 0
set uiScript to "keystroke \"v\" using command down"
my doWithTimeout(uiScript, timeoutSeconds)

on doWithTimeout(uiScript, timeoutSeconds)
    set endDate to (current date) + timeoutSeconds
    repeat
        try
            run script "tell application \"System Events\"
" & uiScript & "
end tell"
            exit repeat
        on error errorMessage
            if ((current date) > endDate) then
                error "Can not " & uiScript
            end if
        end try
    end repeat
end doWithTimeout

Automatorスクリーンショットは以下の通りです。 (img)(http://cl.ly/WMHS/4Space2TabService3.workflow%202014-07-02%2022-40-50.jpg)

また、ワークフローファイルを以下にリンクします。解凍して「Library/Services」に置くことで利用できます。テキストを選択した状態で、メニューバーまたはコンテクストメニュー内の「サービス」から実行できます。

4Space2Tab.workflow(前バージョン:4Space2Tab.workflow

注意

なぜか一部アプリで正常に機能しない(1行しかペーストされない)ことがありました。(miなど)

バージョン2(2014-07-09)

もうテキスト選択とかコンテクストメニューから実行とかめんどくさいので、ワークフローに⌘A+⌘Cも含めてみた。

ワークフロー概要

入力なしにして、

  1. AppleScriptで全文選択(⌘A)を実行
  2. AppleScriptでコピー(⌘C)を実行(delay1秒)
  3. クリップボードの内容を取得
  4. シェルスクリプトで取得したテキストを置換
  5. クリップボードにコピー
  6. AppleScriptでペースト(⌘V)を実行

ワークフローファイルは以下。

4Space2TabSel.workflow

テキスト未選択状態で、メニューバーの「サービス」から実行できます。「システム環境設定>キーボード>ショートカット」で割り振りしておくと楽です。

さすがに、delayを多少取っておかないと、コピー処理が間に合わず失敗する模様。