2014年5月30日金曜日

PPxをさらにあふっぽくする


あいさつ


PPxをあふっぽくする以来、2画面PPxに関連した記事をいくつか書いてきた。やりたかったことは大方できた気がするので、今回はそのまとめ。

自分で常用できるレベルまで、PPxをあふっぽくしてみようと思う。



事前の準備


  • Paper Plane xUI Message Module 
  • Paper Plane xUI Window Module
  • Paper Plane xUI Text Module
  • Paper Plane xUI Script Module

の4つをTORO's Libraryからダウンロードし、それぞれに入っている


  • PPXMES.DLL(64bit版ならばPPXMES64.DLL)
  • PPXWIN.DLL(64bit版ならばPPXWIN64.DLL)
  • PPXTEXT.DLL(64bit版ならばPPXTEXT64.DLL)
  • PPXSCR.DLL(64bit版ならばPPXSCR64.DLL)

をPPxフォルダに保存する。

また、PPxフォルダにScriptという名前で新しいフォルダを作成する。



2画面にする


X_win = { ; 表示形式全般 *layout
CA = B000001001
CB = B000001001
}
X_combo = 1 ; 複数 PPc を一体化 0:しない 1:する
X_combos = B0000000000001000010000000001001,B000 ; 一体化時の表示形式
CC_log = _WHI,_BLA ; 共用ログ、アドレスバー(文字,背景)_AUTO可
XC_mvLR = 4,1,6,B0100,6,B100 ; [←][→]
XC_mvUD = 0,1,4,B0000,5,B010 ; [↑][↓] 
X_dock = { ; バー割当て(要IE4以降)*layout,*dock
CBA_B = XC_inf,100,388
}
XC_celD = _AUTO,_AUTO,1,7 ; エントリ表示 文字,背景,カーソル,マーク
C_eInfo = _AUTO,_DRED,_AUTO,_DBLA,_DBLU,_DCYA,_DBLA,_BRO,_GRE,_WHI,_AUTO,HC00000,_AUTO, _SBLU,_BRO,_CYA,_GRE
XC_stat = _AUTO,_AUTO,0,0,I"Mark:" mn i"/" ms8 S1 L I"Entry:" e0 i"/" E0 L Df8 i"(" Dt8 i")"
X_dlf = B1000100,B0,B10000000 ; ドライブのリスト :,メニュー \[L],ジャンプ [1]
X_inag = 0 ; 現在窓以外はグレー調に 0:しない 1:する
;エントリ状態の選択色を青色、ハイライト表示を緑色に
C_eInfo = _AUTO,_DRED,_AUTO,_DBLA,_DBLU,_DCYA,_DBLA,_BRO,_GRE,_WHI,_AUTO,H804000,_AUTO,H404000,_BRO,_CYA,_GRE 

PPxのカスタマイズの方法はいろいろあるが、一番手っ取り早いのが「編集して取込」。

上記をクリップボードにコピーしたあと、メニューバーからツール - カスタマイズを選択、あるいはPPCUSTW.EXEを実行することにより、カスタマイザーを起動する。



ファイルタブの「編集して取込」をクリック。すると、クリップボードの文字列が貼り付けられた状態で「編集して取込」ダイアログが出る。



試験ボタンを押して、エラーが出ないことを確認してからOKボタンを押す。すると、コピペした設定がPPxに反映される。

誰かが作った設定を使うだけなら、PPxは他のどのファイラよりも楽なのだ。ちなみに慣れてきたら、個々の設定ごとにテキストファイルを作って管理すると便利(PPxの設定ファイルを管理する)。

たいていの設定はすぐに反映されるが、一体化設定については再起動しないと反映されない。なので、再起動しよう。


これにより、

  • 窓の一体化
  • スクロールバーの位置変更
  • ログの表示
  • ログの背景色と文字色の変更
  • 情報行を下部に
  • ステータス行を少し短くする
  • 現在窓以外をグレー調にしない
  • 親ディレクトリに戻る動作でドライブリストを表示しない
  • 左右逆カーソルで親ディレクトリに移動
  • 移動方向が隣接窓側なら窓移動
  • ファイル窓の最上下位置でカーソルループ
  • カーソルの形状は文字/背景色の反転
  • 検索時の背景色を緑色に


となる。

ついで、";"を押して表示形式メニューを出し、詳細1(&D)(英語のままなら&Details1)を選択。これで、窓幅一杯の一列表示になる。



キーバインドの設定


ファイラ側(PPCW.EXE)のキーバインドです。

Scriptフォルダに、
  • MarkCursor.js
  • MarkCursorR.js
  • afx_o.js
  • afx_shift_o.js
  • go_mark.js
  • go_markR.js

を保存してから、以下を編集して取込(スクリプトはこの記事の一番最後にあります)。

KC_main = { ; PPcメイン窓
Q = @&F4
F = @\J
\F ,*sortentry 17, 0, 1,B11000,
\T ,*sortentry 11, 0,-1,B11000,
L = @\L
HOME = @\HOME
^' ' ,*script %0\Script\MarkCursor.js
^\SPACE ,*script %0\Script\MarkCursorR.js
O ,*script %0\Script\afx_o.js
\O ,*script %0\Script\afx_shift_o.js
^V_HBA ,*script %0\Script\go_mark.js
^\V_HBA ,*script %0\Script\go_markR.js
}

これで

  • Q でPPxを終了(両方の窓を消す)
  • F で検索
  • Shift+F でファイル名ソート
  • Shift+T で時間逆順ソート
  • L でドライブ変更
  • Home でマークファイル反転
  • Ctrl+Space で直上のマークからカーソル位置までマーク
  • Ctrl+Shift+Space で 直下のマークからカーソル位置までマーク
  • O で現在窓を反対窓と同パスに
  • Shift+O で反対窓を現在窓と同パスに
  • Ctrl+: でマークファイルにカーソルをあわせる
  • Ctrl+Shift+: でマークファイルにカーソルをあわせる(逆順)

