2014年8月30日土曜日

PPxで画像管理ソフト的な動きをする(同階層のフォルダを閲覧)


あいさつ



画像ファイルやメモファイルを閲覧しているとき、隣り合ったフォルダを順番に移動したい、という場合がある。

画像フォルダ
├─gununu
├─てさ部
├─ひだまりスケッチ
└─輪るピングドラム

こんな風に画像ファイルをフォルダ分けして保存しているとして、ひだまりフォルダを閲覧してるけど隣のピングドラムフォルダを閲覧したい、あるいは何か気に入ったファイルがないか、画像フォルダ内のフォルダを順番に閲覧したい、という場合です。

これを、 2画面PPxで、左右の窓で役割を分担することで行う。

やり方



以下を編集して取込

E_preview = { ** comment **
:DIR ,*execute ~,*jumppath %FCD
}

E_preview2 = { ** comment **
:DIR ,*execute C,*jumppath %FCD %: %KC "@N"
}

KC_main = { ; PPcメイン窓
^UP ,%K "@UP" %: %ME_preview
^DOWN ,%K "@DOWN" %: %ME_preview
}

KV_main = { ; PPcメイン窓
^UP ,%K~ "@UP" %: *execute ~,%%ME_preview2
^DOWN ,%K~ "@DOWN" %: *execute ~,%%ME_preview2
}

左窓(反対窓にカーソル下のフォルダの内容を表示)



左窓で、内容を順次表示させたいフォルダがあるフォルダを開きます。以下は、画像フォルダにあるフォルダの内容を順次確認したい、という場合。



左窓でCtrl+カーソルキー下を押す。すると、左窓カーソル下のフォルダの内容が、右窓に表示される。





このように、隣り合っているフォルダの内容を簡単に閲覧することができる。



ビューア(PPvからフォルダ切り替え)


先のやり方で気になったファイルをgununuフォルダに見つけ、右窓に行って画像ファイルをPPvで閲覧しているとする(参考:PPvをPPcと連動(ID一対一対応をやめる))。その時に、「ぐぬぬ画像はもういいや、同じ階層の別フォルダの画像ファイルを見たい」と思ったら、PPv上でCtrl+カーソル下を押す。

すると左窓のカーソルが下がり、左窓カーソル下のフォルダの内容が右窓に表示される。かつPPvの表示ファイルも切り替わる。







さっき左窓でやってたことをPPv上からやってるだけですね。


テキストファイルの場合


画像管理の他には、テキストファイルで書いたメモの閲覧にも使えそう。フォルダ分けしてあるメモを、順次見ていくことができる。





1画面と2画面


今回やったのは、2画面という特性がないとできないことだった。他には、「左右窓で同ファイルが無いか調べてマーク」というのも2画面で無いと不可能ですね。

ファイル移動やコピーが直感的にできて楽、という以外にも、2画面ということ自体を生かしたカスタマイズが他にもあるかもしれない。意識的に追求してみてもいいかも、と思った。

ちなみに、1画面でこれを実現しようとするなら、次のようなスクリプトを使う。

//!*script

fs = PPx.CreateObject("Scripting.FileSystemObject");
fn = PPx.Extract("%1");
currentDir = fs.GetFolder(fn);

// 同階層のフォルダリストを取得
e = new Enumerator(currentDir.ParentFolder.SubFolders); 
flds = new Array(); 
for( ; !e.atEnd(); e.moveNext()) {
  fuga = fs.GetFolder(fs.BuildPath(currentDir.ParentFolder.Path, e.item().Name));
  if (fuga.Attributes <= 17) flds.push(e.item().Name);
} 

// アルファベット順にソート
flds.sort(function(a, b){return a.toLowerCase()>b.toLowerCase()?1:-1;}); 

// カレントフォルダがリストの何番目かを計算
for(i=0; i < flds.length; i++) {
  if( flds[i] == currentDir.Name ) break;
} 

// 次のフォルダのフォルダ名をリストから取得
nextDir = flds[Math.min(i+1, flds.length-1)];

