Help us understand the problem. What is going on with this article?

#PPx 開いているタブをListfileで表示してインクリメンタルサーチ

More than 5 years have passed since last update.

Paper Plane xUI において開いているタブをListfileで表示してインクリメンタルサーチ

たくさんタブを開いていると、タブの選択もインクリメンタルサーチを使いたくなるのでListFileを使ってなんとかしてみた。

#PPx fenrir を使ってインクリメンタルサーチでタブを選択 - hokorobiの日記 を使っていたけれど fenrir の起動が遅くて嫌になった。

こんなスクリプトを *script で実行。

//!*script
// 開いているタブをListfileで表示してインクリメンタルサーチ
// fenrir を使っていたけど、起動が遅いので ListFile を使ってみる。
// PPx 1.41 x64 + Script Module R14

var tabs = PPx.Pane.Tab;
if (tabs.Count < 3) PPx.Quit();  // 非表示のタブがなければ何もしない


// 重複を除いた非表示のパスを取得。

// path をkeyとする連想配列作成。0 は表示されているパス、1 は非表示のパス。
var paths = {};
var tab = '';
var path = '';
for (var i = 0; i < tabs.Count; i++) {
    tab = tabs.Item(i);
    path = tab.Extract('%D');
    if (paths[path] != undefined && paths[path] == 0) continue;
    tab.Type == -2 ? paths[path] = 1 : paths[path] = 0;
}

// 非表示のパスがなければ何もしない
// Object.keys(paths).length は使えなかった。
var pathscnt = 0;
for (var path in paths) pathscnt++;
if (pathscnt < 3) PPx.Quit();

// ListFile 作成
fso = new ActiveXObject('Scripting.FileSystemObject');
var tmpfile = fso.BuildPath(fso.GetSpecialFolder(2), fso.GetTempName());
var f = fso.OpenTextFile(tmpfile, 2, true);
for (var path in paths) {
    if (paths[path] == 1) f.Write(path + '\n');
}
f.Close();

// リストファイルを表示してインクリメンタルサーチを実行

// こいつだと駄目だった。
// PPx.Execute('*ppc -k *jumppath ' + tmpfile + '::listfile /noasync /nofixpath %%: %%K"/J"'); //tmpfileの親ディレクトリが表示される。インクリメンタルサーチにはなる
// PPx.Execute('*ppc -k *jumppath ' + tmpfile + '::listfile /noasync /nofixpath'); //この形ならlistfileには入れる

// TODO: タブを選択したいので、新しく開いてしまうタブを消したい。無理かな
// PPx を -single で起動して、元のPPxのタブを変更した後に -single を閉じるとか考えたけど無理そう。
// -choose: で任意のコマンドを実行して終了ということができれば可能性はあるか。
// TODO: Listfileが最後のディレクトリ名だけ表示される。フルパスにしたい。
// XC_pmsk で指定できるが別のListFileは表示方法を変えたい。
// -k 以降が、なぜこうすると動くのかよくわからん……
// これだと %%K"/" は設定によって変えないといけないと思う。
PPx.Execute('*ppc ' + tmpfile + '::listfile -k %%K"/"');

こんな感じでインクリメンタルサーチが始まった状態になる。

DIB BITMAP.png

hokorobi
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away