2014年11月11日

Emeditorマクロ・コピー文字の貼付について

 この記事も含めて、まとめはこちらLink


 Emeditorのマクロで、コピーした文字を貼り付ける方法として、

document.selection.Paste(eeCopyUnicode);
(参照元:EmEditorマクロリファレンス: Pasteメソッド

 のコマンドがあるが、Javascriptを使ったものとして、

clipboardData.getData("Text")
(参照元:EmEditorマクロリファレンス: getDataメソッド

 もあって、こちらは貼り付けだけでなく変数に入れられるなどの使い道もある。
 そこで、こんなマクロを作っていた。

// コピー文字を改行付で貼付

document.selection.Text =
clipboardData.getData("Text")
.replace(/(\r\n)*$/ , "\r\n"); // コピー文字の最後に改行

 インターネットブラウザなどから文字をコピーして貼り付ける事がよくあるが、最後に改行が入っていない時や、逆に複数入っている時でも、自動的に改行を1つだけ入れるように、最後を置換するというもの。
 でもこれを実行すると、ちゃんと貼り付けられる場合と、全く貼り付けられない場合がある。一度変数に入れたり、置換をせず貼り付けるだけにしてみても、結果は同じ。

 調べていたらどうも、
Emeditorを立ち上げたばかりの状態では、clipboardData.getDataのコマンドを受け付けない
らしい。Emeditorのバグか、何かの設定等の問題かは不明。

 ただし、

  • ブラウザなどからコピー
     → document.selection.Pasteで貼付
  • Emeditor内で、document.selection.Copy()でコピーかCut()でカット
     → clipboardData.getDataで貼付

 を使えば貼り付け可能だったので、それを考慮したものがこれ。

// コピー文字を改行付で貼付(改良版)

X = document.selection
.GetActivePointX(eePosLogical); // X座標取得
Y = document.selection
.GetActivePointY(eePosLogical); // Y座標取得
document.selection.Paste(eeCopyUnicode); // 貼付
document.selection.SetActivePoint
(eePosLogical , X , Y , true); // 元の位置に範囲指定
document.selection.Cut(); // カット

document.selection.Text =
clipboardData.getData("Text")
.replace(/(\r\n)*$/ , "\r\n"); // コピー文字の最後に改行

 先のマクロの前に、「document.selection.Pasteを使って貼付 → 元の位置まで範囲指定 → カット」と、一度Emeditor内でクリップボードに入れてから再度貼り付けるという動作にしたら、問題なく動いた。

 ただしここでも、不具合処理のためにわざわざコピーし直す必要は無いと、更に改良したもの。

// コピー文字を改行付で貼付(改良版2)

X = document.selection
.GetActivePointX(eePosLogical); // X座標取得
Y = document.selection
.GetActivePointY(eePosLogical); // Y座標取得
document.selection.Paste(eeCopyUnicode); // 貼付
document.selection.SetActivePoint
(eePosLogical , X , Y , true); // 元の位置に範囲指定

document.selection.Text =
document.selection.Text
.replace(/(\r\n)*$/ , "\r\n"); // 最後を改行に変換

 clipboardData.getDataでクリップボードに入れず、範囲指定の部分を直接変換するというもの。一応、よけいな処理はしない形になってくれた。

 でも、不具合が解決したらここまでやらなくてもいいので、原因探ったり、バグならEmeditorに対するバグフィクス要望という事で。

タグ:EmEditor

posted by 司隆 at 08:51 | Comment(0) | Computer
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]