文書の過去の版を表示しています。
— y2sunlight 2021-12-02
マクロを以下フォルダに設置する。
{ユーザフォルダ}\AppData\Roaming\sakura
以上でショートカットキーでマクロを実行することが出来るようになります。 ショートカットキー以外で実行する時は、[ツール][名前を指定してマクロ実行]を押し、マクロを選択します。
// ----------------------------------------------- // 1行の最大文字数を指定して改行を入れる // ----------------------------------------------- main(); function main() { // 最大文字数取得 var maxLen = parseInt(Editor.InputBox('1行の最大文字数を入力してください', 100)); if(isNaN(maxLen)) return; // 元の折り返し桁数と折り返し桁数設定 var oldWrapColm = Editor.ChangeWrapColm(maxLen); // 全て選択 Editor.SelectAll(); // 折り返し位置に改行をつけてコピー Editor.CopyAddCRLF(0); // 折り返し桁数を元に戻す Editor.ChangeWrapColm(oldWrapColm); // ペースト Editor.Paste(0); // 名前を指定して保存 // FileSaveAs(ファイル名, 文字コード, 改行コード) // 文字コード:SJIS // 改行コード:CRLF var fileName = Editor.GetFilename() + '.chop'; Editor.FileSaveAs(fileName, 0, 1); }
// ----------------------------------------------- // 0x00(NUL)~0x1f(US)を0x20(SPC)に変更する // 0x0a(LF),0x0d(CR)除く // ----------------------------------------------- var isSelected = Editor.IsTextSelected(); if(isSelected == 0){ // ----------------------- // 非選択状態(0) // ----------------------- // 全て選択 Editor.SelectAll(); } else { // ----------------------- // 選択中(1),矩形選択中(2) // ----------------------- } // 置換 // 第3引数 正規表現(0x004=4),選択範囲(0x080=128) Editor.ReplaceAll('[\\x00\\x00-\\x1f\\x00&&[^\\x0a\\x00\\x0d\\x00]]', '\\x20', 132); Editor.ReDraw(0); // 再描画
// ----------------------------------------------- // コードの置換 // 置換前のコードと置換後のコードはコロン(:)で区切る // 複数置換の場合はカンマ(,)で区切る // 0x00と0x01を0x20に置換する場合の入力例 00:20,01:20 // ----------------------------------------------- main(); function main() { var txt = Editor.InputBox('制御コード(16進2桁)を入力して下さい。'); if(!txt) return; var arr = txt.split(','); for(var key in arr){ var hexArr = arr[key].split(':'); if(hexArr.length == 2) { var before = '\\x' + hexArr[0] + '\\x00'; var after = '\\x' + hexArr[1]; Editor.ReplaceAll(before,after,4); } } // 再描画 Editor.ReDraw(0); }
// ----------------------------------------------- // 固定長の〇文字目から?文字でソートする // ----------------------------------------------- main(); function main() { // 〇文字目から var startPos = parseInt(Editor.InputBox('何文字目から?', 1)); if(isNaN(startPos)) return; // ?文字 var maxLen = parseInt(Editor.InputBox('何文字でソート', 1)); if(isNaN(maxLen)) return; // カーソル移動 Editor.MoveCursor(1, startPos, 0); // 矩形範囲選択開始 Editor.BeginBoxSelect(0); // 範囲選択 for(var col = 1; col < maxLen+1; col++) { Editor.Right_Sel(0); } var rowCnt = Editor.GetLineCount(0); for(var row = 1; row < rowCnt; row++) { Editor.Down_Sel(0); } // 選択行の昇順ソート Editor.SortAsc(0); }
TODO
// ----------------------------------------------- // バイナリーを16進ASCIIに変換 // ----------------------------------------------- main(); function main() { var isSelected = Editor.IsTextSelected(); if(isSelected == 0) { Editor.MessageBox('範囲を選択して下さい。'); return; } var colFrom = GetSelectColumnFrom(); // 選択開始桁 var colTo = GetSelectColumnTo(); // 選択終了桁 var lineFrom = GetSelectLineFrom(); // 選択開始行 var lineTo = GetSelectLineTo(); // 選択終了行 // 選択範囲の文字列取得 var selectText = GetSelectedString(0); // 最後の改行削除 selectText = selectText.replace(/\r\n$/, ''); // 改行で分割 var selectArr = selectText.split('\r\n'); for(var i=0; i<selectArr.length; i++){ var changeText = ''; for(var j=0; j<selectArr[i].length; j++) { changeText += ('00' + selectArr[i].charCodeAt(j).toString(16)).slice(-2); } // 範囲選択 Editor.MoveCursor(lineFrom + i, colFrom, 0); for(var col=colFrom; col < colTo; col++) { Editor.Right_Sel(0); } // 上書き Editor.InsText(changeText); } }
// ----------------------------------------------- // 16進ASCIIをバイナリーに変換 // ----------------------------------------------- main(); function main() { var isSelected = Editor.IsTextSelected(); if(isSelected == 0) { Editor.MessageBox('範囲を選択して下さい。'); return; } var colFrom = GetSelectColumnFrom(); // 選択開始桁 var colTo = GetSelectColumnTo(); // 選択終了桁 var lineFrom = GetSelectLineFrom(); // 選択開始行 var lineTo = GetSelectLineTo(); // 選択終了行 // 選択範囲の文字列取得 var selectText = GetSelectedString(0); // 最後の改行削除 selectText = selectText.replace(/\r\n$/, ''); // 改行で分割 var selectArr = selectText.split('\r\n'); loop: for(var i=0; i<selectArr.length; i++){ // 2文字ずつに分ける var hexArr = selectArr[i].match(/.{2}/g); if(!hexArr) continue; var changeText = ''; for (var j=0; j<hexArr.length; j++) { if(hexArr[j].toUpperCase() == '0A' || hexArr[j].toLowerCase() == '0D') { Editor.WarnMsg('「0A」または「0D」が入っています'); break loop; } changeText += String.fromCharCode(parseInt(hexArr[j], 16)); } // 範囲選択 Editor.MoveCursor(lineFrom + i, colFrom, 0); for(var col=colFrom; col < colTo; col++) { Editor.Right_Sel(0); } // 上書き Editor.InsText(changeText); } }
// ----------------------------------------------- // ルーラー追加 // ----------------------------------------------- // 1行目の文字列取得(改行なし) var txt = Editor.GetLineStr(1).replace(/\r\n/,''); // カーソル移動 Editor.MoveCursor(1, 1, 0); // 改行追加 Editor.Char(13); Editor.Char(13); var rowOne = ''; var rowTwo = ''; for(var j = 1; j <= txt.length; j++) { rowTwo += String(j % 10); if((j % 10)==0){ rowOne += (' ' + String(j/10)).slice(-10); } } // 1行目 Editor.MoveCursor(1, 1, 0); Editor.InsText(rowOne); // 2行目 Editor.MoveCursor(2, 1, 0); Editor.InsText(rowTwo);
// ----------------------------------------------- // パック10進をゾーン10進に変換 // ----------------------------------------------- main(); function main() { var isSelected = Editor.IsTextSelected(); if(isSelected == 0) { Editor.MessageBox('範囲を選択して下さい。'); return; } var colFrom = GetSelectColumnFrom(); // 選択開始桁 var colTo = GetSelectColumnTo(); // 選択終了桁 var lineFrom = GetSelectLineFrom(); // 選択開始行 var lineTo = GetSelectLineTo(); // 選択終了行 // 選択範囲の文字列取得 var selectText = GetSelectedString(0); // 最後の改行削除 selectText = selectText.replace(/\r\n$/, ''); // 改行で分割 var selectArr = selectText.split('\r\n'); Editor.CancelMode(); for(var i=0; i<selectArr.length; i++){ var changeText = ''; for(var j=0; j<selectArr[i].length; j++) { changeText += ('00' + selectArr[i].charCodeAt(j).toString(16)).slice(-2); } var change = ''; for(var k=0; k<changeText.length; k++){ var char = changeText.charAt(k).toUpperCase(); if(char == 'D'){ change = '-' + change; } else if(char == 'C') { change = '+' + change; } else if(char == 'A' || char == 'B' || char == 'E' || char == 'F') { change = ' ' + change; } else { change += char; } } // 範囲選択 Editor.MoveCursor(lineFrom + i, colFrom, 0); for(var col=colFrom; col < colTo; col++) { Editor.Right_Sel(0); } // 上書き Editor.InsText(change); } }
// ----------------------------------------------- // 選択範囲のコメント行を抽出 // コメント行とは7桁目に「*」または「/」をもつ行 // ----------------------------------------------- main() function main(){ var isSelected = Editor.IsTextSelected(); if(isSelected == 1) { // 行選択しているか var txt = Editor.GetSelectedString(0); var lines = txt.match(/^\d{6}[\s\S]*(\n|\r\n|\r)$/); if(!lines){ Editor.MessageBox('行を選択して下さい'); return; } }else{ Editor.MessageBox('行を選択して下さい'); return; } // 選択範囲の文字列取得 var allText = GetSelectedString(0); var arr = allText.match(/\d{6}(\*|\/).*(\n|\r\n|\r)/g); if(arr){ // 通常コピー Editor.SetClipboard(0, arr.join('')); Editor.MessageBox('クリップボードにコピーしました'); } else { // コメント無し Editor.MessageBox('コメント行はありません'); } }
// ----------------------------------------------- // 選択範囲のコメント行を除く // コメント行とは7桁目に「*」または「/」をもつ行 // ----------------------------------------------- main() function main(){ var isSelected = Editor.IsTextSelected(); if(isSelected == 1) { // 行選択しているか var txt = Editor.GetSelectedString(0); var lines = txt.match(/^\d{6}[\s\S]*(\n|\r\n|\r)$/); if(!lines){ Editor.MessageBox('行を選択して下さい'); return; } }else{ Editor.MessageBox('行を選択して下さい'); return; } // 選択範囲の文字列取得 var allText = GetSelectedString(0); var arr = allText.match(/\d{6}(?!\*|\/).*(\n|\r\n|\r)/g); if(arr){ // 通常コピー Editor.SetClipboard(0, arr.join('')); Editor.MessageBox('クリップボードにコピーしました'); } else { // コメント無し Editor.MessageBox('コメント行はありません'); } }
TODO