一括表示

− 野ざらし言 −

[3633] キーアサイン

としき 2010/03/21(Sun) 23:34
http://www.hinocatv.ne.jp/~toshiki/
Vzのキーアサインのことで教えてください。
コマンドキーとして使えるものは、取説の167〜168ページに掲載されています。
マクロキーについては、特に説明してあるところを見つけられていないのですが、コマンドキーと同様でしょうか。コマンドキーとしては使えるけどマクロキーとしては使えないとか、その逆というようなものはないという理解でよろしいのでしょうか。

また、ファイラーではアスタリスクキーを押すとマスクが解除されますが、これってどこで設定されているのでしょう。つまり、アスタリスクではなく、アルファベットの「A」を押すとマスクが解除されるように設定することはできないか、という話です。

以上2点、ご教示いただけると幸いです。

[3634] Re: キーアサイン

めざら 2010/03/22(Mon) 08:36
[3633]へのコメント http://homepage3.nifty.com/mezala/
■コマンドキー,マクロキー
 VZはキーが押されたときにそのキーの値を探しますが,探し方の法則(優先順位)があるだけで,コマンドとマクロを区別して探しているわけではありません。ソースを読んでいないので確信はありませんが,経験的に「どのキーはコマンドにしか使えない」ということはなく,「このコマンドをマクロで拡張すると支障のある場面がある」というくらいです。
 なお,呼び出し時にはキーの区別はありませんが,キーの戻り値はコマンドとマクロが区別されます。

■ファイラーのマスク解除
 これは,vzfl.defに仕込まれたマクロで設定されています。
 まず,「r], (r)>!{」というコードを探してください。製品版のvzfl.defではそのコードに続けて,コメントアウトされている行の多いブロックがあると思います。このブロックは[キー][コマンド];[機能説明]になっています。その中から,「#* ;*.*」を探してください。この #* コマンドに文字キーを割り当てればよいことになります。
 このブロックは条件分岐「>!」が使われていて,文字と対応する命令を記述します。「命令」というのはコマンドに限りません。ラベルジャンプも使われます。マクロコールはやめておいたほうがよいかもしれません,…と言うか無意味なんじゃないかな。
 具体的には,わたしの使っている vzfl を例にします。

&e("#]") #] ;To Free by Tomo (お呪い)
r], (r)>!{
L>L R#R K#K N#N @#Q Q#Q *#* :#* X>X H#H
I>I B>B =>= O>O +>W U>U ->= Z>Z
}

 *#* :#* は両方ともマスクの解除です。シフトキーを押すタイミングを外してもよいように「:」も指定してあります。としきさんの例で言えば,A#* でよいことになります。
 …が,コマンドメニューバー(画面の一番上)の「All」とかち合いますので注意が必要です。メニューバーにある先頭文字(実際は単語中の最初の大文字)とかち合う場合は,vzfl.def(場合によっては他のマクロファイルかも)中の「*E その他」エリアの4番のラベルの羅列を書き換える必要があります。このラベルは他の場所にあるコマンドの配列と対応していますので,削除するだけでは駄目で別に置き換える必要があります。結構面倒ですね。

[3635] Re^2: キーアサイン

としき 2010/03/22(Mon) 11:01
[3634]へのコメント http://www.hinocatv.ne.jp/~toshiki/
いろいろとどうもありがとうございます。

>  具体的には,わたしの使っている vzfl を例にします。

私のvzflでは、現在、以下のようになっています。