// カレントフォルダがリスト最後なら最初にループ
if (nextDir == currentDir.Name)nextDir = flds[0];
hoge = fs.GetParentFolderName( fn );

// パスを変更
PPx.Execute("*jumppath \"" + fs.BuildPath(hoge, nextDir) + "\"");

2chにあったやつほぼそのままです(Paper Plane xUI Part.4の219)。サブフォルダの一覧を取得し、同階層の次のフォルダを表示するスクリプト。ただ、PPcのソート状態を反映させることなどは無理で、少し使い勝手が悪い。

2014年8月28日木曜日

PPvからメモを取る


あいさつ


自分の書いたメモなり他の文書なりをPPvで閲覧している時、何かを思いついてメモを取りたい時がある。

その時、これまでは一々howmフォルダまで戻ってから、ファイル作成メニューを出してメモを作成。そしてまたさっきまで作業をしていたフォルダを戻る、ということをしていた。

面倒だし、億劫になってメモを取る枷になるのでこれを克服する。例によって2ストロークキーを利用。

やり方


予め、Paper Plane xUI  Key Moduleをダウンロードして、その中にあるPPXKEY.DLL(64bitならPPXKEY64.DLL)をPPxフォルダに入れておきましょう。

以下を編集して取込

-|K_ppv =

KV_main = { ; PPcメイン窓
^X ,*setnextkey K_ppv
}

K_ppv = { ** comment **
H ,%Ob D:\bin\xyzzy\xyzzy.exe -e (howm-create2dir) G:\howm
^Z ,%KC"@BS @N"
^X ,*script %0\Script\PPvChangeDir.js
}


K_ppv(2ストローク目)の下2つはPPv上で階層移動でやったコマンドです。一番上が今回追加したコマンド。G:\howmにhowm形式でファイルを作成する(参考:Memo on the Electron - MoE用設定)。パスのところは適当に読み替えてください。

これで、PPv上でCtrl+Xを押してからCtrl+Hを押すことで、howmフォルダにhowmファイルを作成することができる。 いつでもどこでも思いついたことをメモにできて、かつ、それまでしていた作業を中断することもない。



以前は2ストロークキーを使わずにやってたけど(参考:PPvからエディタを開く)、結局はコマンドを忘れて使わなくなった。
「何かやりたいことがあればとりあえずCtrl+Xを押してみて、次に何するか考える」というのがいいのかもしれない。「何かしたいことがあればとりあえずランチャを起動してみて、それから考える」というのに近いでしょうか?僕は、「なんかしよう」という漠然とした意識状態で反射的にCtrl+Spaceを押し、fenrirを起動。表示されるコンマ数秒で少しだけ意識が明瞭になり、あーこんな感じだよねと1~2文字入力。表示されるリストを見てさらに少し意識がまとまり、何かのソフトを起動する、ということをしている。

次にしたいこととか


  • C_x C_x 階層移動(上か下)
  • C_x C_z 階層移動(上へ)
  • C_x C_h メモを取る

の3つが、今のところPPvでやっていること。やり始めて数日だが、作業の効率は格段に上がったように思う。
今まではなんだかんだで、PPvを中心にするということはできてなかった。次回あたりは、さらにPPvからできる操作を増やしてみようと思う。

2014年8月23日土曜日

PPv上で階層移動


あいさつ


僕は、テキストファイルのプレビューをPPv上の操作のみでできるようにしている。PPv上でカーソルキーを操作すれば、それと連動してPPcのカーソルが動き、カーソル位置のファイルをPPvに表示する、という具合だ。



これに加えて、フォルダに潜ったり親フォルダにいったりという操作も、PPv上でできるようになれば、便利では無いかなと思った。今まではフォルダを変更するときは、一々PPvを閉じて、PPcで移動してからまたPPvを表示する、ということをしていた。この過程を省略したい。

これを2ストロークキーで実現してみる。

準備


予め、Paper Plane xUI  Key Moduleをダウンロードして、その中にあるPPXKEY.DLL(64bitならPPXKEY64.DLL)をPPxフォルダに入れておきましょう。

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

PPvChangeDir.js

//!*script

