1 件の投稿を表示中 (合計 7 個)
  • 作成者
    投稿
  • #31626
    yosyua
    参加者

    以前「マーカーの有効と無効のトグル」のマクロを作って頂いた者です。
    その節はありがとうございました。

    それでまた同じような要望で申し訳ないのですが、
    変換の「コメント」と「コメント解除」をトグルするマクロを作って頂くことは可能でしょうか?
    マーカーのトグルのマクロのIDナンバーを入れ替えて試したのですが上手く行かなくて。

    ニッチな要望で申し訳ないのですが、
    手の空いた時にでも検討して頂ければ幸いです。

    #31627
    snow
    参加者

    コメントはエディタの持つ「状態」ではなく、その場で調べて判断しているため、「今どっちか」が取れないということかも知れませんね。
    ちょっと考えてみたのですが、行全体を選択しないパターンの「コメント解除」がうまく行っていません。
    「コメント」後の選択範囲を見ると、コメント開始は含まれず、コメント終了は含まれているので、元々ちょっと特殊ですね。

    function startsWith(a, b) {
    	return b && a.substring(0, b.length) == b;
    }
    function endsWith(a, b) {
    	return a.substring(a.length - b.length) == b;
    }
    function trim(a) {
    	return a.replace(/^[\s]+|[\s]$/g, '');
    }
    var t = document.selection.Text;
    if (!t) {
    	document.selection.SelectLine();
    	t = document.selection.Text;
    }
    trim(t);
    var h = document.Config.Highlight;
    var f = startsWith(t, h.LineComment1) || startsWith(t, h.LineComment2);
    if (!f) {
    	startsWith(t, h.CommentBegin) && endsWith(t, h.CommentEnd);
    }
    editor.ExecuteCommandByID(f ? 4372 : 4371);
    
    #31631
    yosyua
    参加者

    snowさん、マクロの制作をありがとうございます。

    > 行全体を選択しないパターンの「コメント解除」がうまく行っていません。

    非選択状態や行選択の時はコメントのトグルができましたが、
    snowさんの書き込み通り、行全体(文字列単位)の場合はコメント解除できませんでした。
    プログラムのことはよく判りませんが、意外に特殊な動作のようですね。
    これはもうEmEditor側で対応して頂けることを願うしかなさそうです。

    #31643
    Yutaka Emura
    キーマスター

    いつもお世話になっております。江村です。

    行コメントというのは、

    //

    で始まる行になりますでしょうか?

    だとすると、次のマクロを利用できます。

    
    s = document.selection.Text;
    if( s.length == 0 ) {
        s = document.GetLine( document.selection.GetActivePointY( eePosLogical ) );
    }
    if( s.length >= 2 && s.substr( 0, 2 ) ==  "//" ) {
        editor.ExecuteCommandByID(4372);  // Uncomment
    }
    else {
        editor.ExecuteCommandByID(4371);  // Comment
    }
    

    引用元: https://stackoverflow.com/questions/73760657/is-there-a-shortcut-to-comment-and-uncomment-in-emeditor

    よろしくお願いいたします。

    #31644
    snow
    参加者

    行コメント(// ……)は先のマクロでもうまく動いているのですが、行の途中から選択している場合のブロックコメント(/* …… */ )の解除がうまく行かない、ということです。

    と、先のマクロで一箇所誤りに気付きました。
    × startsWith(t, h.CommentBegin) && endsWith(t, h.CommentEnd);
    ○ f = startsWith(t, h.CommentBegin) && endsWith(t, h.CommentEnd);
    まあ、どのみち動いていないのですが。

    #31664
    LINK
    参加者

    横から失礼いたします。

    以下の選択状態であればブロックコメント(/* …… */ )の解除に該当するようでした。
    1:ブロックコメント全体を選択 (/*ABC*/)
    2:コメント開始からコメント終了手前までを選択 (/*ABC)
    3:コメント開始の後からコメント終了までを選択 (ABC*/)
    (現状、ブロックコメントを付与した後の状況は2)

    snow様が提示していただいているマクロについて
    最終部の”&&”を”||”に変更してみてはいかがでしょうか?

    ※マクロの前半部分については記載を省略

    var f = startsWith(t, h.LineComment1) || startsWith(t, h.LineComment2);
    if (!f) {
    //	startsWith(t, h.CommentBegin) && endsWith(t, h.CommentEnd);
    	f = startsWith(t, h.CommentBegin) || endsWith(t, h.CommentEnd);
    }
    editor.ExecuteCommandByID(f ? 4372 : 4371);

    参考になりましたら幸いです。

    #31665
    LINK
    参加者

    以下は訂正です。
    [誤] 現状、ブロックコメントを付与した後の状況は2
    [正] 現状、ブロックコメントを付与した後の状況は3

1 件の投稿を表示中 (合計 7 個)
  • このトピックに返信するにはログインしてください。