2013年12月31日火曜日

ドライブを順次変更する

あいさつ


つかさです。PPxでスクリプトを使わないとできなさそうなあふっぽいキーバインドを実現してみる編その4です。今回はドライブ順次変更。あふではCtrl+カーソル左右に割り当てられてます。

割りとよくありそうな機能だからヘルプをよく読めばもしかしたらスクリプトとか使わなくても普通にできる簡単なやり方がある気もしなくなくもない。

やりかた


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

NextVol.js

//!*script

var fs = PPx.CreateObject("Scripting.FileSystemObject");
var fn = PPx.Extract("%1");
var i;

var e = new Enumerator(fs.Drives);
var flds = new Array(); 
for (; !e.atEnd(); e.moveNext()) {
  if (e.item().DriveLetter == "A"){
  } else if (e.item().IsReady) {
    flds.push(e.item().DriveLetter);
  }
}
flds.sort(function(a, b){return a.toLowerCase() > b.toLowerCase()?1:-1;}); 
for(i = 0; i < flds.length; i++) {
  if( flds[i] == fn.slice(0,1) ) break;
}

if ( i == flds.length-1) i = -1;
var nextVol = flds[i + 1].charCodeAt(0) - 64;

PPx.Execute("%K\"@" + nextVol  + "\"");

PrevVol.js

//!*script

var fs = PPx.CreateObject("Scripting.FileSystemObject");
var fn = PPx.Extract("%1");
var i;

var e = new Enumerator(fs.Drives);
var flds = new Array(); 
for (; !e.atEnd(); e.moveNext()) {
  if (e.item().DriveLetter == "A"){
  } else if (e.item().IsReady) {
    flds.push(e.item().DriveLetter);
  }
}
flds.sort(function(a, b){return a.toLowerCase()>b.toLowerCase()?1:-1;}); 
for(i = 0; i < flds.length; i++) {
  if( flds[i] == fn.slice(0,1) ) break;
}

if ( i == 0 ) i = flds.length;
var nextVol = flds[i - 1].charCodeAt(0) - 64;

PPx.Execute("%K\"@" + nextVol  + "\"");

以下を編集して取込。あふと同じようにCtrl+カーソル左右でドライブ変更ができるようになる

KC_main = { ; PPcメイン窓
^LEFT ,*script %0\Script\PrevVol.js
^RIGHT ,*script %0\Script\NextVol.js
}

思ったこととか


あふと同じように、ディスクが入ってないドライブは無視するようにしている。あと、ドライブAは僕の環境だと読み込みに行くと時間食うので除外している。
Dなら4、Cなら3とドライブ文字を数値に変換して、%K"@4"の要領で移動しているのだが、力技っぽくてあまり気に入ってない。これってドライブの数が増えて10以上になったら都合が悪くなりそうな。さすがに試せないけど。だけど、%J"D:\"の要領で移動するとルートフォルダに移動してしまい、やりたい動作と少しずれる。
もっとうまいやり方あれば誰か教えてくだしあ


追記 14/01/07


作者さんからコメントいただきました

orz

2013年12月29日日曜日

最初のエントリにカーソル移動 + α

