2015年12月27日日曜日

txtをhowmに変換するスクリプト

テキストファイルをhowm形式に変換するスクリプトを作った。
変換したいファイルにマークして実行することで、カレントディレクトリにhowmファイルを新規作成する。

こういうテキストファイルが



こんな感じに。



やり方


以下をScriptフォルダに保存。

txt2howm.js

//!*script
// マークしたtxtファイルからhowmファイルを新規作成

var currentDir  = PPx.Extract('%1');
var EntryObj = PPx.Entry;0
var RetCD = EntryObj.FirstMark; 
var objFileSys = PPx.CreateObject("Scripting.FileSystemObject");
var nowdate = PPx.Extract("%*nowdatetime(Y-N-D)");
var nowtime = parseInt(PPx.Extract("%*nowdatetime(HMS)"));

if (RetCD != 1){ // マークがないときはカーソル下のファイルを処理
  if (!PPx.EntryName.match(/.txt$/i)) { // txtファイルでなければ終了
    PPx.Echo("拡張子がtxtではありません");
    PPx.Quit();
  }
  var objItem = currentDir + "\\" + PPx.EntryName;
  var outputfile = PPx.Extract("%*nowdatetime(Y-N-D-HMS)")+".howm";

  // ファイルの内容を取得しhowm形式に変換
  objInFile = objFileSys.OpenTextFile(objItem, 1);
  var str = "= " + objInFile.ReadAll() + "\n\n[" + PPx.Extract("%*nowdatetime(Y-N-D H:M)") +"]";
  objInFile.Close();
  
  // カレントディレクトリにhowmファイルを作成
  strCreateFile = objFileSys.BuildPath(currentDir,outputfile);
  objFileSys.CreateTextFile(strCreateFile);

  // howmファイルに書き込み
  objOutFile = objFileSys.OpenTextFile(strCreateFile, 2);
  objOutFile.Write(str);
  objOutFile.Close();
} else { //マークがあるときは順番に処理
  i = 0
  while(true){
    var entryName = EntryObj.Name;
    var hoge = nowtime + i // ファイル名の重複を避けるための処理
    var objItem = currentDir  + "\\" + entryName;
    var outputfile = nowdate + "-" + hoge +".howm";

    if (!entryName.match(/.txt$/i)){ // 拡張子がtxtでなければスキップ
    }
    else {
      // ファイルの内容を取得しhowm形式に
      objInFile = objFileSys.OpenTextFile(objItem, 1);
      var str = "= " + objInFile.ReadAll() + "\n\n[" + PPx.Extract("%*nowdatetime(Y-N-D H:M)") +"]";
      objInFile.Close();
      
      // カレントディレクトリにhowmファイルを作成
      strCreateFile = objFileSys.BuildPath(currentDir,outputfile);
      objFileSys.CreateTextFile(strCreateFile);
      
      // howmファイルに書き込み
      objOutFile = objFileSys.OpenTextFile(strCreateFile, 2);
      objOutFile.Write(str);
      objOutFile.Close();
      
      i = i+1;
    }
    if(EntryObj.NextMark != 1) break; // 最後のマークなら終了
  }
}

変換したいテキストファイルにマークしてから



以下を実行。
*script %0\Script\txt2howm.js

カレントディレクトリにhowmファイルが新規作成される。



作った理由


僕は、たまにポメラでメモをとっている。それをhowm形式に直すとき、今までは一々手作業でコピペをしていた(SETZERのFIFOモードを起動し、一時コマンドClipFile.jsでコピー。あとは、howmの新規作成→ペーストを繰り返す)。

ファイル数が少ないうちはそれでも別に良かったのだが、今回30くらいメモを作ったので、もうこれ面倒だな!と思って作りました(こなみかん)

2015年12月18日金曜日

PPvの複数表示


つかさです。
今回やりたいのは、PPvの複数表示。こんな感じに、複数の画像ファイルやテキストファイルを並べて表示、ということがしたい。



PPv[A]は通常表示に、他のIDのPPvは一時的に表示したいファイルに利用する。

設定


以下を編集して取り込み。
KC_main = { ; PPcメイン窓
\Q ,*closeppx V*
TAB ,*ifmatch //,%NVA %: *focus VA %: *stop
 %K"@TAB"
}
KV_main = { ; PPvメイン窓
UP ,*ifmatch A,%*regexp(%n,"/.(.)/$1/") %: %K-C"@UP@N" %: *stop
DOWN ,*ifmatch A,%*regexp(%n,"/.(.)/$1/") %: %K-C "@DOWN @N" %: *stop
LEFT ,*ifmatch A,%*regexp(%n,"/.(.)/$1/") %: *execute C,*cursor 6, -1 %: %K-C"@N" %: *stop
RIGHT ,*ifmatch A,%*regexp(%n,"/.(.)/$1/") %: *execute C,*cursor 6, 1 %: %K-C"@N" %: *stop
SPACE ,*ifmatch A,%*regexp(%n,"/.(.)/$1/") %: %K-C"@SPACE@N" %: *stop
\SPACE ,*ifmatch A,%*regexp(%n,"/.(.)/$1/") %: %K-C"@\SPACE@N" %: *stop
ENTER ,%K"@Q"
F11 ,*ppv /noactive "%1\\%R" /k *focus VA
\Q ,*closeppx V*
TAB ,*focus C
FIRSTEVENT , *execute C,*ppvoption id a
CLOSEEVENT , *focus C
}
E_cr = { ; [Enter]用判別
:JPEG ,
:BMP ,
:XJS ,
:XVBS ,
PNG ,*ppv "%1\\%R"
JPG ,*ppv "%1\\%R"
JPEG ,*ppv "%1\\%R"
BMP ,*ppv "%1\\%R"
GIF ,*ppv "%1\\%R"
TXT ,*ppv "%1\\%R"
CPP ,*ppv "%1\\%R"
H ,*ppv "%1\\%R"
C ,*ppv "%1\\%R"
L ,*ppv "%1\\%R"
EL ,*ppv "%1\\%R"
HTML ,*ppv "%1\\%R"
HTM ,*ppv "%1\\%R"
XYZZY ,*ppv "%1\\%R"
EMACS ,*ppv "%1\\%R"
SCM ,*ppv "%1\\%R"
INI ,*ppv "%1\\%R"
VBS ,*ppv "%1\\%R"
JS ,*ppv "%1\\%R"
PY ,*ppv "%1\\%R"
PYW ,*ppv "%1\\%R"
HOWM ,*ppv "%1\\%R"
CFG ,*ppv "%1\\%R"
KIF ,*ppv "%1\\%R"
LOG ,*ppv "%1\\%R"
}

具体的にやったことは以下。
  • PPv上でF11でファイルを別IDのPPvで表示
  • PPv[A]以外ではカーソルキーを効かないように
  • PPv[A]があるときは、TabでPPc-PPv[A]間を切り替え
  • Shift+QでPPvをすべて終了
  • PPv起動時に、FIRSTEVENTで通常表示に使うPPvをPPv[A]に設定

想定してるやり方


画像やテキストファイルをPPv[A]閲覧中、あとで参照したいものがあったら、F11を押す。



すると、同じファイルをPPv[B]で表示する。