というキーバインドになる。

関連リンク



ビューアの設定とキーバインド




ビューア側(PPVW.EXE)の設定とキーバインドです。

Scriptフォルダに

  • picture_view.js
  • text_view.js
  • ChangePPvSize.js

を保存してから、以下を編集して取込(スクリプトはこの記事の一番最後にあります)。

X_vzs = 0 ; 選択する範囲を選択方向に応じて変更 0:しない 1:する 
XV_drag = 2,1,3 ; ドラッグ開始ボタン スクロール,選択,窓移動
XV_imgD = { ; 拡大縮小設定([=],*zoom,*reducemode) PPvID = 倍率、縮小方法
;倍率: -1:窓枠に合わせる -2:窓より小→等倍、大→縮小 0:100% 1-10000:%倍率
;縮小方法: 1:白地に黒文字 2:黒地に白文字 3:カラー高速 4:混合
VA = -2,4
VB = -2,4
}

KV_main = { ; PPvメイン窓
LEFT ,*execute C%*regexp(%n,"/.(.)/$1/"),*cursor 6, -1 %: %KC%*regexp(%n,"/.(.)/$1/")"@N"
RIGHT ,*execute C%*regexp(%n,"/.(.)/$1/"),*cursor 6, 1 %: %KC%*regexp(%n,"/.(.)/$1/")"@N"
UP ,%KC%*regexp(%n,"/.(.)/$1/") "@UP @N"
DOWN ,%KC%*regexp(%n,"/.(.)/$1/") "@DOWN @N"
SPACE ,%KC%*regexp(%n,"/.(.)/$1/") "@SPACE@N"
\SPACE ,%KC%*regexp(%n,"/.(.)/$1/") "@\SPACE@N"
ENTER ,%K"@Q" %: *focus #%*findwindowclass("PaperPlaneCombo")
Q ,%K"@Q" %: *focus #%*findwindowclass("PaperPlaneCombo")
\ENTER ,*script %0\Script\ChangePPvSize.js
&ENTER ,*togglewinsize
}

E_cr = { ; [Enter]用判別
:JPEG ,
:BMP ,
:XJS ,
:XVBS ,
PNG ,*script %0\Script\picture_view.js
JPG ,*script %0\Script\picture_view.js
JPEG ,*script %0\Script\picture_view.js
BMP ,*script %0\Script\picture_view.js
GIF ,*script %0\Script\picture_view.js
TXT ,*script %0\Script\text_view.js
CPP ,*script %0\Script\text_view.js
H ,*script %0\Script\text_view.js
C ,*script %0\Script\text_view.js
L ,*script %0\Script\text_view.js
SCM ,*script %0\Script\text_view.js
INI ,*script %0\Script\text_view.js
VBS ,*script %0\Script\text_view.js
JS ,*script %0\Script\text_view.js
PY ,*script %0\Script\text_view.js
HOWM ,*script %0\Script\text_view.js
CFG ,*script %0\Script\text_view.js
}


PPcから、画像ファイルやテキストファイル上でEnterを押した時に、


  • 左窓で画像ファイルを開いたら右窓に表示
  • 右窓で画像ファイルを開いたらウィンドウ全体表示
  • テキストファイルならどちらの窓で開いてもウィンドウ全体表示

するように。

また、ビューア上での挙動が

  • 左クリックで文字列を選択
  • ビューアを閉じた時にフォーカスがPPcに移るように


ビューア上でのキーバインドが

  • Enterでビューアを閉じてPPcにフォーカスを移す
  • Qでビューアを閉じてPPcにフォーカスを移す
  • カーソルキーで別ファイルを表示
  • Spaceでマーク
  • Shift+Spaceで逆順マーク
  • Shift+Enterで反対窓表示とウィンドウ全体表示トグル
  • Alt+Enterで最大化トグル


するようにしてます。


関連リンク




その他




僕があふの時に使ってたほぼ覚えらんない人のパクりの色を参考にしてみた。

C_ext = { ; 拡張子色
EXE = _RED
LNK = H0080FF
BMP = _MAG
JPG = _MAG
JPEG = _MAG
GIF = _MAG
TIF = _MAG
ICO = _MAG
PNG = _MAG
MPG = H8000FF
MPEG = H8000FF
MP4 = H8000FF
AVI = H8000FF
TS = H8000FF
MP3 = H80FF80
WAV = H80FF80
WMA = H80FF80
FLAC = H80FF80
OGG = H80FF80
M3U = H808040
ASF = H808040
ASX = H808040
TXT = _CYA
HLP = _CYA
CSV = _CYA
MAC = _CYA
CHM = _CYA
DOC = H40FF00
XLS = H40FF00
HTM = H40FF00
HTML = H40FF00
URL = H40FF00
INI = H40FF00
CFG = H40FF00
DAT = H40FF00
DEF = H40FF00
KEY = H40FF00
DLL = _DMAG
SYS = _DMAG
REG = _DMAG
INF = _DMAG
BAK = H004080
OLD = H004080
TMP = H004080
IMG = H8080FF
ISO = H8080FF
LZH = HFFFF80
ZIP = HFFFF80
CAB = HFFFF80
TAR = HFFFF80
RAR = HFFFF80
GZ = HFFFF80
TGZ = HFFFF80
7Z = HFFFF80
}


サムネイル表示のトグル





Shift+"."を押すことで、サムネイル表示と詳細表示をトグルするようにする。以下を編集して取込。

KC_main = { ; PPcメイン窓
'>' ,*RotateExecute id,"*customize XC_mvLR=4,1,4,B0000,0,B001 %%: *viewstyle サムネイル1(&T) %%: %%M?layoutmenu,!P","*customize XC_mvLR=4,1,6,B0100,6,B100 %%: *viewstyle 詳細1(&D) %%: %%M?layoutmenu,!P"
}


