2021年12月21日火曜日

指定ハイライトを順次マーク

 PPxでは指定ハイライトが1~7まで用意されている。

カレントディレクトリに指定ハイライトがある場合、それを順次マークできるようにする。


以下のスクリプトを保存。これは、引数に1~7の数値を取り、その数値以上かつ最も近い数値の指定ハイライトをマークするスクリプト。また、マークした指定ハイライトの数値+1を戻り値として返す。

highlightmark.js

//!*script
// 第一引数 : 1~7の数値
// 戻り値   : マークした指定ハイライトの数値+1(数値が7のときは1)
// 
// 第一引数の数値以上かつ最も近い数値の指定ハイライトをマークする

if (PPx.Arguments.Length < 1){
  PPx.SetPopLineMessage("引数が正しくありません。");
  PPx.Quit();
}

var arg = parseInt(PPx.Arguments.Item(0));
var hl_1st_num = 0;
var hl_last_num = 0;
if (arg > 7 || arg <1 ) PPx.Quit();

// 指定ハイライトnの値を取得
// 最小値をhl_1st_numへ、引数の数値以上かつ最も近い値をhl_last_numへ
// hl_last_numが存在する場合、エントリマークを実行
for (var i = 1; i < 8; i++) {
  for (var j = 0; j < PPx.EntryAllCount; j++) {
    if(PPx.Entry(j).Highlight == i){
      if (!hl_1st_num) {
        hl_1st_num = i;
      }
      if (arg > i) continue;
      hl_last_num = i;
      PPx.Entry(j).Mark = 1;
    }
  }
  if (hl_last_num) break;
}

// hl_last_numが存在しない場合のエントリーマーク実行
if (hl_1st_num && !hl_last_num) {
  for (var i = 0; i < PPx.EntryAllCount; i++) {
    if(PPx.Entry(i).Highlight == hl_1st_num){
      PPx.Entry(i).Mark = 1;
    }
  }
}

// 返り値の処理
if (hl_last_num == 7) {
  PPx.Result = 1;
} else if (!hl_1st_num && !hl_last_num) {
  PPx.Result = 1;
} else if (hl_last_num) {
  PPx.Result = hl_last_num+1;
} else if (hl_1st_num) {
  PPx.Result = hl_1st_num+1;
}


以下のコマンドを適当なキーに登録する。

*ifmatch 0,0%si"hl" %: *string i,hl = 1
*unmarkentry
*string i,hl=%*script(%0\Script\highlightmark.js,%si"hl")


参考 つかさのほえほえ日記:ハイライトモード

0 件のコメント:

コメントを投稿