サクラエディタで選択行をJavaScriptとして実行(マクロ)

スポンサーリンク

ちょっとだけJavaScriptのテストをしたい時、開発環境などを立ち上げることなくサクラエディタ上から実行できるようにするメモです。

サクラエディタ内でJavaScriptのコードを範囲選択し、右クリックから実行すると以下のように別ウィンドウで実行されます。

ウィンドウは閉じない限り残るので、テキストエリア内のコードを修正して再び「実行」ボタンを押して実行できます。

呼び出すたびに新しいウィンドウで実行できるので、複数立ち上げて別々にテストもできます。

selectToHTAapp.js

サクラエディタにマクロ登録するjsです。

「selectToHTAapp.js」というファイル名で保存します。
今回はサクラエディタの実行ファイルがあるフォルダへ保存しました。

.htaファイルを指定している C:\\Program Files (x86)\\sakura\\sakuraToJsExec.hta のところだけ実際のパス(やファイル名)に書き換えます。

パスの「\」は「\\」とする点に注意してください。

var WshShell = new ActiveXObject("WScript.shell");

EditorObjType = typeof Editor;
if(EditorObjType != "undefined") {
   Editor.CopyLines();
}

_sleep(500);

try {
   // .htaのパスが間違っていると無反応になります
   WshShell.Run("MSHTA.EXE \"C:\\Program Files (x86)\\sakura\\sakuraToJsExec.hta\" sakura");
}
catch(e) {
   var windowTitle = "hta呼出時";
   Test1(WshShell,windowTitle,e);
}

function _sleep(time) {
   var d1 = new Date().getTime();
   var d2 = new Date().getTime();
   while( d2 < d1 + time ) {
      d2=new Date().getTime();
   }
   return;
}

function Test1(obj,wtitle,wmessage) {
   var ans = obj.Popup(
      wmessage,
      5,
      wtitle,
      0|48|256
   );
   return;
}

色々試してたら「何か動いた」ような状態のため、関数名が「Test1」だったり色々アレですがOKとしましょう。

sakuraToJsExec.hta

.htaというのはhtmlアプリケーションのことで、見た目はWindowsアプリケーションのように動いてくれます。

cssなんかも使えますので、お好みで修正してください。

これも「sakuraToJsExec.hta」というファイル名でサクラエディタの実行ファイルがあるフォルダへ保存しました。

<html>
<head>
<script type="text/JScript">
   var htaWidth = 500;
   var htaHeight = 475;
   window.resizeTo(htaWidth, htaHeight);
   window.moveTo((screen.width - htaWidth) / 2, (screen.height - htaHeight) / 2);
</script>
<script type="text/JavaScript" language="JavaScript">
   var ClipUtil = {
      get : function(){ return new ActiveXObject("htmlfile").parentWindow.clipboardData.getData("text"); },
      set : function(text) { new ActiveXObject("htmlfile").parentWindow.clipboardData.setData("text", text); }
   };
</script>

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {
   var htaCommandLine = sakueTestHTA.commandLine;
   htaCommandLine = splitCml(htaCommandLine);

   if(htaCommandLine == "sakura") {
      var clipbordVal = ClipUtil.get();
      $("#jscode").text(clipbordVal);
      execjs();
   }
});

function splitCml(cml) {
   var res, reg, mat;
   reg = /"([^"]+)"|([^ ]+)/g;
   res = [];
   while (mat = reg.exec(cml)) {
      res[res.length] = mat[1] || mat[2];
   }

   return res.slice(1);
};
</script>

<title>テキストエリア内のJSを実行</title>
<hta:application id="sakueTestHTA"></hta:application>
</head>
<body>
<form name="form1">
   <textarea name="jscode" id="jscode" rows="25" style="width:100%;"></textarea>
   <p><input type="button" value="実行" onClick="execjs()" /> <input type="reset" value="入力内容の初期化"></p>
</form>

<script type="text/JavaScript" language="JavaScript">
function execjs() {
   var jscodeVal = $("#jscode").text();
   if(jscodeVal == "") {
      alert("式が未入力です。");
      return false;
   }

   try {
      eval(jscodeVal);
   }
   catch(e) {
      alert(e);
   }
};
</script>
</body>
</html>

マクロ登録と実行

マクロとして登録

サクラエディタ > 設定 > 共通設定 > マクロ

登録マクロを右クリックメニューに追加

サクラエディタ > 設定 > 共通設定 > マクロ

実行してみる

選択範囲がJavaScriptとして実行できますので、新しく作成した「無題」のテキストでも何でもOKです。

とりあえず以下を実行してみましょう。

alert("test")

入力したら範囲選択し、

右クリックから先程登録したマクロを選択します。

以下のように表示されたらOKです!

ウィンドウを「X」で閉じるまで何度も実行でき、呼び出すたびに新しいウィンドウが開いて個別に実行できます。

簡単に確認したい事がある場合はこれで済みますが、もう少しちゃんとテストしたい場合は「Visual Studio Code」が軽くていい感じですね。

コメント

タイトルとURLをコピーしました