以前作ったcursormove.jsを作り直す。(参考:カーソル移動を素早くする(改)

cursormove.jsは、最初のエントリにカーソル移動するためのスクリプト。ただそれだけだと寂しいので、

  • 最初のエントリで実行 → 最初のファイルへ
  • 最初のファイルで実行 → 番最後のエントリへ

とカーソル位置を移動するようにしている。


たとえばこのようなフォルダ構成だったら、①→②→③→①…という動きをする。

汎用性があるかどうかというと多分微妙なのだろうが、僕の中では使用頻度が高い。フォルダ構成その他で思うように機能しないことが多々あり、そのたびに少しずつ修正をしてきたが、元々のスクリプトがこんがらがってたので一新。

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

CursorMove2.js

//!*script


// 最初のエントリ位置取得
var fn;
for (var i = 0; i < 3; i++) {
  if (PPx.Entry(i).Name != "." && (PPx.Entry(i).Name != "..") ) {
    fn = i
    break;
  }
}

// 最初のファイル位置取得
var ff;
for (var i = fn; i < PPx.EntryAllCount; i++) {
  if (PPx.GetFileInformation(PPx.Entry(i).Name) != ":DIR") {
    ff = i;
    break;
  }
}

// エントリが一つ以下なら終了
if (PPx.EntryDisplayDirectories + PPx.EntryDisplayFiles <= 1) PPx.Quit();

// ファイルのみの場合
if (PPx.EntryDisplayDirectories == 0) {  // 最初のエントリなら最後に
  if (fn == PPx.EntryIndex){
    PPx.EntryIndex = PPx.EntryAllCount - 1;
    PPx.Quit();
  } else {  // それ以外なら最初に
    PPx.EntryIndex = fn;
    PPx.Quit();
  }
}

// ディレクトリのみの場合
if (PPx.EntryDisplayFiles == 0) {  // 最初のエントリなら最後に
  if (fn == PPx.EntryIndex){
    PPx.EntryIndex = PPx.EntryAllCount - 1;
    PPx.Quit();
  } else {  // それ以外なら最初に
    PPx.EntryIndex = fn;
    PPx.Quit();
  }
}

// ファイルとディレクトリがともにある場合

if (PPx.EntryIndex == fn){  // 最初のエントリなら最初のファイルに
  PPx.EntryIndex = ff;
} else if (PPx.EntryIndex == PPx.EntryAllCount - 1) {  // 最後のエントリなら最初のエントリに
  PPx.EntryIndex = fn;
} else if (PPx.EntryIndex == ff) {  // 最初のファイルなら最後のエントリに
  PPx.EntryIndex = PPx.EntryAllCount - 1;
} else {  // それ以外なら最初のエントリに
  PPx.EntryIndex = fn;
}

以下を編集して取込。 Ctrl+Eに割り振る。

KC_main = { ; PPcメイン窓
^E ,*script %0\Script\CursorMove2.js
}

2013年12月25日水曜日

PPxをだいなっぽくする(二画面)

あいさつ


以前、一画面でなんちゃってだいなファイラー風の表示にしてみたが、今回は二画面でだいなっぽくしてみる。




上がPPxで下がだいなです。

やりかた



以下の文字列をクリップボードにコピーしましょう。

XC_stat = _AUTO,_AUTO,0,0,O"_GRE" R60 C / i"Marked" mn i"/" E0 S1 ms8 S1 i"Bytes" Df8 S1 i"Free" ; ステータス行
X_win = { ; 表示形式全般 *layout
CA = B001001001
CB = B001001001
}
F_mes = -16,0,0,0,400,0,0,0,128,3,2,1,17,MS 明朝 ; 汎用
C_entry = _WHI,_WHI,_CYA,_RED,_CYA, _MAG,_BLU,_GRE,_DWHI, _SBLU,_DBRO,_GRE,_RED,_MAG 
C_eInfo = _AUTO,_DRED,_AUTO,_DBLA,_DBLU,_DCYA,_DBLA,_BRO,_WHI,_WHI,_AUTO,_BLU,_AUTO, H404000,_BRO,_CYA,_GRE 
XC_celD = _AUTO,_AUTO,4,7 ; エントリ表示 文字,背景,カーソル,マーク 
X_inag = 0 ; 現在窓以外はグレー調に 0:しない 1:する
X_combo = 1 ; 複数 PPc を一体化 0:しない 1:する
X_combos = B0000000000001000010010000000000,B000 ; 一体化時の表示形式CC_log = _WHI,_BLA ; 共用ログ、アドレスバー(文字,背景)_AUTO可
XC_mvLR = 4,1,6,B0100,6,B100 ; [←][→]

ついで、PPxフォルダーにあるPPCUSTW.EXE(PPCUST.EXE)を実行するか、メニューバーのツールから選択するかなどしてカスタマイザーを起動。起動したら


  • ファイルタブ - 編集して取込


をクリック。



すると、クリップボードにコピーした文字列が貼り付けられた状態で、編集して取込ダイアログが出ます。そこでOKボタンをクリック。




PPcを再起動。すると、だいなっぽくなる。


壁紙の透過をしてみる



だいなの特徴に、壁紙の透過というのがある。それをする方法。

カスタマイザーの全般タブからおまけをクリックし、

  • 「画面のちらつき対策」にチェック
  • 「窓全体を透けるようにする」で半透明を選択

してから適用ボタンを押す。



このようになる。



壁紙を表示したいなら、

  • 「画面のちらつき対策」にチェック 
  • 「背景に使用する画像」で適当な壁紙を選択
  • 「PPc,PPvの背景に画像を表示」で「しない」以外のどれかを選択
  • 「背景画像の明るさ」を適当な数値に設定

してから適用ボタンを押す。



するとこのようになる。



だいなっぽく画像表示


2画面PPxでいろんな仕方で画像表示のall_view.jsを使えばいい。一応ここでも簡単に説明。

TORO’s Libraryから

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

をダウンロード。その中にある

  • PPXSCR.DLL(OSが64bit版ならPPXSCR64.DLL)
  • PPXMES.DLL(OSが64bit版ならPPXMES64.DLL)
  • PPXWIN.DLL(OSが64bit版ならPPXWIN64.DLL)

をPPxフォルダにコピーしておく。

以下をall_view.jsという名前でScriptフォルダに保存。

all_view.js

//!*script 

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

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

以下を編集して取込。

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

KV_main = { ; PPvメイン窓
ENTER = @Q
UP ,%KC%*regexp(%n,"/.(.)/$1/") "@UP @N"
DOWN ,%KC%*regexp(%n,"/.(.)/$1/") "@DOWN @N"
SPACE ,%KC"@SPACE@N"
\SPACE ,%KC"@\SPACE@N"
&ENTER ,*togglewinsize
}

XV_imgD = { ; 拡大縮小設定([=],*zoom,*reducemode) PPvID = 倍率、縮小方法
;倍率: -1:窓枠に合わせる -2:窓より小→等倍、大→縮小 0:100% 1-10000:%倍率
;縮小方法: 1:白地に黒文字 2:黒地に白文字 3:カラー高速 4:混合
VA = -2,4
VB = -2,4
}


追記 2013/12/27


all_view.jsを独立窓の時に使っても表示がおかしくならないようにした

2013年12月19日木曜日

PPvでマークファイルを閲覧

僕はPPcとPPvをIDで一対一対応させて用いている(参考:PPcとPPvのIDを一対一対応させる - つかさのほえほえ日記)。

これまで作った

  • go_mark.js
  • go_markR.js
  • go_next_mark.js
  • go_prev_mark.js

を利用して、「対応するIDのPPcのカーソルを動かしてPPvで閲覧」をマークファイルのみで行います。こっちのほうが利用する機会ありそうかな?



上下方向


  • go_mark.js
  • go_markR.js

の二つをScriptフォルダに入れておこう。マークファイルにカーソルを合わせるにあります。

KV_main    = {    ; PPvメイン窓
^V_HBA    ,*execute C%*regexp(%n,"/.(.)/$1/"),*script %0\Script\go_mark.js %: %KC%*regexp(%n,"/.(.)/$1/")"N"
^\V_HBA    ,*execute C%*regexp(%n,"/.(.)/$1/"),*script %0\Script\go_markR.js %: %KC%*regexp(%n,"/.(.)/$1/")"N"
}

これを編集して取込。
これで、PPvでファイルを閲覧しているとき、Ctrl+:で下方向のマークファイルを表示。Ctrl+Shift+:で上方向のマークファイルを表示する。

マーク順


  • go_next_mark.js
  • go_prev_mark.js

の二つをScriptフォルダに入れておこう。マークファイルにカーソルを合わせる(マーク順)にあります。

KV_main    = {    ; PPvメイン窓
^V_HBA    ,*execute C%*regexp(%n,"/.(.)/$1/"),*script %0\Script\go_next_mark.js %: %KC%*regexp(%n,"/.(.)/$1/")"N"
^\V_HBA    ,*execute C%*regexp(%n,"/.(.)/$1/"),*script %0\Script\go_prev_mark.js %: %KC%*regexp(%n,"/.(.)/$1/")"N"
}

これを編集して取込。
これで、PPvでファイルを閲覧しているとき、Ctrl+:で次のマークファイルを表示。Ctrl+Shift+:で前のマークファイルを表示する。

マークファイルにカーソルを合わせる(マーク順)

前回とは違い、今回はマーク順。上方向下方向は関係なく、マークした順番にマークエントリにカーソルを合わせていく。Ctrl+:で次のマークファイル。Ctrl+Shift+:で前のマークファイルです。

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

go_next_mark.js
//!*script

i = PPx.EntryIndex;

if (PPx.EntryMark == 0){
  PPx.EntryFirstMark;
} else {
  PPx.EntryNextMark;
}

if (i == PPx.EntryIndex) PPx.EntryFirstMark;

go_prev_mark.js
//!*script

i = PPx.EntryIndex

if (PPx.EntryMark == 0){
  PPx.EntryLastMark;
} else {
  PPx.EntryPrevMark;
}

if (i == PPx.EntryIndex) PPx.EntryLastMark;

go_next_mark.jsがマーク順でgo_prev_mark.jsがその逆順です。

以下を編集して取込
KC_main = { ; PPcメイン窓
^\V_HBA ,*script %0\Script\go_next_prev.js
^V_HBA ,*script %0\Script\go_next_mark.js
}

2013年12月18日水曜日

PPxの設定ファイルを管理する

設定ファイルの個別化


つかさです。PPxの設定をどうやって管理するかという話。
僕はCFGフォルダというのを作って、そこに設定ファイルをテキストファイルで保存、適宜取り込むというやり方をしている。



このように

  • PPcとPPvのキーバインド
  • 個々のメニュー
  • 拡張子判別実行メニュー
  • 基本的な設定
  • ディレクトリごとの表示形式やソート状態
  • その他

と設定を個別に適当なファイル名で保存している。ファイル名から内容がすぐわかるよう、メニューにははじめにM_をつけるなどして工夫している。僕は拡張子をCFGにしているが、中身がテキストファイルであればtxtでも何でも関係ない。

メニューの設定ファイルを追加取込できるように


メニューの設定ファイルは次のようにしている。これはマスクメニューの例。

M_Mask.CFG
-|M_Mask =

M_Mask = { ** comment **
カーソル行の拡張子でマスク(&1) = *maskentry *.%T
&EXEでマスク = *maskentry *.exe
&TXTでマスク = *maskentry *.txt,*.howm,*.ini
画像マスク(&I) = *maskentry *.jpg,*.jpeg,*.png,*.gif,*.bmp
-- = 
ディレクトリマスク(&D) = *maskentry attribute:d
マークファイルで一時マスク(&M) = *maskentry %#;C %: %K"HOME"
マークファイルでマスク(&S) = *setmaskentry %#;C %: %K"F5"
-- = 
マスク解除(&U) = *maskentry %: *setmaskentry
}

KC_main = { ; PPcメイン窓
I ,%M_Mask,1
}

  1. メニューの削除
  2. メニュー
  3. メニューのキーを登録

という構成。メニューの削除を最初に入れているのは、この設定を「テキストの取込」ではなく「追加取込」で取り込みたいから。

また、メニューを表示するためのキーバインドも一緒に取り込むようにしている。別々の設定に書くよりも、このほうがわかりやすい。ただ、これだとこの設定ファイルを「テキストの取込」で取り込んでしまうと、登録してある他のキーバインドが上書きされ、吹っ飛んでしまうのでそれだけ注意する。取り込むときには追加取込を使うように。

最初から設定をやり直したいとき


色々と設定をいじっていて、ごちゃごちゃになったから最初からやり直したい、という場合がある。
そのときは、 カスタマイザーで初期化をしてから、取り込みたい設定ファイルにマーク。

Hを押し、

*customize @%FCD

をコピペして実行する。



すると、マークした複数の設定ファイルを、追加取込で取り込むことができる。このやり方なら一分もかかりませんね。

2013年12月16日月曜日

xyzzyでPPvの表示ファイルを同じ表示箇所で開く

PPvで自分のメモファイルを読んでいる時、文章を付け足したり誤字を訂正したいと思うことがある。そのときは、PPvと同じ表示箇所をxyzzyを開きたい。


PPv閲覧中にEを押せば


こんなふうにPPvの表示箇所と同じとこが開けたらいいな、と。

以下を編集して取込。
KC_main = { ; PPcメイン窓
E ,%Ob D:\bin\xyzzy\xyzzy.exe %FDC -g %L -e "(recenter 0)"
}

Eで表示ファイルが同じ表示箇所で開くはず。
今までは行数のみを送っていたが、半ページ分ほどずれて表示され、一々スクロールし直さなければならなかった。recenterというのでスクロール位置を調節すればよかったようだ。

マークファイルにカーソルを合わせる

PPxでスクリプトを使わないとできなさそうなあふっぽいキーバインドを実現してみる編その3です。
今回はマークファイルにカーソルを合わせる、です。あふだと下方向が Ctrl+: に。上方向が Shift+Ctrl+: に割り当てられてます。


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

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();

以下を編集して取込。

KC_main = { ; PPcメイン窓
^V_HBA ,*script %0\Script\go_mark.js
^\V_HBA ,*script %0\Script\go_markR.js
}

PPxはマークした順番も覚えているようなので、次はマークファイルにカーソルを合わせる(マーク順)のスクリプトを作ってみようかな

2013年12月15日日曜日

あふっぽく現在窓を反対窓と同パスに

PPxでスクリプトを使わないとできなさそうなあふっぽいキーバインドを実現してみる編その2です。
 今回はあふっぽく現在窓を反対窓と同パスにする、です。あふだとOキーに割り当てられてます。反対窓を現在窓と同パスにしたいときはShift + O。

普通に反対窓と同パスにしたいだけならスクリプトを使うまでもなく



カスタマイザーでコマンド一覧から選択して設定するか

KC_main = { ; PPcメイン窓
O ,%j%2
\O ,%K"@'='"
}

こんなのを編集して取込すればいいだけなのだが、あふの場合はOキーは

  • 現在窓が反対窓と違うフォルダ→現在窓を反対窓と同じフォルダに
  • 現在窓と反対窓が同じフォルダ→現在窓のカーソル位置も反対窓にあわせる

という動作になっている。知らなかったひとはYorisukuの奇納 9を見てみよう。
 だから、反対窓と同じパスにしたいときはOキーを何度か連打してあわせるわけですね。それをPPxでも再現。

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

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");
}

