一行編集で、編集中のディレクトリパスの階層を、上がったり下がったりできるようにする。fenrirの挙動を参考にした。
準備
以下をScriptフォルダに保存する。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//!*script
// 指定ディレクトリ以下のディレクトリ/ファイルを列挙した一時ファイルを作成、パスを返す
//
// 第一引数 : ディレクトリ
//
// 一時ファイルの構成
// 一行目:受け取ったディレクトリパス
// 二行目以下:指定ディレクトリ以下のディレクトリ名+ファイル名
// 引数がなければ終了
if (PPx.Arguments.Length < 1){
PPx.SetPopLineMessage("引数が正しくありません。");
PPx.Quit(-1);
}
var pdir = PPx.Arguments(0);
var tempfile = PPx.Extract("%*temp(name,f)");
var fso = PPx.CreateObject("Scripting.FileSystemObject");
var dir = fso.GetFolder(pdir);
var strLine = pdir + "\r\n";
var stream = PPx.CreateObject("ADODB.Stream");
stream.type = 2; // -1:Binary, 2:Text
stream.charset = 'UTF-8';
stream.lineseparator = 10; // ' -1 CrLf , 10 Lf , 13 Cr
// ディレクトリを取得
var enmFolders = PPx.Enumerator(dir.SubFolders);
for(; !enmFolders.atEnd(); enmFolders.moveNext()){
strLine += enmFolders.item().Name + "\\\r\n";
}
// ファイルを取得
// var enmFile = PPx.Enumerator(dir.Files)
// for (; !enmFile.atEnd(); enmFile.moveNext()){
// strLine += enmFile.item().Name + "\r\n";
// }
// 書き込み
writeFile(tempfile,strLine,"UTF-8");
// 書き込み用関数
function writeFile(fname, text, charset) {
if (charset == undefined) {
charset = "_autodetect_all";
}
var adTypeBinary = 1, adTypeText = 2;
var adSaveCreateNotExist = 1, adSaveCreateOverWrite = 2;
var adWriteLine = 1;
var s = PPx.CreateObject("ADODB.Stream");
s.Type = adTypeText;
s.charset = charset;
s.Open();
s.WriteText(text, adWriteLine);
s.SaveToFile(fname, adSaveCreateOverWrite);
s.Close();
}
PPx.Result = tempfile;
以下を編集して取込。
-| K_listmode =
K_listmode = {
ENTER ,* ifmatch - 1 ,%* sendmessage (% N - L , 392 , 0 , 0 ) %: % K "@DOWN @ENTER" %: * stop
% K "@ENTER"
LEFT ,* dirmode %* name ( D ,%* getcust ( _User : dirpath ))
RIGHT ,* ifmatch - 1 ,%* sendmessage (% N - L , 392 , 0 , 0 ) %: % K "@DOWN"
* dirmode %* name ( CD , "%*edittext" ,%* getcust ( _User : dirpath ))
}
_Command = {
dirmode = * setcust _User : dirpath =%* arg ( 1 )
* completelist - file : "%*script(%0Script\getsubdir.js,%*arg(1))" - history : e
* replace ""
jump2listpath = * setcust _User : dirpath =
* string o , name =%* input ( "" - title : "jump2pathlist" - mode : e - k : "*completelist -file:%%*arg(1) -match:6 %%: *mapkey use,K_listmode" )
* ifmatch "o:e,a:d" , "%so" name "" %: * jumppath "%so" name "" %: * stop
* ifmatch ! 0 , 0 %* getcust ( _User : dirpath ) %: * jumppath "%*getcust(_User:dirpath)\%so" name ""
}
やり方
ディレクトリパスを羅列した、以下のようなファイルを用意する。手動で作ってもいいし、zoxideやfenrirscanを利用して作ってもいい。
D : \b in
D : \Data
D : \work
C : \Program Files \7 - Zip
C : \Program Files \Ablaze Floorp
C : \Program Files \AMD
C : \Program Files \BraveSoftware
C : \Program Files \Calibre2
C : \Program Files \Common Files
C : \Program Files \CrystalDiskInfo
C : \Program Files \E BWin4 ( x64 )
C : \Program Files \Epic Games
C : \Program Files \Git
C : \Program Files \Internet Explorer
作成したファイルのパスを引数にして、*jump2listpathを実行する。
* jump2listpath % 0data \path
すると、このファイルを補完候補リストとした一行編集が起動する。
キーバインドは以下の通り。
[RIGHT] サブディレクトリ表示
[LEFT] 階層を一つ上へ
[ENTER] パスをアクティブなPPcで開く
参考