「アクティブなタブのマクロを実行する」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
Sukemaru (トーク | 投稿記録)
MSY-07 (トーク | 投稿記録)
改行の除去
 
(2人の利用者による、間の2版が非表示)
1行目: 1行目:
アクティブなタブを '''マクロとして実行''' します。[https://www.haijin-boys.com/discussions/4814]
アクティブなタブを '''マクロとして実行''' します。[https://www.haijin-boys.com/discussions/4814]<br>
編集中のコードを編集中のタブ自身にたいして実行するものなので利用する機会はあまりないかとおもいますが、編集中のマクロのテストなどを想定しています。


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


== ソースコード ==
== このマクロを実行 ver.1 ==
<source lang="javascript">
[マクロ] メニュー内のコマンド「これを選択(T)」と「実行(R)」によりアクティブなタブのコードを実行します。
 
=== ソースコード ===
<syntaxhighlight lang="javascript">
#title = "このマクロを実行"
#title = "このマクロを実行"
#tooltip = "アクティブなタブのマクロを実行する"
#tooltip = "アクティブなタブのマクロを実行する"
20行目: 26行目:
// ■ マクロ用の拡張子
// ■ マクロ用の拡張子
var reg = /^(?:js|pl|php|py|rbs|vbs)$/;
var reg = /^(?:js|pl|php|py|rbs|vbs)$/;




43行目: 48行目:
   }
   }
}
}
</source>
</syntaxhighlight>
 
=== メモ ===
; 2019/08/12
* <syntaxhighlight lang="javascript" inline>editor.ExecuteCommandByID( MEID_MACROS_RUN = 2171 );</syntaxhighlight> だと実行されないようなので、WSH のキーストーロークエミュレーションで「実行(R)」のショートカットキー <kbd>F4</kbd> を送信するようにしてあります。<br> <span style="color:#c00;">「実行(R)」のショートカットキーを変更している場合、このマクロは正しく機能しません。</span>
* 設定変数で列挙した拡張子が妥当かどうか分かりません…。<br> 実行条件は拡張子ではなく編集モードにしたほうがよいかも?
 
== このマクロを実行 ver.2 ==
Mery.exe の [[ヘルプ:目次#コマンドラインオプション|コマンドラインオプション]] <syntaxhighlight lang="javascript" inline>Mery.exe /mf "MacroFileName"</syntaxhighlight> を利用してマクロを実行します。
: ※「[[マクロメニュー]]」「[[コンパクトメニュー]]」マクロにも「このマクロを実行」コマンドを組み込んでいますが、「実行(R)」のショートカットキーを変更している場合に実行できない(テンキーパッド上のキーなど <syntaxhighlight lang="javascript" inline>wshSell.SendKeys()</syntaxhighlight> で送信できないキーパターンもありえる)こともありそうなので回避策として。


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


== memo ==
/**
* ''editor.ExecuteCommandByID( MEID_MACROS_RUN = 2171 );'' <br> だと実行されないようなので、WSH のキーストーロークエミュレーションで「実行(R)」のショートカットキー '''F4''' を送信させるようにしてあります。<br> <span style="color:#c00;">「実行(R)」のショートカットキーを変更している場合、このマクロは正しく機能しません。</span>
* 編集中のマクロを実行する
* 設定変数で列挙した拡張子が妥当かどうか分かりません…。<br> 実行条件は拡張子ではなく編集モードにしたほうがよいかも?
*
* ※ タブが未保存の場合はマクロを実行しない
* ※ タブの実体ファイルの拡張子だけを確認し、
*    ファイルの内容までは確認せずにマクロとして実行する
* ※ 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 = 'このファイルはマクロではありません。';
  }
}
</syntaxhighlight>
 
=== メモ ===
; 2020/04/30
* ver.2 でも「マクロのカスタマイズ」には登録されるので、「実行(R)」のショートカットキー(デフォルト状態なら <kbd>F4</kbd> )での再実行も可能です。

2024年9月9日 (月) 11:35時点における最新版

アクティブなタブを マクロとして実行 します。[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 )での再実行も可能です。
スポンサーリンク