gettext による文字列取得についてNo.08575
おすぎ さん 17/09/30 17:44
 
お世話になっています。

gettext の取得文字列が消えないようなので、質問です。

ファイルを2つ並べて各ファイルで文字列を選択し、
マクロを起動させて、2つの選択文字列を取得する、
というマクロを作りました。

各ファイルで次の文を動かすだけです。
$term = gettext(seltopx, seltopy, selendx, selendy)

マクロ終了後に、
今度は2つのファイルで何も選択しないで、
同じマクロを起動させたところ、
前回選択した2つの文字列が取得されました。

私の使い方が間違っているんでしょうか?
よろしくお願いいたします。

[ ]
RE:08575 gettext による文字列取得についNo.08576
山紫水明 さん 17/09/30 20:45
 
 おすぎさん,

 今日は休日なので,一ユーザーですがとりあえず。

>$term = gettext(seltopx, seltopy, selendx, selendy)

 マクロヘルプの「内部的な値を表現するキーワード」→「範囲選択関連キー
ワード」に「範囲選択が解除された後も、値は以前の値を保持しています。」と
書いてあります。
 つまり seltopx などはマクロ終了後も維持されているので,範囲選択していな
くても同じ文字列が取得されることになると思います。

                    山紫水明

[ ]
RE:08576 gettext による文字列取得についNo.08577
おすぎ さん 17/10/02 09:49
 
山紫水明さま

ありがとうございます。

たしかにヘルプには、
「範囲選択が解除された後も、値は以前の値を保持しています」と書かれています。

でも「マクロ終了後も維持されている」とは思っていませんでした。
マクロが終了すれば当然、範囲選択は解除されるものと思っていました。

秀丸担当さま
マクロが終了すれば範囲選択が解除されるようにしていただくのは無理でしょうか?

[ ]
RE:08577 gettext による文字列取得についNo.08578
秀丸担当 さん 17/10/02 10:47
 

seltopx等は、範囲選択されているかどうかというより、範囲選択されている
(またはされていた)位置だけを表しています。
また、値が0だったとしても一行目の行頭は0なので、値が0でも範囲選択されて
いるという可能性はあります。

範囲選択されているかどうかは、selectingキーワードで知ることができます。
以下のようにするといいと思います。

if( selecting ){
  //範囲選択されている場合の処理
  $term = gettext(seltopx, seltopy, selendx, selendy);
} else {
  //範囲選択されていない場合の処理
  message "範囲選択されていません";
  endmacro;
}


より正確には、Ctrlを押しながらドラッグした場合など、BOX選択されている場
合もあるので、以下のようにするといいです。

if( selecting ){
  if( rectselecting ) {
    //BOX選択されている場合の処理
    message "BOX範囲です";
    endmacro;
  } else {
    //通常の範囲選択されている場合の処理
    $term = gettext(seltopx, seltopy, selendx, selendy);
  }
} else {
  //範囲選択されていない場合の処理
  message "範囲選択されていません";
  endmacro;
}

[ ]
RE:08578 gettext による文字列取得についNo.08579
おすぎ さん 17/10/02 11:07
 
秀丸担当さま

なるほど、selecting, rectselecting を使えば解決しますね。

大変助かりました。
ありがとうございました!!

[ ]