表示形式メニューが英語のままなら、以下でたぶんおk

KC_main = { ; PPcメイン窓
'>' ,*RotateExecute id,"*customize XC_mvLR=4,1,4,B0000,0,B001 %%: *viewstyle &Thumbnails1 %%: %%M?layoutmenu,!P","*customize XC_mvLR=4,1,6,B0100,6,B100 %%: *viewstyle &Details1 %%: %%M?layoutmenu,!P"
}


壁紙変更メニュー



画像閲覧中に"_"を押すことで、壁紙変更メニューが出るようにする。



以下を編集して取込。
-|M_WallPaper =

M_WallPaper = { ** comment **
PPC全体の壁紙にする(&1) = *customize X_bg:P_ca=%FDC %: *customize X_bg:P_cb=%FDC %: *customize X_bg:T_ca=20 %: *customize X_bg:T_cb=20
PPC[&A]の壁紙にする = *customize X_bg:P_ca=%FDC %: *customize X_bg:T_ca=1
PPC[&B]の壁紙にする = *customize X_bg:P_cb=%FDC %: *customize X_bg:T_cb=1
-- = 
PPC全体の壁紙をナシにする = *customize X_bg:-|P_ca= %: *customize X_bg:-|P_cb=
PPC[A]の壁紙をナシにする = *customize X_bg:-|P_ca=
PPC[B]の壁紙をナシにする = *customize X_bg:-|P_cb=
-- = 
壁紙の明るさを調整する = *customize X_bg:Bright=%"明るさ(Bright)"%{%*getcust(X_bg:Bright)%}
}

KV_img = { ; PPcメイン窓
'\' ,%M_WallPaper,1
}



外部ソフトからパスを変更


fenrirからPPxにパスを渡す方法。

Ctrl+カーソル左で左窓に。Ctrl+カーソル右で右窓にパスを渡したい時は次のようにする。

2left.txt

[.***;
PPx左窓|D:\bin\ppx\PPCW.EXE -r /k *execute C#L,*jumppath "%P" /entry %: *focus C#L
]


2right.txt

[.***;
PPx右窓|D:\bin\ppx\PPCW.EXE -r /k *execute C#R,*jumppath "%P" /entry %: *focus C#R
]


スクリプト



PPcキーバインド関連



MarkCursor.js
//!*script
// 直上のマークからカーソル位置まで全てマーク

var lastEntry,firstEntry;
lastEntry = PPx.EntryIndex;  // カーソル位置

// 直上のマーク位置を取得
for (var i = lastEntry; i > 0; i--) {
  if (PPx.Entry(i).Mark == 1) {
    firstEntry = i;
    break;
  }
}

// 直上にマークが無ければ終了
if (!firstEntry) PPx.Quit();

// カーソル位置までマーク
for (var i = firstEntry; i < lastEntry + 1; i++) {
  PPx.Entry(i).Mark = 1;
}

MarkCursorR.js
//!*script
// 直下のマークからカーソル位置まで全てマーク

var firstEntry,lastEntry;
firstEntry = PPx.EntryIndex;  // カーソル位置

// 直下のマーク位置を取得
for (var i = firstEntry; i < PPx.EntryAllCount; i++) {
  if (PPx.Entry(i).Mark == 1) {
    lastEntry = i;
    break;
  }
}

// 直下にマークが無ければ終了
if (!lastEntry) PPx.Quit();

// カーソル位置までマーク
for (var i = firstEntry; i < lastEntry; i++) {
  PPx.Entry(i).Mark = 1;
}

afx_o.js
//!*script

if (PPx.Extract('%1') == PPx.Extract('%2')){
  PPx.Execute("%J %~FCD");
} else {
  PPx.Execute("%j %2");
}

afx_shift_o.js
//!*script

if (PPx.Extract('%1') == PPx.Extract('%2')){
  PPx.Execute("%K\"@\'=\'\"");
} else {
  PPx.Execute("*execute ~,*jumppath %1");
}

go_mark.js
//!*script

var imark ,imark2;  // カーソル位置

// 直下のマーク位置を取得
for (var i = PPx.EntryIndex + 1; i < PPx.EntryAllCount; i++) {
  if (PPx.Entry(i).Mark == 1) {
    imark = i;
    break;
  }
}

// 最初のマーク位置を取得
for (var i = 0; i < PPx.EntryIndex; i++) {
  if (PPx.Entry(i).Mark == 1) {
    imark2 = i;
    break;
  }
}

// カーソル移動
if (imark != null){
  PPx.EntryIndex = imark;
} else if (imark2 != null) {
  PPx.EntryIndex = imark2;
} else PPx.Quit();

go_markR.js
//!*script

var imark ,imark2;  // カーソル位置

// 直上のマーク位置を取得
for (var i = PPx.EntryIndex - 1; i >= 0; i--) {
  if (PPx.Entry(i).Mark == 1) {
    imark = i;
    break;
  }
}

// 最後のマーク位置を取得
for (var i = PPx.EntryAllCount - 1; i > PPx.EntryIndex; i--) {
  if (PPx.Entry(i).Mark == 1) {
    imark2 = i;
    break;
  }
}

// カーソル移動
if (imark != null){
  PPx.EntryIndex = imark;
} else if (imark2 != null) {
  PPx.EntryIndex = imark2;
} else PPx.Quit();

PPv関連



picture_view.js
//!*script 

var ppcid = PPx.Extract('%n').slice(1); // PPc ID

if (PPx.GetComboItemCount <= 1){
  PPx.Execute('*setcust X_win:V= B000100000');
  PPx.Execute('*launch %Oi %0\\PPVW.EXE -bootid:' +ppcid+ ' %*name(CD,"%R","%1")');
  PPx.Quit();
}

