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

(はてなブログからの移行記事です。正常に表示されていない場合、ご連絡いただけると助かります。)

承前。

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

参考

ワークフロー概要

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-- ⌘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のスクリーンショットは以下の通りです。
スクリーンショット

また、ワークフローファイルを以下にリンクします。解凍して「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を多少取っておかないと、コピー処理が間に合わず失敗する模様。

(2014-12-31追記)選択したテキストを入力で置き換える

なんでコピペとかしているのか、冷静に考えると意味が分からない。

スクリーンショット

これでOKです。