2014年11月20日木曜日

PPvメインの連動ビュー(ブックマークをローテート)


あいさつ


ブックマークした画像ファイルやテキストファイルを、専用のPPvで開くようにします。

PPv[A]上でC_s C_s。PPv[Z]がフォーカス移動無しで起動、ブックマークしたファイルを開く



C_s C_sを押すたびに、PPv[Z]にブックマークファイルが表示される



という仕組みです。

PPcとPPvの対応関係についても考える必要があるので、それを含めて調整します。PPvをPPcと連動(ID一対一対応をやめる)から色々と変更してます。

スクリプト


必要なのは

  • setalias.js
  • resetalias.js
  • RotateExecute3.js
  • togglemark.js

の4つ。

setalias.js

//!*script
// 第一引数 : エイリアス
// 第二引数 : マクロ

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

var cmd = PPx.Arguments.Item(0);
var macro = PPx.Arguments.Item(1);

// 既に登録されていたら登録しない
for (var i = 0; i < 30; i++) {
  if (PPx.Extract("%'"+cmd + i + "'") == PPx.Extract(macro)){
    PPx.SetPopLineMessage("既に登録されてます");
    PPx.Quit();
  }
}

// エイリアスに登録
for (var i = 0; i < 30; i++) {
  if (!PPx.Extract("%'"+cmd + i + "'")){
    PPx.Execute("*alias "+cmd+i+" = "+macro);
    PPx.SetPopLineMessage(cmd+i+"に登録しました");
    break;
  }
}

*script %0\Script\setalias.js,clip,%%FCDというように引数を2つ取る。第一引数がエイリアスで第二引数がマクロ。Clip0、Clip1、Clip2…と順番に、マクロを展開したものを登録する。

resetalias.js

//!*script
// 第一引数 : エイリアス

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

var cmd = PPx.Arguments.Item(0);

// cmd0からcmd30までをリセット
for (var i = 0; i < 30; i++) {
  PPx.Execute("*alias "+cmd+i+" = ");
}

PPx.SetPopLineMessage(cmd +"をリセットしました");

*script %0\Script\resetalias.js,clipというように引数を一つ取る。引数は初期化したいエイリアス。引数をclipにすると、Clip0~Clip30までを初期化する。

RotateExecute3.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);
}

// 数値に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.Result = PPx.Extract("%'"+command+ i2 + "'");
}else{
  PPx.Execute("*set "+id+" = 0");
  PPx.Result = PPx.Extract("%'"+command+"0'");
}

%*script(rotateExecute3.js,id,command)

と引数を2つ付ける。第一引数は数値をカウントするための識別子で、第二引数はエイリアス。実行するたびに、

command0 command1 command2…

と、第二引数に数字を付け足したエイリアスを順次戻り値として返す。最後のエイリアスを実行したら、またcommand0に戻るという仕組み。


togglemark.js

//!*script

PPx.Entry.Mark = -1;

Space時のマークトグルをどう再現したらいいかわからないので新たに作った。多分もっと良いやり方がある。

設定


以下を編集して取込。

-|K_clip =

K_clip = { ** comment **
S , *script %0\Script\setalias.js,clip,%%FCD
^S , %Oa %0\PPVW.EXE -bootid:z -r %*script("%0\Script\rotateExecute3.js","hoge","clip")
R , *script %0\Script\resetalias.js,clip
}

KV_main = { ; PPvメイン窓
LEFT ,*execute C,*cursor 6,-1,4,B0000,0,B0000 %: *execute C,*ppv -bootid:A -r %%*name(CD,"%%R","%%1")
RIGHT ,*execute C,*cursor 6, 1,4,B0000,0,B0000 %: *execute C,*ppv -bootid:A -r %%*name(CD,"%%R","%%1")
UP ,*execute C,*cursor 2,-1,4,B0000,5,B0000 %: *execute C,*ppv -bootid:A -r %%*name(CD,"%%R","%%1")
DOWN ,*execute C,*cursor 2, 1,4,B0000,5,B0000 %: *execute C,*ppv -bootid:A -r %%*name(CD,"%%R","%%1")
SPACE ,*execute C,*script %0\Script\togglemark.js %: *execute C,*cursor 2, 1,4,B0000,5,B0000 %: *execute C,*ppv -bootid:A -r %%*name(CD,"%%R","%%1")
\SPACE ,*execute C,*script %0\Script\togglemark.js %: *execute C,*cursor 2,-1,4,B0000,5,B0000 %: *execute C,*ppv -bootid:A -r %%*name(CD,"%%R","%%1")
Q ,*closeppx VZ
ENTER ,*closeppx V*
^S ,*setnextkey K_clip
}

