2014年6月28日土曜日

一体化PPxを1画面で使う(必要なときだけ2画面)


1画面ファイラか2画面ファイラか



ファイル操作は、2つに分けることができる。2つのフォルダを使う操作と、使わない操作だ。

2つのフォルダを使う操作とは、

  • ファイル移動
  • コピー
  • 書庫の解凍

などですね。2画面ファイラは、この操作には都合がいい。直感的に、左のものを右へ。右のものを左へ移動する、というのはわかりやすい。

だが、それ以外の一つのフォルダ内で済む操作である、

  • リネーム
  • 編集
  • 閲覧
  • 実行

等においては、2画面ファイラであることはマイナスに働く。この作業の際には、ひとつの画面に意識をずっと集中させていたい。この時、反対窓は、無駄に面積を占めて現在の作業とは無関係なものを表示するだけの、できれば消えていて欲しいものになる。
また、1つのフォルダを使う操作に移るたびに、その作業を左右どちらの窓ですればいいのか、という判断を一々しなければならないという点でも2画面はマイナスに働く。

1画面ファイラはちょうどこの逆になる。 2つのフォルダを使う操作は直感的なものではなくなるが、一つのフォルダで済む操作では1画面がプラスに働く。

1画面と2画面、それぞれメリットとデメリットがある。どちらを選ぶかは趣味の範囲で、もっと言えばそこまで気にするようなことでも無い。僕は、1画面ファイラのデメリットは工夫でどうにかできるだろう、と考えてPPxを使い出した。そしてそれ以来、ずっと独立窓1画面で使用している。

  • 反対窓でマークしたものを現在窓に移動(コピー)するスクリプト
  • fenrirを利用したファイル移動(コピー)
  • nストロークキー

などが、その方面で行ってきた工夫。


1画面と2画面を併用できないか




最近、ふと気づいたことがある。

基本1画面で使って、必要なときだけ2画面にすれば両方のいいとこ取りができるのではないか

通常の2画面ファイラだと、これはできない(センターをずらせば一応できるのか?)。そこに引きずられて、1画面か2画面、どちらか選ばなければならないとずっと思いこんでたけれど、PPxなら一体化すれば余裕でできるじゃないか。それができれば、僕がこれまでしてきた工夫とか別に無くていいものになるじゃないか。なんで今までこれに気づかなかったんだ!って感じですね。HAHAHA


やりたいこと




というわけで、しばらくはこっち方面を追求してみようと思う。一体化窓で使い、基本1画面。このとき、

  • スクロールバーは横
  • 一覧表示(複数行表示)

となるように。



必要なときには、Tabを押して2画面にする。

このとき、

  • スクロールバーは縦
  • 詳細表示(窓幅一杯一列表示)

となるように。


そして、処理を終えたらQを押してまた1画面に戻す。

また、カーソル左右の挙動もそれぞれ微妙に変更させたい。


やり方



TabとQで、この切り替えを実現するようにする。


以下の2つのスクリプトをScriptフォルダに保存。

2winTab.js
//!*script 

var ppcid = PPx.Extract('%n'); // 現在窓のPPcID
var nextppcid = "C"+String.fromCharCode(ppcid.slice(1).charCodeAt(0) + 1); // 次の窓のPPcID

if (PPx.GetComboItemCount <= 1){ // 窓が一つ以下の場合
  if (PPx.Extract("%*getcust\(X_win:"+ppcid+"\)").slice(6,7) == 0){ // 現在窓のスクロールバーの位置を取得
    PPx.Execute("%M?layoutmenu,!p");
  }
  if (PPx.Extract("%*getcust\(X_win:"+nextppcid+"\)").slice(6,7) == 0){ // 次の窓のスクロールバーの位置を取得
    PPx.Execute("*setcust X_win:"+nextppcid+"=B000001000");
  }
  PPx.Execute("*ppc -k *execute "+ppcid+",*viewstyle 詳細1\(&D\)");
  PPx.Execute("*customize XC_mvLR=4,1,6,B0100,6,B100"); // カーソル移動方法の変更
} else {
  PPx.Execute("*pane focus ~");
}



2winQ.js

//!*script 

var ppcid = PPx.Extract('%*extract\(C#L\"%%n\"\)'); // 左窓のPPcID
var ppcid2 = PPx.Extract('%*extract\(C#R\"%%n\"\)'); // 右窓のPPcID


if (PPx.GetComboItemCount <= 1){ // 窓が一つ以下の場合
  PPx.Execute("%K\"@Q\"");
} else {
  PPx.Execute('*closeppx ' + ppcid2); // 右窓を閉じる
  PPx.Execute("*execute "+ppcid+",*viewstyle 一覧1\(&L\)"); // 左窓の表示形式を変更
  PPx.Execute("*customize XC_mvLR = 4,1,4,B0000,6,B001 ; [←][→] "); // カーソル移動方法の変更
  if (PPx.Extract("%*getcust\(X_win:"+ppcid+"\)").slice(6,7) == 1){ // 左窓のスクロールバーの位置を取得
    PPx.Execute("*execute "+ppcid+",%M?layoutmenu,!p");
  }
}


以下を編集して取込。
KC_main = { ; PPcメイン窓
Q ,*script %0\Script\2winQ.js
TAB ,*script %0\Script\2winTab.js
}

Qを押して窓を閉じた時には、必ずPPC[A]が残るようにしてます。

スクロールバーの向きは、%M?layoutmenu,!pとX_winで切り替えている。X_winは、XC_pageで設定した基本のスクロールバーの向きを基準にしてるので、そこを変更している場合は動作が変になるかもしれない(僕の設定だとXC_page=0)。


次やりたいこととか



一体化窓を複数起動して、ということをすれば、もっとやれることが増えるかもしれないと思ってる。
そこまで含めて一緒に考えるとややこしくなりそうなので、そのあたりはまた今度

0 件のコメント:

コメントを投稿