(Box範囲選択や複数範囲選択) ⇔ 配列No.08347
天翔記jp さん 16/09/23 19:16
 
いつもお世話になっております、秀丸マクロ.netの翔.jpです。

■概要
「マクロ関数の追加要望」となります。

 Box範囲選択や複数(Box)範囲選択のテキスト内容を一気にマクロの配列へと
 入れるような、いわゆる「Get」関数があると、
 いちいち「開始地点〜終了地点の範囲が〜」
 などと計算する必要もなく便利なのではないかと思います。

 又、同様に、配列を使って一気に置き換えるような「Set相当」もあると楽です。

 大切なことは、

・他のマクロ情報が利用できるマクロ空間で記述が可能なこと
・やろうとしていることは比較的単純なことなので、記述敷居が充分に低いこと

でしょう。

■方向性
Box系の範囲選択は、かならず行成分に分けることが出来るので、
Box範囲であるという性質上、選択時に「1つの行成分」が4Kを超えることはありま
せん。
(通常の範囲選択では、4Kをしばしば超える内容でも、Box範囲選択で一つの行が4K
を超える可能性が極めて低いと期待出来ます)

$orig_selbox_lines = get_selecting_box_lines(); // 有効な(複数)Box選択範囲を
行成分にわけて、配列に入れた。

#orig_selbox_lines_cnt = getresultなんとか(); // selecting_boxとして勘定して
分割した行数

while( #line < #orig_selbox_lines_cnt ) {
    $orig_selbox_lines[#line] = ・・・ 何か処理
    #line++;
}

overwrite_selecting_box_lines( $orig_selbox_lines ); // 変更分上書き


のような理解しやすいノリで記述が可能になるかと思います。
ご検討ください。


[ ]
RE:08347 (Box範囲選択や複数範囲選択) ⇔No.08348
天翔記jp さん 16/09/23 19:38
 
「4K云々」の所は無視してくださいorg。

[ ]
RE:08347 (Box範囲選択や複数範囲選択) ⇔No.08351
秀丸担当 さん 16/09/26 15:39
 

現状でBOX選択や複数選択をうまく扱おうとすると、いったんカラーマーカーに
して、カラーマーカーの位置をnextcolormarkerなどでカーソル移動していくと
いうことになると思います。
配列に入れて、配列でごっそり変えるというのは、1つの方法として考えられる
と思いますが、配列に限らずテキスト内容をまるごと変数に入れるということ自
体が上限([動作環境]→[環境]→[マクロ変数の上限])のこともあり、難があり
そうです。

取得に関しては、まずは、単一選択でseltopx,seltopy,selendx,selendyがあり
ますが、同じようにseltopx[n]のように複数選択の座標を取得できるようにして
おくほうが順番としては先という気がします。

挿入/置換に関しては、単一選択で相当する文としてはinsert文になりますが、
複数選択の1つ1つを個別というわけにはいかないので、言われているような方
法か、insert文のパラメータを拡張するかということになると思います。

ちなみに変換モジュールを使うと複数選択を一度に変換することが現状でもでき
ます。
高速にまるごと入れ替えるとしたら変換モジュールのほうが向いていると思いま
す。

[ ]