秀丸リーダーのマクロNo.02354
K'zawa さん 09/03/10 14:27
 
秀まるおさん、こんにちは。
K'zawaです。

以前、HmRead2.macのBOX選択対応を提案し、採用されましたが、
バグがありました。
BOX選択の起点・終点が右上←→左下の場合おかしくなります。
自分で使っているのは、秀丸エディタV5.00からの、gettext第5ぱらめたを使い、
問題の処理自体を削っていたので、気が付きませんでした。
申し訳ありません。下に修正したものを貼り付けておきます。

--- HmRead2.mac ---
    ddeinitiate "HidemaruReader", "Read";
    if( linelen == 0 ) {
        ddeexecute "!くうぎょう";
        ddeterminate;
        endmacro;
    }

    #sel = selecting;
    if( #sel ) {
        disabledraw;
        #rect=rectselecting;
        if( x == selendx && y == selendy ) {
            #x1 = seltopx;
            #y1 = seltopy;
        } else if( x == seltopx && y == seltopy ) {
            #x1 = selendx;
            #y1 = selendy;
        } else if( x == seltopx && y == selendy ) {
            #x1 = selendx;
            #y1 = seltopy;
        } else {
            #x1 = seltopx;
            #y1 = selendy;
        }
        #x2 = x;
        #y2 = y;
        right;
        left;
        #beginsel = selecting;
        moveto #x2, #y2;
    }

    $str = gettext( 0, y, 2000, y );
    ddeexecute "!" + $str;

    if( #sel ) {
        moveto #x1, #y1;
        if( #rect ) {
            beginrect;
        } else {
            beginsel;
        }
        moveto #x2, #y2;
        if( ! #beginsel ){
            endsel;
        }
        enabledraw;
    }
    ddeterminate;
----------

[ ]
RE:02354 秀丸リーダーのマクロNo.02355
K'zawa さん 09/03/10 14:34
 
ついでにもう一つ、先のマクロを修正していてふと気が付いたのですが、
HmReadBack.macは、カーソルを動かしていますね。
削除される文字を音声化する設定では、マクロが先、削除が後なので、
確定済みの範囲選択は解除されてしまい、1文字しか削除されません。
これを対策してみました。
(HmRead2.mac並みに大掛かりになってしまいましたが)

--- HmReadBack.mac ---
    #sel = selecting;
    if( #sel ) {
        #rect = rectselecting;
        if( seltopx == selendx && ( seltopy == selendy || #rect != 0 ) )
{
            endmacro;
        } else if( #rect !=0 && seltopx >= linelen ) {
            endmacro;
        }
        if( x == selendx && y == selendy ) {
            #x1 = seltopx;
            #y1 = seltopy;
        } else if( x == seltopx && y == seltopy ) {
            #x1 = selendx;
            #y1 = selendy;
        } else if( x == seltopx && y == selendy ) {
            #x1 = selendx;
            #y1 = seltopy;
        } else {
            #x1 = seltopx;
            #y1 = selendy;
        }
        #x2 = x;
        #y2 = y;
        disabledraw;
        right;
        left;
        #beginsel = selecting;
        escape;
        moveto #x2, #y2;
    } else {
        #x1 = x;
        #y1 = y;
    }

    left;
    #code = code;
    moveto #x1, #y1;

    if( #sel ) {
        if( #rect ) {
            beginrect;
        } else {
            beginsel;
        }
        moveto #x2, #y2;
        if( ! #beginsel ) {
            endsel;
        }
        enabledraw;
    }

    ddeinitiate "HidemaruReader", "Read";
    if( #code == 13 ) {
        ddeexecute "!改行";
    } else if( #code == 9 ) {
        ddeexecute "!タブ";
    } else if( #code == eof ) {
        ddeexecute "!ファイルのまつび";
    } else if( #code == 0 ) {
        ddeexecute "!ブランク";
    } else {
        ddeexecute "#" + char( #code );
    }
    ddeterminate;
----------


追伸
秀丸リーダーV2.01Betaは、隠し状態で長いですが、どうなるのでしょう?

[ ]
RE:02355 秀丸リーダーのマクロNo.02356
秀まるお さん 09/03/10 16:52
 
 マクロの中身をよく理解してませんが、とりあえずそのまま使わせていただき
ます。

 秀丸リーダーV2.01も公開させていただきます。

[ ]
RE:02356 秀丸リーダーのマクロNo.02358
K'zawa さん 09/03/10 19:08
 
秀まるおさん、こんにちは。
K'zawaです。

> マクロの中身をよく理解してませんが、とりあえずそのまま使わせていただき
>ます。

よろしくお願いします。

> 秀丸リーダーV2.01も公開させていただきます。

ありがとうございます。
こんなのも見つけました。

HmRead.txt(39): HmReadbAck.mac → HmReadBack.mac
HmRead.txt(70): 音が鳴り終わるまだ待機 → 音が鳴り終わるまで待機

[ ]