if (PPx.WindowDirection == 1){
  PPx.Execute('*setcust X_win:V= B000100100');
  PPx.Execute('*launch %Oi %0\\PPVW.EXE -bootid:' +ppcid+ ' %*name(CD,"%R","%1")');
  PPx.Execute('*fitwindow %N~,%NV' +ppcid);
} else {
  PPx.Execute('*setcust X_win:V= B000100000');
  PPx.Execute('*launch %Oi %0\\PPVW.EXE -bootid:' +ppcid+ ' %*name(CD,"%R","%1")');
  PPx.Execute('*fitwindow %*findwindowclass("PaperPlaneCombo"),%NV' +ppcid);
}


text_view.js
//!*script 

var ppcid = PPx.Extract('%n').slice(1); // PPc ID

if (PPx.GetComboItemCount == 0){
  PPx.Execute('*setcust X_win:V= B000100000');
  PPx.Execute('%Oi %0\\PPVW.EXE -bootid:' +ppcid+ ' %*name(CD,"%R","%1")');
} else {
  PPx.Execute('*setcust X_win:V= B000100000');
  PPx.Execute('*launch %Oi %0\\PPVW.EXE -bootid:' +ppcid+ ' %*name(CD,"%R","%1")');
  PPx.Execute('*fitwindow %*findwindowclass("PaperPlaneCombo"),%NV' +ppcid);
}

ChangePPvSize.js
//!*script

ppvwidth = PPx.Extract("%*windowrect(,w)");
ppcwidth = PPx.Extract("%*windowrect(" + PPx.Extract('%*findwindowclass("PaperPlaneCombo")') +",w)");

if (ppvwidth == ppcwidth){
  PPx.Execute('*fitwindow %N~');
} else {
  PPx.Execute('*fitwindow %*findwindowclass("PaperPlaneCombo")');
}

追記 2014/05/31



picture_view.jsとtext_view.jsを書庫内でも機能するようにした

追記 2014/06/01



サムネイル表示トグルの箇所を修正

反対窓表示とウィンドウ全体表示のトグル

二画面でPPvを表示するとき、大きさを反対窓表示と全体表示のトグルで切り替えることができればいいかもと思った。



半分だと文字が見えにくいけれども、全画面表示はさすがに大きいよなというときに



PPvの大きさをウィンドウ全体に拡大。もっかい同じキーを押すと戻ります。

ChangePPvSize.js

//!*script

ppvwidth = PPx.Extract("%*windowrect(,w)");
ppcwidth = PPx.Extract("%*windowrect(" + PPx.Extract('%*findwindowclass("PaperPlaneCombo")') +",w)");

if (ppvwidth == ppcwidth){
  PPx.Execute('*fitwindow %N~');
} else {
  PPx.Execute('*fitwindow %*findwindowclass("PaperPlaneCombo")');
}
KV_main = { ; PPvメイン窓
\ENTER ,*script %0\Script\ChangePPvSize.js
}

Shift+Enterに登録してます。

実行元の窓の大きさと、一体化窓の大きさとを取得。それがイコールなら反対窓と同じ大きさに。そうでないなら一体化窓と同じ大きさになるようにしている。

2014年5月29日木曜日

2画面PPxで壁紙変更メニュー

あいさつ


つかさです。
今回は壁紙変更メニュー。

あふでは、ビューア上で"_"を押すと




このようなメニューが出て、壁紙を左右に分けて変更することができる。




同じことをPPxでもやってみる。


やり方





以下を編集して取込。

-|M_WallPaper =

M_WallPaper = { ** comment **
PPC全体の壁紙にする(&1) = *customize X_bg:P_ca=%FDC %: *customize X_bg:P_cb=%FDC %: *customize X_bg:T_ca=20 %: *customize X_bg:T_cb=20
PPC[&A]の壁紙にする = *customize X_bg:P_ca=%FDC %: *customize X_bg:T_ca=1
PPC[&B]の壁紙にする = *customize X_bg:P_cb=%FDC %: *customize X_bg:T_cb=1
-- = 
PPC全体の壁紙をナシにする = *customize X_bg:-|P_ca= %: *customize X_bg:-|P_cb=
PPC[A]の壁紙をナシにする = *customize X_bg:-|P_ca=
PPC[B]の壁紙をナシにする = *customize X_bg:-|P_cb=
-- = 
壁紙の明るさを調整する = *customize X_bg:Bright=%"明るさ(Bright)"%{%*getcust(X_bg:Bright)%}
}

KV_img = { ; PPcメイン窓
'\' ,%M_WallPaper,1
}

2014年5月28日水曜日

PPxで一括リネーム(連番)

今回はPPxで一括リネーム。連番を振る。

デフォルトのキーバインドでできる機能なので、特に僕がどうこう工夫したということは全くないのだが、たまに必要になるたびにやり方を忘れ、調べ直すということをしてるのでメモ代わりに。

リネームしたいファイルをマークする。


Shift+Rを押す。するとダイアログが出るので、hoehoe\.jpgというふうに入力。\の箇所が連番になる。


あとはOKを押すだけ。失敗しないか気になる人は、右端の真ん中にある試行ボタンを押してからでもいい。


このようにリネームされる。

PPxであふっぽくサムネイル表示

あいさつ


二画面PPxをあふっぽくする方法をなんとなく時々追求している。今回はあふっぽくサムネイル表示。つかさのほえほえ日記 - PPxをあふっぽくするの延長線上です。

あふではShift+.を押すことで、テキストのみ表示とサムネイル表示をトグルで切り替えることができる。




この時、サムネイル表示と同時に

  • スクロールバーを縦から横に
  • カーソルが端に来ても、親フォルダへの移動や反対窓への移動をしない

ようにもなっている。

同じことをPPxでも実装してみる。



やり方


