Paper Plane xUI再挑戦その2−PPvと連動ビュー

まえおき

おはよw
つかさです。今日はPPxの連動ビューについて。
連動ビューというのは、それをオンにすると選択カーソル下にあるパスの中身を常にPPvというビューアで表示してくれるというものです。デフォルトでは下¥に割り当てられていると思います。これを使うと、カーソル移動だけで自動的にその中身を表示してくれるので、複数のテキストファイルや画像ファイルを閲覧するときに便利。
あふとかでもテキストファイルを閲覧するということはできるけれども、ファイルが並んでいる順番でしか閲覧することができない。ファイラのファイル名から関係しそうなのだけを閲覧するというのができないのです。というわけでPPxの連動ビューは素敵な機能と思われてた。

問題意識

けれど、PPvで連動ビューをする場合、いくつかの点で使い勝手が悪かった。
まず、PPvがPPc(PPxというのはツール集で、そのファイラは正確に言うとPPcと呼ぶみたいです。今まで適当に使ってきたけど、PPvについて話すので一応ここではPPcという名前で通します^^;)と独立のウィンドウであるということ。
このために、連動ビューをオフにしたとしてもPPv自体はウィンドウとして残ってしまう。かつ、オフにした直後はPPcの方がアクティブになっている状態でPPvにフォーカスが行っていない。それで、連動ビューをオフにしたあとは、いちいちAlt+TabでPPvをアクティブにしたあと、消して再びPPcに戻るという動作をしなければならなかった。ほっておいたらほっておいたで、後に邪魔になってくるしね。いちいち手間がかかってしまうのです。これだったら、連動ビューが使えなくても他のファイラなりビューアなりで表示するほうがまだましになる。

やりたいこと

だから、やりたいのは次の2つです。

  1. PPc側からPPv操作をできるようにする
  2. 連動ビューをオフにしたら、同時にPPvも消えるようにする

調べたところ、これは、PPXSCR.dllとPPXWIN.DLLを用いればできることが分かった。これをダウンロードした上で、スクリプトを書いたらできる。
以前は、スクリプトという時点で「ああ、もう僕むり><」みたいになってたけれどもうそんなひ弱ではないのだ、ふふふ。

モジュールの利用

  • PPXSCR.dll
  • PPXWIN.DLL

が必要になります。PPXSCR.dllがスクリプトでの拡張を可能にするもので、PPXWIN.DLLが窓の操作を可能にするもの。
どちらもPPxのホームページにあるのですが、ここではある理由により、PPXWIN.DLLの方はそれに機能をいくつか付け足したものを別のところからダウンロードすることにしましょう。

TORO's Library からPaper Plane xUI Script Module の項目にあるppxscr08.zipをダウンロード。

Paper Plane xUI まとめサイトPPx 逆引き辞典からPPXWIN.DLL機能追加版という項目にあるPPXWINB.ZIPをダウンロード。

それぞれ解凍し、PPXWIN.DLLとPPXSCR.dllの二つをPPxディレクトリに入れる。ついで、ScriptというフォルダをPPxの実行ファイルが入っているフォルダに作成。ここまでが準備です。ついで、スクリプトの作成です。

syncview.jsを作成。それを、Scriptフォルダの中に入れます。
その中身は、次の通り。

syncview.js

//!*script
var useppv = 'A'; // 使用PPv ID
if ( PPx.CodeType == 0 ){
var ppvname = 'ppv';
}else{
var ppvname = 'ppvw';
}
if ( PPx.SyncView == 0 ){
PPx.Execute('%Oi '+ppvname+' /r /bootid:'+useppv+' %FDC');
PPx.Execute('*fitwindowR %NV'+useppv+',%N');
PPx.SyncView = 1;
}else{
PPx.Execute('%KV'+useppv+'"@Q"');
PPx.SyncView = 0;
}

スクリプトの登録

ついで、それをどこか適当なキーに登録します。僕は、下¥に登録してます。デフォルトで連動ビューのトグルができるキーですね。

キー割り当てで、割当先キーを'\'として、コマンド実行欄に

*script %0\Script\syncview.js

をコピペ。画像を見た方がわかりやすいですかね。

そして、割当ボタンを押し、適応ボタンを押す。これでおkです。
では試しに使ってみましょうか^^
適当なテキストファイルの上で下¥を押してみましょう

適当に選択カーソルを動かした後、もう一回押してみましょう。できましたね^^

参考サイト

ここで想定しているのは、ウィンドウを一つだけ表示していて、そのウィンドウの左にPPvを表示させたい、という時です。
僕は、PPxを画面の右下側においておくことが多いので、このようにしていたら都合がいいのです。
ちなみに、僕が参考にしたスクリプトでは、反対窓に表示してあふっぽい動作にしていたり、画面の右にPPvをおいたりしてました。僕はそれを少し書き換えただけなんです^^;

