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)。


次やりたいこととか



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

2014年6月19日木曜日

フォルダにコメントを付ける


挨拶


MoEで新しくフォルダを作る際、考えるのが面倒なので、最近はフォルダ名を日時から自動でつけている(参考:仮のディレクトリ名を日時から自動で決める)。

だが、識別のために、後々フォルダ名を付け直したくなる場合がある。普通にリネームしてももちろんいいのだが、他のフォルダと名前がかぶったりというのを一々気にしたくないので、コメントで処理できるようにする。

やり方


以下を編集して取込

KC_main = { ; PPcメイン窓
^R ,*comment "%ee%"コメントの編集"%{%*comment%|%}"
}

XC_cwrt = 2 ; コメントファイル作成は 0:手動 1:確認有 2:自動

これで、Ctrl+Rでコメントを付けることができる。もちろんフォルダ以外でも可能。
また、コメントを自動保存するように設定している。


MakeComment.jsの修正



今までのMakeComment.jsだと、フォルダにつけたコメントが消えてしまうので、そこだけ対処しておく。


MakeComment.js

//!*script
//カレントディレクトリに一行目とファイルパスを対応させたコメントファイル(00_INDEX.txt)を作成

var strLine = "\n";
var currentDir = PPx.Extract('%1');
var objFileSys = PPx.CreateObject("Scripting.FileSystemObject");

for (var i = 0; i < PPx.EntryAllCount; i++) {
  // サイズが0のファイルとディレクトリは読み込まない
  if (PPx.Entry(i).Size == 0) {
    if (PPx.Entry(i).Comment != ""){
      str = PPx.Entry(i).Name + "\t" + PPx.Entry(i).Comment + "\n";
      strLine =  strLine + str;
    }
  }
  // 拡張子がtxtとhowmのファイルを読み込む
  else if (PPx.Entry(i).Name.match(/.howm$/i)) {
    var entryName = PPx.Entry(i).Name;
    var objItem = currentDir + "\\" + entryName;
    // ファイルの内容を取得
    objInFile = objFileSys.OpenTextFile(objItem, 1);
    // ファイル名+Tab+一行目の最初二文字~100字を切り取ったもの+改行をstrに代入
    str = entryName + "\t" + objInFile.ReadLine().slice( 2,100 ) + "\n";
    strLine =  strLine + str;
    objInFile.Close();
  }
}

// カレントディレクトリに00_INDEX.txtを作成
strCreateFile = objFileSys.BuildPath(currentDir,"00_INDEX.txt");
objFileSys.CreateTextFile(strCreateFile);

// 00_INDEX.txtに書き込み
objOutFile = objFileSys.OpenTextFile(strCreateFile, 2);
objOutFile.Write(strLine);
objOutFile.Close();
// F5で更新
PPx.Execute("%K\"@[F5]\"")

2014年6月18日水曜日

CatMemoNoteでログ

挨拶


ソフトウェアをいじっているときの思いつきメモ等に、最近はCatMemoNoteを利用している。

  • 頭に浮かんだことを書き出し続けることで整理する
  • ネット上で調べて出てきた関係ありそうなのをとりあえずコピペ

という用途。

情報をただただ吸収するだとか、ひたすら空で考えるだとかよりは、あとで利用するかどうかに関係なく、無意味でも何かのアウトプットをしながらというのが疲れなくて済むのかもしれない。授業中教科書に落書きするみたいなやつですね。

準備


必要になるのは

  • 日付
  • メモ同士の区切り

の2つ。日付はCtrl+Dで入力できるので、切り取り線だけを適当なキーボードショートカットに登録した。
メモ一覧とタブ一覧とを消した状態で使用。メモを切り替えたいときはCtrl+カーソルキーで。



一段落したあと、メモとして残しておきたいものだけhowm形式で保存し直す、というようにしている。

思ったこととか


日誌的なものだとか、過去にやったことある気がするカスタマイズを見返したいとかであれば、検索が容易である分こっちのが適しているのかもしれない。

2014年6月7日土曜日

一時的にキーにコマンドを登録


あいさつ


スクリプトを作っている時や、新しいコマンドを試している時に、一時的に特定のコマンドをキーに登録したい場合がある。

通常は、HやXを押してコマンドを打ち込み、実行というのを一々繰り返したり、カスタマイザで通常は使用しないキーにコマンドを登録したり、ということをするのだが、この過程を省略したい。そこで、

  • 一時的にコマンドを記憶
  • 特定のキーでそれを実行

ができるようにする。

例によって2ストロークキーを利用(参考:nストロークキー入力でフォルダジャンプ)。

やり方


以下を編集して取込

-|K_launcher =

KC_main = { ; PPcメイン窓
^Z ,*setnextkey K_launcher
}

K_launcher = { ** comment **
Z ,*alias temp_cmd = %"一時コマンド"%{%'temp_cmd'%}
^Z ,*execute ,%'temp_cmd'
}


一時的にコマンドを記憶させたい場合はC-z z(Ctrl+Zを押したあとZを押す)として、記憶させたいコマンドを打ち込む。



実行したいときは、C-z C-z(Ctrl+Zを二回押し)。