Paper Plane xUI Text Moduleをダウンロードし、PPXTEXT.DLL(64bitならPPXTEXT64.DLL)をPPxフォルダに入れておく。

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

KC_main = { ; PPcメイン窓
'>' ,*RotateExecute id,*viewstyle &Thumbnails1,*viewstyle &Details1 %: %M?layoutmenu,!P %: *RotateCustomize XC_mvLR,"4,1,4,B0000,0,B001","4,1,6,B0100,6,B100" 
}


これで、Shift+.を押すたびに、テキストのみ表示とサムネイル表示を切り替えることができる。

  • *RotateCustomizeでカーソル左右の挙動を切り替え
  • *RotateExecuteでサムネイル表示と詳細表示を切り替え
  • %M?layoutmenu,!Pでスクロールバーの位置を切り替え

ということをしてます。

*viewstyleの&Thumbnails1と&Details1とは、設定によってはまた違う名前になってるかもしれないから読み替えてください。日本語化してあるならおそらく

KC_main = { ; PPcメイン窓
'>' ,*RotateExecute id,*viewstyle サムネイル1(&T),*viewstyle 詳細1(&D) %: %M?layoutmenu,!P %: *RotateCustomize XC_mvLR,"4,1,4,B0000,0,B001","4,1,6,B0100,6,B100"
}

となる。


画像管理ならもしかして二画面のほうがやりやすいかもしれない。

あとで";"から表示形式を変更した時、設定がずれそうなのが難点

追記 2014/06/01


挙動が変になることがあったので以下に変えた。

KC_main = { ; PPcメイン窓
'>' ,*RotateExecute id,"*customize XC_mvLR=4,1,4,B0000,0,B001 %%: *viewstyle サムネイル1(&T) %%: %%M?layoutmenu,!P","*customize XC_mvLR=4,1,6,B0100,6,B100 %%: *viewstyle 詳細1(&D) %%: %%M?layoutmenu,!P"
}

2014年5月20日火曜日

自窓以外を閉じる

窓をたくさん開いて意味がわからなくなった時のために、自窓以外を一挙に閉じることができれば便利かもと思って考えてみた。

自窓以外の窓を閉じる

*closeppx V* %: *closeppx C* %: %Ob %0\PPCW.EXE -r -bootid:%*regexp(%n,"/.(.)/$1/")

これをPPcから実行する。

PPc[A]以外の窓を閉じる

*closeppx V* %: *closeppx C* %: %Ob %0\PPCW.EXE -r -bootid:A

僕の使い方だとこっちのが有用性ありそう。こちらは、PPvからも実行可能。

自窓以外の窓を閉じる(スクリプト)


自窓が一瞬でも閉じるのが気に食わない!という場合はスクリプトを使うことになる。

PPxClose.js

//!*script

var close_ids = [];
var useppx = PPx.Extract('%n');

// PPcのID取得
for (var i = 65; i < 91; i++) {
  ppcid = String.fromCharCode(i);
  if (PPx.Extract('%NC' + ppcid).match(/.+/)) {
    if ("C" + ppcid == useppx ) {
    }
    else {
      close_ids.push("C" + ppcid);
      continue;
    }
  }
}

PPx.Execute('*closeppx "' + close_ids.join(',') + '"');
PPx.Execute('*closeppx V*');

*script %0\Script\PPxClose.js

PPc[A]以外の窓を閉じる(スクリプト)


同上。

PPxClose2.js

//!*script

var close_ids = [];
var useppx = PPx.Extract('%n');

// PPcのID取得
for (var i = 66; i < 91; i++) {
  ppcid = String.fromCharCode(i);
  if (PPx.Extract('%NC' + ppcid).match(/.+/)) {
    close_ids.push("C" + ppcid);
    continue;
  }
}

PPx.Execute("%Ob %0\PPCW.EXE -r -bootid:A");
if (close_ids.join(',') != "") {
  PPx.Execute('*closeppx "' + close_ids.join(',') + '"');
}
PPx.Execute('*closeppx V*');

*script %0\Script\PPxClose2.js


追記 2014/05/21


作者さんに自窓以外を閉じる方法を教えていただきました。
これなら、PPcでもPPvでも実行できてスクリプトも使わずに済みます。



PPc[A]以外の窓を閉じるなら

%Ob %0\PPCW.EXE -r -bootid:A %: *closeppx !/C_*A/

こんな感じかな?

2014年5月17日土曜日

USBメモリを新しく購入



僕は、ここ数年はずっとTranscendのMP320を使っていた。専用ソフトが無くても、MP3ファイルをフォルダに入れるだけで音楽が聞けるということと、普通のUSBメモリのように、コード無しに直接USBポートに差し込めるのが利点。MP3ファイルと持ち運びたいデータを入れ、MP3プレイヤー+USBメモリとして、日頃から持ち歩いていた。

ファイルの転送速度が遅かったり起動が遅かったり時計がすぐにずれたりといろいろ欠点はあったが、かなり気に入っていた。




だがここ一、二年は、中にあるファイルがバグって数カ月ごとにフォーマットする必要があったりと、調子が悪かった。先日、ついにディスプレイに何も表示されなくなったので買い換えることに


というわけで、Silicon Powerの8GBのUSBメモリを紐付きのUSBメモリキャップCUS-06CBUと一緒に購入





小さくて無くしそうなので、百均で買ったストラップもくっつける




MP3プレイヤーの機能は、ずっと眠っていたSONYのNW-705Fに任せることにする


大きさ比較



2014年5月13日火曜日

PPv間で窓の切り替え

別IDのPPvをアクティブにするスクリプト。以前、PPc-PPv間で同じことをするスクリプトを作ったが(TabでPPc-PPv間切り替え)、PPv間のみでできたほうがいい場合もありそうなので作成。


PPvTab2.js

//!*script

// 実行元のPPvIDを文字コードに変換
var useppv = PPx.Extract('%n').slice(1).charCodeAt(0) + 1;

