忍者ブログ

ぼんぷろぐ

InDesign、イラレ、フォトショの勉強中。。。

[イラレ]
イラレのスクリプトパネルっぽいやつを更新しました

このブログでひっそり公開していたスクリプトパネルっぽいやつ(Windows用)ですが、作者がCS6オンリー使いなものであまり気にしてなかったけど、複数のバージョンのイラレが混在してて当たり前なCC環境では非常に使いづらいようなのでそのあたりを改善いたしました。それらしい配布ページも作ったぞ。

名前もあらためまして「スクリプト パネル っぽい やつ」を縮めてSppyとしました。ちょっと勇気が足りなくてSPOiにはならなかった。

Sppy for Ai


AutoHotkeyはいいぞー
PR

[イラレ]
フォントパレットのすくりぷと

 
ご覧のようにずらーっとボタンが並んでいて、イラレ上でテキストを選択し、左の小さいボタンを押すと、その右のボタンにフォントの名前が表示され、それがそのフォントを適用するボタンになるというパレットを生成するスクリプトです。


フォントの違う複数のテキストオブジェクトや、テキストオブジェクトを含むグループを選択している場合、一度に複数のフォントを拾えます。
一つのテキストフレーム内で複数のフォントを使ってる場合にそれらを取得するという機能はいまのところありません。1文字目のフォントだけが登録されます。

CS6で開発しています。CCでの動作確認は明日やるつもりですがたぶんボタンの形が違うだけで普通に動いてくれるはず。。

[InDesign]
複数段落選択中は各段落の先頭にタブを挿入するようにするスクリプト

前回に続いてメニューアクションにイベントリスナーをつける例をもう一つ。

InDesignではタブの入力は通常の文字入力と異なり、『タブを挿入』のメニューコマンドをタブキーに割り当てられたキーボードショートカットで実行するという形になっています。そこにイベントリスナーで処理を割り込ませ、特定の状況下で挙動を変えてやろうという試みです。具体的には複数段落にわたるテキストを選択している場合、各段落の先頭にタブが挿入されるようにします。さらにデフォルトでShift+Tabに割り当てられている『右インデントタブを挿入』では、各段落の先頭のタブを消去するようにしてみます。

使い方は前回と同様、以下のコードを拡張子jsxで保存してStartup Scriptsフォルダに入れるだけ。
"beforeInvoke"でメニューアクションの実行前に割り込み、条件に当てはまる場合はpreventDefaultで通常のタブ挿入をキャンセルしています。

#targetengine "CopipeCheck"
function addEL(obj, eventName, handler, name) {
    var el0 = obj.eventListeners.item(name);
    if (el0.isValid) el0.remove();
    obj.addEventListener(eventName, handler).name = name;
}

addEL(app.menuActions.itemByID(119698), "beforeInvoke", function (ev){
    var sel0=app.selection[0];
    if (sel0 && sel0.hasOwnProperty("paragraphs") && sel0.paragraphs.length>1){
        ev.preventDefault();
        app.doScript(function(){
            var paras=sel0.paragraphs.everyItem().getElements();
            for (var i=paras.length-1;i>=0;i--) paras[i].insertionPoints[0].contents="\t";
        },ScriptLanguage.JAVASCRIPT,[],UndoModes.ENTIRE_SCRIPT);
    }
}, "Tab1");

addEL(app.menuActions.itemByID(119673), "beforeInvoke", function (ev){
    var sel0=app.selection[0];
    if (sel0 && sel0.hasOwnProperty("paragraphs") && sel0.paragraphs.length>1){
        ev.preventDefault();
        app.doScript(function(){
            var paras=sel0.paragraphs.everyItem().getElements();
            for (var i=paras.length-1;i>=0;i--) {
                var c0=paras[i].characters[0];
                if (c0.contents=="\t") c0.contents="";
            }
        },ScriptLanguage.JAVASCRIPT,[],UndoModes.ENTIRE_SCRIPT);
    }
}, "ShiftTab1");

[InDesign]
テキストをコピペしてテキストフレームができたときに教えてくれるスクリプト

InDesignでは「テキストカーソルを置いてない状態でテキストをペーストすると、新しく作られたテキストフレーム内にペーストされる」という仕様になっていますが、そういうペーストをしたときに警告を出すスクリプトを書いてみました。



もちろん事故防止のためです。別にやらかしたわけではないんですけどね。考えてみたら怖いなーと思ったので。特に怖いのは「文字ツールを使っているが何も選択していない」とき。普通はペーストしたテキストフレーム等はペースト直後に選択された状態になりますが、このときだけ選択状態は変わらず、静かに画面中央あたりにテキストフレームが生まれます。


ダイアログ文の自信なさげな感じを見てわかるとおり、判定は確実じゃありません。自動生成されるテキストフレームが、いつも150pt×150ptのサイズであることを利用しているため、偶然同じサイズのテキストフレームをペーストしたときにも同じ警告が出てしまいます。まあウチはmm単位系でやってるからまず起きないし…てことで深入りしませんでした。


使い方は以下のコードを拡張子jsxで保存してStartup Scriptsフォルダに入れるだけ。「いいえ」を押したらアンドゥしてくれる機能つき
#targetengine "CopipeCheck"
function myHandler() {
    try{
    var sel0 = app.selection[0];
    if (!sel0) sel0=app.layoutWindows[0].activeLayer.textFrames[0]
    if (sel0.constructor.name != "TextFrame") return;
    app.scriptPreferences.measurementUnit = MeasurementUnits.POINTS;
    var vb = sel0.visibleBounds;
    if (Math.abs(vb[2] - vb[0] - 150) + Math.abs(vb[3] - vb[1] - 150) < 0.001) {
        if (!confirm("テキストがテキストフレームとしてペーストされたかも…\nいいですか?")) app.activeDocument.undo()
    }
    }catch(e){}
}

function addEL(obj, eventName, handler, name) {
    var el0 = obj.eventListeners.item(name);
    if (el0.isValid) el0.remove();
    obj.addEventListener(eventName, handler).name = name;
}
addEL(app.menuActions.item("ペースト"), "afterInvoke", myHandler, "CopipeCheck1");

5つの「く」

ハタハタのすばらしさをまとめました。