秀丸エディタ・マクロ保存時の文字コード&BOMの自動チェック

  • 概要

    秀丸マクロのファイルは、文字エンコードとして「sjis / utf8(bom付) / unicode(bom付)」のいずれかが想定されています。
    このマクロは、マクロ保存時に「マクロファイルとして適切な文字コードになっているか」をチェックするためのマクロです。

  • ダウンロード

    DOWNLOAD ⇒ HmOnSaveObserbedEncode.zipファイル。ver 1.001
    └更新日 2017/03/24
  • 動作環境

    • 秀丸 ver8.50以上。
  • 使い方

    「マクロ登録」⇒「自動起動」⇒「保存直前と直後」として該当マクロファイル(HmOnSaveObserbedEncode.mac)を登録する。
    すでに「保存直前と直後」に別のマクロがあるのであれば、中身をコピペするなりexecmacroするなりする。

  • HmOnSaveObserbedEncodeマクロ内容

    /*
     * HmOnSaveObserbedEncode v1.0.0.1
     * 秀丸 v8.50以上
     * パブリックドメイン
     */
    OnFileSave_ObservedEncodeAsHidemaruMacro:
    
        if (filetype == ".mac") {
    
            // セーブ時?
            // event==3 保存直前と直後
            if (event == 3) {
    
                // 保存直後?
                // event==3の時のgeteventparam(0)の返り値は、 0 保存直前 1 保存直後
                ##is_after_save = geteventparam(0);
                if (##is_after_save == 1) {
                    ##encode_num = encode & 0x3F;
    
                    // utf8? or utf16?
                    if (##encode_num==2 || ##encode_num==6) {
                        if (!bom) {
                            setencode encode, 1, 1;
                            save;
    
                            ##OUT = loaddll("HmOutputPane.dll");
                            #ret = dllfunc(##OUT, "Output",hidemaruhandle(0),"秀丸マクロと判断した場合、BOMが必要です。\r\n ⇒ BOMを付与しました。\r\n");
                            freedll(##OUT);
    
                        }
                    }
    
                    // sjis?
                    else if (##encode_num==1) {
                        ; // なし
                    }
    
                    // その他。
                    // ワザとでもない限り、日本人がマクロ保存時にここに突入してはこないだろう…
                    // 別言語圏の人が、その圏で主要なマルチバイト等で保存した、など?
                    else {
                        // 多バイト文字っぽいのが含まれているか?
    
                        // 文字数とバイト数が異なれば…といった趣旨
                        if (charcount(0x00000000|0x00000000|0x00000000|0x00000000|0x00200000) != 
                            charcount(0x00000001|0x00000000|0x00000100|0x00000000|0x00200000)) {
    
                            ##OUT = loaddll("HmOutputPane.dll");
                            #ret = dllfunc(##OUT, "Output",hidemaruhandle(0),
                                "秀丸マクロと判断した場合、不正な文字コードです。\r\n ⇒ sjis / utf8(bom) / unicode(bom) のいずれかで保存してください。\r\n"
                            );
                            freedll(##OUT);
                        }
                    }
                }
            }
        }
    
  • 関連項目①

    自動マクロのまとめ方を参照のこと。

  • 関連項目② ~秀丸のデフォルトの文字コードをUTF8に~

    2017年現代では、大半のテキストファイルはUTF8で扱うことが多くなってきています。
    一方で、UTF8のファイルにBOMを付けるか否かは、「拡張子やプロジェクトにより」揺れがあるのが実情です。

    しかし、一旦、秀丸のデフォルトの文字コードをShiftJISではなく、UTF8にしておき、
    上記マクロを拡張子等の判定を加えるなど、多少変更するだけで、

    • 「UTF8でBOMを付ける必要があるモノ」には付け、
    • 「UTF8でBOMを付ける必要がないモノ」には外す、

    といった自動制御が簡単に出来ることでしょう。

  • ライセンス

    パブリックドメインです。