// 実行元PPvよりアルファベット順で後のPPvがあればフォーカスを移す
for (var i = useppv; i < 91; i++) {
  ppvid = String.fromCharCode(i);
  if (PPx.Extract('%NV' + ppvid).match(/.+/)) {
    PPx.Execute("*focus V" + ppvid);
    PPx.Quit(-1);
  }
}

// 実行元PPvよりアルファベット順で前のPPvがあればフォーカスを移す
for (var i = 65; i < useppv; i++) {
  ppvid = String.fromCharCode(i);
  if (PPx.Extract('%NV' + ppvid).match(/.+/)) {
    PPx.Execute("*focus V" + ppvid);
    PPx.Quit(-1);
  }
}


以下を編集して取込。Shift+Tabに割り当てる。
KV_main = { ; PPcメイン窓
\TAB ,*script %0\Script\PPvTab2.js
}

仮のディレクトリ名を日時から自動で決める

一時的にフォルダを作るときに、howmのように、フォルダ名を日時から自動でつけることができれば便利なのではないかと思った。

まずはTORO's Libraryに行き、Paper Plane xUI Text Moduleをダウンロード。
その中にあるPPXTEXT.DLL(64bit版であればPPXTEXT64.DLL)をPPxフォルダに入れる。これで、日時を取得する%*nowdatetimeが使えるようになる。

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

KC_main = { ; PPcメイン窓
K ,*set name=%1\%"ディレクトリ作成"%{%*nowdatetime(Y-N-D-HMS)%} %: *makedir "%'name'" %: *jumppath "%'name'" /entry
}

これで、Kを押すと日時から自動で付けられたフォルダ名が入力された状態になる。



追記 2014/05/25


1.37から、新規エントリ作成の初期名にマクロ文字を使用できるようになりました。

カスタマイザでやるなら、全般タブ - PPcから設定。


編集して取込なら、以下のようになります

Mes0411 = {
NWDN = %*nowdatetime(Y-N-D-HMS)
}

2014年5月11日日曜日

PPxを一画面で使いこなす

あいさつ


nストロークキー入力でフォルダジャンプによって、

  • 2ストロークキー(C_x ?)で、よく行くフォルダへのジャンプ(現在窓)
  • 3ストロークキー(C_x a ?)で、フォルダを指定して新しい窓を開く

の2つができるようになった。これと反対窓でマークしたファイルを現在窓に移動/コピーとを組み合わせることによって、PPxを使い出して以来ずっと追求していた、スムーズな一画面操作が可能になりそう(PPxへの移行)。

基本的な考え方


基本的には、ずっとPPc[A]のみを利用する。画像の閲覧だろうとメモを書くのだろうと何かのソフトのカスタマイズだろうとデータ整理だろうと、何か連続して作業したいことがあったなら、2ストロークキー入力+階層移動でそのフォルダにジャンプ。そしてそこで、何らかの作業をする。そこでやっている作業が一段落したら、再び2ストロークキー入力+階層移動でフォルダ移動。

PCを起動したなら、基本的にはずっとPPc[A]を拠点にする、というイメージです。意識はずっとPPc[A}に集中したまま作業する、ということがしたい。

これを実現するために


これを実現するために、他の窓を使う必要がある個々のパターンについて、準備をしておく。適当にしてたら、他の窓を使う→それを再利用して云々で、ずっとPPc[A]を使うというスタイルが崩れてしまうからです。
  1. 二窓を使う操作をするとき
  2. 一時的に別の作業をしたいとき
  3. 一時的に二窓を使う別の作業をしたいとき

の3パターンの対策をしておけばとりあえずはいいと思う。


二窓を使う操作をするとき


カレントフォルダにあるファイルを、どこか別のフォルダへ移動、あるいはコピーしたいという場合。

この時は、反対窓でマークしたファイルを現在窓に移動/コピーでやってた方法を使う。

まず、PPc[A]で移動したいファイルにマーク。




3ストロークキー(C_x a ?)で、移動先(近く)のフォルダを指定して別窓(PPc[B])を開き、(必要であれば階層移動をしてから)Shift+Mを押す。




これで、PPc[A]でマークしたファイルがPPc[B]のフォルダに移動する。

移動先のフォルダで何かしたい作業があるなら、そのまま続行。特にないか、その作業が終わったのなら、Qで別窓PPc[B]を消す。これで、PPc[A]に戻ってくることができる。

一時的に別の作業をしたいとき


今継続中の作業とは異なる別作業を、一時的にしたいという場合。唐突に思いついたアイデアをメモフォルダに行ってメモしたいだとか、何かのデータを参照したいだとか、流していた音楽ファイルが途切れたので別のアルバムを再生したい時だとかです。


例えば、PPxをカスタマイズしている最中、ぐぬぬ画像を唐突に見たいと思ったならば、3ストロークキー(C_x a ?)でぐぬぬフォルダ上位のフォルダを別窓で開き、ぐぬぬフォルダへ階層移動。





用事が終われば、Qを押して窓PPc[B]を閉じ、再びPPc[A]一窓に戻る。そして、最初にしていた作業を続行する。

一時的に二窓を使う別の作業をしたいとき


一時的に、2つの窓を使う作業をしたいという場合。今いるフォルダとは別のフォルダにあるファイルを、別フォルダに移動したいと思いついた時や、待っていたダウンロードが完了したので、そのダウンロードファイルを別の場所に試しに展開して参照したい時、などです。


3ストロークキー(C_x a ?)で別窓PPc[B]を開き、階層移動をして、移動元のファイルをマーク




3ストロークキーで移動先のフォルダを別窓PPc[C]で開く。




Shift+Mでファイル移動。Qを二回押してPPc[C]とPPc[B]を閉じ、PPc[A]に戻る

2014年5月9日金曜日

