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    =     ; ディレクトリ用のアイコンのパス 空欄:自動