テンキーのないMacbook ProでInDesignのテキストスタイルのショートカットを登録してみる

面白いことに、InDesignでは、テンキーの数字キーは[文字スタイル][段落スタイル]に割り当てるショートカット用として予約されています。
そのため、通常のショートカットでは使用できません。
逆に言えば、[文字スタイル][段落スタイル]のショートカットには、テンキー+command、option、shiftキーの組み合わせしか登録できないようで、テンキーのないマシンでは困ったことになります。

ScreenShot 2015-04-13 at 12.53.52

追加でテンキーを導入するというのも作業スペースの関係で採用したくないので、なんとか方法はないものかと思ってはいたのですが、漸く少し時間が空いたので、AppleScriptとKeyboard Maestro 4でやってみました。
(Keyboard Maestro 4のTypeアクションだけでやれると思っていたのですが、commandとoptionキーの同時押し下げの方法が分かりませんでした…)

取り敢えず、「command+shift+数字」と「command+option+数字」のパターンを設定してみました。

1KM

・InDesignがフロントアプリケーションの時だけ動作するように、最初にマクログループを作って、そのグループフォルダ内にAppleScriptを実行するアクションを設定してます。
・テンキーの数字に対応するキーコードは、このページを参照してください。

「command+shift+数字」パターンでは、スクリプト内ではshiftを設定していないのですが、Keyboard Maestro 4のホットキーの「shift」を拾っているのかもしれません。

■補遺

サンプルとしての上の図のKeyboard Maestro 4のホットキー設定は、InDesignの既定のショートカットとのコンフリクトを一切考慮していません。あくまで、テンキーのkey codeを使えば、[文字スタイル][段落スタイル]にショートカットをテンキーのないマシンでも設定できることを試したものです。

もし、既定のショートカットとのコンフリクトがある場合は、ホットキー設定を変えるか、InDesign側の既定値を書き換えるなどで対処してください。

InDesignで等幅半角字形を設定する―字形パレット以外の方法

あまり近しいとはいえない古くからの知人から久しぶりに連絡がありました。
そこで、InDesignで縦書きの2桁英数字の縦中横設定と等幅半角字形への変更設定をどういう風にやっているかという話になり、全部キーボードショートカットだと言うとあきれながらやり方を教えろということとなり、また、いろいろとその他の話も聞いていると、等幅字形(全角、半角、3分などがあります)へのアクセス方法が字形パレット以外からは出来ないものだと思っている人が結構多いのではないかということになりましたので、メモ代わりに少し整理しておきます。

■字形パレット
等幅字形へのアクセスは一般的には、字形パレットから行う設定のようです。

字形パレット

参考までに、プロポーショナル字形と等幅字形の違いを図で示しておきます。

プロポーショナル字形と等幅字形
この字形パレットから入力する方法では、データの新規入力でない場合は既に入力されたデータを部分的に上書きすることになります。ミスも起きやすく、出来れば半角の英数字をそのまま等幅字形に置き換えたいところです。しかし、メニューやパレットを探しても該当するコマンドを見つけることは出来ませんでした。多分、Adobeの想定している標準的な操作では、字形パレットから該当する文字をダブルクリックで入力するという方法しかないのだろうと思います。
しかし、ここで諦めないのがいる訳で、キーボードショートカットを見つけたという次第です。

ショートカット

この画面で、「セットを表示」ボタンをクリックすることで表示されるショートカットのセットファイル(これはキャッシュファイルです)と実際に保存される設定ファイルは書式が違います。保存される設定ファイルは、次の図の右側で、xmlファイルとなっています。保存される場所は、‘~/Library/Preferences/Adobe InDesign/Version xxxx/ja_JP/InDesign Shortcut Sets/’(InDesignのバージョンによってフォルダが変わります)。

ショートカット2

保存されるxmlファイルは、パラメータがすべて英語表現なので、少し慣れないと設定した値がどの場所にあるか判別しにくいところが残念です。
別な視点からいえば、設定したい項目がどのカテゴリにあるのか調べたいときは、キャッシュファイルの方を保存して、日本語のコマンド名で検索する方が判りやすいでしょう。

■キーボードショートカット設定の継承
先頃、Creative CloudからCreative Cloud 2014のアップデートがありました。
このキーボードショートカット設定を継承する場合は、
‘~/Library/Preferences/Adobe InDesign/Version 9.0-J/ja_JP/InDesign Shortcut Sets/’
から
‘~/Library/Preferences/Adobe InDesign/Version 10.0-J/ja_JP/InDesign Shortcut Sets/’
へ、設定ファイルである‘xxxx.indk’ファイルを移動させればOKです。
この設定ファイルは、確認がとれているバージョンでいえば、CS5からCC 2014まで互換があるようです。

InDesignでパーレンの起こしと受けのペアを一括変換

前処理としてテキストエディタで処理できれば問題はないのですが、組み込んでから半角パーレンを全角に変換しなければならないケースは結構あります。
文字種変換ではパーレン類は変換対象ではないので<http://wp.me/p1Cs3W-8L>、選択対象を一括で変換するという方法はないようです。
となると検索/置換するしかないのですが、パーレンは起こしと受けのペアとなるので面倒です。
そこで、2回が1回になるだけでも有り難いということで、スクリプトを書いてみました。

