あいさつ
つかさです。
今回は一時ブックマーク。実は以前にもやったことがあるのだが(PPxでブックマーク)、すぐに使わなくなった。「ブックマークをするキー」と「ブックマークへ移動するキー」で2つのキーを潰す必要があるという理由と、一々メニューを開いてそこに移動、というのが緩慢すぎるという理由による。
これを解決する方法を思いついたので試してみる。
やりたいこと
何かの作業をするために、複数のフォルダを行き来することが必要な場合がある。
利用するフォルダが2つだけなら、2窓で左右それぞれに表示すれば十分であり、特に考えることはない。だが、これが3つ、4つとなったら対応できなくなる。そのたびに一々階層を戻って表示、というのも面倒だ。
おそらく、こういう時のためにタブというものがあり、それを使えと言われそうな気がするが、今回はパス。今までのやり方の延長でやれるなら、それで済ましてしまいたいのだ。
そこで、
- 特定のキーを押せば現在のフォルダをブックマーク
- 別のキーを押せば、ブックマークしたフォルダを順番に表示する
仕組みを作ってみる。
スクリプト
以下の3つのスクリプトをScriptフォルダに保存。
setbookmark.js
//!*script for (var i = 0; i < 9; i++) { if (PPx.Extract("%'bookmark" + i + "'") == PPx.Extract("*jumppath %1")){ PPx.SetPopLineMessage("既に登録されてます"); PPx.Quit(); } } for (var i = 0; i < 9; i++) { if (!PPx.Extract("%'bookmark" + i + "'")){ PPx.Execute("*set bookmark"+i+" = *jumppath %1"); PPx.SetPopLineMessage("登録しました"); break; } }
ブックマーク登録用のスクリプト。これを実行すると、bookmark0、bookmark1、bookmark2…というように、空のブックマークに現在のパスを順次登録していく。すでに登録されてたら登録しない。
rotateExecute2.js
//!*script // 引数がなければ終了 if (PPx.Arguments.Length < 2){ PPx.SetPopLineMessage("引数が正しくありません。"); PPx.Quit(-1); } var id = PPx.Arguments.Item(0); var command = PPx.Arguments.Item(1); // command0があるかどうかをチェック if (!PPx.Extract("%'"+command+"0'")){ PPx.SetPopLineMessage("コマンドが空です"); PPx.Quit(); } // 数値に1を足す if (!PPx.Extract("%'"+id+"'")){ PPx.Execute("*set "+id+" = 0"); }else { var i = parseInt(PPx.Extract("%'"+id+"'")) + 1; PPx.Execute("*set "+id+" = "+ i); } var i2 = PPx.Extract("%'"+id+"'"); // commandを実行 if (PPx.Extract("%'"+command+ i2 + "'")){ PPx.Execute(PPx.Extract("%'"+command+ i2 + "'")); }else{ PPx.Execute("*set "+id+" = 0"); PPx.Execute(PPx.Extract("%'"+command+"0'")); }
*RotateExecuteに似た何か。引数を2つ取る。引数が足りない場合は何もしない。
rotateExecute2.js,id,command
第一引数は現在何番目を実行したかを記憶する識別子。
これを実行すると、
command0 command1 command2…
というように、第二引数に数字を付け足したマクロを順次実行していく。最後のマクロを実行したら、またcommand0に戻るという仕組み。
これを利用することで、
bookmark0 bookmark1 bookmark2…
というように、先に登録したブックマークを順次実行することが可能になる。
resetbookmark. js
//!*script PPx.Execute("*set bookmark0 = "); PPx.Execute("*set bookmark1 = "); PPx.Execute("*set bookmark2 = "); PPx.Execute("*set bookmark3 = "); PPx.Execute("*set bookmark4 = "); PPx.Execute("*set bookmark5 = "); PPx.Execute("*set bookmark6 = "); PPx.Execute("*set bookmark7 = "); PPx.Execute("*set bookmark8 = "); PPx.Execute("*set bookmark9 = "); PPx.SetPopLineMessage("ブックマークをリセットしました");
登録したブックマークをリセットするスクリプト。
登録
以下を編集して取込。
-|K_bookmark = -|M_bookmark = M_bookmark = { ** comment ** 現在のディレクトリを登録 = *script %0\Script\setbookmark.js ブックマークをリセット = *script %0\Script\resetbookmark.js -- = &A:%*regexp("%'bookmark0'","s/^.*\s(.*)/$1/") = *execute ,%'bookmark0' &B:%*regexp("%'bookmark1'","s/^.*\s(.*)/$1/") = *execute ,%'bookmark1' &C:%*regexp("%'bookmark2'","s/^.*\s(.*)/$1/") = *execute ,%'bookmark2' &D:%*regexp("%'bookmark3'","s/^.*\s(.*)/$1/") = *execute ,%'bookmark3' &E:%*regexp("%'bookmark4'","s/^.*\s(.*)/$1/") = *execute ,%'bookmark4' &F:%*regexp("%'bookmark5'","s/^.*\s(.*)/$1/") = *execute ,%'bookmark5' &G:%*regexp("%'bookmark6'","s/^.*\s(.*)/$1/") = *execute ,%'bookmark6' &H:%*regexp("%'bookmark7'","s/^.*\s(.*)/$1/") = *execute ,%'bookmark7' &I:%*regexp("%'bookmark8'","s/^.*\s(.*)/$1/") = *execute ,%'bookmark8' &J:%*regexp("%'bookmark9'","s/^.*\s(.*)/$1/") = *execute ,%'bookmark9' } KC_main = { ; PPcメイン窓 ^S ,*setnextkey K_bookmark } K_bookmark = { ** comment ** S , *script %0\Script\setbookmark.js ^S , *script %0\Script\RotateExecute2.js,homu,bookmark R , *script %0\Script\resetbookmark.js ',' , %M_bookmark }
- C_s s ブックマークに登録
- C_s C_s ブックマークに移動
- C_s r ブックマークをリセット
- C_s "," ブックマークメニューを開く
となる。
PPxを終了してもリセットしたくないなら
*setのかわりに*aliasを使うと、PPxを終了しても、登録したブックマークがリセットされない(参考:PPxでブックマーク)。どっちがいいのかは難しいところ。
0 件のコメント:
コメントを投稿