PPvの位置を一行編集で保存・再現できるようにする。コメントを付けることで、一行編集での検索をしやすくしている。
準備
以下をScriptフォルダに保存。
seq.js
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 | |
// 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
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 | |
// 位置情報を記録した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
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 | |
// 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追記
色々ミスがあったので全面的に修正。
0 件のコメント:
コメントを投稿