忍者ブログ

ぼんぷろぐ

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

[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");
PR

コメント

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

プロフィール

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

InDesignスクリプトについて

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

twitter

5つの「く」

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