Software Message Board
記事リスト新着記事ワード検索過去ログ管理用

タイトル 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(',') + '"');


- 関連一覧ツリー (▼ をクリックするとツリー全体を一括表示します)