この時、フォーカスはPPv[A]のまま。そのままPPv[A]で連動ビューを続けることが可能。
またF11を押すと、今度は別のIDのPPvで表示する。



こうすることで、複数のファイルを見比べる、ということが実現できる。

2015年12月7日月曜日

月区分のごみ箱(deleted$)

前回言ってたやつです。

PPxには、deleted$というフォルダを作成してそこに保存する、という削除方法がある。
deleted$フォルダを月で区分し、その中にファイルを保存するようにすれば、後で参照するときに楽になるのではないか、と思いついた。



こんな感じですね。

スクリプトを使うまでもなく、*ppcfileで普通に行けそうです。以下のコマンドでおk。

*ppcfile !move,D:\Work\deleted$\%*nowdatetime(Y-N),/sameall:on /same:5 /querycreatedirectory:off

D:\Work\deleted$以下を月でフォルダ分けして、ファイル移動するようにしている。もし同名ファイルがあれば、末尾に数字を付ける。
ちなみに、前回やってたパスの分岐は次のようになる。

KC_main = { ; PPcメイン窓
D ,*ifmatch "/D:\\Work/",%1 %: *ppcfile !move,D:\Work\deleted$\%*nowdatetime(Y-N),/sameall:on /same:5 /querycreatedirectory:off %: *stop
 *ifmatch "/D:\\download/",%1 %: %K"@\D" %: *stop
 %K"@D"
}

2015年12月6日日曜日

パスで削除方法を変える

3つの削除方法


PPxには削除方法が幾つか用意されている。

1.エントリをごみ箱へ

エクスプローラーのごみ箱を使うやつです。Dでできる。

2.エントリの削除

ごみ箱を使わない削除。一度削除すると元に戻すことができない。Shift+Dでできる。

3.deleted$フォルダに移動

deleted$というフォルダを作成し、そこに削除ファイルを保存する。つまり、やってるのはファイル移動で実際には削除していない、ということですね。
以下のコマンドだと、カレントフォルダにdeleted$フォルダを作成する。

*file delete,,,/backup

deleted$フォルダがあっちこっちにできるのが嫌なら、処理先フォルダを指定する。例えばDataフォルダ以下にまとめたいなら、次のようになる。

*file delete,,"D:\Data",/backup

分岐させてみる


今までは、特に何も考えずに「2.エントリの削除」をしてたが、自分で作成したファイル等については、「3.deleted$フォルダに移動」のほうが安全かな、と思うようになった。というわけで、Dを押した時に

  • Workフォルダ(自作のファイルがあるフォルダ)……3.deleted$フォルダに移動
  • Downloadフォルダ……2.エントリの削除
  • それ以外……1.エントリをごみ箱へ

と分岐させてみる。
KC_main = { ; PPcメイン窓
D ,*ifmatch "/D:\\Work/",%1 %: *file !delete,,,/backup %: *stop
 *ifmatch "/D:\\download/",%1 %: %K"@\D" %: *stop
 %K"@D"
}

削除したファイルを後で探す時のことを考えると、もっと適切な方法があるかもしれない。少し考えてみよう。処理先フォルダを指定して、それをさらに月ごとにフォルダ分けするとかかなあ。スクリプト使えばすぐできそうですね。

2015年10月21日水曜日

SETZER ver0.56公開

久々に更新しました。前回の更新から2年半ぶりくらいですね。


SETZERはクリップボード履歴管理ソフト。eClipとClip.netに影響を受けてます。AA貼り付けツールの側面もあるのが特徴。


以前は、ツールチップの複数行表示時の文字列の折り返しがうまくいかず、ガタガタだった。それを修正したので、綺麗に表示されるようになってます。




今回の更新内容は以下。

  • ツールチップの折り返しに文字数を使ってたが、それをバイト数にした
  • 「PageUp」「PageDown」「Home」「End」が効くようにした
  • Ctrl+BackSpaceでテキストボックスの文字列を全消しにする
  • オプションウィンドウのサイズを調整
  • tray.icoを変更

バグや要望等があれば、ここのコメント欄に書くと修正するかもしれない

2015年10月5日月曜日

DockShow(メディアプレイヤー)を試す

DockShowは、Paper Plane xUI のウィンドウに埋め込んで使用するためのメディアプレイヤー。
その登録の仕方と使い方のメモ。

登録


DockShowをダウンロードしたあと、中にあるDockShow.EXE(DockShow64.EXE)をPPxフォルダに置く。
次いで、上の位置に埋め込みたいなら、以下を実行。
*dock add,t,%0\DockShow.EXE

編集して取込の場合は、次のようになる。
X_dock = { ; バー割当て(要IE4以降)*layout,*dock
CA_T = D:\bin\ppx2window64\\DockShow.EXE,100,0
}

これで、次のようになる。


メニューバーの下にあるのが DockShow。

削除するときは、次のコマンドを実行。
*dock delete,t,DockShow

ちなみに、下の位置に埋め込みたいなら次のようにする。t(top)をb(bottom)に変えればいいわけだ。
*dock add,b,%0\DockShow.EXE

使い方


上の位置に埋め込んだ場合、音楽ファイルにカーソルをあわせ、
*dock drop,t,DockShow

とすれば、それを再生する。マウスでのドラッグ&ドロップでもいい。


 左クリックで一時停止。右クリックで音量を調整できる。



SELECTEVENT


SELECTEVENTに登録すると、カーソルの動きと連動させて、音楽ファイルを再生することができる。カーソルを動かせば、それと連動して、カーソル下のファイルをDockShowで自動再生するわけだ。

まずは、以下を編集して取込。これは上に埋め込んでいる場合。もし、下に埋め込んでいるなら、tをbに変えよう。
E_syncevent = { 特製連動表示
AVI ,*dock drop,t,DockShow
MP2 ,*dock drop,t,DockShow
MP3 ,*dock drop,t,DockShow
MPG ,*dock drop,t,DockShow
WMA ,*dock drop,t,DockShow
WMV ,*dock drop,t,DockShow
WM ,*dock drop,t,DockShow
ASF ,*dock drop,t,DockShow
MID ,*dock drop,t,DockShow
}

ついで、以下を適当なキーに登録する。これで、カーソルと音楽再生の連動ON/OFFが、トグルでできるようになる。
*RotateExecute id,"*customize KC_main:SELECTEVENT,%%%%ME_syncevent %%: *linemessage 連動ON","*customize KC_main:-|SELECTEVENT=  %%: *linemessage 連動OFF"


追記 2016/09/28


*linecustによってもっと簡単にできるようになった。上記のコマンドの代わりに、以下を適当なキーに登録する。

*linecust ^syncevent,KC_main:SELECTEVENT,%%ME_syncevent


2015年9月30日水曜日

複数マーク時は動作を分岐

さっきの記事を書いた後、「そういやWinMergeも複数のファイルを引数に取るよな」「複数マーク時とそうで無い時とで分岐できれば便利かもしれぬ」「拡張子判別、パス判別に続いてマーク数判別とか新しそう」「PDF結合かWinMergeかには拡張子判別を使おう」などと昼飯を食べながらつらつらと考えていた。というわけで今日二回目の記事。

2つ以上マークがある時と、それ以外の時とで、Shift+Enterの動作を分岐させてみる。

