こういうマクロありますか?2No.09612
ササキ さん 01/09/05 10:48
 
いつもアドバイス頂き、ありがとうございます。

前回、お聞きするのを忘れていたので、またよろしくお願いします。

マクロを作っているときに、行の途中からコメントを入れたいとき
があるのですが、1行に収まらずに次行に及ぶことがあるのですが
、2行目のコメント開始位置を行頭でなく、1行目の//の位置に合
わせるようなことはできないでしょうか?

どなたか、ご存じでしたら教えて下さい。

[ ]
RE:09612 こういうマクロありますか?2No.09613
TAKA さん 01/09/05 12:27
 
TAKA です。

>マクロを作っているときに、行の途中からコメントを入れたいとき
>があるのですが、1行に収まらずに次行に及ぶことがあるのですが
>、2行目のコメント開始位置を行頭でなく、1行目の//の位置に合
>わせるようなことはできないでしょうか?

コメントがある行で以下のマクロを動かしてみて下さい。
私が勘違いしていない限り、希望通りの動作をすると思います。

// 次のコメント開始位置を同じにするマクロ(ここから)
    disabledraw;

    // 検索条件退避
    $SearchBuf = searchbuffer;
    #SearchOpt = searchoption;

    // 座標退避
    #X = x;
    #Y = y;

    // コメントチェック
    golinetop2;
    #YE = lineno;
    $Wk = gettext( x, y, x+2, y );
    if( $Wk == "//" )
    { // 先頭からコメント
        // 改行してコメント
        golineend2;
        insert "\n//";
        goto LEND;
    }
    searchdown "//";
    #Sts = result;
    escape;
    if( ( !#Sts ) || ( lineno != #YE ) )
    { // コメントがない
        goto L1000; // 何もしない
    }

    // ブランクを挿入
    #Count = x;
    #I = 0;
    golineend2;
    $Wk = "\n";
    while( #I < #Count )
    {
        $Wk = $Wk + " ";
        #I = #I + 1;
    }
    insert $Wk + "//";

    // タブに置き換え
    beginsel;
    golinetop2;
    totab;
    escape;
    golineend2;
    goto LEND;

L1000:
    // カーソル位置復元
    moveto #X, #Y;

LEND:
    // 検索条件復元
    setsearch $SearchBuf, #SearchOpt;

    enabledraw;
// 次のコメント開始位置を同じにするマクロ(ここまで)

[ ]
RE:09613 こういうマクロありますか?2No.09617
ササキ さん 01/09/05 15:30
 
早速のお返事ありがとうございます。
実行したところ、以下のようになりました。

aをマクロ本文として、bをコメントとします。

コメント開始位置を同じにするマクロ

実行前
aaaaaaaaaaaaaaaaaaaaaaaaa //bbbbbbbbbbb
bbbbbbbbb


期待した結果は
aaaaaaaaaaaaaaaaaaaaaaaaa //bbbbbbbbbbb
                            bbbbbbbb
なのですが、

実際は、
aaaaaaaaaaaaaaaaaaaaaaaaa //bbbbbbbbbbb
bbbbbbbbb
                          //


となってしまいました。
何か折り返しの設定等に制約は、あるのでしょうか?

さらに要望なのですが、2行目のbbb・・・の
先頭に//が付加されれば、そのままマクロを実行できそうなので、
2行目の//を付けるか付けないかのオプションを設定して頂けませんか。
よろしく、お願いします。

[ ]
RE:09613 こういうマクロありますか?2No.09618
ササキ さん 01/09/05 15:47
 
先程の説明ですと、文字位置がずれてわかりにくいので
再度、投稿させて頂きます。

aをマクロ本文として、bとcをコメントとします。

コメント開始位置を同じにするマクロ

実行前
aaaaaaaaaaaaaaaaaaaaaaaaa //bbbbbbbbbbb
ccc


実行後は、
aaaaaaaaaaaaaaaaaaaaaaaaa //bbbbbbbbbbb
                            ccc
(bとcの先頭が同じ桁にある。)
となるはずなのですが、

実際は、
aaaaaaaaaaaaaaaaaaaaaaaaa //bbbbbbbbbbb
ccc
                          //
(//の位置は合っています。)


余談なのですが、こういうことを説明する時は、
どうすれば桁を併せて投稿できるのでしょうか?
さっきはうまくいきませんでした。

[ ]
RE:09618 こういうマクロありますか?2No.09622
TAKA さん 01/09/05 18:24
 
TAKA です。

>先程の説明ですと、文字位置がずれてわかりにくいので
>再度、投稿させて頂きます。

いまいち、やりたいことが分かりません。

私のマクロは、次の新規行のコメント開始位置を前の行のコメント
開始位置とそろえるマクロなのですが、どうも違うことがやりたい
ようですね。


>実行前
>aaaaaaaaaaaaaaaaaaaaaaaaa //bbbbbbbbbbb
>ccc

ひょっとして「//bbbbbbbbbbb」と「ccc」の間には改行がないので
すか?
折り返し文字数を39文字にして、禁則をOFFの設定にした場合
に「ccc」の位置で折り返して表示されているのでしょうか?
#なんで、40じゃなくて39なのだろう?

折り返して表示されている「ccc」の前に、改行と、タブや空白を
挿入したいのでしょうか?


>余談なのですが、こういうことを説明する時は、
>どうすれば桁を併せて投稿できるのでしょうか?

・タブは空白文字に置き換えてもらって、改行は「\n」と表記
・折り返し文字数の設定
・マクロ実行前のテキストの内容
・マクロ実行後のテキストの内容
などが分かれば良いと思います。

また、テキストはどこからどこまでがテキストであるかが分かると
良いと思います。

折り返しの設定が、39であるとすると、

// マクロ実行前のテキスト(ここから)
0123456789012345678901234 //01234567890
123\n
// マクロ実行前のテキスト(ここまで)
などとしてもらえれば、分かります。

期待する、マクロ実行後のテキストは
// マクロ実行後のテキスト(ここから)
0123456789012345678901234 //01234567890
\n
                          123\n
// マクロ実行後のテキスト(ここまで)
なのでしょうか?

それとも、
// マクロ実行後のテキスト(ここから)
0123456789012345678901234 //01234567890
                          123\n
// マクロ実行後のテキスト(ここまで)
なのでしょうか?

それとも、別のことでしょうか?


また、以下のように複数行折り返していた場合はどうなって欲しい
でしょうか?
// マクロ実行前のテキスト(ここから)
0123456789012345678901234 //01234567890
123456789012345678901234567890123456789
01234567890\n
// マクロ実行前のテキスト(ここまで)


投稿時には、具体的な例があると分かりやすいと思います。
最初の投稿のように、文章だけでは、伝わりにくいですから。

[ ]
RE:09622 こういうマクロありますか?2No.09629
ササキ さん 01/09/05 20:04
 
TAKAさん、こんばんは。

舌足らずで、すみません。.
私の場合、マクロ初心者なので、ヘルプの内容をそのままコメントに使用することが
あるのですが、

例えば、

// マクロ実行前のテキスト(ここから)
moveto x,y;   //Y座標はファイルの先頭を0として数え,X座標は一番左側の位置
を0として数えた値です。\n
// マクロ実行前のテキスト(ここまで)

という文なら、
80桁で折り返すとすれば、[として数えた値です。」を「Y座標はファイルの」の
真下に持っていきたいのです。

つまり、
// マクロ実行後のテキスト1(ここから)
moveto x,y;   //Y座標はファイルの先頭を0として数え,X座標は一番左側の位置
を0
\n
                として数えた値です。\n
// マクロ実行後のテキスト1(ここまで)
又は、
// マクロ実行後のテキスト2(ここから)
moveto x,y;   //Y座標はファイルの先頭を0として数え,X座標は一番左側の位置
を0
\n
              //として数えた値です。\n
// マクロ実行後のテキスト2(ここまで)

となって、ほしいのです。

先程、40桁にしたのは、フォーラムで投稿した際、後ろが切られてしまったら困る
と思い、そうしました。(こちらもまた不慣れですみません。)

尚、コメント//の書き出し位置は気まぐれです。

更に、折返しの桁数も一定じゃないかもしれません。

[ ]
RE:09629 こういうマクロありますか?2No.09630
TAKA さん 01/09/05 20:26
 
TAKA です。

>先程、40桁にしたのは、フォーラムで投稿した際、後ろが切られ
>てしまったら困ると思い、そうしました。(こちらもまた不慣れで
>すみません。)

40位と短い設定にした場合での説明の方がよいと思います。
先ほどは、39と中途半端だったので、何故中途半端なのかが気に
なっていただけです。
今回の80の場合だと、メールで受信した人は、メーラーの設定に
よっては、変な位置で改行されたりしていると思います。

やりたいことは分かりましたが、「禁則処理」や「先頭のタブ文字
の後の折り返しをインデントしたように見せる」の設定などのこと
を考えると、私には難しいです。
という訳で、私はマクロの作成をパスします。


ひょっとして、整形マクロでここまでサポートしたものがあります
か? > ALL

[ ]
RE:09629 こういうマクロありますか?2No.09631
山紫水明 さん 01/09/05 21:41
 
 ササキさん,こんばんは。

 環境設定によってはうまくいかない場合があるかもしれませんが,一度試してく
ださい。禁則処理は考えていません。

//---------------------------------//
//コメント中の任意の箇所で実行
$searchbuffer = searchbuffer;
#searchoption = searchoption;
searchup "//";
#x = x;
while( 1 ) {
    golineend;
    if( code == 0x0d ) break;
    right;
    insertreturn;
    while( #i < #x ) {
        insert " ";
        #i = #i + 1;
    }
    insert "//";
}
setsearch $searchbuffer, #searchoption;
endmacro;
//---------------------------------//

     では, (^^)/~
                                        山紫水明

[ ]
RE:09631 こういうマクロありますか?2No.09636
山紫水明 さん 01/09/06 07:40
 
追伸です。
「改行文字のぶらさげ」の設定を考慮して次のように修正してみました。
なお,コメント行は2行目以降も「//」をつけないとエラーになるはずです。

//---------------------------------//
//コメント中の任意の箇所で実行
$searchbuffer = searchbuffer;
#searchoption = searchoption;
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
#cb = getregnum( "CRBurasage" );
closereg;
searchup "//";
#x = x;
while( 1 ) {
    golineend;
    if( code == 0x0d ) break;
    if(#cb) right;
    insertreturn;
    while( #i < #x ) {
        insert " ";
        #i = #i + 1;
    }
    insert "//";
}
setsearch $searchbuffer, #searchoption;
endmacro;
//---------------------------------//

     では, (^^)/~
                                        山紫水明

[ ]
RE:09636 こういうマクロありますか?2No.09639
TAKA さん 01/09/06 12:42
 
どもっ、TAKA です。
少しでもよくなるように、簡単なところだけ、補足させて下さい。


>    if( code == 0x0d ) break;

「EOF」で終わっている行で無限ループしますので、
    if( ( code == 0x0d ) || ( code == eof ) ) break;
とした方がよいと思います。


>    if(#cb) right;

「#09629」を読む限り、「right」は無条件でいると思います。
折り返しが80なら79ではなく80で改行したいようです。
#ソースは見にくいと思いますが。


>    insertreturn;

自動インデントのことも考えて。
    insert "\n";
とした方がよいと思います。


>    while( #i < #x ) {

「#i」の初期化がないため、複数行になるときに正常に動作しませ
ん。
    #i = 0;
    while( #i < #x ) {
とした方がよいと思います。
#忘れていただけとは思いますが。


後は「#9613」を参考に、以下の点があると完璧かも。
・コメントがない行で誤ってマクロを実行した際に予想しないとこ
 ろが編集されないようにする。
・スペースはタブに置き換えた方がよいかな。
・少ないアンドゥで元に戻せた方がよいかな。
少なくとも、2番目は欲しいと思います。

[ ]
RE:09636 こういうマクロありますか?2No.09642
ササキ さん 01/09/06 13:53
 
山紫水明さん、こんにちは。

もし、手を加えられるなら、要望なのですが、

1.マクロの実行範囲をコメントがある所だけでなく、
  全文に対してそうすることができませんか。

2.また、マクロ実行後、折り返し文字数を変更して、
  再度実行すると、改行コード等が挿入されていてう
  まくいきません。挿入された文字を削除して、マク
  ロを実行すればうまく感じがします。

以上2点についても、盛り込んでいただきたいのですが。

無理なお願いを申し上げてすみません。
よろしくお願いします。

[ ]
RE:09639 こういうマクロありますか?2No.09649
山紫水明 さん 01/09/06 20:05
 
 TAKAさん,こんばんは。

》少しでもよくなるように、簡単なところだけ、補足させて下さい。

 ちょっと思いつきで書いたもので,穴だらけだろうとは覚悟していましたが(^^;
 いつもいろいろ教えていただいてありがとうございます。

》「EOF」で終わっている行で無限ループしますので、
》    if( ( code == 0x0d ) || ( code == eof ) ) break;
》とした方がよいと思います。

 そのとおりですね。

》>    if(#cb) right;

》「#09629」を読む限り、「right」は無条件でいると思います。
》折り返しが80なら79ではなく80で改行したいようです。

 「改行文字ぶら下げ」に設定してあればそれでいいのですが,そうでないと1行
空いてしまいます。

 ササキさんは多分改行文字ぶら下げに設定していると思います。


》>    insertreturn;

》自動インデントのことも考えて。
》    insert "\n";
》とした方がよいと思います。

 実は私はこの区別に気づいていませんでした。それで,自動インデントの場合の
ことを考えて余分なスペースを削除する処理をすでに書いていましたが,これだけ
でよかったのですね。

》>    while( #i < #x ) {

》「#i」の初期化がないため、複数行になるときに正常に動作しませ
》ん。
》    #i = 0;
》    while( #i < #x ) {
》とした方がよいと思います。
》#忘れていただけとは思いますが。

 おっしゃるとおりです。

》・コメントがない行で誤ってマクロを実行した際に予想しないとこ
》 ろが編集されないようにする。

 これも必要ですね。

》・スペースはタブに置き換えた方がよいかな。

 私はタブを使タブキーを使ってもスペースに置き換えることが多いもので,あま
り必要を感じませんでしたが,これもオプションにします。

》・少ないアンドゥで元に戻せた方がよいかな。

 うーん,何か工夫しますか。

》少なくとも、2番目は欲しいと思います。

 TAKA さんはタブがお好きなようで (^^;

     では, (^^)/~
                                        山紫水明

[ ]
RE:09642 こういうマクロありますか?2No.09651
山紫水明 さん 01/09/06 21:12
 
 ササキさん,こんばんは。

》もし、手を加えられるなら、要望なのですが、

 乗りかかった舟で,やってみました。最初の意図から比べるとだいぶ大がかりに
なってしまいました。(^^; 試してみてください。

     では, (^^)/~
                                        山紫水明

//----- コメント整形.Mac -------------------------------------------//

//  秀丸マクロ用ですが,コメント符号を設定すれば,他にも利用すること
//  ができます。

//オプション設定//
$comtop = "//";     //コメント符号を設定
#totab = 0;         //スペースをタブに変換する場合は「1」

$searchbuffer = searchbuffer;
#searchoption = searchoption;
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
#cb = getregnum( "CRBurasage" );
closereg;
disabledraw;

menu "&1 全文で実行",
     "&2 このコメントのみで実行",
     "&3 全部取り消し",
     "&4 新しい桁折りでやり直し";
#r = result;
if ( #r == 0 ) goto End;
else if( #r == 1 ) call AllReform;
else if( #r == 2 ) call Reform;
else if( #r == 3 ) call Cancel;
else {
    call Cancel;
    call AllReform;
}

End:
setsearch $searchbuffer, #searchoption;
endmacro;

AllReform:
    gofiletop;
    while( 1 ) {
        searchdown $comtop;
        if( !result ) break;
        call Reform;
}
return;

Reform:
#n = 0;   //新コメント
#line = lineno;
golineend2;
searchup $comtop;
#r = result;
if( #r == 0 || lineno < #line ) {
    movetolineno 1, #line;
    message "この行にはコメント符号がありません";
    endmacro;
}
#x = x;
while( 1 ) {
    golineend;
    if( code == 0x0d || code == eof ) break;
    if(#cb) right;
    insert "\n";
    if( #n == 0 ) call MakeSpace;
    insert $s + $comtop;
    if(#totab){
        beginsel;
        golinetop;
        totab;
        escape;
    }
}
return;

MakeSpace:
$s = "";
while( ##i < #x ) {
    $s = $s + " ";
    ##i = ##i + 1;
}
#n = 1;
return;

Cancel:
replaceallfast "[^\n]\\f\\n[ \t]+//\\f", "\\0\\2", regular;
return;
//----------------------------------------------------------//


[ ]
RE:09649 こういうマクロありますか?2No.09653
TAKA さん 01/09/06 21:42
 
TAKA です。

>》折り返しが80なら79ではなく80で改行したいようです。
>
> 「改行文字ぶら下げ」に設定してあればそれでいいのですが,そうでないと1行
>空いてしまいます。

「#09629」を読む限り、改行だけの1行を作りたいようです。
そうすると、見にくくなるので、私の勘違いかも。


> TAKA さんはタブがお好きなようで (^^;

ソースは、タブが基本と思っていたのですが、人によってはスペー
スの場合があるのですね。
思い込みとは怖いものです。


なにやら、大作が出来たようですが、今度はチェックする気力があ
りませんので、実際に使ってもらうしかなさそうですね。


どうもお疲れ様でした。

[ ]
RE:09651 こういうマクロありますか?2No.09655
ササキ さん 01/09/06 21:51
 
山紫水明 さん,こんばんは。

> 乗りかかった舟で,やってみました。最初の意図から比べるとだいぶ大がかりに
>なってしまいました。(^^; 試してみてください。

ご迷惑おかけしています。ありがとうございます。
うまくいっています。今後ともよろしく、お願いします。

[ ]