一括表示

− 野ざらし言 −

[3451] ファイラーを開くワザ

としき 2009/11/25(Wed) 23:52
http://www.hinocatv.ne.jp/~toshiki/
めざらさんの作られたFAQにも掲載がされていますが。
vz[RET]だけで起動したときに、即ファイラーが開くようにするワザがありま
す。これに関して、いくつか質問があります。

FAQでは

「ただし,このイベントを仕込んだときは,起動時オプションrによる自動
実行は次の入力待ちの状態で停止してしまいます。その場合は前項のように
ダミーの!Startイベントを入れておくとよいでしょう。」

とあります。この、ダミーのイベントって、即ファイラーを開くイベントの
前でも後ろでもどちらでも変わらないということでよろしいのでしょうか。
また、2画面ファイラーで起動させることもできるのでしょうか。
さらに、任意のディレクトリを表示させるとか、カーソル位置も任意という
か、ウィンドウの一番最後というか下に位置させて起動する、などというこ
とも可能でしょうか。
あと、実現するためには何か条件がありますか?
例えば、常駐させているとNG、みたいなものです。
ちょっと試してみた範囲では、常駐時には問題なくファイラーが起動するこ
とを確認していますので、これはほんとに単なる例ですが、その手の制限が
何かあれば教えてください。

[3452] Re: ファイラーを開くワザ

めざら 2009/11/26(Thu) 08:36
[3451]へのコメント http://homepage3.nifty.com/mezala/index.html
 確認することが多数あるようですから,実験してみます。

 整理すると,
A ダミーの!Startイベントの位置
B !Filerイベントで2画面ファイラー起動は可能か
C !Filerイベントで任意のディレクトリを表示できるか
D !Filerイベントで任意のカーソル位置表示できるか
E !Filerイベントで特定の機能を実現するための条件
…という感じでしょうか。

 Eについては,榊原氏の開発したイベント用の所謂「お呪い」が必要ですね。コードとしては &e("#]") #] です。適当な位置に必要です。どこにというのはPKの過去ログを見るのが早いと思います。

 Bについては,見米氏の開発した手法で実現可能です。
