マクロの記録・停止後に、F4キーを30回ぐらい押すと落ちる
-
動作環境は以下になります。
Windows10 pro 64bit 1903
Mery 64bit ver2.8.6| fine | 返信 -
ご報告ありがとうございます。
マクロの記録・停止後に F4 キーということなので、マクロの実行中に発生するエラーだと思います。
マクロのエラーはそのマクロの内容が分からないとサポートすることが難しいため、お手数をおかけしますが問題の発生するマクロの内容を教えていただけると調査の助けになります。
記録した操作が簡単なものであれば、行った操作を文章で書いてくださっても大丈夫です。
複雑な操作を記録されている場合は [マクロ] メニューの [名前を付けて保存] からマクロを保存して、そのファイルを Mery で開けば記録した操作の内容が見えますので、その内容を教えていただけますと助かります。
ただ、記録したマクロの内容に個人情報やインターネットに公開してはまずい情報などが含まれているかもしれない場合は別途対応させていただきますので、その旨だけを教えてください。
ご不便をおかけして申し訳ございませんがよろしくお願いいたします。
| Kuro | 返信 -
本日実施すると、F4を普通にポンポン押している分には問題なく動作しました。ただし、F4押しっぱなしにすると落ちます。
■マクロ
document.selection.CharRight(true, 1);
document.selection.CharRight(true, 1);
document.selection.CharRight(true, 1);
document.selection.CharRight(true, 1);
document.selection.Copy();
document.selection.CharRight(false, 1);
document.selection.Paste();
document.selection.NewLine(1);■ファイルの内容
2474
2475
2476
2477
2478
2479
247A
247B
247C
247D
247E
247F
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
248A
248B
248C
248D
248E
248F
2490
249C
249D
249E
249F
24A0
24A1
24A2
24A3
24A4
24A5
24A6
24A7
24A8
24A9
24AA
24AB
24AC
24AD
24AE
24AF
24B0
24B1
24B2
24B3
24B4
24B5
2504
2506
2521
2522
2529
252A
2531
2532
2539
253A
2543
2544
2545
2546
2574
2575
2576
2577
2578
2579
257A
257B
25A2
33CC以上です。
| fine | 返信 -
ご返信ありがとうございます。
頂いた条件で現象を再現することができました。
どうやらマクロの動作速度が速すぎてクリップボードへのコピー (document.selection.Copy) と ペースト (document.selection.Paste) の処理に Windows のクリップボードがついてこれなくなってエラーが発生し、その結果、Mery が強制終了してしまっているようです。
クリップボード関連の処理は他のアプリとの兼ね合いもありますので完全にエラーをなくすことはできないのですが、次のバージョンではクリップボードへのアクセスの安定性の向上と、エラーが発生した場合にも Mery が強制終了することのないよう改善したいと思います。
あまりご参考にならないかもしれませんが、頂いたマクロですとクリップボードへのアクセス時 (document.selection.Paste) に sleep メソッドで少し待機するようにすればエラーをある程度回避できると思います。
document.selection.CharRight(true, 1); document.selection.CharRight(true, 1); document.selection.CharRight(true, 1); document.selection.CharRight(true, 1); document.selection.Copy(); document.selection.CharRight(false, 1); sleep(200); // 少し待つ document.selection.Paste(); document.selection.NewLine(1);
ご不便をおかけして申し訳ございませんが、次のバージョンまで今しばらくお待ちくださいませ。
| Kuro | 返信 -
横から失礼します。
そもそもが「マクロの記録・停止後」の連続実行についてなので、的外れな内容になってしまいますが…。
おそらく個々の行の文字列データをクリップボードに保存しておく必要はないとおもいますので、以下のようなマクロにすると不安定になることがなくなりますね。// ■ 1行だけ「行の複製」を実行 // ※ マクロの実行1回につき、キャレット位置の「1行」を複製する var s = document.selection; s.DuplicateLine(); // カーソルを次の行頭に移動させるなら var y = s.GetActivePointY( mePosLogical ); s.SetActivePoint( mePosLogical, 1, y + 2 );
上のマクロならショートカットキーの押しっぱなしで連続実行しても大丈夫だとおもいますが、最後の行がええんと複製・増殖されつづけてしまいます。:(
また、以下のマクロなら連続実行せずとも、実行 1 回で済みます(アンドゥ操作 1 回で元に戻せます)。
// ■ ファイル内のすべての各行ごとに二重に複製する(※ 一括操作) // ※ 要: Mery 2.7.0 以上 … スクロールバーがヌルヌル動きます var d = document, s = d.selection; s.StartOfDocument(); BeginUndoGroup(); for ( var i = 1, yy = d.GetLines( 0 ), y; i <= yy; i ++ ) { y = s.GetActivePointY( mePosLogical ); s.DuplicateLine(); s.SetActivePoint( mePosLogical, 1, y + 2 ); } EndUndoGroup();
// ■ ファイル内のすべての各行ごとに二重に複製する(※ 一括操作) var d = document, s = d.selection; var a = d.Text.split( "\n" ); for ( var i = 0, len = a.length; i < len; i ++ ) { a[i] = a[i] + "\n" + a[i]; } d.Text = a.join( "\n" ).replace( /\n+$/, "\n" ); s.EndOfDocument();
以下のマクロは、事前に二重化したい行を範囲選択しておく前提。
// ■ 選択範囲を含むすべての行を二重に複製する(※ 一括操作, 空行は複製しない) var s = document.selection; var ty = s.GetTopPointY( mePosLogical ); var bx = s.GetBottomPointX( mePosLogical ); var by = s.GetBottomPointY( mePosLogical ); if ( ty != by && bx == 1 ) { by --; } s.SetActivePoint( mePosLogical, 1, ty ); s.SetActivePoint( mePosLogical, 1, by, true ); s.EndOfLine( true, mePosLogical ); var a = s.Text.split( "\n" ); for ( var i = 0, len = a.length; i < len; i ++ ) { if ( a[i] ) { a[i] = a[i] + "\n" + a[i]; } } s.Text = a.join( "\n" ); s.SetAnchorPoint( mePosLogical, 1, ty );
| sukemaru | 返信 -
お待たせしました。
Mery Ver 2.8.7 でクリップボードの入出力の安定性を向上する対策を施してみましたので、問題となっているマクロの動作が改善されているかもしれません。
お手数をおかけしますが、ぜひお試しくださいませ。
| Kuro | 返信