PPvをPPcと連動(ID一対一対応をやめる)

あいさつ


僕は、連動ビューをPPv中心にできるよう設定している。PPv上でカーソル操作をすれば、それにあわせてPPcのカーソルが動き、対応するファイルをPPvで表示。PPcを中心にするデフォルトの連動ビューの逆ですね。
その際、PPcとPPvのIDを一対一対応させていた(PPcとPPvのIDを一対一対応させる)。だが、最近この一対一対応があまり有効に機能せず、むしろ制限になっている気がしてきている。

メリット


IDを対応させることのメリットとして最初に想定していたのは

  1. 複数のPPvそれぞれで連動ビューが可能
  2. 連動ビューを一時中断した後の再開が可能

の2つ。

だが、僕の使い方で連動ビューが有効に機能するためには、窓の位置関係として





このように重なっていることが必須。間に別のウィンドウが挟まってはダメなわけだ。そしてこれは、窓を複数開くことで必ず崩れてしまう。





崩れた場合、連動ビューをしても、他のウィンドウに隠れている部分でPPcのカーソルが動いているのが少し見えるだけ。こうなるともう連動ビューの意味が無い。PPvからの連動ビューは、アクティブなPPcからPPvを起動したその瞬間にしか機能しないのだ。

というわけで、基本的に連動ビューというのは、一度そのPPvからフォーカスをはずしたなら使えなくなると考えるべき。だとすると、最初の頃想定していたメリットというのはほとんどないことになってしまう。

  1. 複数のPPcを開いたとするなら、その時点で少なくとも一対のPPc-PPvの関係は崩れているはず。
  2. 一時中断したのなら、その間にした作業によって、同じく窓間の関係は崩れているだろう。

デメリット


ID一対一対応のデメリットは、使えるPPvの数が限定されてしまうこと。この方法だと、PPvの数は必ずPPcの数以下になってしまうわけだ。そして、それゆえにPPvの用途が限定されてしまう。例えば、複数のPPvを見比べるということができない。

というわけで、IDの一対一対応をやめることにする。

やり方


以下を編集して取込。

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

KV_main = { ; PPvメイン窓
ENTER ,%K"@Q"
Q ,*script %0\Script\PPvClose.js
P ,*launch %0\PPVW.EXE "%1\\%R"
LEFT ,*execute C,*cursor 6, -1 %: %KC"@N"
RIGHT ,*execute C,*cursor 6, 1 %: %KC"@N"
UP ,%KC "@UP @N"
DOWN ,%KC "@DOWN @N"
}

基本的には一対一対応させる前と同じ(PPvのファイル切り替えをカーソル上下左右で)。Enterを押せば、PPcのIDに関係なく、そのたび新しいIDのPPvを起動。PPv上のカーソル操作は、アクティブなPPcと連動させる。

追加の機能として、

  • PPvでPを押せば新たにPPvを起動
  • Enterを押せばPPvを閉じる
  • Qを押せば、PPvを閉じて別のPPvにフォーカスを当てる

ようにした。

想定動作


例えば画像ファイルを閲覧したいとする。画像フォルダに行ってEnterを押し、PPv[A]を起動。カーソルを上下左右させて、よさげな画像が無いか探す。



これだ!というのを見つけたらPを押す。すると、先ほどと同じファイルパスでPPv[B]が新たに起動。次はこのPPvで連動ビューを続ける。



またよさげな画像を見つけたら、またPを押す。



これを繰り返すことで、PPvを並列することができる。




過去に書いたスクリプトで関連してそうなのを複数表示したいだとか、過去に書いたメモを複数表示したいとか、そういうのに使えそう。

PPvClose.js


Qに登録したPPvClose.jsは、PPvを閉じたあとに別IDのPPvにフォーカスを当てるスクリプト。
PPvからカーソル移動をすると、PPvを閉じた時のフォーカスがPPcに移ってしまう。これだとまずい場合があるので、これを用意した。

PPvClose.js

//!*script

// 逆順にたどる。Z to A
// 実行元のPPvIDを文字コードに変換
var useppv = PPx.Extract('%n').slice(1).charCodeAt(0);

PPx.Execute("%K\"@Q\"");

// 実行元PPvよりアルファベット順で前のPPvがあればフォーカスを移す
for (var i = useppv -1 ; i > 64; i--) {
  ppvid = String.fromCharCode(i);
  if (PPx.Extract('%NV' + ppvid).match(/.+/)) {
    PPx.Execute("*focus V" + ppvid);
    PPx.Quit(-1);
  }
}

// 実行元PPvよりアルファベット順で後ろのPPvがあればフォーカスを移す
for (var i = 90; i > useppv; i--) {
  ppvid = String.fromCharCode(i);
  if (PPx.Extract('%NV' + ppvid).match(/.+/)) {
    PPx.Execute("*focus V" + ppvid);
    PPx.Quit(-1);
  }
}

2014年5月5日月曜日

nストロークキー入力でフォルダジャンプ

挨拶


つかさです。
今日は、nストロークキー入力によるフォルダジャンプです。

準備


nストロークキー入力というのは、Emacsやxyzzyである操作方法。

メモ帳などの通常のエディタは、

  • C-x 切り取り

というように、ひとつのキーにはひとつの操作しか割り振ることができない。
だが、xyzzyのように2ストロークキー入力ができるエディタだと、

  • C-x s 複数バッファを上書き保存
  • C-x C-c エディタを終了する
  • C-x 0 カレントウィンドウを削除

というように、C-xを押したあとに続けて何を押すかによって複数の操作を割り振ることができる。

1ストロークキー入力だと、アルファベット×修飾キーの組み合わせの中からさらに、ホームポジションからの押しやすさ、覚えやすさ等で絞られ、使えるキーボードショートカットはそれほど多くはない。それに比較して格段に、扱えるキーボードショートカットが増えるわけです。(ちなみにC-x sとは「Ctrl+Xを押したあと、Sキーを押す」の意味です。)

