忍者ブログ

ぼんぷろぐ

InDesign、イラレ、フォトショ(CS6 Win)の勉強中。。。(旧まとめいみブログ)

[イラレ]
AutoHotkeyでイラレのスクリプトにショートカットキーを割り当ててみる(2)

前回の続きー

2つのページアイテムが選択されているとき、それらの位置を入れ替えるというスクリプトを考えてみます。

まずExtendScriptで書くとこんな感じ

var sel=app.selection;
if (sel.constructor.name!="TextRange" && sel.length==2) {
    var pos0=sel[0].position;
    sel[0].position=sel[1].position;
    sel[1].position=pos0;
}

これを「Ctrl+F1」に登録して実行するには、前回やった方法では、上記のスクリプトをjsxファイルとして保存し、AutoHotkey.ahkに次のように書き加えます。

^F1::
    app:=ComObjActive("Illustrator.Application")
    app.DoJavaScriptFile("D:\場所入れ替え.jsx")
Return

jsxファイルをいちいち用意しなきゃいけないのはめんどくさい!と思う方は、次のように書くこともできます。スクリプトをファイルじゃなく文字列で渡すようにしただけです。

^F1::
    irekaeScript=
    (
    var sel=app.selection;
    if (sel.constructor.name!="TextRange" && sel.length==2) {
        var pos0=sel[0].position;
        sel[0].position=sel[1].position;
        sel[1].position=pos0;
    }
    )
    app:=ComObjActive("Illustrator.Application")
    app.DoJavaScript(irekaeScript)
Return

ここまでせっかくAutoHotkey側からIllustratorのCOMオブジェクトを取得しているのに、JavaScriptを実行しろという、ただ一つのコマンドしか使いませんでした。ですがこのオブジェクトは、VBスクリプトでCreateObject("Illustrator.Application")したものとほぼ同等のものであるはずで、たいていのことはExtendScriptやVBスクリプトと同じようにできるはずなのです。

そこで「illustrator_scripting_reference_vbscript_cs5.pdf」(ググれば出ます)を参考に、同じ処理をAutoHotkeyのスクリプトのみでやってみましょう。文法など違うのでVBスクリプトと全く同じようにはいかないですが、むしろ簡潔に書けたりもします。

^F1::
    app:=ComObjActive("Illustrator.Application")
    sel:=app.Selection
    If (ComObjType(sel,"Name")!="TextRange" AND sel.MaxIndex()=1){
        pos0:=sel[0].Position
        sel[0].Position:=sel[1].Position
        sel[1].Position:=pos0
    }
Return

できたできた。選択物がTextRangeではなく、かつ選択物の個数が2個(indexは0からはじまるのでindexの最大値が1)という条件をみたすとき、それぞれのPositionを入れ替える、という処理になっています。

今度はこれを、「Shift+Z」に登録してみたいと思います。
隣り合わせのキーなのでとても入力しやすいのですが、テキスト編集中には大文字のZを入力するのに使う組み合わせです。このまま1行目を「+z::」としただけでは、大文字のZを入力したい時にもキーが奪われて入力できなくなってしまいます。
そこで、選択物がTextRangeのとき(テキストエリアにテキストカーソルを置いてるだけでもTextRangeになります)にはそのまんまShift+Zのキー入力をイラレに送り、そうでない時にはPositionの入れ替えを試みる、という処理にします。

+z::
    app:=ComObjActive("Illustrator.Application")
    sel:=app.Selection
    If (ComObjType(sel,"Name")="TextRange" OR A_CaretX!="")
    {
        Send,+z
    }
    Else
    {
        If sel.MaxIndex()=1 {
            pos0:=sel[0].Position
            sel[0].Position:=sel[1].Position
            sel[1].Position:=pos0
        }
    }
Return

と、こんな感じになります。「Shift+Zをそのまんまイラレに送る」はExtendScriptにはおそらくできないことで、AutoHotkeyとのコラボの効能と言えるでしょう。

ただしこれは欠点があって、ドキュメント上ではテキストを選択しておらず、何かしらのパネル上に文字を入力しようとしているとき、大文字のZが入力できない、ということになってしまいます。あまりないと思うのですが、たとえば段落スタイルの名前をパネル上で変えるときとか(段落スタイル編集ダイアログからなら大丈夫です)。
(追記:4行目に OR A_CaretX!="" を追加することでこの問題は解決できました)




最後にアレもやってみましょう。「プレーンテキストとしてペーストする」ってやつ。

^!v::
    clipboard=%clipboard% ;クリップボードを文字列に変換
    send ^v ;Ctrl+Vを送る
Return

これだけです。Ctrl+Alt+Vに登録しています。ただしこれは、クリップボードの内容を文字列に変換したものをクリップボードに入れ、Ctrl+V(ペースト)を送っているだけです。したがって一回これを使ったあと普通にペーストすると、クリップボードはすっかり文字列に変わってしまっています。

クリップボードの内容は保持しつつ、一度だけ文字列に変換したものを送る、というのもClipboardAllなどを使えばできるのですが、なぜかうちのイラレでは2秒くらい動作が止まったりしちゃってあきらめました。

ちなみにファイルをコピーした状態で使うとファイルパスに変換されたりもします。
PR

コメント

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字

プロフィール

あるふぁ(仮)
InDesignで新聞組版のようなことをしてる人です。

InDesignスクリプトについて

つくったInDesignスクリプトのまとめ

twitter

フリーエリア