[リストへもどる]
一括表示

タイトルPPcのタブをエディタで整理したいのですが
記事No4754
投稿日: 2025/03/02(Sun) 12:46
投稿者もも
お久しぶりです
いましがたPPx1.77から一気に2.01へVerUPして来ました。
知らない間にVer2になってて変更内容に戦々恐々としてます…
今回お願いがありまして、
元々は大量のタブを整理する場所が見つからなかったのですが、
VerUPで[ヒストリ]の[PPcディレクトリ]が実際のタブ一覧順と同じになってて、
どこかのバージョンでここの表記が変わったのだろうと想像しています。

ただ、タブ一覧はカスタマイズメニューからは削除のみで、テキストも出力のみですので
できればカスタマイズの取込のように、テキストエディタでソート・取捨選択・Path修正・削除
などをしてから書き戻せるようになって欲しいです。

*selectppxでもスクロールしないと入りきらない量になると重複群があっても安易に消せないため、
テキストエディタで一括整理したいのです。
---
以前に、画像をPPVで表示するとエラー音が鳴ると言っていたのですがVer2に上げたら
鳴らなくなりました。どこかで対処していただけたようでありがとうございました。
---
VerUPしたら
ファイルの一覧画面で表示明細の右端から5文字分ほど、上下に囲うような罫線が
マウスに追従して描画されます。これの消し方(設定場所)ってどうすれば?
---
お手数をかけますが、ご検討よろしくお願いします。


タイトルRe: PPcのタブをエディタで整理したいのですが
記事No4755
投稿日: 2025/03/04(Tue) 23:42
投稿者TORO
> VerUPで[ヒストリ]の[PPcディレクトリ]が実際のタブ一覧順と同じに
これは終了時にタブの一覧順に各タブを終わらせているためですので、
途中で割り込んだ終了があったりするとずれるかもしれません。

また、ヒストリの編集は、カーソル位置やフォルダサイズキャッシュ
など、パス以外の情報がヒストリに含まれているので、情報不足に
よる誤動作防止のために削除のみにしています。

タブの並びは、一体化窓 CBA の場合、_Path:CBA に保存されています。
ただ、この値を見てもらうと分かりますが、並び順はIDで記憶して
います。

値の編集は可能ですがIDに対応するパスは_Path内を参照する
必要があり、かなり手動編集がやり難いのではないかと思います。

更に、ペインの区切り、タブグループ等も含まれているので、単純な
テキスト編集手段を用意することは今のところ思いつきません。


上下に囲うような罫線は、「エントリ右端クリックでプレビュー表示」
(X_stip)ですね。


タイトルRe^2: PPcのタブをエディタで整理したいのですが
記事No4756
投稿日: 2025/03/08(Sat) 21:52
投稿者TORO
とりあえず、タブ一覧をテキストで変更できるスクリプトを
作ってみました。現在窓の現在タブグループ内に限り並び替えと
パスの変更が可能です。
別グループや別ペインへの移動、タブの追加や削除には対応していません。

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;
				}
			}
		}
	}


タイトルRe: PPcのタブをエディタで整理したいのですが
記事No4757
投稿日: 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(',') + '"');