| コードの後ろのコメントを解除しない,
処理を一度でUndoできるマクロです。
[591]phodra氏のコメントマクロを参考にさせていただきました。
-----------------------------------
CommentAdd.js
-----------------------------------
var CmtLen;
var CmtStr;
main();
function main(){
// エディタがビューモード(読み取り専用)なら終了。
//if ( Editor.ExpandParameter("${R?r$:$:$}") == "r") return;
// 拡張子別にコメントステートメントを定義
var comment = new Array();
comment["cpp"] = "//"; comment["c"] = "//"; comment["h"] = "//";
comment["js"] = "//"; comment["java"] = "//";
comment["php"] = "//"; comment["uws"] = "//";
comment["mac"] = "//"; comment["ppa"] = "//";
comment["vbs"] = "'"; comment["bas"] = "'"; comment["frm"] = "'";
comment["cls"] = "'"; comment["vb"] = "'";
comment["cgi"] = "#"; comment["pl"] = "#"; comment["pm"] = "#";
comment["asm"] = ";"; comment["ini"] = ";"; comment["inf"] = ";";
comment["cnf"] = ";"; comment["conf"] = ";";
comment["tex"] = "%";
comment["cmd"] = "REM ";
comment["bat"] = "REM ";
comment["txt"] = " "; comment["noext"] = " ";
// ちらつき防止
Editor.SetDrawSwitch(0);
//拡張子を切り出し
var fname = Editor.ExpandParameter("$f");
var ext = fname.substring( fname.lastIndexOf(".") + 1);
ext = ext==fname? "noext": ext.toLowerCase();
// 登録されていない拡張子であれば終了。
if( comment[ext] == null ){
Editor.InfoMsg("マクロ未登録拡張子です。");
return;
}
CmtStr = comment[ext];
CmtLen = CmtStr.length;
Editor.AddRefUndoBuffer(); // これ以降、Undoバッファをまとめる
switch(Editor.IsTextSelected()) {
// 非選択状態
case 0:
// ロジック座標を取得
// 選択範囲がないのでレイアウトから変換する必要はない
var l = parseInt(Editor.ExpandParameter("$y"));
var c = parseInt(Editor.ExpandParameter("$x"));
Editor.MoveCursor( l, 1, 0);
Editor.InsText(CmtStr);
Editor.MoveCursor( l, (c+CmtLen), 0);
break;
// 選択状態
case 1:
//選択論理行の取得
var lay_fl = Editor.GetSelectLineFrom();
var lay_tl = Editor.GetSelectLineTo();
var fl = Editor.LayoutToLogicLineNum( lay_fl );
var tl = Editor.LayoutToLogicLineNum( lay_tl );
for(var i = fl; i <= tl; i++){
Editor.Jump(i,1);
Editor.InsText(CmtStr);
}
// 選択範囲を復元(行だけ)
Editor.GoLineEnd();
Editor.MoveCursor( fl, 1, 1);
break;
// ブロック選択状態
case 2:
break;
default:
/* ignore */
break;
}
Editor.SetUndoBuffer(); // ここでまとめてUndoバッファのリストに登録される
// 描画フラグを戻してから再描画
Editor.SetDrawSwitch(1);
Editor.ReDraw(0);
}
-----------------------------------
CommentRemove.js
-----------------------------------
var S_Buf = "dummy";
var CmtLen;
var CmtStr;
//Editor.InfoMsg(S_Buf);
main();
function main(){
var i;
// エディタがビューモード(読み取り専用)なら終了。
//if ( Editor.ExpandParameter("${R?r$:$:$}") == "r") return;
// 拡張子別にコメントステートメントを定義
var comment = new Array();
comment["cpp"] = "//"; comment["c"] = "//"; comment["h"] = "//";
comment["js"] = "//"; comment["java"] = "//";
comment["php"] = "//"; comment["uws"] = "//";
comment["mac"] = "//"; comment["ppa"] = "//";
comment["vbs"] = "'"; comment["bas"] = "'"; comment["frm"] = "'";
comment["cls"] = "'"; comment["vb"] = "'";
comment["cgi"] = "#"; comment["pl"] = "#"; comment["pm"] = "#";
comment["asm"] = ";"; comment["ini"] = ";"; comment["inf"] = ";";
comment["cnf"] = ";"; comment["conf"] = ";";
comment["tex"] = "%";
comment["cmd"] = "REM ";
comment["bat"] = "REM ";
// このマクロはスペースはコメントと見做せない comment["txt"] = " "; comment["noext"] = " ";
// ちらつき防止
Editor.SetDrawSwitch(0);
//拡張子を切り出し
var fname = Editor.ExpandParameter("$f");
var ext = fname.substring( fname.lastIndexOf(".") + 1);
ext = ext==fname? "noext": ext.toLowerCase();
// 登録されていない拡張子であれば終了。
if( comment[ext] == null ){
Editor.InfoMsg("マクロ未登録拡張子です。");
return;
}
CmtStr = comment[ext];
CmtLen = CmtStr.length;
Editor.AddRefUndoBuffer(); // これ以降、Undoバッファをまとめる
switch(Editor.IsTextSelected()) {
// 非選択状態
case 0:
// ロジック座標を取得
// 選択範囲がないのでレイアウトから変換する必要はない
var l = parseInt(Editor.ExpandParameter("$y"));
var c = parseInt(Editor.ExpandParameter("$x"));
var cmtPos = LineCmtDel(l);
if((c>cmtPos)&&(cmtPos==0)){
if(c>(cmtPos + CmtLen)){
c = c - CmtLen;
}else{
c = cmtPos;
}
}
Editor.MoveCursor( l, c, 0);
break;
// 選択状態
case 1:
var lay_fl = Editor.GetSelectLineFrom();
var lay_tl = Editor.GetSelectLineTo();
// レイアウト座標をロジック座標に変換
// 選択位置のロジック座標を取得する関数はない?
var fl = Editor.LayoutToLogicLineNum( lay_fl );
var tl = Editor.LayoutToLogicLineNum( lay_tl );
for(i = fl; i <= tl; i++){
LineCmtDel(i);
}
// 選択範囲を復元(行だけ)
Editor.GoLineEnd();
Editor.MoveCursor( fl, 1, 1);
break;
// ブロック選択状態
case 2:
break;
default:
/* ignore */
break;
}
Editor.SetUndoBuffer(); // ここでまとめてUndoバッファのリストに登録される
// 描画フラグを戻してから再描画
Editor.SetDrawSwitch(1);
Editor.ReDraw(0);
}
function LineCmtDel(l_no){
var nUnSpace;
Editor.Jump(l_no,1);
S_Buf = Editor.GetLineStr(l_no);
nUnSpace = S_Buf.search(/[^\s]/);
if(nUnSpace >= 0){
S_Buf = S_Buf.substr(nUnSpace,CmtLen); // nUnSpaceからコメント文字数分取得
}
if(S_Buf == CmtStr){
Editor.MoveCursor(l_no,nUnSpace+1,0);
for(var i=0;i<CmtLen;i++){
Editor.Delete();
}
return nUnSpace;
}
return 0;
}
|
|
sakana Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0; Sleipnir/2.9.19) like Gecko |
|