r], (r)>!{
;(略)
;   A   #+   ;All
;(略)
;       #*   ;*.*

こんな感じで、コメントアウトされているように見えます。
なのに、なぜアスタリスクが効くのか、というのが新たな疑問として沸いて
しまいました。恐れ入りますが、解説をお願いします。

> シフトキーを押すタイミングを外してもよいように「:」も指定してあります。

めざらさんの場合、プラスキーにも機能を割り振っているように見えます。
これも、シフトキーを押すタイミングが外れた場合に対応してセミコロンを
指定するにはどのようにすればよいのでしょうか。

> このラベルは他の場所にあるコマンドの配列と対応していますので,
> 削除するだけでは駄目で別に置き換える必要があります。結構面倒ですね。

ふむ、確かに面倒そう。
 

[3636] Re^3: キーアサイン

めざら 2010/03/22(Mon) 11:36
[3635]へのコメント http://homepage3.nifty.com/mezala/
> こんな感じで、コメントアウトされているように見えます。
> なのに、なぜアスタリスクが効くのか、というのが新たな疑問として沸いて

 そうくると思いました。(笑)
 filer.asmを見ると,次のキーは特別扱いのようです。
	cmp	dl,'*'			; [*]
	je	do_wild
	cmp	dl,'\'			; [\]
	je	do_root
	cmp	dl,'/'			; [/]
	je	do_root
 それじゃ,どうしてvzfl.defに #* がわざわざあるのかというと謎ですが,
一応,想像するに,カスタマイズ可能にしてあるのではないかと思います。
たぶん,としきさんのように多様な要望があることを予測しえたのかと。

 あと,「;」ですか。なるほど。これは考えてもみませんでした。
たぶん値でよいと思います。「;」は3Bhなので,
	($3B)	#+
…という感じでしょうか。

 なお,ファイラーのショートカットキーは文字だけではありません。
例えば,制御コードでもOK。制御コード入力用の #22(^P)で^A等入力し,
ファイラーでは (1) #+ のように受けることができます。

[3637] Re^4: キーアサイン

としき 2010/03/22(Mon) 18:36
[3636]へのコメント http://www.hinocatv.ne.jp/~toshiki/
> 一応,想像するに,カスタマイズ可能にしてあるのではないかと思います。

なるほど、合理的な推測です。

> 例えば,制御コードでもOK。制御コード入力用の #22(^P)で^A等入力し,
> ファイラーでは (1) #+ のように受けることができます。

おぉ、すごい。
こんなもの、考えても見ませんでした。

どうもありがとうございました。

[3640] Re^2: キーアサイン

としき 2010/04/04(Sun) 16:38
[3634]へのコメント http://www.hinocatv.ne.jp/~toshiki/
新しいツリーにするか悩んだのですが。
ファイラーのキーアサインの関係ということで、こちらにつけさせていただ
きます。

nifty:FGALDC/MES/14/1940のPoPo 山本氏によると、200LXでは!Filerで

       +       #+     ;  All

という設定が効くが、同じ設定がTP220では効かない、と記述されています。
レスもついていないようなので、同様の設定にして再現試験をしてみました。
結果、WinXPのDOS窓とPC-98のDOS6.2では、テンキー側の+は効くけれど
フルキー側の+は効かない、テンキーのないポケ3もフルキーしかないので
効かない、という結果になりました。
この私の結果だけを見ると、なんとなく、シフトキーを押しながらだから、
というのが原因だとおもいますが、そういう解釈でよいのでしょうか。
とすると、逆にPoPo 山本氏の環境では、200LXのシフトキーの有無によらず、
+キーが効くということになるかと思いますが、これはこの機種に特有のこ
となのでしょうか。それとも、何らかの設定によるものなのでしょうか。

えぇっと、なんかもやもやしてうまく言い表せないのですが。
コマンドキーに関しては、取説に使えるキーが明示されています。けれど、
ファイラーに関しては明示されていません。ということは、きちんと設定し
てやればコマンドキーに使えない記号類でもファイラーコマンドを割り当て
られる、という理解でよろしいのでしょうか。あるいは、シフトを押さずに
入力可能なカンマ、ピリオド、ダッシュ、スラッシュあたりのキーなら問題
がないけど、シフトを押す必要のある記号だと面倒、というような事になる
のでしょうか。

もし簡単に説明できることであれば、私をすっきりさせてもらえるとありが
たいです。説明が難しくて、聞かないほうがよかったりする事柄ならパスし
ますけど。
 

[3641] Re^3: キーアサイン

konno 2010/04/05(Mon) 00:48
[3640]へのコメント
> この私の結果だけを見ると、なんとなく、シフトキーを押しながらだから、
> というのが原因だとおもいますが、そういう解釈でよいのでしょうか。

ソースも読んでなくて、思いつきですが、ファイラーでは、シフト+アルファベットでファイルサーチモードになりますよね。+キーもその範囲だったりして。

[3642] Re^3: キーアサイン

めざら 2010/04/05(Mon) 22:05
[3640]へのコメント http://homepage3.nifty.com/mezala/index.html
 HP200LXのテンキーが発行するキーコードはフルキーのそれなのだそうです。つまり,これはテンキーかフルキーかの違いではない,…つまりキーコードの問題ではないということを意味します。
 実際,ファイラーイベントでキーを受けるのは,条件分岐のキーワード「>!」によっています。このキーワードは,押された文字コードにより分岐するもので,キーコードにより分岐するものではありません。
 Konnoさんが仰るとおり,シフトキーを押下しながら押すキーになっている場合,ファイル名サーチモードに入ってしまうからイベントに渡らないわけです。

 同じ設定がTP200では効かないということですが,NumLockモードであれば+も有効です。逆に,NumLockモードであってもシフトキーを押さないと入力できない記号類は,ファイラーのショートカットキーには使えません。つまり使える記号類はかなり制限されます。フルキーの1段目の上側にずらりと並んだ記号類は使えないということになりますね。

 コマンドキーの場合は,キーのスキャンコードが渡されると思うので,ファイラーとはまったく異なる話になると思います。

[3643] Re^4: キーアサイン

としき 2010/04/06(Tue) 00:07
[3642]へのコメント http://www.hinocatv.ne.jp/~toshiki/
>  同じ設定がTP200では効かないということですが,NumLockモードであれば+も有効です。

なるほど、PoPo 山本さんはこの辺の隘路にはまっていたわけですね。

> 逆に,NumLockモードであってもシフトキーを押さないと入力できない記号類は,ファイラーのショートカットキーには使えません。つまり使える記号類はかなり制限されます。

ということは、私が#3640で書いたカンマ、ピリオド、ダッシュ、スラッシュあたりであれば、待ち受けさせることが可能ということですよね。

>  コマンドキーの場合は,キーのスキャンコードが渡されると思うので,ファイラーとはまったく異なる話になると思います。

私が#3640で書いた繰り返しになってしまいますが、きちんと設定してやれば、コマンドキーに使えない記号類でもファイラーコマンドを割り当てられる、ということでよさそうですね。

どうもありがとうございました。

↑ このページの先頭