以下を編集して取込。

KC_main = { ; PPcメイン窓
O ,*script %0\Script\afx_o.js
\O ,*script %0\Script\afx_shift_o.js
}

Oキーを連打するあの動作がたまらないという人はこれを使おう。僕はあふのキー操作の中ではこれが一番好きだったりする。

2013年12月14日土曜日

直上/直下のマークからカーソル位置までマーク

PPxでスクリプトを使わないとできなさそうなあふっぽいキーバインドを実現してみる。
今回は直上/直下のマークからカーソル位置までマーク。あふではCtrl+Space/Ctrl+Shift+Spaceに割り当てられている。

こんなときにキーを押せば




こうなるようにする。




やり方


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

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;
}

以下を編集して取込。
KC_main = { ; PPcメイン窓
^\SPACE ,*script %0\Script\MarkCursorR.js
^' ' ,*script %0\Script\MarkCursor.js
}

これで

  • Ctrl+Space で 直上のマークからカーソル位置までマーク
  • Ctrl+Shift+Space で 直下のマークからカーソル位置までマーク

ができるようになった。


参考


2013年12月11日水曜日

左右逆カーソルで親フォルダに移動(改)

2画面PPxで、あふでできる「左右逆カーソルで親フォルダに移動」をやってみる。
前回のスクリプトは一行表示にしか使えなかったので、複数行表示に対応させてみた。