hoge = PPx.GetFileInformation(PPx.Extract("%*extract(C\"%%FCDN\")"));

if (hoge == ":DIR"){
  PPx.Execute("%KC \"@Enter @N\"");
} else {
  PPx.Execute("%KC \"@BS @N\"");
}

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

-|K_ppv =

KV_main = { ; PPcメイン窓
^X ,*setnextkey K_ppv
}

K_ppv = { ** comment **
^X ,*script %0\Script\PPvChangeDir.js
^Z ,%KC"@BS @N"
}

やりかた


これで
  • C_x C_x PPcのカーソル位置がフォルダならそのフォルダに潜る。カーソル位置がファイルなら上のフォルダへ
  • C_x C_z 上のフォルダへ

ができるようになる。

フォルダ移動をしたいと思ったら、とりあえずCtrl+Xを二回押し。絶対に上のフォルダに上がりたいというときはCtrl+Xを押したあとCtrl+Zを押す、という感じですね。

たとえばてさ部フォルダで画像を閲覧していて、同じ階層にあるピングドラムフォルダに行きたい場合は次のようにする。



Ctrl+X二回押し。これで一つ上の階層に行く。



ひだまりフォルダだとかぐぬぬフォルダだとかがありますね。
PPv上でカーソルキーを動かして、輪るピングドラムフォルダにカーソルをあわせる。そして、Ctrl+X二回押し。


これでピングドラムフォルダに潜る。
このように、PPvを一々閉じてPPc側でフォルダ移動をする、ということをしなくても、別フォルダのファイルの閲覧が可能になる。

関連リンク


2014年8月12日火曜日

Everythingとファイラの連携


あいさつ


つかさです。

Everythingのv1.3系統の正式版が公開されたらしいのでインストールしてみる。前の正式版からは数年ぶりですね。

v1.2で行ってた設定からの変更箇所があるので、それのメモ。機能追加でAHKを使う必要がなくなってたり、INIをエディタでいじらなくてもGUIでカスタマイズできるようになってたりしてます。

実行時に最小化


以前(v1.2系統)はAHKを利用しないとできなかったが、デフォルトでできるようになっている。

  • 全般 - 結果 - ファイル起動時にEverythingを閉じます。

にチェック。



任意のソフトで開く


アイテムを選択してEnterを押すか、Ctrl+Enterを押すかで異なった動作をさせることが可能。

  • 全般 - コンテキストメニュー

で設定する。




  • 開く(フォルダ)
  • 開く(ファイル)

はEnterに対応しており、選択アイテムがフォルダだと「開く(フォルダ)」に、ファイルだと「開く(ファイル)」に登録したコマンドが実行される。

  • フォルダを開く

はCtrl+Enterに対応している。

というわけで、この3つの箇所に、適当なファイラなりポチエスなり何なりを登録すればいいわけです。

PPxで開きたいのであれば

$exec("D:\bin\ppx\PPCW.EXE" -r  /k *execute ,*jumppath "%1"  /entry)

あふで開きたいのであれば


$exec("D:\bin\afxw\AFXW.EXE" -s -p"%1")

という具合です。僕は、Enterはデフォルトのままで関連付け実行。Ctrl+Enterを押した時にはPPxに投げるようにしている。

ちなみにINIを直接編集することでもカスタマイズ可能。Ctrl+EnterでPPxで開くなら次のようになる。

open_path_command2=$exec("D:\bin\ppx\PPCW.EXE" -r  /k *execute ,*jumppath "%1"  /entry)


さらに別のソフトで開く


コンテキストメニューでは他に

  • 規定のファイラーで開く
  • 規定のファイラーでパスを開く

を設定することが可能。後者の「規定のファイラーでパスを開く」のみ、キー割当ができる。
「規定のファイラーで開く」のほうはキー割当ができず、コンテキストメニューとして表示して実行、だけのようだ。名前も似てるしなぜ一方だけがキー割り当てできるのかもよくわからない。まじでよくわからないのでなんでこうなるのか知ってるひと教えろください。

というわけで、キーボード操作前提なら「規定のファイラーでパスを開く」のみを設定すればいい。とりあえずあふを登録してみる。

