最終更新日 2025-03-30

HmCustomRenderBrowser の使い方 (マクロのObjectをブラウザ枠へ伝達)

実際には、テキストではなく、何をどのように伝達してもかまいません。
極端な話、秀丸とはあまり関係ないようなものを伝達しても良いのです。

HmCustomRenderServer.mac のファイルだけを変更して、test.mac としてみましょう。

まず、「一式をすべてコピー」して、別のディレクトリにコピペしてみましょう。

「HmCustomRenderServer.mac」だけ名前を変更します。
他はそのままです。

onRequestObject にて返したオブジェクトの内容が、onReceiveObject で受け取れる

test.mac
hidemaruversion "9.43.99";

jsmode "JScript\\" + currentmacrofilename;

execjs currentmacrodirectory + "\\HmCustomRenderServer.js";

js {

// オーバーライド。非同期関数なので非同期中に使える関数で構築する必要あり
function onRequestObject() {
    var obj = {
        column: column(),
        lineno: lineno(),
        filename2: filename2(),
        directory2: directory2(),
        html: "<b>おおお</b>",
        "おれおれ": "お母さん、ぼくだよぼく",
    };

    return obj;
}

} // js
HmCustomRenderBrowser.html
<!DOCTYPE html>
<html lang="ja">
<head>
<title>オブジェクト伝達</title>
<script src="./HmCustomRenderBrowser.js"></script>
</head>
<body>
<div id="divPosition"></div>
<div id="divFileInfo"></div>
<div id="divOreore"></div>
<div id="divHTML"></div>
<script>
document.addEventListener('DOMContentLoaded', ()=>{
    HmCustomRenderBrowser.setInterval(onReceiveObject, 1000);
});

function onReceiveObject(obj, error) {

    // エラー
    if (!obj) {
        return;
    }

    // 座標系
    divPosition.innerText = obj.lineno + "," + obj.column;

    // ファイル情報
    divFileInfo.innerText = obj.filename2 + "\n" + obj.directory2;

    // おれおれ系
    divOreore.innerText = obj.おれおれ;

    // HTML系
    divHTML.innerHTML = obj.html;
}
</script>
</body>
</html>
        

test.txtを用意

適当に複数行のテキスト内容が書かれたテキストファイルを用意

test.macを実行

このように、マクロ側のonRequestObject で返した値が、 ブラウザ側でonReceiveObjectで拾えていることが分かります。
秀丸エディタ上のカーソルの位置が動くと、ブラウザ枠側にもちゃんと反映されます。

このようなデータ伝達をとても簡単に行えることこそが、HmCustomRenderBrowserが便利な点です。