Meryマクロ:新規文書の編集について

Meryのマクロについて、私が調べたことのメモ書き。

Emeditorで、このようなマクロを実行したとする。

// 一時文書作成(Emeditor)
editor.NewFile();					// 新規文書作成
var DS = document.selection;		// 現在の文書
DS.Text = "hoge";					// 文字を書く
DS.SelectAll();						// 全て選択
DS.Copy();							// 文字をコピー
editor.ExecuteCommandByID(4120);	// 文書を破棄

一時的に文書を作成して、そこに文字を書いてクリップボードにコピーしてから、その文書は破棄する。
つまり、元の文書は全く操作せず、内部処理として文字の編集とコピーをするもの。

これをMeryで実行しようと、次のマクロを組んだ。

// 一時文書作成(Mery)
editor.NewFile();					// 新規文書作成
var DS = document.selection;		// 現在の文書
DS.Text = "hoge";					// 文字を書く
DS.SelectAll();						// 全て選択
DS.Copy();							// 文字をコピー
editor.ActiveDocument.Saved = true;	// アクティブな文書を保存済に
editor.ActiveDocument.Close();		// タブを閉じる

変えたのは「破棄する」の部分だけ。
これを実行すると、なぜか新規作成したところではなく、元の文書に書き込んで処理してしまう。
原因を調べて、修正したものがこちら。

// 一時文書作成・修正版(Mery)
editor.NewFile();					// 新規文書作成
var D = editor.ActiveDocument;		// アクティブな文書
var DS = D.selection;				// アクティブな文書の文字
DS.Text = "hoge";					// 文字を書く
DS.SelectAll();						// 全て選択
DS.Copy();							// 文字をコピー
D.Saved = true;						// アクティブな文書を保存済に
D.Close();							// タブを閉じる

どうもMeryでは、"editor.NewFile()"を実行すると、現在編集中(であるはず)の"document"と、アクティブの"ActiveDocument"が異なる結果になるらしく、新規文書に書く場合は全て"editor.ActiveDocument"の構文を使うしかない。

Meryのバグ?かは不明だが、今回の使い方では完全に切り分けられるので都合がいいと言えばいい。

いいなと思ったら応援しよう!

つかさん
サポートは大変ありがたいですが、Twitterを始めとするSNSなどで記事をご紹介いただければ、それも大変嬉しいサポートです。