E_cr = { ; [Enter]用判別
:JPEG ,
:BMP ,
:XJS ,
:XVBS ,
PNG ,*launch %0\PPVW.EXE -bootid:A -r %*name(CD,"%R","%1")
JPG ,*launch %0\PPVW.EXE -bootid:A -r %*name(CD,"%R","%1")
JPEG ,*launch %0\PPVW.EXE -bootid:A -r %*name(CD,"%R","%1")
BMP ,*launch %0\PPVW.EXE -bootid:A -r %*name(CD,"%R","%1")
GIF ,*launch %0\PPVW.EXE -bootid:A -r %*name(CD,"%R","%1")
TXT ,*launch %0\PPVW.EXE -bootid:A -r %*name(CD,"%R","%1")
CPP ,*launch %0\PPVW.EXE -bootid:A -r %*name(CD,"%R","%1")
H ,*launch %0\PPVW.EXE -bootid:A -r %*name(CD,"%R","%1")
C ,*launch %0\PPVW.EXE -bootid:A -r %*name(CD,"%R","%1")
L ,*launch %0\PPVW.EXE -bootid:A -r %*name(CD,"%R","%1")
EL ,*launch %0\PPVW.EXE -bootid:A -r %*name(CD,"%R","%1")
HTML ,*launch %0\PPVW.EXE -bootid:A -r %*name(CD,"%R","%1")
HTM ,*launch %0\PPVW.EXE -bootid:A -r %*name(CD,"%R","%1")
XYZZY ,*launch %0\PPVW.EXE -bootid:A -r %*name(CD,"%R","%1")
EMACS ,*launch %0\PPVW.EXE -bootid:A -r %*name(CD,"%R","%1")
SCM ,*launch %0\PPVW.EXE -bootid:A -r %*name(CD,"%R","%1")
INI ,*launch %0\PPVW.EXE -bootid:A -r %*name(CD,"%R","%1")
VBS ,*launch %0\PPVW.EXE -bootid:A -r %*name(CD,"%R","%1")
JS ,*launch %0\PPVW.EXE -bootid:A -r %*name(CD,"%R","%1")
PY ,*launch %0\PPVW.EXE -bootid:A -r %*name(CD,"%R","%1")
PYW ,*launch %0\PPVW.EXE -bootid:A -r %*name(CD,"%R","%1")
HOWM ,*launch %0\PPVW.EXE -bootid:A -r %*name(CD,"%R","%1")
CFG ,*launch %0\PPVW.EXE -bootid:A -r %*name(CD,"%R","%1")
KIF ,*launch %0\PPVW.EXE -bootid:A -r %*name(CD,"%R","%1")
}

これで、

  • PPcで画像ファイルやテキストファイルにカーソルをあわせてEnterを押すと、PPv[A]で表示
  • PPv[A]上でカーソルを動かすと、それに連動してアクティブPPcのカーソルが動き、対応するファイルを表示する
  • PPv[A]上でC_s sで表示ファイルをブックマーク
  • C_s C_sでPPv[Z]にブックマークファイルを順次PPv[Z]に表示。PPv[Z]が無い場合はそれを起動。PPv[Z]にフォーカスは当てない
  • QでPPv[Z]を閉じる
  • EnterでPPvを全て閉じる

となる。

使い方


PPcで画像ファイルやテキストファイルにカーソルをあわせてEnterを押すと、PPv[A]が起動。PPv[A]上でカーソルを動かすとそれにあわせてPPcのカーソルが動き、それにあわせてPPv[A]に表示されるファイルも変わる



PPv[A]で閲覧中、気になるファイルを見つけたらC_s sでブックマーク




ブックマークしたファイルを閲覧したいときは、C_s C_s。PPv[Z]がフォーカス無しで起動し、ブックマークファイル(Clip0に登録されているもの)を開く



C_s C_sとするたびに、PPv[Z]にブックマークしたファイルが順次(Clip1、Clip2…)表示される。最後までいくと、またClip0に戻る。



もう十分だと思ったら、Qを押してPPv[Z]を消す



Enterを押すと、PPv[Z]とPPv[A]が共に閉じる


テキストファイルもブックマークできるし、ブックマークにテキストファイルと画像ファイルを混在させることももちろんできる。


追記 2014/11/24


スクリプトを全体的に変更、それにあわせて設定も変更。

0 件のコメント:

コメントを投稿