月別: 2014年4月

Plain Clip.appとKeyboard Maestro 6でプレーンテキストを抜き出す

この‘Plain Clip.app’はAppleScriptで«class ktxt»でプレーンテキストを抜き出すレスポンスに不満があって使い始めていたのですが、コマンドラインからの使用については迂闊に知りませんでした。
これを利用して、‘do shell script …’で使用すれば更に早い処理スピードが期待できます。

‘Plain Clip’のシェルスクリプトはアプリケーション‘Plain Clip.app’にバインドされています。つまり、アプリケーションのバンドルパッケージ内に‘pc’という名前のスクリプトがあります。‘Plain Clip.app’がアプリケーションフォルダ内にあれば、‘/Applications/Plain Clip.app/pc’というわけです。
‘Plain Clip’をシェルスクリプトで起動する場合は、以下のオプションが使えます。

-w Remove whitespace from the end of each line
-l Remove whitespace from the beginning of each line
-m Remove spaces, tabs and returns from the beginning and end of the whole string
-i Remove invisible characters (see above)
-r Remove line breaks
-b Remove blank lines
-s Replace consecutive spaces with a single one
-p Replace tabs with spaces
-a Convert to ASCII
-v After cleaning the clipboard text, emulate a ⌘V keystroke.

シェルスクリプトからの実行をKeyboard Maestro 6に組み込んでみた例が次の図です。

1

オプションで‘-v’を付加すれば、最新バージョン2.4.8では、⌘+vのペーストまで‘Plain Clip’がエミュレートしてくれますので、Keyboard Maestro 6はシェルスクリプトを起動するためだけに使っていることになります。

と、ここまで書いていて、Keyboard Maestro 6を使うのであれば、Keyboard Maestro 6自身が持つクリップボード操作機能で同じことができそうです。気がつきませんでした。(最近、うっかりし過ぎのような気がします…)
それが、次の図です。

kbm6

結局、これが一番シンプルだったようです。

InDesign上でプレーンテキストでペーストする

InDesign上で作業していると、書式設定を持たないプレーンテキストでペースト作業をしたいケースがあります。
それは、テキストフレーム内の挿入ポイントあるいは選択された文字列に設定されたフォーマットを活かして文字列だけをペーストしたいといった場合です。
ペーストしたいテキストを何処から持ってくるかによってやり方が異なってきます。

◆他のアプリケーションからコピーして来て、ペーストする場合
この場合は、InDesignの環境設定内の「クリップボードの管理」で図のようにテキストのみをチェックしておけばプレーンテキストで処理されます。

1

Wordなどの書式設定も持ったアプリケーションからのコピー&ペーストでも大丈夫です。
(もう1つの方法として、他のアプリケーションからドラッグ&ドロップで挿入する方法も便利です)

問題は、InDesign上でのコピー&ペースト時にコピーされた内容をプレーンテキストとしてペーストするときにどうするかということです。

◆InDesign上でのコピー&ペーストの場合
通常のテキストフレーム内の挿入ポイントあるいは選択された文字列を対象にした場合は、有り難いことにInDesignがその機能を持っていますので、編集メニュー内の「フォーマットなしでペースト」を選択/実行すればプレーンテキストでペーストしてくれます。
ところが、「フォーマットなしでペースト」がアクティブにならないケースがあります。

paste

図の例で、表の編集作業で、複数のセルにまたがった「たちつてと」をコピーして右の列にある「あいうえお」に上書きしたいのですが、書式は残したいといった場合などです。
セルの範囲選択で「たちつてと」をコピーして右の列にある「あいうえお」に上書きするばあいには、「フォーマットなしでペースト」はアクティブにはなってくれません。
そのままペーストすると、真ん中の「あいうえお」がそのままの書式設定/セルの罫線・塗り設定まで含めてフォーマットでペーストされてしまいます。
一旦プレーンテキストエディタにペースとして、それを改めてコピーしてから「あいうえお」に上書きするという方法が一番わかりやすい方法でしょう。ですが、面倒です。
そこで、古い自作のスクリプトを引っ張りだしてきました。スクリプトでクリップボード内を処理してプレーンテキストを抜き出してからペーストするというものです。
こんな風になります。(OS X 10.4の頃に書いたものです)

set theFrontApp to (path to frontmost application) as Unicode text
set theFrontAppName to (displayed name of (info for (theFrontApp as alias)))

my getPlainText()

delay 0.5
tell application theFrontAppName to activate
tell application "System Events"
	tell process theFrontAppName
		keystroke "v" using command down
	end tell
end tell

to getPlainText()
	set clipb to (clipboard info) as string
	if (clipb contains "text") or (clipb contains "string") then
		set theUnicode_Text to (the clipboard as Unicode text)
		set Textdata to (theUnicode_Text as string) as record
		set the clipboard to «class ktxt» of Textdata
	else
		tell application "System Events"
			activate
			display dialog "クリップボードの内容が適切ではないようです。" & return & "テキストをコピーしてから実行して下さい。" buttons {"やんぬるかな!!"} default button 1 with icon 2 giving up after 2
		end tell
	end if
end getPlainText

OS X 10.9の現時点でも、«class ktxt»で抜き出せるようですが、なかなか手強い‘clipboard info’です。
汎用性を持たせて、スクリプトメニューやホットキーユーティリティから実行するように書いてあります。InDesign用としてスクリプトパレットから実行するのであれば、アプリケーションを決め打ちにできますから若干処理を速くできるでしょう。
更に早い処理を望むのであれば、‘Plain Clip.app’<http://www.bluem.net/en/mac/plain-clip/>を使うという手があります。

set theFrontApp to (path to frontmost application) as Unicode text
tell application "Plain Clip" to launch
delay 0.1
tell application theFrontApp to activate
tell application "System Events"
	tell process theFrontApp
		keystroke "v" using command down
	end tell
end tell

この‘Plain Clip.app’は最初のリリースが2004年で最終更新が2013年9月となっていて、久しぶりにHPを見てみるといつの間にやらシェルスクリプトからも実行できるようです。
となると、ホットキーユーティリティに組み込んでホットキーで起動すれば、更に素早いレスポンスが期待できそうです。