[JXA] 04 ローマ字を漢字に変換 その2 クリップボード反映待ち

JXA : JavaScript for Automation
[M1 Mac, Ventura 13.0]

クリップボードへのコピーは即時ではないことが判明したため、do…while文でループさせました。これで動作の再現性がようやく確保できました。

Google Chrome, Safari, Microsoft Excelではこのスクリプトで問題なく変換しますが、肝心のVSCodeがどうしてもダメです。

もう少しなので何とかしたいところです。

function run(input, parameters) {
    var se = Application("System Events");
    se.includeStandardAdditions = true;
    var txt0 = se.theClipboard();

    se.keystroke("a", {using:"command down"});
    se.keystroke("c", {using:"command down"});

    do {
        var txt1 = se.theClipboard();
    } while (txt0 == txt1);

    // se.displayDialog(txt1);

    lib = Library('convertlib');
    var ret = lib.romaji_to_hiragana(txt1);

    se.setTheClipboardTo(ret);
    do {
        var txt2 = se.theClipboard();
    } while (txt1 == txt2);

    // se.displayDialog(txt2);
    
    se.keystroke("v", {using:"command down"});
    se.keystroke("a", {using:"command down"});

    // VSCodeを別扱いにしたいがうまくいかず
    // var curApp = Application.currentApplication();
    // var nameApp = curApp.name();
    // se.displayDialog(nameApp);

    se.keyCode(104);
    se.keyCode(104);
    // または
    // se.keystroke("r", {using:["control down", "shift down"]});
            
    return input;
}

[JXA] 03 ローマ字を漢字に変換 その1

JXA : JavaScript for Automation
[M1 Mac, Big Sur 11.6.8, Ventura 13.0]

JXAでアプリ上のローマ字をひらがなに変換し、さらに漢字に変換するスクリプトを書きました。

やはりAppleScriptと同様にVenturaではまともに動きませんでした。クリップボードをコントロールすることができなくなっています。

調べてみるとクリップボードへの反映にやや時間が掛かるとのことなので、もう少し検討を続けます。

function run(input, parameters) {
    var se = Application("System Events");
    se.includeStandardAdditions = true;

    se.keystroke("a", {using:"command down"});
    se.keystroke("c", {using:"command down"});

    var txt = se.theClipboard();

    lib = Library('convertlib');
    var ret = lib.romaji_to_hiragana(txt);

    se.setTheClipboardTo("");
    se.setTheClipboardTo(ret);

    se.keystroke("v", {using:"command down"});
    se.keystroke("a", {using:"command down"});

    se.keyCode(104);
    se.keyCode(104);
    // または
    // se.keystroke("r", {using:["control down", "shift down"]});
             
    return input;
}