以下をScriptフォルダに保存。

EntryMarkCount.js
//!*script

PPx.Result = PPx.EntryMarkCount; 

これは、マークエントリ数を返すだけのスクリプト。
次いで、以下を編集して取込。
A_exec    = {    ; エイリアス
pdftk    = "C:\Program Files (x86)\PDFtk\bin\pdftk.exe"
winmerge    = D:\bin\WinMerge\WinMergeU.exe
}
KC_main = {
\ENTER,*ifmatch 0;1,%*script(%0\Script\EntryMarkCount.js) %: %ME_scr %: *stop
  %ME_mark
}
E_mark    = {    ; \[Enter]用判別(複数マーク時)
CFG    ,%Q"WinMergeしますか?" %: %Ob %'winmerge' %#C
TXT    ,%Q"WinMergeしますか?" %: %Ob %'winmerge' %#C
INI    ,%Q"WinMergeしますか?" %: %Ob %'winmerge' %#C
JS    ,%Q"WinMergeしますか?" %: %Ob %'winmerge' %#C
PDF    ,%Q"PDFを連結しますか?" %: %Ob %'pdftk' %#C cat output %"結合時のファイル名を入力して下さい"%{%|output%|.pdf%} %: %K"@F5"
}

Shift+Enterを押した時、マークエントリ数が0あるいは1の時は、通常の判別E_scrを。2つ以上の時はE_markを実行するようにする。
E_markだが、拡張子がPDFの時には、PDFtkを使ってマークしたPDFファイル同士を結合。拡張子がCFG、TXT、INI、JSの時には、マークしたファイルの内容をWinMergeで比較する。


PDFtkでPDFを結合

PDFtkでは

pdftk.exe 1.pdf 2.pdf cat output output.pdf

でPDFファイルを結合できる。これをPPx 上で行えるようにする。

以下をScriptフォルダに保存。これは、マークファイルの名前を空白区切りで連結して返すスクリプト。マークファイルが二つ以上無ければ終了する。

concatname.js
//!*script

// マークファイルの名前を空白区切りで連結して返すスクリプト
// %*script(%0\Script\concatname.js)のようにして使う
var str = "";
var EntryObj = PPx.Entry;

// 二つ以上マークファイルが無ければ終了
if (PPx.EntryMarkCount < 2) {
  PPx.SetPopLineMessage("2つ以上のマークファイルがありません。");
  PPx.Quit(-1);
}
// マークファイルの名前を空白区切りで連結
EntryObj.FirstMark;
while(true){
  str += " " + EntryObj.Name;
  if(EntryObj.NextMark != 1) break;
}
// 値を返す
PPx.Result = str; 

結合したいPDFファイルを順番にマークし、

%Ob "C:\Program Files (x86)\PDFtk\bin\pdftk.exe" %*script(%0\Script\concatname.js) cat output %{%|output%|.pdf%}

を実行すると、ファイル名を入力するウィンドウが出る。


適当な名前を入力してOKを押せば、その名前でPDFファイルを結合する。

追記


よく考えたら、一々スクリプト使わなくても%#Cでいけるじゃん orz

 %Ob "C:\Program Files (x86)\PDFtk\bin\pdftk.exe" %#C cat output %{%|output%|.pdf%}

2015年9月10日木曜日

*RotateCustomizeで壁紙ローテート

Paper Plane xUI Text Module を導入すると、*RotateCustomize というコマンドが使えるようになる。これで、壁紙をローテート表示させてみる。

*RotateCustomize custid,customize1,customize2[,...]

    設定のトグル・ローテート処理を行います。具体的には実行する度に
    *customize custid=customize1
    *customize custid=customize2
      :
    *customize custid=customize1
      :
    と、実行するので、設定のトグルやローテートができます。
    設定中に「%」を含む場合は %% と指定してください。
    設定中に「"」を含む場合は "" と指定し、全体を「"」で括ってください。
    custidは「XC_stat」のように指定もできますし、「KC_main:A」のような
    指定もできます。

以下のようなコマンドを適当なキーに登録すればいい。
*RotateCustomize X_bg:Path,D:\Work\gazou1.jpg,D:\Work\gazou2.jpg,D:\Work\gazou3.jpg

もちろん、事前に壁紙を表示する設定にしておこう。

2015年9月9日水曜日

*ifmatchでパスによる判別実行



僕は、D:\Data\Musicの下にアルバム単位でフォルダを作り、そこに音楽ファイルを保存している。


画像ファイルは、D:\Work\画像フォルダの下に、カテゴリーごとにフォルダ分けして保存している。



音楽ファイルが入っているフォルダは音楽プレイヤーに投げ、画像ファイルが入っているフォルダは画像ビューアに投げる、ということを一つのキーでしたい。これを、*ifmatchを使ったパス判別によって実現する。

以下を編集して取込。

KC_main = { ; PPcメイン窓
\ENTER ,%ME_scr
}
E_scr = { ; \[Enter]用判別
:DIR ,*ifmatch "/D:\\Data\\Music/",%1 %: %Ob D:\bin\AIMP3\AIMP3.exe  %FCD %: *stop
 *ifmatch "/D:\\Work\\画像フォルダ/",%1 %: %Ob D:\bin\Hamana\Hamana.exe  %FCD %: *stop
 %K"@\ENTER"
}

ディレクトリにカーソルをあわせ、Shift+Enterを押した時、

  • パスにD:\Data\Musicが含まれている……Aimp3にそのディレクトリを投げる
  • パスにD:\Work\画像フォルダが含まれている……Hamanaにそのディレクトリを投げる
  • それ以外……通常のShift+Enter(容量の計算)

となる。
ちなみに、Shift+Enter用判別をShift+Enterに登録しているのは、こうしないと:DIRを設定しても反映しないから。Paper Plane xUI Part.5 585-596 を参照。

参考


以前はスクリプトを使って、パスによる判別実行をしていた。

2015年9月8日火曜日

サムネイルの余白の色を調整


サムネイル表示のとき、画像の余白部分の色が、背景色と異なることがあるのが気になっていた。


これを解消できないかと調べたことのまとめ。

画像キャッシュ


XC_ocigを設定することで、取得したサムネイル画像をキャッシュできるようになる。これにより、大量に画像があるフォルダでも、次回より高速にサムネイルを表示させることが可能になる。

XC_ocig = 1,2,0,1 ; 表示書式画像(n)の動作 (1),(2),(3),(4)
; (1)アイコン表示  0:なし 1:あり 2:画像無のみ
; (2)Explorer互換画像取得  0:しない 1:優先してする 2:Susie優先
; (3)書庫内画像を取得  0:しない 1:取得
; (4)取得画像を :thumbnail.jpg にキャッシュ 0:しない 1:する

この時、余白の色も同時に保存しているらしい。だから、背景色を変更した時、不一致が生じるわけだ。なので、一度キャッシュを削除し、作り直せばいい。

以下をScriptフォルダに保存。

deletethumbnail.js
//!*script

for (var i = 0; i < PPx.EntryAllCount; i++) {
  if (PPx.Entry(i).Size != 0){
    PPx.Execute('*delete "'+PPx.Entry(i).Name+':thumbnail.jpg"');
  }
}

