文書の過去の版を表示しています。
— 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('コメント行はありません');
}
}
TODO
TODO