質問No.05171
ヤノ さん 00/02/29 15:28
 
マクロ作者会議室の方がいいのかもしれませんが、
「作り方」の質問じゃないのでこちらに。

menu "(&r) : 文末にタグ追加",.....;

みたいなマクロ書いてこれをキー登録して呼び出してrを押して、
という一連の操作を、「キー操作の記録」で記録して「再生」で呼ぶ際、
rが記録されません。というか、rの直前でキー入力待ち状態になってしまいます。

v2.29の時はrも記録/再生されていたと思いますが、
v3.xから何か仕様が変わったのでしょうか?
またこれの回避方法(前と同じ動作をさせる方法/設定)がありましたらご教示ください。

[ ]
RE:05171 質問No.05202
秀丸担当 さん 00/03/01 19:23
 
>menu "(&r) : 文末にタグ追加",.....;
>
>みたいなマクロ書いてこれをキー登録して呼び出してrを押して、
>という一連の操作を、「キー操作の記録」で記録して「再生」で呼ぶ際、
>rが記録されません。というか、rの直前でキー入力待ち状態になってしまいます。

V2.29では記録されずにおかしな動作をしてしまうのではないでしょうか。
V3.xではメニューが出るようになりました。

[ ]
RE:05202 質問No.05209
ヤノ さん 00/03/02 13:22
 
>>menu "(&r) : 文末にタグ追加",.....;
>>
>>みたいなマクロ書いてこれをキー登録して呼び出してrを押して、
>>という一連の操作を、「キー操作の記録」で記録して「再生」で呼ぶ際、
>>rが記録されません。というか、rの直前でキー入力待ち状態になってしまいます。
>
>V2.29では記録されずにおかしな動作をしてしまうのではないでしょうか。
>V3.xではメニューが出るようになりました。

「おかしな動作」の具体的意味がよくわかりませんが、
「(あるキー操作) → メニュー表示 → r入力 → それに対応したマクロ操作 → (あ
るキー操作)」
というシーケンスを記録して再生すると、
  V2.29 → メニューが表示はされないが、操作そのものは最後まで再生される。
  V3.0x → メニューが表示されるが、そこで入力待ちとなり、改めてrを入力しな
いといけない。
となり、上記のキー操作は「記録」されないことになります。
このようなキー操作の記録はV3.0xでは対応しなくなった、という認識でよろしいの
でしょうか?
(だとすると、私はこういう「記録」を多用してますので、v3.0xは使うことはもうな
いでしょう。)

[ ]
RE:05209 質問No.05212
秀丸担当 さん 00/03/02 19:17
 
>  V2.29 → メニューが表示はされないが、操作そのものは最後まで再生さ
>れる。
>  V3.0x → メニューが表示されるが、そこで入力待ちとなり、改めてrを入
>力しないといけない。
>となり、上記のキー操作は「記録」されないことになります。
>このようなキー操作の記録はV3.0xでは対応しなくなった、という認識でよろ
>しいのでしょうか?
>(だとすると、私はこういう「記録」を多用してますので、v3.0xは使うことは
>もうないでしょう。)

対応しなくなったというより、V2.29ではバグがあったので修正しました。
V2.29までは、記録中にマクロが実行されると不具合があります。
試しに作ったマクロでは、V2.29では記録されなかったり、「他の秀丸がマクロ
実行中」となったり、場合によっては死んだりもしました。

V3.0xでは、不具合が出ないように、マクロ実行そのものを一つの記録とするよ
うにし、安全なようにしています。
そのため、メニューが表示されるところでは止まってしまいます。

V3.0xでやるには、以下のような感じにしてみるとどうでしょうか。
レジストリに一度選んだメニューを記録し、2回目からの実行は、
最初に選んだメニューを再度実行します。
記録したメニューの選択を消すには、下のtest2.macを実行します。

または、keypressedを利用して、キーボードが押された状態を判断して、再生中
かどうかを判断すれば、再生中と通常の実行を判断して、1つのマクロにできる
かもしれません。(ためしていないですが)

//test.mac メインのマクロ
#a = 0;
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\test";
if( result == true ) {
  #a = getregnum( "test" );
  closereg;
}
if( #a == 0 ) {
  menu "&a", "&b";
  #a = result;
  createreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\test";
  if( result == true ) {
    writeregnum "test", #a;
    closereg;
  }
}
if( #a == 1 ) {
  insert "1";
} else {
  insert "2";
}
endmacro;


//test2.mac 記憶を消去するマクロ
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\test";
if( result == true ) {
  writeregnum "test", 0;
  closereg;
}
endmacro;


[ ]