このScriptを実行すれば、カレントフォルダのキャッシュが削除される。後は自動でサムネイルを作り直すはず。


エクスプローラー取得ディレクトリサムネイル



ディレクトリの余白の白い箇所を消せないか調べたが、ワンキーでこの背景色を調整するのは無理そう。
なので、大人しく、エクスプローラーの機能を用いた画像取得を停止させる。

XC_ocig = 1,0,0,1 ; 表示書式画像(n)の動作 (1),(2),(3),(4)
; (1)アイコン表示  0:なし 1:あり 2:画像無のみ
; (2)Explorer互換画像取得  0:しない 1:優先してする 2:Susie優先
; (3)書庫内画像を取得  0:しない 1:取得
; (4)取得画像を :thumbnail.jpg にキャッシュ 0:しない 1:する


ちなみに、ディレクトリアイコンはX_dicnで変更可。

X_dicn    =     ; ディレクトリ用のアイコンのパス 空欄:自動

2015年8月31日月曜日

マーク状態をハイライトで保存




このようにマークしていたとして、マーク状態を一時的にハイライトにして保存。新たにマークができるようにする。



以下をScriptフォルダに保存。

mark-highlight-toggle.js

//!*script

for (var i = 0; i < PPx.EntryAllCount; i++) {
  if (PPx.Entry(i).Mark == 1) {
    PPx.Entry(i).Highlight = 1;
    PPx.Entry(i).Mark = 0;
  } else if (PPx.Entry(i).Highlight == 1) {
    PPx.Entry(i).Highlight = 0;
    PPx.Entry(i).Mark = 1;
    }
}

以下を編集して取込。

KC_main = { ; PPcメイン窓
^M ,*script %0\Script\mark-highlight-toggle.js
}
KV_main = { ; PPvメイン窓
^M ,*execute C,*script %0\Script\mark-highlight-toggle.js
}

やり方


Ctrl+Mを押すと、マークファイルがハイライト1に。ハイライト1がマークファイルになる。

こんなのが



こう。



ファイル整理の時に使えると思っている。二種類のマークを使い分けるような操作が、可能になるわけだ。PPvからも同様に操作可能。

ちなみに、ハイライト1の色は、カスタマイザーの「色タブ- PPcエントリ背景/状態」で設定できる。




PPxを3ペインの画像ビューアとして使う



こんなふうに、PPxを3ペインの画像ビューアっぽく使ってみる。いつものPPv中心の連動ビューではなく、デフォルトの連動ビューを利用。

準備


以下のスクリプトをScriptフォルダに保存。
PPv中心の連動ビューをしていると、デフォルトの連動ビュー時に支障が出る。これは、それを避けるためのスクリプト。PPv上でのカーソルキー動作を、連動ビュー有効時に停止させている。
PPv中心の連動ビューをしていない場合は、このスクリプトは不要。

mysyncview.js

//!*script

var useppv = 'R'; // 使用PPv ID
if ( PPx.CodeType == 0 ){ // MultiByte版かそうでないかで分岐
  var ppvname = 'ppv';
}else{
  var ppvname = 'ppvw';
}
if ( PPx.GetComboItemCount == 0 ){ // 独立窓か一体化窓かで分岐
  var usewindow = '%N'
}else{
  var usewindow = '%*findwindowclass("PaperPlaneCombo")';
}

PPx.Execute('%Oi '+ppvname+' -r -bootid:'+useppv);
PPx.Execute('*fitwindow '+usewindow+',%NV'+useppv+',3');
if ( PPx.SyncView == 0 ){
  PPx.Execute('*ppvoption sync '+useppv);
  PPx.Execute('*setcust KV_main:-|UP=');
  PPx.Execute('*setcust KV_main:-|DOWN=');
  PPx.Execute('*setcust KV_main:-|LEFT=');
  PPx.Execute('*setcust KV_main:-|RIGHT=');
  PPx.Execute('*setcust KV_main:-|SPACE=');
  PPx.Execute('*setcust KV_main:-|\\SPACE=');
}else{
  PPx.Execute('*ppvoption sync off');
  PPx.Execute('*setcust KV_main:UP,%%KC "@UP @N"');
  PPx.Execute('*setcust KV_main:DOWN,%%KC "@DOWN @N"');
  PPx.Execute('*setcust KV_main:LEFT,*execute C,*cursor 6, -1 %%: %%KC"@N"');
  PPx.Execute('*setcust KV_main:RIGHT,*execute C,*cursor 6, 1 %%: %%KC"@N"');
  PPx.Execute('*setcust KV_main:SPACE,%%KC "@SPACE @N"');
  PPx.Execute('*setcust KV_main:\\SPACE,%%KC "@\\SPACE @N"');
}

以下を編集して取込。

KC_main = { ; PPvメイン窓
^Y ,*RotateExecute view,"*tree on %%: *setmaskentry o:d,a:d-","*tree off %%: *setmaskentry"
\Y ,*script %0\Script\mysyncview.js
}

一体化窓で、PPv中心の連動ビューをしてない場合は、以下を編集して取込。

KC_main = { ; PPcメイン窓
^Y ,*RotateExecute view,"*tree on %%: *setmaskentry o:d,a:d-","*tree off %%: *setmaskentry"
\Y ,%Oi ppvw -r -bootid:r %: *fitwindow %*findwindowclass("PaperPlaneCombo"),%NVR,3 %: *ppvoption sync
}
_others = { ; その他設定
SyncViewID = R
}

独立窓で、PPv中心の連動ビューをしてない場合は、以下を編集して取込。

KC_main = { ; PPcメイン窓
^Y ,*RotateExecute view,"*tree on %%: *setmaskentry o:d,a:d-","*tree off %%: *setmaskentry"
\Y ,%Oi ppvw -r -bootid:r %: *fitwindow %N,%NVR,3 %: *ppvoption sync
}
_others = { ; その他設定
SyncViewID = R
}

使い方


  • Ctrl+Y ツリー表示&フォルダマスク
  • Shift+Y 連動ビュー。PPv[R]をPPcのすぐ上に表示

画像フォルダに行って、Ctrl+Y。



すると、ツリーを表示し、エントリ表示のフォルダが非表示になる。


Shift+Yで連動ビューに。PPcのカーソル位置のファイルが、常にPPvで表示される。もう一度Shift+Yを押すとPPvは閉じ、連動ビューも無効になる。


追記 2015/08/31


スクリプトのコードを修正。連動ビューに使うIDを指定できるようにした。また、Multibyte版でも独立窓でも使えるようにした。

2015年8月24日月曜日

ppxmemoというサイト

これまで、ほえほえ日記で書いてきた、PPxカスタマイズ記事の内容をまとめたサイトを作りました。ppxmemoです。

https://sites.google.com/site/ppxmemo/



すっごい適当に名前を付けたので、そのうち変えるかもしれない。

あと、Memo on the Electronのサイトも一年ぶりくらいに大幅に手直ししたので良ければ見てください。

なんかすっごい久々に日記っぽい記事を書いた気がする

2015年7月26日日曜日

一日一ファイル形式のテキストメモ


あいさつ



つかさです。
xyzzyで一日一ファイル形式のメモを取れるようにしてみる。