2画面ファイラでの複数行表示は画像管理の時とかによく使う。上がPPxで下があふ




右端や左端にカーソルが到達したら、親フォルダに移動なり、反対窓に移動なりをする。端に到達していない場合は通常のカーソル移動をする。

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

LEFT.js

//!*script

// 独立窓や窓が一枚のみの場合は通常動作
if (PPx.GetComboItemCount <= 1){
  PPx.Execute("%K\"@LEFT\"");
  PPx.Quit();
}

if (PPx.WindowDirection == 1){
  if ( PPx.EntryDisplayY >= PPx.EntryIndex){
    PPx.Execute("%K\"@BS\"");
  } else {
    PPx.Execute("%K\"@LEFT\"");
  }
} else {
  if ( PPx.EntryDisplayY >= PPx.EntryIndex){
    PPx.Execute("%K\"@F6\"");
  } else {
    PPx.Execute("%K\"@LEFT\"");
  }
}

RIGHT.js

//!*script

// 独立窓や窓が一枚のみの場合は通常動作
if (PPx.GetComboItemCount <= 1){
  PPx.Execute("%K\"@RIGHT\"");
  PPx.Quit();
}

hoge = PPx.EntryDisplayCount - PPx.EntryDisplayCount % PPx.EntryDisplayY;

