マクロを実行したとき、 [Esc]No.00700
番頭++ さん 98/03/26 12:12
 
  次のマクロを実行したとき、 [Esc] を押しても、マクロはキャンセルされず、
永久ループからは抜け出れません。
message を含んだループには何らかの制限があるのでしょうか ?

マクロをキャンセル方法があれば教えてください。

// < hajime >
pp_looop:
 message "looop";
// if( iskeydown(0x1B) ){endmacro;}
 goto pp_looop;
// < owari >

という質問を、ずいぶん昔、しようと思ったのですが ...
実際にはしていません。

「マクロをキャンセルするには、 [Esc] を押し続けてください。」
って正しい表現ですよね ???

それとも、0. 何秒押し続けたとかいうのが本当のマクロ言語の仕様ですか ???

環境としては、今のハードは、PC-AT CPU が K6-233 です。BIOS の設定も普通です。
Windows 95,  Hidemaru V 2.00

??? これが質問です。よろしくお願いします。

[ ]
RE:00700 マクロを実行したとき、 [Esc]No.00709
noro さん 98/03/31 10:48
 
番頭++ さん、こんにちは(^^)noroです。

》「マクロをキャンセルするには、 [Esc] を押し続けてください。」
》って正しい表現ですよね ???
 確かに、掲載されているマクロの場合ですと、キャンセルするためには、
[Esc]を押し続ける必要があります。そういう意味では正しいと思いますが、
実行を中断させることを前提とするマクロならば、実行結果を返さないコマン
ドである message ではなく、結果を返すことが可能な question を使う方が
良いと思います。

pp_looop:
 question "looop";
 if( !result ) endmacro;//[Esc]または「いいえ」で終了
 else goto pp_looop;

 …メッセージの表示が、[Esc]キーで消す(表示終了)ことができてしまうこ
とが、マズイのかもしれませんが…(^^;)(私は現状が良いと思います)

》それとも、0. 何秒押し続けたとかいうのが本当のマクロ言語の仕様ですか ???
 キーボード入力の仕様では無いでしょうか?キーを押すと同時にリピートが
開始される設定ができたとしたら、おっしゃるキャンセルも容易にできると予
想されますが、日常の操作がまともに実行できないリスクの方が大きいかも…

それでは…

[ ]
RE:00700 マクロを実行したとき、 [Esc]No.00715
秀丸担当 さん 98/03/31 14:00
 
>  次のマクロを実行したとき、 [Esc] を押しても、マクロはキャンセルされず、
>永久ループからは抜け出れません。
>message を含んだループには何らかの制限があるのでしょうか ?

これはnoroさんのおっしゃる通り、キー入力のタイミングの問題ですね。
かまわずEscをずーーっと押し続ければ終わらせることができると思います。

Escは、緊急時に強制的に終わらせる手段であって、途中で終わらせたい操作
を入れる場合は、questionなどを使って終わらせるようにしてください。

[ ]
RE:00715 マクロを実行したとき、 [Esc]No.00726
番頭++ さん 98/04/01 11:12
 
>Escは、緊急時に強制的に終わらせる手段であって、 ...

noro さん、はじめまして、

  的確なコメント、ありがとさんです。

  コンピュータのハード、OS 関連の世界では、永久ループに対処する「キャン
セル方法」が考慮されていると思っています。DOS の時代の [Ctrl] + C とか、
PC-AT の [Ctrl] + [Alt] + [Delete]  などです。昔の大型コンピュータにも類
似した考慮は見受けられます。

  「秀丸エディタ」マクロで、 message を含まない永久ループは、 [Esc] で処
理を中断できます。あちきは、これがインタプリタとして命令をフェッチしたと
きの、永久ループへの考慮だと思いました。一般的にインタプリタを設計すると
きの配慮です。

  問題は、message を含んだマクロの永久ループです。[Esc] を message  への
応答だと判断すると、message を含んだマクロの永久ループの「キャンセル方法
」はありません。そこで、あちきは、[Esc] を押し続ける事が、その回避方法だ
と、仕様だと、信じていました。

  先日、日曜日に秋葉原で、ある PC-AT Pentium II 333 で試すと [Esc] を押
しつづけてもキャンセルは出来ません、今日会社で自分専用の PC でもキャンセ
ルできません。自宅ではキャンセルされます。BIOS に依存したものなのか、OS
に依存したものなのかはわかりません。

  「秀丸エディタ」は意識して [Esc] を処理しているようにみえます。message
を含む永久ループへの「キャンセル方法」はあるのでしょうか  ???

  単なる疑問です。

[ ]
RE:00726 マクロを実行したとき、 [Esc]No.00727
noro さん 98/04/01 14:30
 
番頭++さんこんにちは(^^)noroです。

 まず前置きですが、他のソフトなどでも、メニューから表示されるダイアロ