ちなみに、僕が参考にしたスクリプトは、Paper Plane xUI まとめサイトの「連動ビューの on/off トグルをおこなう。」にあります。こちらは、反対窓にPPvを吸着させるやつです。

PPXWIN.DLLについて

PPXWIN.DLLというのは、オリジナルのものと機能を拡張したものとを併せて三つあるみたいです。

TORO's Library

色々書くとこ(仮)

Paper Plane xUI まとめサイトPPx 逆引き辞典

今回使った、Paper Plane xUI まとめサイトのPPXWIN.DLL機能追加版の説明によると、

TOROさんの公式PPXWIN.DLLに、*fitwindowRを追加した色々書くとこ(仮)さん
のPPXWIN.DLLに、*fitwindowBを追加したもの。

とのこと。
公式PPXWIN.DLLでは、指定したPPxの位置にPPxを合わせるということしかできなかったのが、色々書くとこ(仮)さんによってウィンドウを右に表示する機能が追加され、ついでウィンドウを下にする機能が追加された、ということですね。
コマンドそれぞれについてみてみると、

 *fitwindowで、指定したPPx位置に指定したPPxをあわせることができ、
 *fitwindowrで、ウィンドウの右にウィンドウを表示でき、
 *fitwindowBで、ウィンドウの下にウィンドウを表示できます。

今回使ったのは、*fitwindowrですね。
最初、僕ウィンドウの左にPPv表示したいんだけどなあでも右だけだとできないよなあとか馬鹿なことを考えていましたが、PPcの右にPPvを表示していたのを、PPvの右にPPcを表示するようにしたらいいだけなんですよね^^;
ただ、僕がここで書いたやり方の場合PPvの大きさや位置を基準にすることになるんだな・・・何かあって、PPvの大きさを変更したときとか挙動に変になってしまう。
また何か対策とか考えたら追記します。

一応、PPvを窓の右に出したいときのsyncview.jsものせときます。こっちだったら、今言った問題も起こらなさそう!?使いたいときは、以下をsyncview.jsという名前で保存して上でやったのと同じことをする。
10行目が少し違うだけです。


syncview.js−PPvを窓の右に出したいときの

//!*script
var useppv = 'A'; // 使用PPv ID
if ( PPx.CodeType == 0 ){
var ppvname = 'ppv';
}else{
var ppvname = 'ppvw';
}
if ( PPx.SyncView == 0 ){
PPx.Execute('%Oi '+ppvname+' /r /bootid:'+useppv+' %FDC');
PPx.Execute('*fitwindowR %N,%NV'+useppv);
PPx.SyncView = 1;
}else{
PPx.Execute('%KV'+useppv+'"@Q"');
PPx.SyncView = 0;
}

追記(2010/07/18)

Paper Plane xUI Window Module のバージョンアップ(R3→R4)によって、公式のPPXWIN.DLLでもウィンドウの上下左右への移動ができるようになりました。新しくこの記事にこられた方は、公式 のPPXWIN.DLLを利用することをお勧めします。現在だと、ppxwin04.zipの中に入ってます。
公式PPXWIN.DLLを使った場合のsyncview.jsも載せておきます。

PPXWIN.TXTより

*fitwindow base window id[,target window id[,type]]

指定したウィンドウの位置・大きさを base window id に合わせて
調整します。
target window id を指定しなかった場合は、実行元のウィンドウを
操作します。

type = 0 または指定無し : base window 上に重なる。大きさも同じに
type = 1 : base window の左側に移動、高さが同じに
type = 2 : base window の右側に移動、高さが同じに
type = 3 : base window の上側に移動、幅が同じに
type = 4 : base window の下側に移動、幅が同じに

例) *fitwindow %N~
実行元のウィンドウを PPc の反対窓に合わせます。

例) *fitwindow %N~,%NVA
PPV[A]を PPc の反対窓に合わせます。

例) *fitwindow %N~,%NVA,2
PPV[A]を PPc の反対窓の右側に移動します。

例) *fitwindow %N~,%N,1
実行元のウィンドウを PPc の反対窓の左側に移動します。

syncview.js
//!*script

//		type = 0 または指定無し : base window 上に重なる。
//			大きさも同じに
//		type = 1 : base window の左側に移動、高さが同じに
//		type = 2 : base window の右側に移動、高さが同じに
//		type = 3 : base window の上側に移動、幅が同じに
//		type = 4 : base window の下側に移動、幅が同じに

var useppv = 'A'; // 使用PPv ID
if ( PPx.CodeType == 0 ){
var ppvname = 'ppv';
}else{
var ppvname = 'ppvw';
}
if ( PPx.SyncView == 0 ){
PPx.Execute('%Oi '+ppvname+' /r /bootid:'+useppv+' %FDC');
PPx.Execute('*fitwindow %NC,%NV'+useppv+ ',2');
PPx.SyncView = 1;
}else{
PPx.Execute('%KV'+useppv+'"@Q"');
PPx.SyncView = 0;
}