tell application "Adobe InDesign CC"
	activate
	set SelectedStrngs to the selection
	if SelectedStrngs is not {} then
		set {find grep preferences, change grep preferences} to {nothing, nothing}
		set find_replaceStrList to {{"[ ]?\\(", "("}, {"\\)[ ]?", ")"}, {"[ ]?\\[", "["}, {"\\][ ]?", "]"}}
		set case sensitive of find change text options to false
		set include footnotes of find change text options to false
		set include hidden layers of find change text options to false
		set include locked layers for find of find change text options to false
		set include locked stories for find of find change text options to false
		set include master pages of find change text options to false
		set whole word of find change text options to false
		repeat with i in find_replaceStrList
			set find what of find grep preference 1 to (item 1 of i) as string
			set change to of change grep preferences to (item 2 of i) as string
			--set FoundChar to find grep SelectedStrngs
			change grep SelectedStrngs
		end repeat
		--
		set {find grep preferences, change grep preferences} to {nothing, nothing}
		display notification "終わりました。" with title "完了"
	else
		display notification "文字列を選択してから実行しましょう。" with title "注意!"
	end if
end tell

単純にループしているだけですから、‘find_replaceStrList’リストに付け加えれば何種類でも一括変換できます。

注記)エラーがでることがありますが、同じスクリプトを繰り返し動作させるとエラーなしで処理できてしまいます。なんなんでしょうか?
今回、エラーダイアログのキャプチャーを載せたいと思って試したところ、何度やってもエラーがでないので諦めましたが、これも謎です。

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を見てみるといつの間にやらシェルスクリプトからも実行できるようです。
となると、ホットキーユーティリティに組み込んでホットキーで起動すれば、更に素早いレスポンスが期待できそうです。

mi.appとInDesignの文字種変換

mi.appがもっている文字種変換機能は以下の通りで充実しています。

  • 半角カナ→全角カナ
  • 全角カナ→半角カナ
  • 半角英数(A-z,0-9)→全角英数(A-z,0-9)
  • 全角英数(A-z,0-9)→半角英数(A-z,0-9)
  • 半角英数記号(A-z,0-9,!,…)→全角英数記号(A-z,0-9,!,…)
  • 全角英数記号(A-z,0-9,!,…)→半角英数記号(A-z,0-9,!,…)
  • 半角スペース→全角スペース
  • 全角スペース→半角スペース
  • 全角カナ→全角かな
  • 全角かな→全角カナ
  • 半数→全数
  • 全数→半数

(この変換テーブルは,‘~/Library/Application Support/mi3/Transliterate/’にあって,多分内容を編集しても動作はすると思います)
この中の全角英数字記号変換の変換対象となっているキャラクタは,以下のようになっています(全角だけ表記します)。

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!”#$%&’()*+,−./:;<=>?@[\]^_`{|}〜¥

mi.appの文字種変換機能の中にもアルファベットだけあるいは数字だけというものがなく,英数で括られてしまっています。
アルファベットと数字を一括で変換してしまうというのも,状況によっては不便となります。
パーレン類も別個に対処したいものです。

□追記

mi.appでは「半数→全数」、「全数→半数」という数字だけの変換フィルタはありません。私の誤りです。訂正致します(2014.03)

■InDesignで数字とアルファベットを別途で全半変換してみる
そんなこともあって,ReplaceString<http://wp.me/p1Cs3W-1R>を書いて変換辞書ファイルもそれなりにバンドルしたのですが,InDesign上で全角あるいは半角のアルファベットだけ,数字だけの変換をやりたくなってきました。前処理としてmi.appやTextWrangler.appで処理をしておければ良いのですが,貼り込んだ後からの編集段階で切ったはったをやっている時にはInDesign上で処理が必要となるケースが多いのです。

1

InDesignの文字種変換機能を使って,以下の全角文字列を全角英数字から半角英数字へ変換した場合,

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!”#$%&’*+,−./:;?@^_`¥<=>(〜)[\]{|}「」『』【】〈〉〔〕

が,こうなります。

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!”#$%&’*+,−./:;?@^_`¥(〜)[\]{|}「」『』【】〈〉〔〕

何故かパーレン類は対象としないで,その他は見事に半角です。この他では,スペースも対象外です。
これでわかることは,スペースとパーレンは別途に対処しないといけないということと,また,数字のみとかアルファベットのみという機能が無い点が不便だということがわかります。

そこで,AppleScriptで全角数字から半角数字への変換処理を書いてみると次のようになります。

tell application "Adobe InDesign CC"
	activate
	set SelectedStrngs to the selection
	if SelectedStrngs is not {} then
		set {find text preferences, change text preferences, find grep preferences, change grep preferences} to {nothing, nothing, nothing, nothing}
		set width sensitive of find change grep option 1 to true
		set find what of find grep preference 1 to "[0-9]+"
		set FoundChar to find grep SelectedStrngs
		set find character type of find transliterate preference 1 to full width roman symbols
		set change character type of change transliterate preference 1 to half width roman symbols
		repeat with i in FoundChar
			change transliterate i
		end repeat
		display notification "終わりました。" with title "完了"
	else
		display notification "文字列を選択してから実行しましょう。" with title "注意!"
	end if
end tell

これは「->半角数字」の場合ですが,アルファベットを対象にするには”[0-9]+”の部分を”[A-z]”とすればいいでしょう。また,全半を逆にするには,‘find character type’と‘change character type’のwidthを逆にして,検索対象も逆に書き換えればOKです。