以下を site-lispフォルダに保存。

onedaymemo.l
; -*- Mode: Lisp -*-
;
;  メモファイルを引数のディレクトリに作成する
;
;  キーバインド
;      C-x,C-x     新たな見出し
;
;  Installation:
;
;      ~/.xyzzy または $XYZZY/site-lisp/siteinit.l に以下のコードを追加
;
;              (require "onedaymemo")

(defun make-onedaymemo-file (memo-dir)
  (let* ((filename (format-date-string "%Y-%m-%d.txt"))
  (filepath (merge-pathnames filename memo-dir))
  (directory (directory-namestring filepath)))
    (if (not (file-directory-p directory))
 (create-directory directory))
    (find-file filepath)
    (if (eq (point-max) (point-min))
 (insert (format-date-string "%d %b %Y %H:%M:%S\n\n  * : "))
      (progn
 (goto-char (point-max))
 (insert (format-date-string "\n\n  * : "))))))

(defun onedaymemo ()
  (interactive)
  (if si:*command-line-args* (setq x (pop si:*command-line-args*))(setq x nil))
  (make-onedaymemo-file x)
  (onedaymemo-mode))

(defun onedaymemo-mode ()
  (interactive)
  (kill-all-local-variables)
  (setq buffer-mode 'onedaymemo-mode)
  (setq mode-name "One Day Memo")
  (use-keymap *onedaymemo-mode-map*))

(defvar *onedaymemo-mode-map* nil)
(unless *onedaymemo-mode-map*
  (setq *onedaymemo-mode-map* (make-sparse-keymap))
  (define-key *onedaymemo-mode-map* '(#\C-x #\C-x)
       #'(lambda ()
    (interactive)
    (goto-char (point-max))
    (insert (format-date-string "\n\n  * : ")))))

次いで.xyzzyに以下を追加。
(require "onedaymemo")

引数として指定したフォルダに、特定の書式でメモファイルを作るスクリプトです。

その日に一度もメモを取っていなければ、メモファイルを新規作成。ファイル名は2015-07-25.txtのように日時から自動で付けられる。その日に既にメモを取っていれば、その日のメモファイルを開き、新しい見出しからはじめる。内容は
25 Jul 2015 17:03:46

  * : Changelogのテスト

書式をChangeLogっぽく変えてみる

  * : 日付

日付とかはどうせファイルで分かるから不要?最初に起動するときだけにするとか。
あとは時間。これは本当に必要か?時間的なことが書きたいのなら、文中でやればいいだけかも。タイトルの区切りだけ入れるとか。
また、起動時に新規に作成するようにするか。
日付が必要な場合と不要な場合。あまり使わないだろうか。
あとはキーバインドをどうするか。C_x2度押しとか単純なのでいいかも。

  * : PPvの一時コマンド

なぜか中に入っていない。

みたいになる。

また、C_x二回押しで、カーソルを末尾に移動し、次の見出しをコピペする。

PPxへの登録


これを、PPxから起動できるようにする。

以下を編集して取込。
KC_main = { ; PPcメイン窓
^Z ,*setnextkey K_launcher
}

K_launcher = { ** comment **
C ,%Ob D:\bin\xyzzy\xyzzy.exe -e (onedaymemo) D:\Work\Log
}

C_z c(Ctrl+Zを押したあとにCを押す)

で起動します。フォルダパスは適宜変更を。

何で作ったか


僕は普段、howm形式でメモを取っているのだが、本を読みながらのメモ、作業してる時のちょっとしたメモ、誰かに出会った時の記録等については、howmはあまり適していないと思っていた。そこで、一ファイル形式の時系列順でメモれる方法を探していた。

この用途として以前使ってたのはCatMemoNoteだった。メモ間の区切りは区切り線で。日付についてはホットキーを設定し、適宜挟み込むというようにしていた。



これはこれで悪くはなかったのだが、時たま新規にメモを作成しないと、1ファイルが非常に長くなってしまうのが嫌だった。だが、新規メモを適宜作るようにすると、以前作ったメモが残ったままになるので、それはそれで鬱陶しい。

そこで、それを解消し、かつ僕が追求してる「すべての動作をPPx基点で行う」にあわせた方法を考えて、このスクリプトを作ってみた。書式はchangelog.lを参考にしてます。


2015年7月17日金曜日

初期化とPPXDEF.CFG

PPxの初期化時、PPxフォルダにPPXDEF.CFGがあれば、それによる初期カスタマイズが自動で行われる。
だから、初期化時でも消したくない設定があれば、PPXDEF.CFGをエディタで編集して、末尾に追加しておけばいいわけだ。

僕は、カスタマイズ用メニューを追加している。初期化したあと、必要なCFGファイルのみをマークして、取り込むということをしているのだが、その時にカスタマイズ用メニューが使えると楽だからだ。
KC_main = { ; PPcメイン窓
F12 ,%M_cust,C
}
KV_main = { ; PPvメイン窓
F12 ,%M_cust,C
}

-|M_cust =
M_cust    = { ** comment **
カスタマイザ(&C) = %K"@CUSTOMIZE"
編集して取込(&E) = %Ob *PPCUST /edit
-- = 
取り込み(&1) = %Q"%FCを取り込みます"%:%Ob *PPCUST CS "%FCD"
追加(&2) = %Q"追加取込します"%:*customize @%FCD
-- = 
PPX.CFGを取り込み(&3) = %Q"PPX.CFGを取り込みます"%:%Ob *PPCUST CS "%0\PPX.CFG"
PPX.CFGに書き出し(&4) = %Q"PPX.CFGに書き出します"%:%Ob *PPCUST CD "%0\PPX.CFG"
指定書き出し(&5) = %"指定ファイルに書き出します"%Ob *PPCUST CD %{%1\PPX-%*nowdatetime(y-N-D)%|.CFG%}
-- = 
初期化(&I) =  %Q"初期化します"%:%Ob *PPCUST CINIT
-- = 
アップデート(&U) = %Ob *checkupdate p
バージョン情報(&V) = %K"@ABOUT"
}

カスタマイズで色々なところをいじってて、状態を元に戻したいなと思ったら、F12を押してカスタマイズ用メニューを出し、初期化する。
そして、CFGフォルダに行って、必要なCFGファイルをマーク。再びF12を押して、メニューから追加を選択。これで、その設定を取り込むことができる。

2015年7月14日火曜日

ブックマークリストをローテート


挨拶


僕は、ブックマークをリストファイルの形で管理しており、それをメニューで呼び出せるようにしている(参考:ブックマークをリストファイルにして保存)。




今回は、ブックマークリストの切り替えを、メニューを介さずに行う方法を考察する。ちなみに、ブックマーク自体については


を参照のこと。

準備


上に載せたリンクから、

  • setalias.js
  • resetalias.js
  • rotateExecute3.js
  • alias2file.js
  • file2allias.js
  • bookmarkmenu.js

をScriptフォルダに保存しておく。

今回、新しく導入するのは、次のスクリプト。これもScriptフォルダに保存する。


RotateSubFile.js


//!*script

// フォルダ内のファイルパスを順番に返す
// 第一引数:フォルダパス
// 第二引数:識別子

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

