2019年9月21日土曜日

サブ窓中心の運用②「戻る」履歴一覧

1.メイン窓でShift+Gを押して、「戻る」の履歴一覧をサブ窓で表示
2.サブ窓でShift+Enterを押し、メイン窓のパスを変更する



「戻る」の履歴は、それぞれのPPCごとに記録され、%*dirhistoryで取得できるもの。ちなみに全PPC共通のヒストリは%hnで取得できる。

KC_main    = {
\ENTER    ,*ifmatch CX,%n %: *execute ,%'ppcx_cmd' %: *stop
    %K"@\ENTER"
CLOSEEVENT ,*ifmatch CX,%n %: *alias ppcx_cmd = %%K"@\ENTER" %: *stop
\G ,*ifmatch !CX,%n %: *alias ppcx_cmd = *execute %n,%%%%j%%FCD %%: %%K"@Q" %: *ppc -r -bootid:x -single %*script(%0\Script\dirhistory2file.js9)
}

dirhistory2file.js9

//!*script

// %*dirhistory(n)をListfile形式でファイルに保存。そのファイルパスを返す
// %j %*script(%0\Script\dirhistory2file.js9,fuga.txt)
// *ppc -bootid:z -single %*script(%0\Script\dirhistory2file.js9)
// という具合に使う

// 第一引数 : 保存先のファイルパス(省略可能。その場合はテンポラリファイルに保存)

// テンポラリファイル名の作成
function getTempFile() {
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  var tDir = fso.GetSpecialFolder(2);
  var tFile = fso.GetTempName();
  return tDir + "\\" + tFile;
}

var arr1 = new Array();

var stream         = new ActiveXObject("ADODB.Stream");
    stream.type    = 2;
    stream.charset = 'UNICODE';

stream.open();
stream.WriteText( ";ListFile", 1);  // 第2引数が 0:改行なし, 1:改行あり
for (var i = 0; i < 10; i++) {
  if (PPx.Extract("%*dirhistory\("+i+"\)") != ""){
    arr1.push(PPx.Extract("%*dirhistory\("+i+"\)")); // 配列に登録
  } else {
    break;
  }
}

// 配列から重複を除く
var arr2 = arr1.filter(function (x, i, self) {
  return self.indexOf(x) === i;
});

arr2.forEach(function( value ) {
  stream.WriteText(value , 1);  // 第2引数が 0:改行なし, 1:改行あり
});


// 第ニ引数(保存先のファイルパス)があればそこに、なければテンポラリファイルに保存
var filepath;
if (PPx.Arguments.Length < 1){
  filepath = getTempFile();
} else {
  filepath = PPx.Arguments.Item(0);
}
stream.saveToFile(filepath, 2);    //1:新規作成 2:新規作成 or 上書き
stream.close();

PPx.Result = filepath;


0 件のコメント:

コメントを投稿