アクティブなタブのマクロを実行する

提供: MeryWiki
ナビゲーションに移動 検索に移動

アクティブなタブを マクロとして実行 します。[1]


ソースコード[編集]

#title = "このマクロを実行"
#tooltip = "アクティブなタブのマクロを実行する"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",15

/**
 * [マクロ] メニューの「これを選択」と「実行」をおこなう
 * 
 * ※ タブが未保存の場合はマクロを実行しない
 * ※ タブの実体ファイルの拡張子だけを確認し、
 *    ファイルの内容までは確認せずにマクロとして実行する
 * ※ Mery 用のマクロでなくても「これを選択」コマンドが実行されるので
 *   [マクロのカスタマイズ] に登録されてしまうことになる
 */

// ■ マクロ用の拡張子
var reg = /^(?:js|pl|php|py|rbs|vbs)$/;



var d = editor.ActiveDocument;
var dName = d.Name, dSaved = d.Saved;

if ( ! dName || ! dSaved ) {
  Status = "ファイルが保存されていません。";
}
else if ( dName == ScriptName ) {
  Status = "「このマクロを実行」";
}
else {
  var ext = dName.substr( dName.lastIndexOf( "\." ) + 1 ).toLowerCase();
  if ( reg.test( ext ) ) {
    Sleep( 200 );	// キーを放すまでの時間稼ぎ
    editor.ExecuteCommandByID(MEID_MACROS_SELECT_THIS=2175);	// これを選択
    new ActiveXObject( "WScript.Shell" ).SendKeys( "{F4}" );	// マクロの実行
  }
  else {
    Status = "このファイルはマクロではありません。";
  }
}


memo[編集]

  • editor.ExecuteCommandByID( MEID_MACROS_RUN = 2171 );
    だと実行されないようなので、WSH のキーストーロークエミュレーションで「実行(R)」のショートカットキー F4 を送信させるようにしてあります。
    「実行(R)」のショートカットキーを変更している場合、このマクロは正しく機能しません。
  • 設定変数で列挙した拡張子が妥当かどうか分かりません…。
    実行条件は拡張子ではなく編集モードにしたほうがよいかも?
スポンサーリンク