まずは全般 - コンテキストメニューでコマンドの登録。

$exec("D:\bin\afxw\AFXW.EXE" -s -p"%1")




ついで、 全般 - キー割当。Ctrl+Gに割り当ててみる。



要するに

  • 開く(フォルダ)&開く(ファイル)、フォルダを開く、既存のファイラーで開く、既存のファイラーでパスを開くの四通りのコマンドが設定できる
  • 開く(フォルダ)&開く(ファイル)では、同一のキーで選択アイテムがファイルかフォルダかで違った動作をさせることができる
  • コンテキストメニューに表示はどれでもできる
  • 「既存のファイラーで開く」だけはキー割り当てができない
  • 開く(フォルダ)&開く(ファイル)にはデフォルトでEnterのキー割り当てがされている(変更可)
  • 「フォルダを開く」にはデフォルトでCtrl+Enterのキー割り当てがされている(変更可) 

 ということですね!なるほどわからん!



フルパスのコピー


これもデフォルトでできるようになっている。Ctrl+Shift+Cに割り振られている。
別のキーに変えたいときは、全般 - キー割当から設定する。



2014年7月4日金曜日

PC上でプリントへの書き込みでやってたことをする

あいさつ


僕は、howmで作ったデータをプリントアウトして、その余白に色々と書き込み、後でそれを元データに反映させる、という仕方で、文章の推敲をしている。





このプリントを、ボールペンを片手に読み、気になったところ、思い付いたことがあれば、それを余白に書き込む。それを数度繰り返し、その書き込みを元のデータに反映。書き込みをしたプリントは捨てる、ということをしている。


プリンタが壊れたことを機に、これをPC上だけで再現できないか、と考えた。


やってることの分析


ここでやっていることを分析すると、


  1. 文章を読むことによって、脆弱な箇所を見つけてチェック
  2. その箇所に関して思い付いたことをメモる
  3. それを元にして文章を作成する


の三段階。

まず、1~2回目は、脆弱な箇所をチェックしながら読む。このあたりがわかりにくいな、文章になってないな、というように。

こんなふうに、「書き直し」と書き込んだり


 「悪文」と書き込んだりして、脆弱だと判断した箇所がわかるようにしている。



これによって、どの箇所を直せばいいのかが明確になれば、次はその箇所について、思い付いたことを書く。そうして、後でその箇所を修正する文章を書くときの参考になるようにする。その脆弱な箇所に差し替える文章をすぐに作れそうだ、と判断したら、試しにそれを書いたりもしているようだ。

このときは適当に余白を利用。どの箇所についての書き込みかわかるように、線を伸ばして指示をしている。



文章化までのプロセス


なぜこの過程が必要かというと、

いきなり文章を訂正するのは難しい

からだ。そこで、文章を書くまでに、通常は頭の中で行っている作業を

  • 読んでいてわからない箇所へチェック
  • その箇所について思い付いたことを箇条書きに
  • その箇条書きを元にして文章を考える

みたいに、簡単な段階的作業に分割してしまう。この過程を、時間をおいて少しずつ行うことで、いつもは頭の中で一気にやるために大変な、「文章全体から脆弱な箇所を見つけ出し、新しい文章を作って差し替える」という複雑な作業の負担を軽減しているのではないか、と思うのだ。

PCでやるには


この分析があってるとしたら、普通にPCでも実行できそうですね。要は、脆弱な箇所をチェックし、アイデアを書き込む仕組みがあればいい。というわけでやってみる。PPxとCatMemoNoteを使います。

  • PPv→プリント
  • CatMemoNote→プリントの余白

という対応関係です。



CatMemoNoteへの書き込み過程


PPvで修正したい文章を表示。同時に、CatMemoNoteも起動させておく。そして、文章を読みながら、気になった箇所の見出しをCatMemoNoteに書き込んでいく。また、どう気になったか、気づいたことがあればそれを書き込んでもいい。

その箇所について、こういうことを書けばいいのかな、と思い付いたアイデアがあれば、それを箇条書きにする。また、この差し替えるための文章を思いつけばそれを書き込んでもいい。これを何度か繰り返し、一段落すれば、次はCatMemoNoteの書き込みを元に、元データに反映させる。

