PPvの位置を一行編集で保存・再現できるようにする。コメントを付けることで、一行編集での検索をしやすくしている。
準備
以下をScriptフォルダに保存。
seq.js
//!*script | |
// id1:subid id2:subid id3:subid ... と順番に調べ、データ未登録の数値を返す | |
// 「PPvの位置を一行編集で保存・再現」用スクリプト | |
// 第一引数 : id | |
// 第二引数 : subid | |
// 第二引数は省略可。このとき、id1 id2 id3 ... と順番に調べ、データ未登録の数値を返す | |
// 例:*linemessage %*script(%0Script\seq.js,S_ppvpos,l) | |
// 引数が一つのみのとき | |
if (PPx.Arguments.Length == 1){ | |
var id = PPx.Arguments(0); | |
for (var i = 0; i < 100; i++) { | |
if (!PPx.Extract("%*getcust\(id"+i+"\)")){ | |
PPx.Result = i; | |
break; | |
} | |
} | |
// 引数が二つあるとき | |
} else if (PPx.Arguments.Length == 2){ | |
var id = PPx.Arguments(0); | |
var subid = PPx.Arguments(1); | |
for (var i = 0; i < 100; i++) { | |
if (!PPx.Extract("%*getcust\("+id+i+":"+subid+"\)")){ | |
PPx.Result = i; | |
break; | |
} | |
} | |
// それ以外の場合は終了 | |
} else { | |
PPx.SetPopLineMessage("引数が正しくありません。"); | |
PPx.Quit(); | |
} |
getwinpos.js
//!*script | |
// 位置情報を記録したS_xxxを一時ファイルに保存。ファイルパスを返す | |
// 「PPvの位置を一行編集で保存・再現」用スクリプト | |
// 第一引数 : S_xxx | |
// 位置情報はS_xxx+連番(S_xxx1 S_xxx2 S_xxx3 ...)に保存されている想定 | |
// 例:*ppv %*script(%0Script\getwinpos.js,S_ppvpos) | |
// 引数がなければ終了 | |
if (PPx.Arguments.Length < 1){ | |
PPx.SetPopLineMessage("引数が正しくありません。"); | |
PPx.Quit(); | |
} | |
var id = PPx.Arguments(0); | |
// 一時ファイルを作成 | |
var tempfile = PPx.Extract("%*temp(name,f)"); | |
var stream = new ActiveXObject("ADODB.Stream"); | |
stream.type = 2; | |
stream.charset = 'UNICODE'; | |
stream.open(); | |
for (var i = 0; true; i++) { | |
var l = PPx.Extract("%*getcust\("+id+i+":l\)"); | |
var t = PPx.Extract("%*getcust\("+id+i+":t\)"); | |
var w = PPx.Extract("%*getcust\("+id+i+":w\)"); | |
var h = PPx.Extract("%*getcust\("+id+i+":h\)"); | |
var comment = PPx.Extract("%*getcust\("+id+i+":comment\)"); | |
var str = l+","+t+","+w+","+h+" ;"+comment; | |
if (l){ | |
stream.WriteText(str,1); | |
} else { | |
break; | |
} | |
} | |
stream.saveToFile(tempfile,2); | |
stream.close(); | |
PPx.Result = tempfile; |
editwinpos.js
//!*script | |
// getwinpos.jsで生成したウィンドウの位置情報を編集 | |
// 「PPvの位置を一行編集で保存・再現」用スクリプト | |
// 第一引数 : S_xxx | |
// 第二引数 : getwinpos.jsで生成したファイルのパス | |
// 例:*script %0Script\editwinpos.js,S_ppvpos,%*script(%0Script\getwinpos.js,S_ppvpos) | |
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ | |
// 使用するエディタのパスを指定。空にしておくとPPeを使用 | |
// 例 : var editor = 'D:\\bin\\xyzzy\\xyzzy.exe'; | |
var editor = ''; | |
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ | |
// 引数がなければ終了 | |
if (PPx.Arguments.Length < 2){ | |
PPx.SetPopLineMessage("引数が正しくありません。"); | |
PPx.Quit(); | |
} | |
var id = PPx.Arguments(0); | |
var filepath = PPx.Arguments(1); | |
if(editor && editor != ''){ | |
// 指定エディタでファイルを編集 | |
var command = '%Obsq \"' + editor + '\" \"' + filepath + '\"'; | |
PPx.Execute(command); | |
}else{ | |
// PPeで編集 | |
PPx.Execute('*edit \"' + filepath + '\"'); | |
} | |
var stream = new ActiveXObject("ADODB.Stream"); | |
stream.type = 2; | |
stream.open(); | |
stream.loadFromFile(filepath); | |
// 編集したファイルをもとにユーザデータを上書き | |
var num=0; | |
while(!stream.EOS){ | |
var str = stream.readText('-2'); | |
PPx.Execute("*setcust "+id+num+":l="+str.split(",")[0]); | |
PPx.Execute("*setcust "+id+num+":t="+str.split(",")[1]); | |
PPx.Execute("*setcust "+id+num+":w="+str.split(",")[2]); | |
PPx.Execute("*setcust "+id+num+":h="+str.split(",")[3]); | |
PPx.Execute("*setcust "+id+num+":comment="+str.split(" ;")[1]); | |
num = ++num; | |
} | |
stream.close(); | |
// 不要なユーザデータの削除 | |
for (var i = num; i < 30; i++) { | |
if (PPx.Extract("%*getcust\("+id+i+":l\)")){ | |
PPx.Execute("*deletecust \""+id+i+"\""); | |
} else { | |
break; | |
} | |
} |
以下を編集して取込。
_Command = { ; ユーザコマンド・関数 savewindowpos = *setcust %*arg(1):l=%*windowrect(,l) *setcust %*arg(1):t=%*windowrect(,t) *setcust %*arg(1):w=%*windowrect(,w) *setcust %*arg(1):h=%*windowrect(,h) *setcust %*arg(1):comment=%*arg(2) }
やり方
位置の登録
PPvで以下のコマンドを実行する。
*savewindowpos S_ppvpos%*script(%0Script\seq.js,S_ppvpos,l),%"コメントを記入してください"%E
S_ppvpos0に位置と大きさとコメントが保存される。 次にこのコマンドを実行するとS_ppvpos1に、さらにその次はS_ppvpos2に ... と、位置情報はS_ppvpos+連番に保存される。
位置の再現
PPvで以下のコマンドを実行する。
*string o,name=%*input("" -title:"PPvの位置を変更" -mode:e -k:"*completelist /set /file:%%*script(%%0Script\getwinpos.js,S_ppvpos) -match:6 ") %: *windowposition %N,%so"name"
登録したユーザデータを補完候補ファイルにした一行編集が起動する。
登録した情報の編集
以下のコマンドを実行する。
*script %0Script\editwinpos.js,S_ppvpos,%*script(%0Script\getwinpos.js,S_ppvpos)
一行ごとに位置情報が記載されたテキストファイルがPPEで開く。編集、保存してからPPEを閉じると、編集内容がユーザデータに反映される。
2023-08-21追記
色々ミスがあったので全面的に修正。