2021年3月8日月曜日

一行編集でステップイン・ステップアウト改

一行編集でランチャを前提にした記事です。

一行編集を用いたステップイン・ステップアウトについては前にもやったことがあるが、その時はパスを全て表示していた(参考:PPxをランチャとして使う⑦ステップイン・アウト)。

今回は、カレントフォルダをキャプションに。フォルダ名orファイル名を候補一覧に表示する形式にする。一行編集の入力欄にパスが入力されていた場合、カーソル左右でステップイン・ステップアウト。Enter時、フォルダならPPCで開き、EXEファイルなら実行する。

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

sublist.js

//!*script

// 受け取ったディレクトリのサブディレクトリ名やファイル名を、ファイルに出力
// 第一引数 : ディレクトリ
// 第二引数 : 出力するファイルパス

// 引数がなければ終了
if (PPx.Arguments.Length < 2){
  PPx.SetPopLineMessage("引数が正しくありません。");
  PPx.Quit(-1);
}

var pdir = PPx.Arguments(0);
var resultfile = PPx.Arguments(1);
var fso = PPx.CreateObject("Scripting.FileSystemObject");
var dir = fso.GetFolder(pdir);
var folders = new Enumerator(dir.SubFolders);
var files = new Enumerator(dir.Files);
var message = ""
for(; !folders.atEnd(); folders.moveNext()){ // サブフォルダを追加
  message += folders.item().Name + "\r\n";
}

for(; !files.atEnd(); files.moveNext()){ // ファイルを追加
  var fname = files.item().Name;
  if (fso.GetExtensionName(fname).toLowerCase()=="exe"){ // 拡張子がEXEのファイルのみ追加
    message += fname + "\r\n";
  }
}

fso.CreateTextFile(resultfile);
// 書き込み
objOutFile = fso.OpenTextFile(resultfile, 2);
objOutFile.Write(message);
objOutFile.Close();

PPxをランチャとして使う⑦ステップイン・アウトのsubdirlist.jsとだいたい同じ。出力するのがフルパスか、フォルダ名orファイル名かの違い。

以下を編集して取込。

K_edit = {
FIRSTEVENT , *setcust _User:pplcaption=
}

K_lied	= {
LEFT	,*ifmatch "o:e,a:d",%W %: *stepinout %*name(D,"%W") %: *stop
	*ifmatch "o:e,a:d","%*edittext" %: *stepinout %*name(D,"%*edittext") %: *stop
	%K"@LEFT"
RIGHT	,*ifmatch 0,0%*edittext %: *stop
	*ifmatch "o:e,a:d","%*edittext" %: *stepinout %*edittext %: *stop
	*ifmatch "/[a-zA-Z]:\\/",%W %: *stepinout %*name(DC,"%*edittext",%W) %: *stop
	%K"@RIGHT"
}

_Command = {
stepinout = *string o,dir=%*arg(1)
 *setcaption %so"dir"
 *setcust _User:pplcaption=%so"dir"
 *script %0\Script\sublist.js,"%so"dir"","%'temp'\list.txt"
 *replace ""
 *completelist -file:"%'temp'\list.txt"
ppl2 = *string o,exec_command=%*input("" -title:"PPlauncher" -mode:e -k:"*completelist /set /file:%%0l_cmd.txt")
 *ifmatch !0,0%*getcust(_User:pplcaption) %: *string o,exec_command=%*name(DC,%so"exec_command",%*getcust(_User:pplcaption))
 *ifmatch "o:e,a:d+",%so"exec_command" %: *focus C %: *execute C,*jumppath "%so"exec_command"" %: *stop
 *ifmatch "o:e,a:d-",%so"exec_command" %: *execute ,"%so"exec_command"" %: *stop
 *execute,%so"exec_command"
}

パスを含んだl_cmd.txtをPPxフォルダに用意し、*ppl2を実行すればいけるはず。

ユーザーコマンドは2つあるが、ppl2が本体。stepinoutはステップイン・ステップアウトを実現するコマンド。

ステップイン・ステップアウトをしたら、キャプションをかえると同時に、ユーザデータ"pplcaption"にそのパスを保存している。実行時にpplcaptionの中身を確認、中身があればそれを入力欄のパスとつなげて実行する仕組み。FIRSTEVENTはpplcaptionの初期化に使用。

追記 2021-03-14

PPx 1.77+5以降とKey Module R5を使うことで、キーバインドの一時変更ができるようになった。これを取り入れると次のようになる。

K_edit = {
FIRSTEVENT , *setcust _User:pplcaption=
}

K_stepio	= {
LEFT	,*ifmatch "o:e,a:d",%W %: *stepinout %*name(D,"%W") %: *stop
	*ifmatch "o:e,a:d","%*edittext" %: *stepinout %*name(D,"%*edittext") %: *stop
	%K"@LEFT"
RIGHT	,*ifmatch 0,0%*edittext %: *stop
	*ifmatch "o:e,a:d","%*edittext" %: *stepinout %*edittext %: *stop
	*ifmatch "/[a-zA-Z]:\\/",%W %: *stepinout %*name(DC,"%*edittext",%W) %: *stop
	%K"@RIGHT"
}

_Command = {
stepinout = *string o,dir=%*arg(1)
 *setcaption %so"dir"
 *setcust _User:pplcaption=%so"dir"
 *script %0\Script\sublist.js,"%so"dir"","%'temp'\list.txt"
 *replace ""
 *completelist -file:"%'temp'\list.txt"
ppl2 = *string o,exec_command=%*input("" -title:"PPlauncher" -mode:e -k:"*completelist /set /file:%%0l_cmd.txt %%: *mapkey use,K_stepio")
 *ifmatch !0,0%*getcust(_User:pplcaption) %: *string o,exec_command=%*name(DC,%so"exec_command",%*getcust(_User:pplcaption))
 *ifmatch "o:e,a:d+",%so"exec_command" %: *focus C %: *execute C,*jumppath "%so"exec_command"" %: *stop
 *ifmatch "o:e,a:d-",%so"exec_command" %: *execute ,"%so"exec_command"" %: *stop
 *execute,%so"exec_command"
}

0 件のコメント:

コメントを投稿