if (PPx.WindowDirection == 1){
  if ( hoge >= PPx.EntryIndex){
    PPx.Execute("%K\"@RIGHT\"");
  } else {
    PPx.Execute("%K\"@F6\"");
  }
} else {
  if ( hoge >= PPx.EntryIndex){
    PPx.Execute("%K\"@RIGHT\"");
  } else {
    PPx.Execute("%K\"@BS\"");
  }
}

以下を編集して取込。

KC_main = { ; PPcメイン窓
RIGHT ,*script %0\Script\RIGHT.js
LEFT ,*script %0\Script\LEFT.js
}

LEFT.jsの場合は、エントリ位置が縦方向のエントリ表示数以下かどうかで左端かどうかを確かめている。RIGHT.jsの場合は表示数の全エントリ数とか云々で何か計算をして右端かどうかを確かめている。

こういう計算とかしてるとまるでプログラムでも組んでるみたいですね

追記 2013/12/12


作者のTOROさんにコメントをいただきました。

ええ、つまりスクリプトとか使わなくても全然いけるわけですね(;><)
僕の場合の設定は次のようになる。
XC_mvLR = 4,1,6,B0100,6,B100 ; [←][→]

というかカスタマイザーでもふつうに設定項目ありますので左右逆カーソルで親フォルダに移動をしたいときはこっちで設定しましょう(;><)


