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

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

アクティブなタブを マクロとして実行 します。[1]
編集中のコードを編集中のタブ自身にたいして実行するものなので利用する機会はあまりないかとおもいますが、編集中のマクロのテストなどを想定しています。

※アクティブなタブが未保存状態のばあいは実行しません。
※拡張子をチェックしますので、TXT や HTML ファイルなどはマクロとして実行されません。

このマクロを実行 ver.1[編集]

[マクロ] メニュー内のコマンド「これを選択(T)」と「実行(R)」によりアクティブなタブのコードを実行します。

ソースコード[編集]

#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 = "このファイルはマクロではありません。";
  }
}

メモ[編集]

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

このマクロを実行 ver.2[編集]

Mery.exe の コマンドラインオプション Mery.exe /mf "MacroFileName" を利用してマクロを実行します。

※「マクロメニュー」「コンパクトメニュー」マクロにも「このマクロを実行」コマンドを組み込んでいますが、「実行(R)」のショートカットキーを変更している場合に実行できない(テンキーパッド上のキーなど wshSell.SendKeys() で送信できないキーパターンもありえる)こともありそうなので回避策として。

ソースコード[編集]

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

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

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


var d = editor.ActiveDocument;
var dPath = d.FullName;

if ( ! dPath || ! d.Saved ) {
  Status = 'ファイルが保存されていません。';
}
else if ( dPath.toLowerCase() == ScriptFullName.toLowerCase() ) {
  Status = '「このマクロを実行」';
}
else {
  if ( reg.test( dName.substr( dName.lastIndexOf( '.' ) + 1 ) ) ) {
    Status = 'このマクロを実行... 「' + d.Name + '」'
    // Mery.exe のコマンドラインパラメータ /mf でマクロを実行
    var meryPath = editor.FullName,  macroPath = filePath = dPath;
    var command = '"' + meryPath + '" /mf "' + macroPath + '" "' + filePath + '"';
    new ActiveXObject( 'WScript.Shell' ).Run( command );
  }
  else {
    Status = 'このファイルはマクロではありません。';
  }
}

メモ[編集]

2020/04/30
  • ver.2 でも「マクロのカスタマイズ」には登録されるので、「実行(R)」のショートカットキー(デフォルト状態なら F4 )での再実行も可能です。
スポンサーリンク