2019年1月20日日曜日

MakeComment.jsの自動実行!



僕はPPxとXyzzyでメモ環境を作っている(Memo on the Electron)。今回は、メモのタイトル表示に使うMakeComment.jsを自動実行する話。

準備


以下をScriptフォルダに保存。

MakecommentA.js

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


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

// すべてのhowmファイルにコメントがついていれば終了
for (var i = 0; i < PPx.EntryAllCount; i++) {
  if (PPx.Entry(i).Name.match(/.howm$/i) && PPx.Entry(i).Comment.match(/^$/i))
    break;
  else if (i == PPx.EntryAllCount - 1)
    PPx.Quit();
}

for (var i = 0; i < PPx.EntryAllCount; i++) {
  var fullpath = fs.BuildPath(currentDir,PPx.Entry(i).Name);
  // ファイルあるいはフォルダが存在しない場合の処理
  if (!(fs.FolderExists(fullpath) || fs.FileExists(fullpath))) {
    continue;
  }
  // .あるいは..の処理
  else if (PPx.Entry(i).Name == "."){
    str = PPx.Entry(i).Name + "\t*\r\n";
    strLine =  strLine + str;
  } else if (PPx.Entry(i).Name == ".."){
    str = PPx.Entry(i).Name + "\t**\r\n";
    strLine =  strLine + str;
  }
  // サイズが0のファイルとディレクトリは読み込まない
  else if (PPx.Entry(i).Size == 0) {
    if (PPx.Entry(i).Comment != ""){
      str = PPx.Entry(i).Name + "\t" + PPx.Entry(i).Comment + "\r\n";
      strLine =  strLine + str;
    } else {
      str = PPx.Entry(i).Name + "\t" + PPx.Entry(i).Name + "\r\n";
      strLine =  strLine + str;
    }
  }
  // 拡張子がhowmのファイルを読み込む
  else if (PPx.Entry(i).Name.match(/.howm$/i)) {
    var entryName = PPx.Entry(i).Name;
    var objItem = currentDir + "\\" + entryName;
    // ファイルの内容を取得
    objInFile = fs.OpenTextFile(objItem, 1);
    // ファイル名+Tab+一行目の最初二文字~40字を切り取ったもの+改行をstrに代入
    var title = objInFile.ReadLine().slice( 2,40 );
    if (title == "") title = "-blank-"
    str = entryName + "\t" + title + "\r\n";
    strLine =  strLine + str;
    objInFile.Close();
  }
}

if (strLine == "\r\n"){
  PPx.Quit();
} else {
  strLine = strLine + '00_INDEX.txt\t *** COMMENT FILE ***';
}

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

// 00_INDEX.txtに書き込み
objOutFile = fs.OpenTextFile(strCreateFile, 2);
objOutFile.Write(strLine);
objOutFile.Close();

// F5で更新
PPx.Execute("%K\"@[F5]\"")


最初に、コメント無しのhowmファイルがあるかどうかをチェック。なければ終了するようにする。フォルダを読み込むたびに、不要にコメントファイルを作成すると鬱陶しいからだ。

フォルダ設定


このスクリプトを自動実行したいフォルダに行き、以下のコマンドを実行。

*diroption -thisbranch


ディレクトリ別の設定メニューが表示されるので、「実行」を選択。


出てきた一行編集ウィンドウに、

*script %0\Script\MakeCommentA.js

と入力する。これで、そのディレクトリ以下でこのスクリプトを自動実行するようになる。



スクリプトの最後にF5で更新しているが、「すべてのhowmファイルにコメントがついていれば終了」がスクリプト内にあるから無限ループにはならない…はず?

参考


MakeComment.jsの自動実行? - つかさのほえほえ日記

0 件のコメント:

コメントを投稿