2013年12月8日日曜日

2画面PPxでいろんな仕方で画像表示

あいさつ


前回では、反対窓に画像表示を連動ビューを使って行った。今回は、これを別の方法でしてみたい。
1画面でやってた、PPcとPPvの一対一対応を2画面でも実現する。

まずは、TORO’s LibraryからPaper Plane xUI Window Moduleをダウンロード。その中にあるPPXWIN.DLL(あるいはPPXWIN64.DLL)をPPxフォルダにコピーしよう。

あふっぽく反対窓に画像表示



テキストファイルと画像ファイル上でEnterを押せば、PPvを反対窓にあわせて表示するようにする。





以下のスクリプトをhalf_view.jsという名前をつけてScriptフォルダに保存。対応するIDのPPvを起動し、反対窓にそのPPvウィンドウをあわせるスクリプトです。

half_view.js
//!*script 

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

if (PPx.GetComboItemCount <= 1){
  PPx.Execute('%Oi %0\\PPVW.EXE -bootid:' +ppcid+ ' "%1\\%R"');
} else {
  PPx.Execute('%Oi %0\\PPVW.EXE -bootid:' +ppcid+ ' "%1\\%R"');
  PPx.Execute('*fitwindow %N~,%NV' +ppcid);
}

次に以下を編集して取込。拡張子判別をして先のスクリプトを実行するように。

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

カーソルファイルの設定