fs = PPx.CreateObject("Scripting.FileSystemObject");
var objFileSys = new ActiveXObject("Scripting.FileSystemObject");
var fn = PPx.Arguments.Item(0);
var id = PPx.Arguments.Item(1);
var CurrentFile;

// フォルダが存在しなければ終了
if (objFileSys.FolderExists(fn) == false) {
  PPx.SetPopLineMessage(fn+"は存在しません");
  PPx.Quit(-1);
}

// 同階層のフォルダのリストを取得
objFolder = objFileSys.GetFolder(fn);
e = new Enumerator(objFolder.Files); 
flds = new Array(); 
for( ; !e.atEnd(); e.moveNext()) {
  flds.push(e.item().Name);
}
// フォルダが空なら終了
if (!flds[0]) {
  PPx.SetPopLineMessage("ファイルは存在しません");
  PPx.Quit(-1);
}
// 識別子が空ならリストの一番目を代入
if (!PPx.Extract("%'"+id+"'")){
  CurrentFile = flds[0];
} else {
  CurrentFile = PPx.Extract("%'"+id+"'");
}

// ファイルの位置を取得
for(i = 0; i < flds.length; i++) {
  if( flds[i] == CurrentFile ) break;
}

var nextFile = flds[Math.min(i+1, flds.length-1)]; // 次のファイルを取得

// カレントフォルダがリスト最後なら最初にループ
if (nextFile == CurrentFile) {
  nextFile = flds[0];
}

PPx.Execute("*set "+id+" = "+ nextFile); // 識別子に次のファイルをセット
PPx.Result = fs.BuildPath(fn,nextFile); // 値を返す


スクリプトの説明


このスクリプトは、

  • フォルダパス
  • 識別子

の二つの引数を取る。与えられたフォルダパス内にあるファイルパスを、1つずつ順番に返すスクリプトだ。

%0\Script\RotateSubFile.js,%0\bookmark,blistid
 
とすると、PPxフォルダのBookmarkフォルダ内のファイルを、順番に返す。例えば、Bookmarikフォルダ内が以下のようだとする。



すると、このスクリプトを実行する度に、

default.txt → 基本.txt → メモ.txt → 画像フォルダ.txt → default.txt → 基本.txt ……


の順番で、フルパスを返す。

このスクリプトと、file2alias.jsを組み合わせる。file2alias.jsは、第一引数にリストファイルのパスを、第二引数に変更したいエイリアスを取るスクリプト。そこで、この第一引数として、RotateSubFile.jsを与えれば、Bookmarkフォルダにあるリストを切り替えることができるわけだ。


*script %0\Script\file2alias.js,%*script("%0\Script\RotateSubFile.js","%0\bookmark","blistid"),bookmark

こんな感じですね。

編集して取込


次に、以下を編集して取込。

-|K_bookmark =
-|K_bookmarklist =

KC_main = { ; PPcメイン窓
^S ,*setnextkey K_bookmark
^X ,*setnextkey K_bookmarklist
}

K_bookmark = { ** comment **
S , *script %0\Script\setalias.js,bookmark,%%1
R , *script %0\Script\resetalias.js,bookmark
^S , %j %*script("%0\Script\rotateExecute3.js","homu","bookmark")
',' , *script %0\Script\bookmarkmenu.js
}

K_bookmarklist = { ** comment **
^X , *set name=%*script("%0\Script\RotateSubFile.js","%0\bookmark","blistid") %: *linemessage %*name(X,%'name') %: *script %0\Script\file2alias.js,%'name',bookmark
X ,*linemessage defaultに戻しました %: *script %0\Script\file2alias.js,%0\bookmark\default.txt,bookmark
}

使い方


キーコマンドは以下。

  • C_x C_x    ブックマークリストを順次切り替え
  • C_x x    ブックマークリストをdefault.txtに切り替え
  • C_s s    フォルダをブックマークに登録
  • C_s r   ブックマークをリセット
  • C_s C_s    ブックマークしたフォルダに順次移動
  • C_s ","    ブックマークメニューを開く

C_x C_x で、ブックマークリストが切り替わる。今どのリストなのかは、左上にlinemessageで表示されるので、使いたいリストに行き当たるまで何度もC_x C_x 。



目的のリストに行き当たれば、次はC_s C_s 。これで、ブックマークリストに登録されているフォルダに順次切り替わる。

想定している使い方


ファイラを使って行う作業は、わりと限られていると思う。僕の場合は、

  • 画像ファイル管理
  • 文書の作成
  • ダウンロードしたファイルの利用

あたりだ。そして、それぞれの作業で使うフォルダというのも限られている。

  •  画像管理……個々の画像フォルダ
  •  文書の作成……メモフォルダ、ドキュメントフォルダ
  • ダウンロードしたファイルの利用……ダウンロードフォルダ、一時展開用フォルダ、ソフトウェアフォルダ

といったように。
ならば、作業ごとにブックマークリストを作っておき、それを順次切り替えれば、普段行うフォルダ移動というのは、だいたい網羅できてしまうのではないか。そう思って、今回の仕組みを考えた。

つまり、そのようなブックマークリストを作っておけば、後は

  • C_x C_x    ブックマークリストを順次切り替え
  • C_s C_s    ブックマークしたフォルダに順次移動 

の二つの操作だけで、たいていは目的のフォルダに行けて、効率性が上がるのではないか、ということです。


2015年5月15日金曜日

ファイルサイズで使用エディタを変更

あいさつ


つかさです。
ファイルサイズにより、使用エディタを変更するスクリプトです。
ファイルサイズが1000以上ならxyzzyを。それ以下ならPPeを利用するようにしてます。

editbysize.js
//!*script 
// 第一引数:開きたいファイルのパス

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

var path = PPx.Arguments.Item(0);
var fs = PPx.CreateObject( "Scripting.FileSystemObject" );
var editor = "D:\\bin\\xyzzy\\xyzzy.exe" // エディタのパス
var fsize = 1000 // 基準とするファイルサイズ

if (fs.GetFile(path).Size > fsize){
  PPx.Execute ("%Ob \"" + editor + "\" " + path); // エディタで開く
} else {
  PPx.Execute ("*ppe " + path); // PPeで開く
}

fs = null;

以下を編集して取込すると、「PPeを用いて編集」の代わりにこのスクリプトを使うようになる。これで、間違ってPPeで容量が大きいテキストファイルを開いてしまうことがなくなるかも
KC_main = { ; PPcメイン窓
\E ,*script %0\Script\editbysize.js,%FCD
}

KV_main = { ; PPvメイン窓
\E ,*script %0\Script\editbysize.js,%FCD
^E ,*script %0\Script\editbysize.js,%FCD
}

2015年5月14日木曜日

PPvの連動ビューで除外設定(ファイル名を表示)


以前やったPPvの連動ビューで除外設定だと、除外ファイルにカーソルが来た時、PPvは先に表示したファイルをそのまま表示し続けることになる。これだと、今どこにカーソルがあるのかがPPv上からではわかりづらい。
そこで、除外ファイルに行き当たったら、その除外ファイルのファイル名をPPvに表示するようにする。


やり方


stop.jsの内容を以下に変更する。

stop.js

//!*script

