#9478

newton
メンバー

江村さま
対応ありがとうございます。V9.17で動作を確認して見ました。
残念ながら、ボックス選択した後、コピー操作を連続させた場合のカーソルのx方向の位置が保持されていないと使いにくいです。
下記の「動作-2」をV10で実現させていただければ幸いです。

▼現在の動作 (動作-1)
   +–+
  aa|aa|
  bb|bb|
  cc|cc|
   +–+
 +–+
 |aa|
 |bb|
 |cc|
 +–+
 $ ← 貼り付け2回目のカーソルの位置
    (x方向の位置が変化)

▼要望する動作 (動作-2)
   +–+
  aa|aa|
  bb|bb|
  cc|cc|
   +–+
   +–+
   |aa|
   |bb|
   |cc|
   +–+
   % ← 貼り付け2回目のカーソルの位置
      (x方向の位置は保持)

+-+
| | …. 箱型データ貼り付け領域
+-+

$ … 現在のカーソルの位置
% … 要望するカーソルの位置

※ 個人的には「動作-2」しか必要ないですが、人によっては現行の動きのほうがよい人もいるかもしれません。
貼り付け後のカーソルの位置は、エディタ設定でどちらにするか設定できるとよいと思います。
確かWZはそのようになっていたように記憶しております。

■参考:秀丸で使用しているマクロ
※ BOX選択のマクロは省略
//
// WZ Like BOX貼り付け
//
// 2007/03/12
// 2007/03/15 y方向のカーソル移動スペースの確保処理を修正
// 2007/05/12 余分な半角スペースが入る現象: コピー範囲が2バイトコードの 2バイト目にかかる場合を考慮
//
beginclipboardread;
while(1) {
$s = getclipboard;
if( $s == “” ) {
break;
}
#len = strlen($s) – 1;
if( #cx < #len ) {
#cx = #len;
}
#cy = #cy + 1;
}
#x = x;
#y = y;
pasterect;
//REM moveto #x + #cx, #y + #cy – 1;

#x2 = #x; // new X-posi
#y2 = #y + #cy; // new Y-posi
moveto #x2, #y2; // カーソル移動

#x_delta = x – #x2; // x方向における指定した位置とのズレ
#y_delta = y – #y2; // y方向における指定した位置とのズレ

#kanjiF = 0;
if (#x_delta < 0) {
//
// コピー範囲が2バイトコードの 2バイト目にかかる場合を考慮:
// (1) 一つ前の行の2桁前が2バイト文字の場合 (現在行の2桁前は 1or2バイト文字の両方の場合がある)
// (2) 一つ前の行の2桁前は1バイト文字だが、現在行の2桁前が2バイト文字の場合
//
call sub_chkkanj (#x2 – 2), (#y2 – 1); // 一つ前の行の2桁前が2バイトコードか
#kanjiF = ##return;
if (#kanjiF == 0) {
call sub_chkkanj (#x2 – 2), (#y2); // 現在行の2桁前が2バイトコードか
#kanjiF = ##return;
}
if (#kanjiF == 1) {
#x_delta = #x_delta + 1; // 調整: 半角スペースが余分に挿入されるのを防ぐため
}
if (#x_delta < 0) {
$padding = ""; // x方向にカーソルが移動できるようにするための挿入文字列
while(#x_delta < 0) {
$padding = $padding + " ";
#x_delta = #x_delta + 1;
}
insertfix $padding; // x方向のカーソル移動スペースを確保
moveto #x2, #y2; // もう一度カーソル移動
}
}

if (#y_delta < 0) { // y方向のカーソル移動スペースの確保処理
if (x == 0) { // 現在位置の確認: このまでの処理でカーソルが行の先頭にあるか否か
golineend; // 最後に編集した箇所の行末に移動
insertreturn; // 改行を挿入
} else { // x方向における指定した位置とのズレをもう一度考慮
golineend; // 最後に編集した箇所の行末に移動
insertreturn; // 改行を挿入。y方向のカーソル移動スペースを確保

#x_delta = x – #x2; // x方向における指定した位置とのズレ (0 – #x2)
$padding = ""; // x方向にカーソルが移動できるようにするための挿入文字列
while(#x_delta 0xff) {
##ret = 1;
} else {
##ret = 0;
}
moveto ##x0, ##y0; // restore the cursor position
return ##ret;