Water Sunlight

軽量プログラミングの文法 - JavaScript/Python

ユーザ用ツール

サイト用ツール


メインメニュー

メタ
sakura-macro

文書の過去の版を表示しています。


sakura macro

y2sunlight 2021-12-02

マクロの使用方法

設置

マクロを以下フォルダに設置する。

{ユーザフォルダ}\AppData\Roaming\sakura

マクロにショートカットキーを割り当てる

マクロ一覧に登録
  1. sakuraメニュー[設定][共通設定]の[マクロ]タブ押下
  2. 名前入力、File、Id選択後[設定]押下
  3. 一覧に表示される
  4. [OK]押下
キー割り当ての登録
  1. sakuraメニュー[設定][共通設定]の[キー割り当て]タブ押下
  2. 以下を設定
    • 種別:[外部マクロ]選択
    • 機能:マクロ一覧に登録したマクロから選択
    • キー:割り当てたいキーを選択
  3. [割付]
  4. [OK]

以上でショートカットキーでマクロを実行することが出来るようになります。 ショートカットキー以外で実行する時は、[ツール][名前を指定してマクロ実行]を押し、マクロを選択します。


chop.js

chop.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// -----------------------------------------------
// 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);
 
    // 名前を指定して保存
    var fileName = Editor.GetFilename() + '.chop';
    Editor.FileSaveAs(fileName);
}


z2sp.js

z2sp.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// -----------------------------------------------
// 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);   // 再描画


repc.js

repc.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// -----------------------------------------------
// コードの置換
// 置換前のコードと置換後のコードはコロン(:)で区切る
// 複数置換の場合はカンマ(,)で区切る
// 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);
}


qsort.js

qsort.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// -----------------------------------------------
// 固定長の〇文字目から?文字でソートする
// -----------------------------------------------
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);
}


xsort.js

xsort.js
1
TODO


dump.js

dump.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// -----------------------------------------------
// バイナリーを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);
    }
}


rdump.js

rdump.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// -----------------------------------------------
// 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);
    }
}


ruler.js

ruler.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// -----------------------------------------------
// ルーラー追加
// -----------------------------------------------
 
// 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);


p2z.js

p2z.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// -----------------------------------------------
// パック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);
    }
}


cb_cget.js

cb_cget.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// -----------------------------------------------
// 選択範囲のコメント行を抽出
// コメント行とは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('コメント行はありません');
    }
}


cb_crem.js

cb_crem.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// -----------------------------------------------
// 選択範囲のコメント行を除く
// コメント行とは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('コメント行はありません');
    }
}


cb_pic.js

cb_pic.js
1
TODO


sakura-macro.1639972353.txt.gz · 最終更新: 2021/12/20 12:52 by tanaka