元データへの反映過程


CatMemoNoteを横に見ながら、不十分だとチェックされた箇所を、書き込まれたアイデアを元に修正していく。そこに書き込まれた文章で使えそうな文章があれば、それを挿入してもいい。

これを、 すべての書き込みに対して行う。もちろん、書いている途中で「これは別に反映させなくてもいいな」と判断した箇所は、反映させなくていい。


CatMemoNoteの記述方法


個々のメモは、切り取り線で区切る。また、その日初めてこの作業を行うときは、ショートカットキーで日付を入力する。



ちょっと前にした書き込みと、内容がかぶっていないかは気にしないでいい。かぶろうがかぶるまいが、思い付いたことがあればそのたびに、切り取り線で区切って書き込んでいく。



プリントの場合は、以前の書き込みが自然に参照できるので、ダブることが無い。この点はPC上でやる方法のデメリットなのかもしれない。

MoEのフォルダを流動的にする

メモの2区分


メモには

  • 短期的なもの
  • 長期的なもの

の2つがある。

短期的なものというのは、例えば何かに載せるために書いている文章や、今取り組んでいる課題をどう解決するかなどの、集中的に取り組んでいて、数日、数週間単位で何か成果を出したいもの。何かすぐに解決したい課題があれば、それについて思いつくことをとりあえず片っ端からメモに書き出す。何かを読んでそこでわかったことを書き出す。そしてそれらをまとめ、また何か課題が見つかればそれに関してメモを作って…という感じだ。

長期的なものというのは、例えばソフトウェアカスタマイズのように、特に急いで取り組む必要が無い、数ヶ月単位でメモを集め、活用するような性質をもったもの。例えば僕の場合は、何かの時に思い付いたらそのたびにメモに書き留めて、ある程度たまったらそれを参照して形にする、ということをしている。


短期的なメモの課題


この2つの種類のメモのうち、普段目にし、扱う機会が多いのは圧倒的に前者。だがこのとき、カテゴリーフォルダ(howm2)は不適当に働く。

ちなみに、カテゴリーフォルダはこのように、 フォルダ名=その中にあるファイルのカテゴリーになっていて、そのなかにメモを階層構造を作らずに保存している。






その1 ― いま取り組んでいる課題がわかりにくい



一つが、重要度での区別をつけられないということ。それゆえ、後で課題を再開するのに余計な手間がかかる。

このカテゴリーフォルダには、すべてのメモが時系列順に並んでいる。その中には、まとまった文章、頭を整理するために書きだしたメモ群、といったように、同じカテゴリーでも異なった種類のメモが雑多に混じっている。それゆえ、パッと見て、前回はどこまで考察を進めたのかだとか、次は何に取り組めばいいのかということが、判然としない場合が多い。

そこで、ビューアとタイトル表示とを利用、最近作ったメモから内容を順番に見ていくことによって、前回まで考察していたことを頭に呼び起こす作業をしている。できればこれを省略したい。


その2 ― 複数のテーマが混じっていて利用しにくい



あるテーマについて考えているとき、同じテーマについて過去に書いていたことを参照したい場合がある。しかし、このときカテゴリーフォルダという区分しか用意されていないので、すぐに必要なメモだけを抜き出す、ということができない。カテゴリーフォルダという区分は大雑把過ぎて利用できないのだ。

これまで、これを克服しようとして、カテゴリーフォルダ内にサブフォルダを作るだとか、あるいは関係するファイルのみをマスクするなどを試したが、うまく機能するところまではいかなかった。


カテゴリーフォルダという枠組みが悪いのではないか


これをどう見るかだが、扱っている対象が、短期的にしか価値を持たない情報であるのに、カテゴリーフォルダという、固定した枠組み内で処理しようとしたのが間違いだったのではないのか。このように総括する。

これを克服するには、カテゴリーフォルダという区分を廃し、「とりあえずフォルダを作る」 ということをして、そのフォルダを中心にメモを活用する仕組みを考えなければならない。


