説明

PPcは、リアルタイムにエントリリストをフィルタリングできますが、 これは他のファイラにはなかなかない機能だと思います。Migemoも使えて優秀です。
そんな有用なフィルタリング機能をより活用すべく、仮想エントリというしくみを作りました。

仮想エントリというのは、ファイル名に文字列を設定したリストファイルのエントリで、 エントリリストのフィルタリング対象として扱えます。が、ただ文字列をフィルタリングできても 使い道がないため、実体のパス(長いファイル名)をリストファイル内部データのコメントに設定し、 文字列とファイル名を関連付けています。
lfActions.js と連携して運用します。

lfActions.js は ppm-listfile に内包されている lf_execute.js の次版として作っていて、 リストファイル上のパスを渡したときに、リストファイルに応じたコマンドを実行できます。
lf_execute.js は実行するコマンドを分割したスクリプトに記述する方式でとてもわかり難いものでしたが、
lfActions.js ではS_ppm#actionsに登録でき、多少わかり易くなったと思います。

設定

lfActions.js の利用には二段階の設定が必要になります。

  1. lfAction.js 呼び出し用の設定
    以下は PPv にパスを渡す設定例です。
    一行目で、リストファイルのときだけスクリプトを呼んでいます。 リストファイル用のコマンドが登録されていればそれを実行し、呼び出し側のコマンドを終了します。 通常のリストファイルが渡されたときは何もせずに二行目に進みます。

    XC_main = {
    V , *if 4==%*js("PPx.result=PPx.DirectoryType;") %: *script %sgu'ppmlib'\lfActions.js,ppv
        viewer
    }
    

    なお、ppm-comment、ppm-grepではリストファイル上でのみ有効になるキー設定を登録できるので、 そちらに登録すればKC_mainにlfActions,jsを登録する必要はありません。

  2. リストファイルに応じた仮想エントリを処理するコマンドの登録
    コマンドは、S_ppm#actions に登録しますが subid には命名規則があります。
    ppm プラグインが生成したリストファイルのメタ情報には;ppm=xxxの行があり、 この値をプラグインエイリアスと呼びます。また、lfActions.jsの第一引数に指定する コマンド名をコマンドエイリアスを呼びます。この2つのエイリアスをアンダースコア でつないだものを subid とします。

    S_ppm#actions = {
    <プラグインエイリアス>_<コマンドエイリアス> = <実行されるコマンド>
    }
    


    例外としてプラグインエイリアスにallを指定すると他に選べるものがなかったときに参照されます。

    S_ppm#actions = {
    all_editor = editor ${path}
    all_ppv    = *ppv -r ${path}
    }
    

    <実行されるコマンド>内では変数が使えます。(後述)

エントリリストにコメントを展開 のコメントエントリを開く設定はこのようになっています。

説明 エイリアス
プラグインエイリアス comment
コマンドエイリアス ppv
S_ppm#actionsのsubid名 comment_ppv

スクリプトの説明

lfActions.js,1,2,3,4

  • 第1引数 <コマンドエイリアス>
    実行したいコマンド名を指定します。
  • 第2引数 "enclose"(default) | "double" | "escape"
    パスに空白が含まれるとき"で括る、""で括る、\ でエスケープするのいずれかを選択できます。
  • 第3引数 "0"以外の値のとき、重複したパスを実行対象に含めます。(ppm-grepで使用)
  • 第4引数 "utf16le"(default) | "utf8"| "sjis" リストファイルのエンコードを指定できます。
    リストファイルを utf16le 以外で生成しているときはこちらも指定してください。

複数のエントリがまとめてコマンドに渡されるとき、パスは空白区切りで渡されます。

実行されるコマンドで使用できる変数

S_ppm#actionsに登録されたコマンドは、そのまま実行されるわけではなく コマンド内の変数が値に変換されてから実行されます。実際には、 *execute ,%*regexp("%(リストファイル内部データ%)","%(/RegExp/<コマンド>/%)") 相当を実行します。


使える変数 説明
${path} 対象となるファイルパス
${base} メタ情報;Base=<path>| dirtype
${dirtype} メタ情報;Base=path| <dirtype>
${search} メタ情報;Search=<word>
${dup} 重複したパス 10
${att} 対象エントリの属性値
${hl} 対象エントリのハイライト
${option} 対象エントリの短いファイル名

${dup}は一度実行されたパスに1を返します
${option}にはオプション値が設定されます

通常使える変数は${path},${dup},${search}で、コマンド実行時にまとめてパスが渡されます。
リストファイル内にメタ情報;freq=everyの記述があるときは、すべての変数を利用でき
パスごとにコマンド実行されます。(ppm-grepで使用)

設定例
S_ppm#actions = {
comment_ppv = *ppv -r ${path} -k *find ${search}
grep_ppv = *if ${dup}==0 %: *ppv -r ${path} -k *find ${search} %: *jumpline L ${option}
grep_editor = *if ${dup}==0 %: editor /line=${option} "${path}"
all_editor = *if ${dup}==0 %: editor "${path}"
}