とりあえず、タブ一覧をテキストで変更できるスクリプトを
作ってみました。現在窓の現在タブグループ内に限り並び替えと
パスの変更が可能です。
別グループや別ペインへの移動、タブの追加や削除には対応していません。
EditTabList.js:
//!*script
"use strict";
PPx.WindowIDName = "1";
var tabs = PPx.Pane.Tab;
var items = [];
for ( ; !tabs.atEnd() ; tabs.moveNext() ){
items.push({"path":tabs.Extract("%1"), "id":tabs.IDName});
}
if ( 0 ) { // sort
items.sort(function(a,b){
if (a.path < b.path) return -1;
if (a.path > b.path) return 1;
return 0;
});
}
var text = "";
for ( i = 0; i < items.length ; i++ ){
// JSON にするには、items[i].path.replace(/\\/g,"\\\\") にする
text += "{\"path\":\"" + items[i].path + "\", \"id\":\"" + items[i].id + "\"},\r\n";
}
PPx.setIValue("tablist", text);
text = PPx.Extract("*maxlength 100000000 %: %OC%*input(-multi -select:t -title:\"行の入れ替えか path の編集が可能\" \"%si\"tablist\"\")");
if ( text != "" ){
var newitems = eval("[" + text.replace(/\\/g,"\\\\") + "{}]");
// PPx.Echo(JSON.stringify(newitems));
text = "";
for ( i = 0; i < (newitems.length - 1) ; i++ ){
for ( tabs.Reset(); !tabs.atEnd() ; tabs.moveNext() ){
if ( newitems[i].id == tabs.IDName ){
// PPx.Echo(newitems[i].id, i, tabs.Index);
if ( newitems[i].path != tabs.Extract("%1") ){
tabs.Execute("*jumppath \"" + newitems[i].path + "\"");
}
if ( i != tabs.Index ){
PPx.Execute("*pane tabshift " + newitems[i].id + "," + (i - tabs.Index));
}
break;
}
}
}
}