グやメッセージは、[Esc]キーでキャンセル(表示を消す)ことができるものが
多い(もちろん例外もあります)です。これと同様に秀丸マクロから表示される
 menu や question 、message が[Esc]キーの操作でキャンセルすることがで
きるのは、妥当な動作だと思います。
 これを肯定すれば、menu や question 、message の表示中の[Esc]キー操作
は、マクロの強制終了の操作として扱われないことになります。
 よって、これらの表示中以外に[Esc]キーが押された(スイッチにたとえれば
OFF→ONになった)ことを秀丸が認識しなければ、マクロは強制終了になりませ
ん。

 マクロが永久ループしている状態で、[Esc]キーを押すと、押した瞬間に一
度だけON になります。そのまま押し続け、リピートが開始される時間
(Windowsのキーボードのプロパティでは「表示までの待ち時間」)が経過すると
キーが所定の間隔(Windowsのキーボードのプロパティでは「表示の間隔」)でリ
ピートされ、ON/OFFが繰返されます。
 このリピートによって、message がキャンセルされてから、次のループで表
示されるまでの間にOFF→ONにならないと、マクロの強制終了はできない筈で
す。

 ですから、キーのリピート間隔(時間)と、PC がマクロをループする間隔(時
間)の競争になってしまうと思うんです。高速な PC で強制終了できなくなる
のは、キーがリピートされるよりも早く次の message を表示してしまうこと
に起因するのではないでしょうか?

 会社の PC のキーボードのプロパティから、「表示の間隔」を最速に設定した
場合はどうでしょう?すでに最速だったら、message コマンドの後に なんら
かのウェイトを入れないと駄目だと思います。

》  「秀丸エディタ」は意識して [Esc] を処理しているようにみえます。message
》を含む永久ループへの「キャンセル方法」はあるのでしょうか  ???

(1)会社の PC のキーボードのプロパティから、「表示の間隔」を最速に設定。
(2)message コマンドの後にウェイトを入れる。
などの方法で解決できると思います。
 でも、ご自身だけが使うマクロでなければ、永久ループの終了方法も含めて
コードを書くほうがベターだと思います。

ではでは…
                                                            noro(^^)

[ ]
RE:00727 マクロを実行したとき、 [Esc]No.00728
番頭++ さん 98/04/01 17:48
 
noro さん

またまた、お世話になりました。

BIOS だけを疑ったのが間違いでした、[キーボード] のカスタマイズがありまし
たね。納得しました。

[コントロールパネル] - [キーボード]
[速度] - [表示の間隔] を、ほんの 2 メモリ右へ [速く] すると、
[Esc] のキャンセルが可能となりました。

  1998/03 頃に、自宅ではマザーボードと、ビデオカードを新しく(速くして)し
て、Pentium 90 から Pentium MMX 233 に変えました。同じ時期に、会社ではマ
ザーボードを新しくして、Pentium 100 から K6-233 に変えました。

会社 - K6-233 - S3 Trio32/64 ==> [Esc] キャンセルできない
自宅 - MMX 233 - S3 ViRGE GX ==> [Esc] キャンセルできる
[表示の間隔] の省略値はメモリの中心あたりなので、
この辺が、Windows 95 の [キーボード] カスタマイズの要、不要の分岐点なの
でしょう。

「秀丸エディタ」マクロのヘルプで「 goto 文とラベル」の例は永久ループにな
っています。K6-233 は、現在ではそんなに速いとはいえません。そろそろヘル
プにも何らかの考慮がいる時期かもしれませんね。

  個人的な話で ... 会社内で、「秀丸エディタ」を使用しているのは、ほんの
数人で、毎日のようにマクロを書くのはあちきだけです。コーディングの間違い
で永久ループする可能性があるのはあちきだけなのです。message 文をデバッグ
に使用するのが間違いなのでしょう。

  メインフレーム(大型機)の話ですが、あちきは、過去に 2 つのインタプリタ
をサポートしてきました。両方に永久ループの考慮はありました。 PC、UNIX と
違って、直接キー操作を受け取れないので、ある一定時間とか、どれくらいのス
テートメントを実行したら等の尺度で「永久ループ」と判断することになります。
世界中にはいろいろなその使用者がいまして。あちきがサポートしている日本国
内にもいろいろな使用者がいます。その「永久ループチェック機能を無効に出来
ないか ... 」と質問する人はかなり多いです。それは、あるカスタマイズで可
能なのですが、組織の中には、必ず、永久ループをさせてしまう、プログラマが
一人はいます。一般的に、質問をした人は、初めは機能を無効にします、でもい
つかは省略値である「チェックを有効」に戻すみたいです。

ありがとうございました。
番頭++

[ ]