PPxではこのnストロークキー入力をすることができる。

TORO's Libraryに行き、Paper Plane xUI  Key Moduleをダウンロード。



その中にあるPPXKEY.DLL(64bitならPPXKEY64.DLL)をPPxフォルダに入れる。これで、nストロークキー入力に必要な*setnextkeyを使えるようになります。

nストロークキー入力のやり方


2ストロークキー入力


  • C-x aでaaaaと表示
  • C-x bでbbbbと表示

したければ次のようにする。

KC_main = { ; PPcメイン窓
^X ,*setnextkey K_user1
}

K_user1 = {
a , echo aaaa
b , echo bbbb
}


K_user1が、2ストローク目のキーマップに対応しています。
そしてこのキーマップを、1ストローク目に割り当てたいキーであるCtrl+Xに、*setnextkeyで登録しています。

3ストロークキー入力


  • C-x aでaaaaと表示
  • C-x bでbbbbと表示
  • C-x c aでhomuと表示
  • C-x c bでhomuhomuと表示

したい場合には次のようにする。

KC_main = { ; PPcメイン窓
^X ,*setnextkey K_user1
}

K_user1 = {
a , echo aaaa
b , echo bbbb
c , *setnextkey K_user2 ; 3ストロークキー入力
}

K_user2 = {
a , echo homu
b , echo homuhomu
}

K_user2という3ストローク目のキーマップを用意。
そして、2ストローク目のキーマップにこのキーマップを登録しています。

これと同じ要領でキーマップを増やしていけば、4ストロークキー入力、5ストロークキー入力、というのも可能になります。

フォルダジャンプ


で、ここからが本題です。僕が思ったのは、これをフォルダ移動に利用できないか、ということ。

僕がよく行くフォルダというのは、非常に限定されている。

  • bin
  • work
  • download
  • Music
  • howm2

くらいしかないわけです。他のフォルダを使う頻度と較べて、これらのフォルダに移動する場合が圧倒的に多い。そして、これらのフォルダ間を一日で何度も往復している。

このフォルダ移動に、今まではfenrirを使ってた。だが、選択肢が片手分しかないのに、登録した数十、数百のフォルダからインクリメンタルサーチで絞り込んで移動、という手順は無駄過ぎてあまり好きではなかった。

同じフォルダ移動でも、一日に何度も移動するフォルダへの移動と、何週、あるいは何ヶ月かに一度程度しか移動しないフォルダへの移動との2つがある。後者であれば、fenrirやEverythingを使えばいいのだけれども、前者でも同じ方法をとるのは効率が悪い。
他にも履歴だとかブックマークだとかを使う方法もあり、追求したこともあったがどれもイマイチだった。

だが、nストロークキー入力を使えばこの問題は解決できる。nストロークキー入力で実行するコマンドに、各々のフォルダへのジャンプを割り振ればいい。1ストロークキー入力であれば、数に限りのあるキーを複数個使って、それぞれに個々のフォルダ移動を割り振るというのはバカバカしくて考える気もしないが、これなら実質、一つのキーを潰すだけで済む。

やり方


以下を編集して取り込み

-|K_fjump1 =
-|K_fjump2 =

KC_main = { ; PPcメイン窓
^X ,*setnextkey K_fjump1
}

K_fjump1 = { ** comment **
A , *setnextkey K_fjump2 ; 3ストロークキー入力
B ,%j"D:\bin"
D ,%j"D:\download"
^D ,%K"C_DIR" ; 下層移動
H ,%j"G:\howm2"
M ,%j"D:\data\Music"
^S ,%K"@BS" ; 親ディレクトリ
W ,%j"D:\Work"
^X , *cursor 8,1,13,0,13,0 ; ドライブ変更
}

K_fjump2 = { ** comment **
B ,%0\PPCW.EXE "D:\bin"
D ,%0\PPCW.EXE "D:\download"
H ,%0\PPCW.EXE "G:\howm2"
M ,%0\PPCW.EXE "D:\data\Music"
W ,%0\PPCW.EXE "D:\Work"
}

これで、

  • C-x b binフォルダへ
  • C-x d downloadフォルダへ
  • C-x h howm2フォルダへ
  • C-x m Musicフォルダへ
  • C-x w Workフォルダへ
  • C-x C-d 下層移動
  • C-x C-s 親ディレクトリへ
  • C-x C-x ドライブ変更
  • C-x a b 窓をもう一枚開き、binフォルダへ
  • C-x a d 窓をもう一枚開き、downloadフォルダへ
  • C-x a h 窓をもう一枚開き、howm2フォルダへ
  • C-x a m 窓をもう一枚開き、Musicフォルダへ
  • C-x a w 窓をもう一枚開き、Workフォルダへ

となる。

思いつくこととか


ルートフォルダへ移動だとか、履歴を戻るだとか、スクリプトを利用して「同じ階層の次のフォルダへ移動」だとかも組み込めるかもしれない。

ランチャにも使えそう


基本的に、日常的に使うコマンドであればnストロークキー入力が使えそう。そうでないとnストロークキー入力にいくら登録しても忘れちゃうからですね。

この条件を満たすものとして、他に思いついたのはランチャ。ブラウザのように、一日になんども使うソフトの起動に便利かもしれない。

-|K_launcher =

KC_main = { ; PPcメイン窓
^Z ,*setnextkey K_launcher
}

K_launcher = { ** comment **
C ,%Ob "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
F ,%Ob "C:\Program Files (x86)\Mozilla Firefox\firefox.exe"
X ,%Ob D:\bin\xyzzy\xyzzy.exe
}

これで

  • C-z c    Chromeを起動
  • C-z f    FireFoxを起動
  • C-z x    xyzzyを起動

することができます。