日時から自動でフォルダ名を決める


というわけで、現在時刻から自動で名付けたフォルダを基点にすることにする(仮のディレクトリ名を日時から自動で決める)。フォルダ作成時には、現在時刻から自動でつけたhowm形式のフォルダ名がデフォルトで入力されるようにする。これなら一々名前を考える必要もないし、名前が同フォルダの他のフォルダとかぶらないかを気にする必要もない。「とりあえずフォルダを作る」ということが可能になるのだ。

howmフォルダに、その時々でフォルダを作成。何か思いついたことがあれば、それをまとめてそのフォルダに内部に作成する。あるいはhowmフォルダにメモを作った後、このフォルダを作成してそこに移動する。



判別の必要があるときには、フォルダにコメントを付ければいい(参考:フォルダにコメントを付ける)。


こうすることで、その時々の必要に応じた細かな区分でメモをまとめることができる。「その2 ― 複数のテーマが混じっていて利用しにくい」という問題が解決するわけだ。

このまとまりは当然、時間が経てば理解不能になる期限付きのものではあるが、この用途であれば特に問題はない。



長期フォルダとの分離


短期的なメモについては、このようなしかたでhowmフォルダに保存。長期的なメモについては、今まで通りカテゴリーフォルダに保存するようにする。必要になれば、howmからhowm2へ該当するメモを移動する、というのは以前のとおり。

こうすることで、howmフォルダに行けば、今取り組んでいる短期的な課題がすぐにわかるわけだ。



メモを元にメモを作成したとき



それまでに書いたメモを元にしてメモを書くときには、新しい時系列フォルダを作成してそこに保存するようにする。


例えば「PC上で推敲」とコメントで名付けたフォルダがあり、そこにあるメモを一つのメモにまとめたいとする。その時は、新しくフォルダを作成し、その中にメモを新たに作成する。



②が古いフォルダ。①が新しいフォルダですね。両方共、同じコメントをつけるとわかりやすいかもしれない。

また、古いフォルダで反映されなかったメモも、新しいフォルダに移動する。そして今後、思い付いたことがあったとすれば、すべて新しく作ったフォルダに保存する。

これで、「その1 ― いま取り組んでいる課題がわかりにくい」という問題は解決するわけだ。一旦中断したあと、「PC上で推敲」の考察を再開したいときは、時系列逆順で上の方にある「PC上で推敲」フォルダを見ればいい。もし、その上で、それに関してそれ以前に書いていたメモを見返したいのであれば、一つ古いフォルダを参照すればいい。

また、このようにすることで、自動的に重要なファイル、今の自分の課題に関係したファイルのみを選別することができる。今までは一々、不要になったファイルをマークし、ゴミ箱フォルダに移動することで、フォルダの状態を保つ必要があった。これならその過程も省ける。上の方にあるフォルダが、自分の課題に関係したものである可能性が高いわけですね。howmフォルダにフォルダがたまってきたなら、そのときは古いフォルダを閲覧し、要不要を判断してからフォルダごとゴミ箱フォルダへ移動すればいい。

2014年6月28日土曜日

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


1画面ファイラか2画面ファイラか



ファイル操作は、2つに分けることができる。2つのフォルダを使う操作と、使わない操作だ。

2つのフォルダを使う操作とは、

  • ファイル移動
  • コピー
  • 書庫の解凍

などですね。2画面ファイラは、この操作には都合がいい。直感的に、左のものを右へ。右のものを左へ移動する、というのはわかりやすい。

だが、それ以外の一つのフォルダ内で済む操作である、

  • リネーム
  • 編集
  • 閲覧
  • 実行

等においては、2画面ファイラであることはマイナスに働く。この作業の際には、ひとつの画面に意識をずっと集中させていたい。この時、反対窓は、無駄に面積を占めて現在の作業とは無関係なものを表示するだけの、できれば消えていて欲しいものになる。
また、1つのフォルダを使う操作に移るたびに、その作業を左右どちらの窓ですればいいのか、という判断を一々しなければならないという点でも2画面はマイナスに働く。