if (PPx.Extract("%*extract(C\"%%t\")").match(/^(txt|text|howm|jpg|jpeg|bmp|png|gif|cpp|h|c|l|el|html|htm|xyzzy|emacs|scm|ini|vbs|js|py|pyw|cfg|kif)$/i)){
} else if (PPx.GetFileInformation(PPx.Extract("%*extract(C\"%%FCDN\")")) == ":DIR"){ // ディレクトリなら何もしない
} else{
  PPx.Execute('*cliptext '+PPx.Extract("%*extract(C\"%%R\")")); // クリップボードにファイル名をコピー
  PPx.Execute('%K\"^@V\"'); // Ctrl+Vで貼付け
  PPx.Quit(-1); // 以降のコマンド実行を中止
}

クリップボードにカーソル下のファイル名をコピーし、それをCtrl+VでPPvに貼り付けています。

以下を編集して取込。これは前回と変わりなし。

KV_main = { ; PPvメイン窓
LEFT ,*execute C,*cursor 6,-1,4,B0000,0,B0000 %: *script %0\Script\stop.js %: *execute C,*ppv -bootid:A -r %%*name(CD,"%%R","%%1")
RIGHT ,*execute C,*cursor 6, 1,4,B0000,0,B0000 %: *script %0\Script\stop.js %: *execute C,*ppv -bootid:A -r %%*name(CD,"%%R","%%1")
UP ,*execute C,*cursor 2,-1,4,B0000,5,B0000 %: *script %0\Script\stop.js %: *execute C,*ppv -bootid:A -r %%*name(CD,"%%R","%%1")
DOWN ,*execute C,*cursor 2, 1,4,B0000,5,B0000 %: *script %0\Script\stop.js %: *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 %: *script %0\Script\stop.js %: *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 %: *script %0\Script\stop.js %: *execute C,*ppv -bootid:A -r %%*name(CD,"%%R","%%1")
}

思ったこととか


クリップボードを利用するというのが少しだけ不満。クリップボード管理ツールと相性が悪いからだ。もっといい方法あれば教えてくだしあ

2015年5月13日水曜日

PPeを少しxyzzyっぽいキーバインドに

挨拶


つかさです。
小さいテキストファイルのちょっとした修正をする時は、PPeが使えるのではないかと気づいた。起動速度が非常に速いからだ。PPeでの編集は、PPcであればShift+E。PPvであればShift+EかCtrl+Eで可能。

そこで、よく使う最低限必要なキーバインドだけ、普段使っているxyzzyにあわせるようにしてみる。


やり方


  • C-x s ファイルを保存
  • C-x C-c 閉じる

とりあえずこの二つのみができるようにする。2ストロークキー入力に必要なので、入れてない場合はTORO's Libraryに行き、Paper Plane xUI Key Moduleを入れておこう。

以下を編集して取込。

-|K_xyzzy =

K_ppe = { ; PPe(K_ppeに該当しない場合はK_editも参照)
^X ,*setnextkey K_xyzzy
}

K_xyzzy = { ** comment **
S ,%k"^S"
^C ,%k"&F4"
}

2015年2月26日木曜日

ImageMagickで画像処理

ImageMagickを使ってPPx上で画像処理する方法のメモ。

  • 左に90度回転
  • 右に90度回転
  • 拡大縮小

ができるようにする。



以下を編集して取込。これで、拡張子がJPG、PNG、JPEG、BMPのファイル上でShift+Enterを押せば、画像処理メニューが出る。
-|M_Picture =

M_Picture = { ** comment **
&Azpainter = %Ob D:\bin\azpt\AzPainter2.exe %FCD
ペイント(&P) = mspaint %FCD
-- = 
左に90度回転(&L) = %Ob "C:\Program Files\ImageMagick-6.9.0-Q16\convert.exe"  -rotate 270 %FCD %FCD
右に90度回転(&R) = %Ob "C:\Program Files\ImageMagick-6.9.0-Q16\convert.exe"  -rotate 90 %FCD %FCD
拡大縮小 = %Ob "C:\Program Files\ImageMagick-6.9.0-Q16\convert.exe"  -geometry %"数値を入力してください"%{30%}%% %FCD "%1\%*nowdatetime(Y-N-D-HMS).%T"
-- = 
壁紙にする(&W) = *customize X_bg:Path=%FDC %: *customize X_bg:Type=10
}

E_scr = { ; \[Enter]用判別
JPG ,%M_Picture,A
PNG ,%M_Picture,A
JPEG ,%M_Picture,A
BMP ,%M_Picture,A
}


追記 2016/09/26


機能しなくなったので修正した。

ImageMagickで画像処理(改)

2015年2月12日木曜日

PPvの連動ビューで除外設定


僕はPPv上から連動ビューをしているのだが、Exeファイル他PPvで表示したくないファイルがある。



情報として不要だし、読み込むときに処理が重くなるので、これを表示しないようにしたい。
そこで、アクティブPPcのカーソル下ファイルの拡張子を判別し、それ以降の処理を止めるスクリプトを作成する。
以下をScriptフォルダに保存

stop.js

//!*script

if (PPx.Extract("%*extract(C\"%%t\")").match(/^(txt|text|howm|jpg|jpeg|bmp|png|gif|cpp|h|c|l|el|html|htm|xyzzy|emacs|scm|ini|vbs|js|py|pyw|cfg|kif)$/i)){
} else {
  PPx.Quit(-1);
}

これは、アクティブPPcのカーソル下ファイルの拡張子が指定したもの以外なら、PPx.Quit(-1)を実行し、それ以降の処理を中止するスクリプト。

僕のやってる連動ビューは

*execute C,*cursor 2, 1,4,B0000,5,B0000 %: *execute C,*ppv -bootid:A -r %%*name(CD,"%%R","%%1")

1.PPcのカーソルを一つ動かす
2.カーソル下のファイルをPPvで表示する

という二段階で実現している。そこで、この2つの処理の真ん中に先のスクリプトを挟み込めば、拡張子判別をして、2の処理を止めれるわけだ。

以下を編集して取込

KV_main = { ; PPvメイン窓
LEFT ,*execute C,*cursor 6,-1,4,B0000,0,B0000 %: *script %0\Script\stop.js %: *execute C,*ppv -bootid:A -r %%*name(CD,"%%R","%%1")
RIGHT ,*execute C,*cursor 6, 1,4,B0000,0,B0000 %: *script %0\Script\stop.js %: *execute C,*ppv -bootid:A -r %%*name(CD,"%%R","%%1")
UP ,*execute C,*cursor 2,-1,4,B0000,5,B0000 %: *script %0\Script\stop.js %: *execute C,*ppv -bootid:A -r %%*name(CD,"%%R","%%1")
DOWN ,*execute C,*cursor 2, 1,4,B0000,5,B0000 %: *script %0\Script\stop.js %: *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 %: *script %0\Script\stop.js %: *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 %: *script %0\Script\stop.js %: *execute C,*ppv -bootid:A -r %%*name(CD,"%%R","%%1")
}

2015年1月16日金曜日

1画面なら自窓に、2画面なら反対窓に書庫を展開

一体型PPxで、1画面なら自窓に。2画面なら反対窓に書庫を展開するようにする。

