Movatterモバイル変換


[0]ホーム

URL:


Practice makes Perfect !

ExtendedScript素人です。同じ境遇の方、一緒に脱素人を目指しましょう!

実験020_2025.10-1

InDesign】“ミニけん”少し安定?

前回はキーボードイベントで躓いていたミニ検索ウィンドウのミニけん。

p-makes-p.hatenablog.com

① 1度目のEnterでは“検索”を開始してくれるが、2度目のEnterで、ヒットしたテキスト(選択範囲)で改行してしまう
②「次へ」や「前へ」のキーボードショートカットが効かない

といった問題があったのですが、こじらせたクマーさんの次のスクリプトを参考にさせていただいたところ、安定したと思います。

note.com

このスクリプトめちゃくちゃ楽しく使わせていただいてます。

わたしがやりたかったのが、キーボードショートカットを使って「次へ」「前へ」と検索をかけていきたかったのですが、これがどうもできなかった。

そこで、こじらせたクマーさんのスクリプトのキーボードショートカットの部分を参考に(というかコピー)させていただきました。

以下、コピーさせていただいた部分

// キーボードショートカット     w.addEventListener("keydown",function(k){try{var isMac= $.os.indexOf("Mac")>=0;var cmdKey= isMac? k.metaKey: k.ctrlKey;if(k.keyName==="Enter"){// Cmd (Ctrl)+Shift+Enter → 前へif(cmdKey&& k.shiftKey){goPrev();                    k.preventDefault();}// Cmd (Ctrl)+Enter → 次へ(適用なし)                elseif(cmdKey){goNext();                    k.preventDefault();}// Enter → 適用 & 次へ                else{doSearch();                   k.preventDefault();}}}catch(e){}});


全体のソースはこんな感じ

#target indesign#targetengine"persistentSearch"(function(){if(app.documents.length===0){alert("ドキュメントを開いてください");return;}var doc= app.activeDocument;var hits=[];var currentIndex=-1;// --- ダイアログ ---var w=newWindow("palette","ミニけん");// 検索文字入力欄var findGroup= w.add("group");var findField= findGroup.add("edittext",undefined,"");    findField.characters=24;    findField.active=true;// ボタン群var buttonGroup= w.add("group");var prevBtn= buttonGroup.add("button",undefined,"前へ");var findBtn= buttonGroup.add("button",undefined,"検索");var nextBtn= buttonGroup.add("button",undefined,"次へ");// --- 選択とページ移動 ---functionselectAndShow(obj){if(!obj)return;        app.select(obj);try{var tf= obj.parentTextFrames[0];var pg= tf.parentPage;if(pg) app.layoutWindows[0].activePage= pg;}catch(e){}        findField.active=true;}// --- 検索 ---functiondoSearch(){var txt= findField.text;if(!txt)return;        app.findGrepPreferences= NothingEnum.nothing;        app.findChangeGrepOptions.includeLockedLayersForFind=false;        app.findChangeGrepOptions.includeHiddenLayers=false;        app.findChangeGrepOptions.includeMasterPages=false;        app.findChangeGrepOptions.includeFootnotes=false;        app.findGrepPreferences.findWhat= txt;        hits= doc.findGrep();        currentIndex=-1;if(hits.length>0){goNext();}else{alert("見つかりませんでした");}}// --- 次へ ---functiongoNext(){if(hits.length===0){alert("検索結果がありません");return;}if(currentIndex+1>= hits.length){alert("次は見つかりません");            currentIndex= hits.length-1;return;}        currentIndex++;selectAndShow(hits[currentIndex]);}// --- 前へ ---functiongoPrev(){if(hits.length===0){alert("検索結果がありません");return;}if(currentIndex-1<0){alert("前は見つかりません");            currentIndex=0;return;}        currentIndex--;selectAndShow(hits[currentIndex]);}// --- ボタンイベント ---    findBtn.onClick= doSearch;    nextBtn.onClick= goNext;    prevBtn.onClick= goPrev;// キーボードショートカット     w.addEventListener("keydown",function(k){try{var isMac= $.os.indexOf("Mac")>=0;var cmdKey= isMac? k.metaKey: k.ctrlKey;if(k.keyName==="Enter"){// Cmd (Ctrl)+Shift+Enter → 前へif(cmdKey&& k.shiftKey){goPrev();                    k.preventDefault();}// Cmd (Ctrl)+Enter → 次へ(適用なし)                elseif(cmdKey){goNext();                    k.preventDefault();}// Enter → 適用 & 次へ                else{doSearch();                   k.preventDefault();}}}catch(e){}});    w.frameLocation=[10,10];    w.show();})();

これでEnterで検索、Ctrl+Enterで次へ、Ctrl+Shift+Enterで前へ移動してくれるようになりました。
(ミニけんがアクティブになっていないとCtrl+Enterでクイックアクセスが開いてしまうw)

とりあえずやりたいことはできたので、自分の中ではここで一区切りですが、ミニけんで次々とワードを検索していくと、ある時点で全く反応しなくなることがあるので、まだまだ配布できるものではないと思いました。その場合はスクリプトを一旦終了して(パレットを閉じる)再度実行すると動いてくれます。

というか、やっぱり標準機能を使った方がいいかも知れません…orz

検索

引用をストックしました

引用するにはまずログインしてください

引用をストックできませんでした。再度お試しください

限定公開記事のため引用できません。

読者です読者をやめる読者になる読者になる

[8]ページ先頭

©2009-2025 Movatter.jp