ついで、PPv上でカーソル上下すればPPcのカーソルも連動して上下し、対応したファイルを表示するようにする。
また、あふのようにEnterを押せばビューアが閉じ、Alt+Enterで最大化し、スペースとShift+スペースでマーク付きカーソル上下をするようにもする。

以下を編集して取込。

KV_main = { ; PPvメイン窓
ENTER = @Q
UP ,%KC%*regexp(%n,"/.(.)/$1/") "@UP @N"
DOWN ,%KC%*regexp(%n,"/.(.)/$1/") "@DOWN @N"
SPACE ,%KC"@SPACE@N"
\SPACE ,%KC"@\SPACE@N"
&ENTER ,*togglewinsize
}

XV_imgD = { ; 拡大縮小設定([=],*zoom,*reducemode) PPvID = 倍率、縮小方法
;倍率: -1:窓枠に合わせる -2:窓より小→等倍、大→縮小 0:100% 1-10000:%倍率
;縮小方法: 1:白地に黒文字 2:黒地に白文字 3:カラー高速 4:混合
VA = -2,4
VB = -2,4
}

XV_imgDは、画像にあわせて窓枠の大きさが変わったりしないようにするための設定。

内骨格っぽくウィンドウ一杯に画像表示



二画面ファイラの内骨格では、ビューアはファイラウィンドウに重なるように表示される。




次はこれと同じことをPPxでやってみる。




まずは、TORO’s LibraryからPaper Plane xUI Message Moduleをダウンロード。その中にあるPPXMES.DLL(あるいはPPXMES64.DLL)をPPxフォルダにコピー。

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

all_view.js
//!*script 

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

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

以下を編集して取り込み。

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

もっとあふっぽくする



あふはデフォルトでは、左窓で画像を開いたら右窓に表示。右窓で画像を開いたら両ファイル窓に表示。テキストファイルならどちらの窓で開いても両ファイル窓で表示するようになっている。




これをPPxで再現してみる。







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

picture_view.js

//!*script 

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

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

if (PPx.WindowDirection == 1){
  PPx.Execute('*setcust X_win:V= B100100100');
  PPx.Execute('%Oi %0\\PPVW.EXE -bootid:' +ppcid+ ' "%1\\%R"');
  PPx.Execute('*fitwindow %N~,%NV' +ppcid);
} else {
  PPx.Execute('*setcust X_win:V= B000100001');
  PPx.Execute('%Oi %0\\PPVW.EXE -bootid:' +ppcid+ ' "%1\\%R"');
  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= B000000001');
  PPx.Execute('%Oi %0\\PPVW.EXE -bootid:' +ppcid+ ' "%1\\%R"');
} else {
  PPx.Execute('*setcust X_win:V= B000000001');
  PPx.Execute('%Oi %0\\PPVW.EXE -bootid:' +ppcid+ ' "%1\\%R"');
  PPx.Execute('*fitwindow %*findwindowclass("PaperPlaneCombo"),%NV' +ppcid);
}

以下を編集して取込。

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
}

左窓で画像ファイルを開くときには、*setcust X_win:V= B100100100でタイトルバーとかを消しているわけですね。

これで


気分転換に二画面にしたいときには、前回と今回の設定を編集して取込すればそれですぐいけそう。僕の普段の1画面の設定の上にこれを追加しても特に問題無いみたい。

しかしあふっぽくなるもんですね。かなり驚き!



追記 2013/12/10


half_view.jsとpicture_view.jsを修正。反対窓が無いときにPPvを開くとエラーメッセージが出るのでそれへの対処をした。

さらに追記 2013/12/11


独立窓のときにPPvを開くと表示がおかしくなるのでそれへの対処。
あと%FDCを%1\\%Rにして、マークファイルではなくカーソル位置のファイルを表示するようにした。

さらにさらに追記 2013/12/27


独立窓のときにPPvを開くと表示がおかしくなることへの対処をpicture_view.js以外の三つにも行った。

2013年12月7日土曜日

PPxをあふっぽくする

あいさつ


つかさです。
今回はPPxをあふっぽくしてみる。
上がPPxで下があふです。



やりかた