1 "Filer"
(r)??{ (fg.0||wa)?. #W #93 . } ; 複窓ファイラーで起動
 fg.0はファイラーの複窓フラグで,0なら単窓だから複窓にしてファイラーカーソルを元の窓に戻す,ということになります。

 あれ? でもこれを入れることが原因で vz -r[nn] で入力待ちになるって話じゃなかったかしら。

[3453] Re^2: ファイラーを開くワザ

としき 2009/11/26(Thu) 23:06
[3452]へのコメント http://www.hinocatv.ne.jp/~toshiki/
>  確認することが多数あるようですから,実験してみます。

お手数をおかけして申し訳ありません。なにとぞよろしくお願いします。

>  整理すると,

私の悪文を、うまく整理していただきありがとうございます。

> A ダミーの!Startイベントの位置

私が単窓ファイラーのルーチンで2〜3回試した範囲では、そのルーチンの
前でも後ろでも問題がないような感じです。が、あまり自信がありません。
そもそもどういったときにどういった問題が発生するかというのを正しく捕
らえていなくて、常に問題が発生しない試験項目しか試していない可能性が
あります。

また、

> E !Filerイベントで特定の機能を実現するための条件

これは微妙にニュアンスが違うというか。
私がVzマクロがよくわかっていないので、めざらさんの表現で正解なのだ
と思いますが、私の気持ちとしては、!Filerイベントなどという範囲の広い
ものではなく、いきなりファイラーという特定の動作のときに絞った場合の
前提条件の有無だけを気にしています。

>  あれ? でもこれを入れることが原因で vz -r[nn] で入力待ちになるって話じゃなかったかしら。

ということは、複窓ファイラーにしないのであれば、ダミーの!Startは不要
ということなのでしょうか。よく分からなくなりました。

[3454] 複窓ファイラー技術は !Start と !Filer で別物

めざら 2009/11/30(Mon) 14:01
[3453]へのコメント http://homepage3.nifty.com/mezala/index.html
 FAQのページを作成してから結構たつので,すっかり忘れてました。
イベントのページじゃなくて起動・終了のページだったのですね。
次回から,できればなるべく極力,URLも入れていただけると助かります。

 整理ってのは,自分の理解の話です。悪文とかじゃなくて。
近ごろリストにしないと,訳がわからなくなってくるのです。

 A ダミーの!Startイベントの位置 ですが,これはあまり関係はなくて,
イベントは最後に読み込まれたイベントが有効で,キー入力などに反応して
発動するので,位置は関係ないと思います。

 その時,その状況で,どのイベントが呼ばれるか,が重要で。

> 私の気持ちとしては、!Filerイベントなどという範囲の広いものではなく、
> いきなりファイラーという特定の動作のときに絞った場合の前提条件の有無

 個別の動作でよいのですね。いや,こちらの方がむしろ考えやすくて。
イベント云々になると,内部情報を知らないと多分説明ができないと思います。

 いきなり複窓ファイラーの話なら,問題は絞られます。
> ということは、複窓ファイラーにしないのであれば、ダミーの!Startは不要
> ということなのでしょうか。よく分からなくなりました。

 起動後いきなり複窓ファイラーは,!Start イベントで実現しています。
ですからこの !Start を使わなければダミーの !Start も不要です。

 #3452 で B について説明した !Filer イベントは,これとは別物です。

 ファイラーカーソルの表示位置に関しては,実験ののち改めて。

[3456] Re: 複窓ファイラー技術は !Start と !Filer で別物

としき 2009/11/30(Mon) 23:04
[3454]へのコメント http://www.hinocatv.ne.jp/~toshiki/
> 次回から,できればなるべく極力,URLも入れていただけると助かります。

これは配慮が足りませんでした。失礼しました。
次回からは気をつけたいと思いますが、でも、なんとなく、やっぱり忘れて
しまいそうな気もします。

>  A ダミーの!Startイベントの位置 ですが,これはあまり関係はなくて,

これについては了解しました。

ちょっと気になっているのは、

> B !Filerイベントで2画面ファイラー起動は可能か

これなんですが、!Filerイベントで大丈夫なのか、ということです。
私の気持ちは、常に2画面ファイラー、ではなく、vz[RET]で起動したときは
2画面ファイラーだけど、その他のときはきちんと1画面ファイラーになる
のか、ということです。あるいは、1画面ファイラーでファイルをオープン
して、そこからコマンドラインに遷移して、そこで\[CR]でファイラーを起動
したときは当然、以前の情報を引き継いで1画面ファイラーで起動すること
を期待します。

なんか、面倒になるのか簡単になるのかもよくわからんのですが、なにとぞ
よろしくお願いします。

[3457] 起動時は複窓,通常は単窓?

めざら 2009/12/01(Tue) 09:36
[3456]へのコメント http://homepage3.nifty.com/mezala/index.html
 なんだか随分と複雑な話なのですね。
 いろいろ確認しているうちに,自分がいかに普段意識していなかったか分かりました。たくさんの誤解。起動時複窓ファイラーというのは!Startだけではできないとか,y.mikomeさんの技術がいかによくよく深く考えられたものであったかが再認識しました。

 複窓ファイラーの技術は,常に複窓ファイラーにしていたいという要求から生まれたものですから,普段は単窓で起動時だけ複窓という要求は,ちょっと理解不能というか…何が便利になるのかよくわかりません。もし差し支えなければ,後学のためにどういった業務・作業の一環なのか教えてくださると嬉しいです。

 まず前提として認識しておいていただきたいのは,起動時いきなりファイラーは起動時自動実行に対して副作用があるということです。

 それからさらに確認なのですが,
■起動したときは複窓,その他のときは「きちんと」単窓になるのか
 ここで言う「きちんと」の意味は,
・常に強制的に単窓になる
・常に直前の状態を継承して単複が変遷する
…のどちらなのでしょうか。
 文脈から判断すると後者かなとも思ったのですが,自分の感覚と他の人の感覚は正反対ということがままあるので,念の為確認させていただきます。

 後者(わたしの感覚ではノーマル)であれば,
・!Startイベントに 副作用を認識しつつファイラー起動ルーチンを仕込む
・!Filerイベントに ファイル未オープンなら複窓ルーチンを実行

 前者(わたしの感覚ではアブノーマル)であれば,
・!Startイベントに 副作用を認識しつつファイラー起動ルーチンを仕込む
・!Filerイベントに 常時【単窓】ルーチンを仕込む

 …ということになるでしょうか。

■起動時いきなりファイラー
 マクロFAQを参考にしてください
 http://homepage3.nifty.com/mezala/vz/faq/start.html#start_002

■ファイルを未オープンなら複窓ファイラー
 こちらはマクロFAQにはないのですが,
1 "!Filer"
(r)??{(fg.0||wa)?. #W #93 .} ;複窓 by y.mikome

 fg.0は窓数のフラグで,fg.0==1なら何もしない,0なら複窓に。
 wa>0はオープンしているファイルがある状態で,未オープンなら複窓に。

 なかなかややこしいので,普段忘れていることがいっぱいありました。
起動時複窓ファイラーは複数のイベントが必要でした。
混乱に引き込んでしまって申し訳ないです。

[3458] Re: 起動時は複窓,通常は単窓?

としき 2009/12/01(Tue) 21:18
[3457]へのコメント http://www.hinocatv.ne.jp/~toshiki/
>  なんだか随分と複雑な話なのですね。

やっぱり複雑でしたか。

>  普段は単窓で起動時だけ複窓という要求は,ちょっと理解不能というか…何が便利になるのかよくわかりません。

この点は、ニーズではなくシーズ先行というか。

元々の出発点は、FAQを見ていて、起動時にいきなりファイラーを開くと
いうワザがあると知ったことです。
次に、私は複窓ファイラーを使うことが多いけど、デフォルトでは単窓だよ
なぁ、と思い当たりました。
でも、実際の作業時には、あまり頻繁ではないけれど単窓に切り替えること
があります。どういったときかというと、ファイル数が多いディレクトリを
表示すると予測されるとき。こういったとき、遅いマシンだと表示まで時間
がかかるし、表示可能なファイル数というのも両方の窓の合計の値で制限が
かかってきますので、単窓にするようにしています。

ということで、この部分は逆でもいいのですが、常駐時にコマンドラインか
らvz[RET]で起動したときは複窓ファイラーになって、\[CR]で起動したとき
は前回ファイラーを閉じたときの窓の数を引き継いで起動する、ということ
ができるともしかして便利になるかなぁ、と妄想したわけです。もちろん、
全く便利にならない可能性のほうが高いとは思いますが。

>  ここで言う「きちんと」の意味は,
> ・常に強制的に単窓になる
> ・常に直前の状態を継承して単複が変遷する
> …のどちらなのでしょうか。

少なくとも前者の意味ではありません。
#3456で意図していたことは、デフォルトのキー割り当ては「W」でしたっけ、
そのキーを押せば単複が切り替わってくれるか、つまり、常に複窓を強制さ
れる事はないか、ということでした。そして、その後段で指摘しているよう
に、別の方法でファイラーに遷移したときは強制的に複窓になることを回避
できてほしい、ということです。

>  後者(わたしの感覚ではノーマル)であれば,
> ・!Startイベントに 副作用を認識しつつファイラー起動ルーチンを仕込む
> ・!Filerイベントに ファイル未オープンなら複窓ルーチンを実行

うん、これでだいたい大丈夫かなぁ。
問題は、ファイル未オープンのチェックのところでしょうか。
例えば、consoleファイルのみをオープンしているときはどちらに転ぶのか、
という問題が発生しそうな気もします。
あと、常駐直後のデフォルトって単窓ファイラーだと思いますが、そのとき
に\[CR]でファイラーを起動したときは単窓だとうれしいのですが、これって
可能ですか?

> 起動時複窓ファイラーは複数のイベントが必要でした。
> 混乱に引き込んでしまって申し訳ないです。

とんでもありません。
私自身の考えがまとまっていない、プラス、表現が稚拙、ということもあっ
て、余計なお手間を取らせてしまったようです。

[3459] Re^2: 起動時は複窓,通常は単窓?

めざら 2009/12/01(Tue) 23:48
[3458]へのコメント http://homepage3.nifty.com/mezala/index.html
> やっぱり複雑でしたか。

 複雑,と言うか本当に手立てがあるのか微妙で。

> でも、実際の作業時には、あまり頻繁ではないけれど単窓に切り替えること

 わかります,わかります。Out of buffer は見たくありません。

> 常駐時にコマンドラインからvz[RET]で起動したときは複窓ファイラー
> \[CR]で起動したときは前回ファイラーを閉じたときの窓の数を引き継いで

 これらの違いって見分けが付くのでしょうか。
 なんか違うのでしょうけど,わたしは常駐でvz[RET]で起動ということを凡そやったことがないのです。そういった起動のしかたって,何かメリットがあるのですか?(本気で訊いているので,マジレスお願いします。)
 何か別のソフトの子プロセスか何かでしょうか。

> 常に複窓を強制される事はないか、ということでした。

 ファイラーを起動したときに,強制的に複窓にすることはできます。
 しかし y.mikome さんが企図したことは起動時…つまりファイルをひとつも開いていない状態…には複窓にし,その他の時は直前の状態を引き継ぐということでした。もちろん,意図的に単窓にした後はVZを再起動しない限り複窓になることはない,…はずです。

> 問題は、ファイル未オープンのチェックのところでしょうか。
> 例えば、consoleファイルのみをオープンしているときはどちらに転ぶのか、

 consoleはファイルではありませんから,未オープンと判定されます。
 あのルーチンの wa は通常のファイルをオープンするとそのファイルが使用するテキストレコードの先頭アドレスが格納されます。コンソールのテキストレコードのアドレスは wo に入っています。コンソールしかオープンしていなければwaは0なので複窓設定があれば複窓になります。

> あと、常駐直後のデフォルトって単窓ファイラーだと思いますが、そのとき
> に\[CR]でファイラーを起動したときは単窓だとうれしいのですが、これって
> 可能ですか?

 複窓ルーチンは元々上のような起動時に複窓ファイラーを実現するために開発されたものですから,逆を行っていますね。(^^;

[3460] デフォルトファイラー起動、複窓ファイラー起動

としき 2009/12/02(Wed) 22:26
[3459]へのコメント http://www.hinocatv.ne.jp/~toshiki/
>  これらの違いって見分けが付くのでしょうか。

つきませんか。
いや、そういうこともよくわかっていないもので。

>  わたしは常駐でvz[RET]で起動ということを凡そやったことがないのです。そういった起動のしかたって,何かメリットがあるのですか?

通常は、全く何にもメリットはないと思います。
昔、品川勤務の時代だから9年ぐらい前になりますが、2週間かもっと短い
期間だったか、[ESC]のキートップを紛失したマシンを触る羽目になって、そ
のときは常駐のコマンドラインからファイルオープン窓を出すためにvz[RET]
をやっていましたけどね。[ESC]Cもできないから、[F1]のメニューから操作
するかたちで、えらく使い勝手が悪かったですね。

あ、わかった。
私が出発点での勘違いしたというか、進むべき方向を間違えたというか。
前にも書きましたが、ニーズではなく、いきなりファイラーという技術を知
ったことによるシーズありきでいろいろと妄想していたのです。
なので、設題を変えます。
すなわち、いきなりファイラーを使うという部分を全て放棄します。


常駐時のコマンドラインで\[CR]やファイルオープン窓で[RET]を行うことで
ファイラーを起動させることができます。
このとき、例えば、[CTRL]を同時に押していた場合は、常に複窓ファイラー
で起動する、ということを希望します。同時押しがない場合は、デフォルト
というか、前回のファイラーの窓数を引き継いで起動する形。
素人考えでは、これは分岐一発だから十分可能と思うのですが、何か副作用
があるでしょうか。


特定のニーズがあったわけでなかったために、めざらさんには無駄にお手間
をおかけするような形になってしまいました。大変申し訳ありませんでした。
でも、FAQなんかをぼ〜っと眺めていると、全然知らなかったことをいろ
いろと勉強させられて、妄想が膨らみます。これも、めざらさんのまとめ方
がうまいからなんでしょう。
ただ、時々、「これはFAQではない」みたいな記述が混ざっていますが、
そういうのは分離して「Vzテクニックページ」みたいなところにまとめた
方がいいと思いました。

[3461] Re: デフォルトファイラー起動、複窓ファイラー起動

めざら 2009/12/06(Sun) 22:22
[3460]へのコメント http://homepage3.nifty.com/mezala/
 [CR] と \[CR] と ^[CR] は別のキー割当になりますので,
としきさんが想定するような動作にするのは,きわめて困難だと思います。

 特殊キーの使用にこだわらなければ,マクロ1本でそれなりにいけそうな。

1 ^\ "" ;検証していませんが手順はこうかと
 :A     (s)>?{ >E >I >C . . }
 :C     fg.0+, #98 .            ;コマンドライン
 :I     #[ >A                   ;入力窓
 :E     fg.0+, #O #m            ;編集モード
*

 それはともかく…
 テクニックページを作るには,動作の裏側に精通していないと無理です。
論理的に説明できるためには,ソースが読めるなんてのは前提でしょうね。

[3462] Re^2: デフォルトファイラー起動、複窓ファイラー起動

としき 2009/12/07(Mon) 22:30
[3461]へのコメント http://www.hinocatv.ne.jp/~toshiki/
>  [CR] と \[CR] と ^[CR] は別のキー割当になりますので,
> としきさんが想定するような動作にするのは,きわめて困難だと思います。

そうですか、それは残念です。
98版ならカナキーで分岐、というのもありそうですが、IBM版だとそう
いうわけにも行きませんからね。

今回は、素直にあきらめることにします。
長々とお付き合いいただき、どうもありがとうございました。

[3463] ファイラーの他の情報の件

めざら 2009/12/07(Mon) 23:18
[3462]へのコメント http://homepage3.nifty.com/mezala/index.html
まだ,課題が残っていますよ。

ファイラーを開くときに,特定のカーソル位置で開くとか,任意のディレクトリを表示するとか。

こちらは何とかなりそうですけれど。
特に後者は普通に指定してやればよいので,何か条件はあるのでしょうか。

[3466] Re: ファイラーの他の情報の件

としき 2009/12/08(Tue) 00:17
[3463]へのコメント http://www.hinocatv.ne.jp/~toshiki/
> まだ,課題が残っていますよ。

そうでした。

> 特に後者は普通に指定してやればよいので,何か条件はあるのでしょうか。

前述の通り、特定のニーズに基づいた発言ではなかったのですよ。
ただ、これを実装しようとすると、マクロ中に直接記述されたディレクトリ
が実在しなかった場合のデフォルト動作というかエラーチェックというか、
そういうのがポイントになりそうな気がします。
これは、特定のカーソル位置で開く場合も同様なことがありそう。
特定のファイル名を指定していた場合にそのファイルがない存在していない
とか、あるいは上から10番目にカーソル位置を指定した場合にファイルが
6つしかなかったとか。

[3467] Re^2: ファイラーの他の情報の件

めざら 2009/12/08(Tue) 06:18
[3466]へのコメント http://homepage3.nifty.com/mezala/index.html
> ただ、これを実装しようとすると、マクロ中に直接記述されたディレクトリ
> が実在しなかった場合のデフォルト動作というかエラーチェックというか、
> そういうのがポイントになりそうな気がします。

 当然,チェックします。
 実は簡単な方法があって,コマンド#60のタグ情報の取得コマンドはその都度ディスクにアクセスして,ファイルの有無を調べることが可能です。
 また,ファンクションコールを使えば,ファイルの有無を調べるのは簡単ですよね。

> 特定のファイル名を指定していた場合にそのファイルがない存在していない
> とか、あるいは上から10番目にカーソル位置を指定した場合にファイルが
> 6つしかなかったとか。

 開こうとしているディレクトリのファイル数が分かっている必要があるので,ファイラーで表・裏のどちらかなら可能だと思います。したがって特定のディレクトリを開こうとする場合は,一度開いてからということになるので,上と共存は難しいかなと思いますが。

[3468] Re^3: ファイラーの他の情報の件

としき 2009/12/09(Wed) 23:45
[3467]へのコメント http://www.hinocatv.ne.jp/~toshiki/
>  開こうとしているディレクトリのファイル数が分かっている必要があるので,ファイラーで表・裏のどちらかなら可能だと思います。したがって特定のディレクトリを開こうとする場合は,一度開いてからということになるので,上と共存は難しいかなと思いますが。

ごめんなさい、この部分がよくわかりません。
開かずにファイル数を取得するのが難しいということだと思いますが、では
そのような場合に、なぜ共存が難しいのか、というのが理解できません。
わかりやすい解説を希望します。

[3470] Re^4: ファイラーの他の情報の件

めざら 2009/12/10(Thu) 18:50
[3468]へのコメント http://homepage3.nifty.com/mezala/index.html
> 開かずにファイル数を取得するのが難しいということだと思いますが、では
> そのような場合に、なぜ共存が難しいのか、というのが理解できません。

 あー,はしょりすぎて申し訳ありません。
 ターゲットのディレクトリに存在するファイル数を調べるために一度ファイラーを開くということは,裏側(サイレント)でできることではないので,一旦表示してファイラープールを更新することになり,その後カーソルを移動して再表示するという手順になるのではないかと思います。美しい動作とはとても言えないので,相当に手のかかるマクロを組むわりには満足できないものになると思います。

[3471] Re^5: ファイラーの他の情報の件

としき 2009/12/10(Thu) 22:14
[3470]へのコメント http://www.hinocatv.ne.jp/~toshiki/
大体理解できた気がします。
完璧に理解できたかというと、かなり怪しいですが。

とりあえず、共存ではなくて、片方ずつで結構ですので、サンプルコードを
示していただけますか?
それぞれ、使ってみて、具合がいいようならどちらかを本格導入することを
検討してみたいと思います。

[3474] Re^6: ファイラーの他の情報の件

めざら 2009/12/12(Sat) 14:15
[3471]へのコメント http://homepage3.nifty.com/mezala/index.html
 コードは全然考えてませんでした。(笑)
 これから諸先輩方のマクロを見て研究します。

 なお,ファイラーの表示しているディレクトリの情報は fl にあります。
http://homepage3.nifty.com/mezala/vz/notes/struct.html#fl_struct

 特定のディレクトリをファイラーでオープンする手順は,
・pにディレクトリ名を格納
・&Fl(p) でファイラーを起動
…と,なっています。

[3475] Re^6: ファイラーの他の情報の件

めざら 2009/12/12(Sat) 17:09
[3471]へのコメント http://homepage3.nifty.com/mezala/index.html
 実は,
 しばらく前からファンクションコールでファイルあるいはディレクトリの存在を確認するというテストマクロを試作していて,返されるキャリーフラグがなんだかおかしな感じになっていて,もしかするとHP200LXのDOSだと違うのかなとか色々悩み中であったりします。いや,LXだろうがDOSの基本的なファンクションコールの戻り値が異なるなんて有り得ないわけで,根本的な勘違いをしている可能性が100%だったりするわけですが,さらに悩み中です。
 これが確認できないと,コード化できないという壁に当たっているというのが現状というわけで。

↑ このページの先頭