- 作成者投稿
- 2024年2月27日 10:05 am #31626yosyua参加者
以前「マーカーの有効と無効のトグル」のマクロを作って頂いた者です。
その節はありがとうございました。それでまた同じような要望で申し訳ないのですが、
変換の「コメント」と「コメント解除」をトグルするマクロを作って頂くことは可能でしょうか?
マーカーのトグルのマクロのIDナンバーを入れ替えて試したのですが上手く行かなくて。ニッチな要望で申し訳ないのですが、
手の空いた時にでも検討して頂ければ幸いです。2024年2月27日 11:29 pm #31627snow参加者コメントはエディタの持つ「状態」ではなく、その場で調べて判断しているため、「今どっちか」が取れないということかも知れませんね。
ちょっと考えてみたのですが、行全体を選択しないパターンの「コメント解除」がうまく行っていません。
「コメント」後の選択範囲を見ると、コメント開始は含まれず、コメント終了は含まれているので、元々ちょっと特殊ですね。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);
2024年2月28日 10:10 am #31631yosyua参加者snowさん、マクロの制作をありがとうございます。
> 行全体を選択しないパターンの「コメント解除」がうまく行っていません。
非選択状態や行選択の時はコメントのトグルができましたが、
snowさんの書き込み通り、行全体(文字列単位)の場合はコメント解除できませんでした。
プログラムのことはよく判りませんが、意外に特殊な動作のようですね。
これはもうEmEditor側で対応して頂けることを願うしかなさそうです。2024年2月29日 7:05 am #31643Yutaka 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 }
よろしくお願いいたします。
2024年2月29日 8:01 pm #31644snow参加者行コメント(// ……)は先のマクロでもうまく動いているのですが、行の途中から選択している場合のブロックコメント(/* …… */ )の解除がうまく行かない、ということです。
と、先のマクロで一箇所誤りに気付きました。
× startsWith(t, h.CommentBegin) && endsWith(t, h.CommentEnd);
○ f = startsWith(t, h.CommentBegin) && endsWith(t, h.CommentEnd);
まあ、どのみち動いていないのですが。2024年3月12日 3:58 pm #31664LINK参加者横から失礼いたします。
以下の選択状態であればブロックコメント(/* …… */ )の解除に該当するようでした。
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);
参考になりましたら幸いです。
2024年3月12日 4:10 pm #31665LINK参加者以下は訂正です。
[誤] 現状、ブロックコメントを付与した後の状況は2
[正] 現状、ブロックコメントを付与した後の状況は3 - 作成者投稿
- このトピックに返信するにはログインしてください。