以下の文字列をクリップボードにコピーしましょう。
X_win = { ; 表示形式全般 *layout
CA = B000001001
CB = B000001001
}
X_combo = 1 ; 複数 PPc を一体化 0:しない 1:する
X_combos = B0000000000001000010000000001001,B000 ; 一体化時の表示形式
CC_log = _WHI,_BLA ; 共用ログ、アドレスバー(文字,背景)_AUTO可

ついで、PPxフォルダーにあるPPCUSTW.EXE(PPCUST.EXE)を実行するか、メニューバーのツールから選択するかなどしてカスタマイザーを起動します。 起動したら

  • ファイルタブ - 編集して取込

をクリック


すると、クリップボードにコピーした文字列が貼り付けられた状態で、編集して取込ダイアログが出ます。



そこでOKボタンをクリック。PPcを再起動。すると、あふっぽくなる。

やったことは

  • 窓の一体化
  • スクロールバーの位置変更
  • ログの表示
  • ログの背景色と文字色の変更

です。

応用編 左右逆カーソルで親フォルダに移動


あふ設定の各種設定(1) ― ファイル窓操作 ― 左右逆カーソルで親フォルダに移動 を実装してみる。



まずはTORO’s LibraryからPPxScriptModuleをダウンロード。その中にあるPPXSCR.dllをPPxフォルダにコピーします。
ついで、PPxフォルダにScriptフォルダを作成。そのフォルダに以下の二つのファイルを保存。

LEFT.js

//!*script

if (PPx.WindowDirection == 1){
PPx.Execute("%K\"@BS\"");
} else if (PPx.WindowDirection == 2){
PPx.Execute("%K\"@F6\"");
} else {
PPx.Execute("%K\"@LEFT\"");
}

RIGHT.js

//!*script

if (PPx.WindowDirection == 1){
PPx.Execute("%K\"@F6\"");
} else if (PPx.WindowDirection == 2){
PPx.Execute("%K\"@BS\"");
} else {
PPx.Execute("%K\"@RIGHT\"");
}

フォルダ内はこんな感じになります。



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

KC_main = { ; PPcメイン窓
RIGHT ,*script %0\Script\RIGHT.js
LEFT ,*script %0\Script\LEFT.js
}

これで

  • 左窓 … ←を押せば親フォルダへ。→を押せば右窓へ移動。
  • 右窓 … ←を押せば左窓へ移動。→を押せば親フォルダへ。

という動作になります。

※追記 2013/12/15 


普通にカスタマイザーの

全般 - PPc - 操作 - カーソル移動詳細 - 左右カーソルキーで窓外に移動したときは - 移動方向が隣接窓側なら窓移動する

にチェックで「左右逆カーソルで親フォルダに移動」の設定できるのでこの箇所無視してそっちでやるほうがいいです。

応用編 画像を反対窓に表示





Paper Plane xUI まとめサイト - Tips の 連動ビューの on/off トグルをおこなう。 が参考になりそうです。

思ったこととか


僕はもともとファイラはずっとあふを使ってて、一画面のほうがいんじゃないかと思って数年前にPPxに移行した。
今回は思いつきでやってみただけなんだけど、二画面の操作感が懐かしくてなんかすごい楽しい。

2013年12月6日金曜日

xyzzyで折り返しの有無を拡張子で決定

拡張子で判別して、折り返すか折り返さないかを決めれるようにする。

以下を.xyzzyにコピペ。

;;拡張子ごとに折り返しを指定

(add-hook '*find-file-hooks*
          #'(lambda () 
              (let ((ext (pathname-type (get-buffer-file-name (selected-buffer))))) 
                (cond 
                 ((or (equal ext "txt")
                      (equal ext "howm"))  (set-buffer-fold-type-window))
                 ((or (equal ext "ini")
                      (equal ext "cfg")
                      (equal ext "js")
                      (equal ext "vbs")
                      (equal ext "py")) (set-buffer-fold-type-none))
                 ))))

xyzzyの音 - 拡張子に合わせ背景色を変更を参考にした。

txtやhowmはウィンドウ幅で折り返し。iniやcfg他は折り返し無しになる。