| タイトル | : Re: PPcのタブをエディタで整理したいのですが |
| 投稿日 | : 2025/03/09(Sun) 09:51 |
| 投稿者 | : hokorobi |
やりたいことと違うかもしれませんが、重複タブを閉じるだけだったらこんなスクリプトを使ってます。
ご参考まで。
//!*script
var tabs = PPx.Pane.Tab;
var closeIDs = [];
var closeCandidateIDs = [];
/*
closeCandidateIDs = {path: id, ...}
id は、閉じる可能性のあるタブの id。
表示中のタブは閉じないので、path の登録時に id を空文字列とする。
path が重複した場合、id を閉じる対象とする。
id が空文字(表示中のタブ)の場合、closeCandidateIDs[path] を閉じる対象とする。
この際、closeCandidateIDs[path] を空文字列に入れ替える。
*/
// IDName を CA-CZ, CZxx の形式へ
PPx.WindowIDName = 1
for (var i = 0; i < tabs.Count; i++) {
var tab = tabs.Item(i);
var id = tab.IDName;
var path = PPx.Extract('%D' + id).toUpperCase();
//PPx.Echo(i + ": " + id " ": " + path);
// 表示中のタブ、または、ロック中のタブでないなら閉じるタブの候補へ
var closeCandidateID = (tab.Type != -2 || tab.Lock == 1) ? '' : id;
// パスのリストに追加
if (closeCandidateIDs[path] == undefined) {
closeCandidateIDs[path] = closeCandidateID;
continue;
}
// パスが重複しているので、閉じないタブでないなら閉じるタブとして登録
if (closeCandidateID != '') {
closeIDs.push(closeCandidateID);
continue;
}
// パスの重複はあったが閉じないタブかつ、既存の閉じる候補のタブもないので何もしない
if (closeCandidateIDs[path] == '') {
continue;
}
// 既存の閉じる候補のタブを閉じるタブとして登録
closeIDs.push(closeCandidateIDs[path]);
// パスに紐づく閉じる候補のタブを空にする
closeCandidateIDs[path] = '';
}
if (closeIDs.length > 0) PPx.Execute('*closeppx "' + closeIDs.join(',') + '"');