1画面ファイラはちょうどこの逆になる。 2つのフォルダを使う操作は直感的なものではなくなるが、一つのフォルダで済む操作では1画面がプラスに働く。

1画面と2画面、それぞれメリットとデメリットがある。どちらを選ぶかは趣味の範囲で、もっと言えばそこまで気にするようなことでも無い。僕は、1画面ファイラのデメリットは工夫でどうにかできるだろう、と考えてPPxを使い出した。そしてそれ以来、ずっと独立窓1画面で使用している。

  • 反対窓でマークしたものを現在窓に移動(コピー)するスクリプト
  • fenrirを利用したファイル移動(コピー)
  • nストロークキー

などが、その方面で行ってきた工夫。


1画面と2画面を併用できないか




最近、ふと気づいたことがある。

基本1画面で使って、必要なときだけ2画面にすれば両方のいいとこ取りができるのではないか

通常の2画面ファイラだと、これはできない(センターをずらせば一応できるのか?)。そこに引きずられて、1画面か2画面、どちらか選ばなければならないとずっと思いこんでたけれど、PPxなら一体化すれば余裕でできるじゃないか。それができれば、僕がこれまでしてきた工夫とか別に無くていいものになるじゃないか。なんで今までこれに気づかなかったんだ!って感じですね。HAHAHA


やりたいこと




というわけで、しばらくはこっち方面を追求してみようと思う。一体化窓で使い、基本1画面。このとき、

  • スクロールバーは横
  • 一覧表示(複数行表示)

となるように。



必要なときには、Tabを押して2画面にする。

このとき、

  • スクロールバーは縦
  • 詳細表示(窓幅一杯一列表示)

となるように。


そして、処理を終えたらQを押してまた1画面に戻す。

また、カーソル左右の挙動もそれぞれ微妙に変更させたい。


やり方



TabとQで、この切り替えを実現するようにする。


以下の2つのスクリプトをScriptフォルダに保存。

2winTab.js
//!*script 

var ppcid = PPx.Extract('%n'); // 現在窓のPPcID
var nextppcid = "C"+String.fromCharCode(ppcid.slice(1).charCodeAt(0) + 1); // 次の窓のPPcID

if (PPx.GetComboItemCount <= 1){ // 窓が一つ以下の場合
  if (PPx.Extract("%*getcust\(X_win:"+ppcid+"\)").slice(6,7) == 0){ // 現在窓のスクロールバーの位置を取得
    PPx.Execute("%M?layoutmenu,!p");
  }
  if (PPx.Extract("%*getcust\(X_win:"+nextppcid+"\)").slice(6,7) == 0){ // 次の窓のスクロールバーの位置を取得
    PPx.Execute("*setcust X_win:"+nextppcid+"=B000001000");
  }
  PPx.Execute("*ppc -k *execute "+ppcid+",*viewstyle 詳細1\(&D\)");
  PPx.Execute("*customize XC_mvLR=4,1,6,B0100,6,B100"); // カーソル移動方法の変更
} else {
  PPx.Execute("*pane focus ~");
}



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("*execute "+ppcid+",*viewstyle 一覧1\(&L\)"); // 左窓の表示形式を変更
  PPx.Execute("*customize XC_mvLR = 4,1,4,B0000,6,B001 ; [←][→] "); // カーソル移動方法の変更
  if (PPx.Extract("%*getcust\(X_win:"+ppcid+"\)").slice(6,7) == 1){ // 左窓のスクロールバーの位置を取得
    PPx.Execute("*execute "+ppcid+",%M?layoutmenu,!p");
  }
}


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

Qを押して窓を閉じた時には、必ずPPC[A]が残るようにしてます。

スクロールバーの向きは、%M?layoutmenu,!pとX_winで切り替えている。X_winは、XC_pageで設定した基本のスクロールバーの向きを基準にしてるので、そこを変更している場合は動作が変になるかもしれない(僕の設定だとXC_page=0)。


次やりたいこととか



一体化窓を複数起動して、ということをすれば、もっとやれることが増えるかもしれないと思ってる。
そこまで含めて一緒に考えるとややこしくなりそうなので、そのあたりはまた今度