書庫を展開した時は、たいていその後展開したフォルダに潜って作業することになる。だから、この2パターンだけにしてもいいのではないかと思うのだ。

以下をScriptフォルダに保存

my_unpack.js
//!*script
// 一体型1画面なら自窓に展開
// 一体型2画面なら反対窓に展開
// それ以外なら通常動作

if (PPx.GetComboItemCount == 1){
  PPx.Execute("*unpack");
} else if (PPx.GetComboItemCount == 2){
  PPx.Execute("*unpack %2");
} else {
  PPx.Execute("%K\"@U\"");
}

以下を編集して取込
X_arcdr = 2 ; 書庫全展開は書庫名ディレクトリ内に 0:しない 1:する 2:自動
KC_main = { ; PPcメイン窓
U ,*script %0\Script\my_unpack.js
}

2015年1月9日金曜日

2画面時の比率を50:50に

僕は一体化型PPxを基本1画面、必要な時だけ2画面にして使ってる。
2画面にするときに、左右の窓の比率がずれることがあったので、必ず50:50になるようにする。


やり方


一体化PPxを1画面で使う(必要なときだけ2画面)を踏襲。

以下の2つのファイルをScriptフォルダに保存


2winTab.js
//!*script 

if (PPx.GetComboItemCount <= 1){ // 窓が一つ以下の場合
  PPx.Execute("%Ob %0\\PPCW.EXE -bootid:~ -k *pairrate 50");
  PPx.Execute("*customize XC_mvLR=4,1,6,B0100,6,B100"); // カーソル移動方法の変更
} else {
  PPx.Execute("%K\"@F6\"");
}

2winQ.js
//!*script 

var ppcid = PPx.Extract('%*extract\(C#L\"%%n\"\)'); // 左窓のPPcID
var ppcid2 = PPx.Extract('%*extract\(C#R\"%%n\"\)'); // 右窓のPPcID

if (PPx.GetComboItemCount <= 1){ // 窓が一つ以下の場合
  PPx.Execute("%K\"@Q\"");
} else {
  PPx.Execute('*closeppx ' + ppcid2); // 右窓を閉じる
  PPx.Execute("*customize XC_mvLR = 4,1,4,B0000,6,B001 ; [←][→] "); // カーソル移動方法の変更
}

以下を編集して取込
KC_main = { ; PPcメイン窓
TAB ,*script %0\Script\2winTab.js
Q ,*script %0\Script\2winQ.js
}

2015年1月8日木曜日

最大化表示/通常表示時に1画面に


僕はPPxを一体化で使い、基本的には1画面。コピー他をしたいときには2画面にしている。2画面にする必要があるときは、必ず最大化してから2画面にする。通常表示で2画面だと小さすぎるからだ。

だから、「最大化表示+2画面」から通常表示に戻すときには、かならず1画面にしていた。この処理を省略したい。

やり方


以下をScriptフォルダに保存

togglewinsize2.js
//!*script 

var ppcid = PPx.Extract('%*extract\(C#L\"%%n\"\)'); // 左窓のPPcID
var ppcid2 = PPx.Extract('%*extract\(C#R\"%%n\"\)'); // 右窓のPPcID

if (PPx.GetComboItemCount <= 1){ // 窓が一つ以下の場合
  PPx.Execute("*togglewinsize %*findwindowclass\(\"PaperPlaneCombo\"\)"); // 最大化表示/通常表示トグル
} else {
  PPx.Execute('*closeppx ' + ppcid2); // 右窓を閉じる
  PPx.Execute("*customize XC_mvLR = 4,1,4,B0000,6,B001 ; [←][→] "); // カーソル移動方法の変更
  PPx.Execute("*togglewinsize %*findwindowclass\(\"PaperPlaneCombo\"\)"); // 最大化表示/通常表示トグル
}

以下を編集して取込
MC_click = { ; PPc メイン窓
LD_TITL ,*script %0\Script\togglewinsize2.js
}

これで、タイトルバーをダブルクリックして最大化表示/通常表示にするとき、必ず1画面になる。

2015年1月7日水曜日

現在窓の位置を複数記憶

あいさつ


つかさです。
今回は現在窓の位置の記憶です。デフォルトだと、

  • &\[HOME] 現在の窓の位置を記憶する
  • &[HOME] &\[HOME]で記憶した位置に窓を移動する

と一つだけ記憶できますが、これを複数記憶できるようにします。

準備


必要なのは
  • setalias.js
  • resetalias.js
  • RotateExecute3.js
  • SetDimensions.js

の4つ。これらをScriptフォルダに保存します。上の3つを持ってない場合は、


に置いてあるので、どちらかに行って保存しましょう。

今回新しく作ったのは、SetDimensions.jsです。

SetDimensions.js

//!*script 
// 窓の位置と大きさを変更する
// 第一引数:"x,y,width,height"
// PPXMES.DLLとPPXWIN.DLLが必要

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

var hoge = PPx.Arguments.Item(0).split( "," );

// 実行元が一体型PPcかそれ以外かで分岐
if (PPx.GetComboItemCount != 0&&PPx.Extract('%n').substr(0,1)=="C"){
  PPx.Execute("*windowposition %*findwindowclass\(\"PaperPlaneCombo\"\)"+","+hoge[0]+","+hoge[1]); // 位置の変更
  PPx.Execute("*windowsize %*findwindowclass\(\"PaperPlaneCombo\"\)"+","+hoge[2]+","+hoge[3]); // 大きさの変更
} else {
  PPx.Execute("*windowposition %N"+","+hoge[0]+","+hoge[1]); // 位置の変更
  PPx.Execute("*windowsize %N"+","+hoge[2]+","+hoge[3]); // 大きさの変更
}

引数として、4つの数字をカンマで区切って引用符でくくったもの"x,y,width,height"を受け取り、現在窓の位置と大きさを、それにあわせて変更するスクリプトです。例えば
*script %0\Script\SetDimensions.js,"200,300,400,500"

とすると、位置が(200,300)で幅が400、高さ500になります。

ついで以下を編集して取込。
-|K_SetPPcDimentions =
-|K_SetPPvDimentions =

KC_main = { ; PPcメイン窓
^W ,*setnextkey K_SetPPcDimentions
}
KV_main = { ; PPvメイン窓
^W ,*setnextkey K_SetPPvDimentions
}

K_SetPPcDimentions = { ** comment **
W , *script %0\Script\setalias.js,ppcpos,"%*windowrect(,l),%*windowrect(,t),%*windowrect(,w),%*windowrect(,h)"
R , *script %0\Script\resetalias.js,ppcpos
^W ,*script %0\Script\SetDimensions.js,"%*script("%0\Script\rotateExecute3.js","cposi","ppcpos")"
}
K_SetPPvDimentions = { ** comment **
W , *script %0\Script\setalias.js,ppvpos,"%*windowrect(,l),%*windowrect(,t),%*windowrect(,w),%*windowrect(,h)"
R , *script %0\Script\resetalias.js,ppvpos
^W ,*script %0\Script\SetDimensions.js,"%*script("%0\Script\rotateExecute3.js","vposi","ppvpos")"
}

使い方

  • C_w wで記憶
  • C_w C_wで記憶した順に復元
  • C_w rでリセット