BOX選択中のseltopcolumnとselendcolumnがNo.25532
緒方聡 さん 08/10/17 01:15
 
お世話になってます。

7.09 での動作で不具合と思われる報告です。

【概要】
BOX選択中のseltopcolumnとselendcolumnがタブ文字を1字と数えない

【再現率】
100% (10/10 回)

【再現手順】
1. 先頭がタブの行を入力
2. カーソルをタブの後ろ(column:1)に移動
3. 行末までBOX選択
4. 以下のマクロを実行

 message "seltopcolumn:" + str(seltopcolumn) +
 "\nselendcolumn:" + str(selendcolumn) +
 "\nseltoplineno" + str(seltoplineno) +
 "\nselendlineno" + str(selendlineno);

【問題点】
seltopcolumnとselendcolumnの値が通常選択時と異なる。

【期待する動作】
BOX選択時も通常選択と同じ値になること。

【影響】
movetolinenoで移動するとずれてしまう、等。

【補足】
設定でタブ文字数を変更すると、その設定が反映される。

[ ]
RE:25532 BOX選択中のseltopcolumnとselenNo.25533
秀丸担当 さん 08/10/17 09:35
 

>【概要】
>BOX選択中のseltopcolumnとselendcolumnがタブ文字を1字と数えない

調べてみたところ、言われている通り、タブ文字は見た目上の文字数で数えるよ
うになっていました。
現状でやるには、seltopx,selendyでやると、問題無くなるのではないかと思い
ます。

これを変更すると何か他のマクロに影響が出ないか心配なところもありますが、
ずれているものが直って良くなることはあっても、悪くなるケースは考えずらい
かもしれないです。そのあたりをよく考えたいと思います。

[ ]
RE:25533 BOX選択中のseltopcolumnとselenNo.25542
緒方聡 さん 08/10/17 23:40
 
>現状でやるには、seltopx,selendyでやると、問題無くなるのではないかと思い
>ます。

seltop(x|y), selend(x|y) では選択範囲がエディタ的な同一行にあるかどうかが
判断できないので、seltop(column|lineno), selend(column|lineno)を
使用していました。

回避するとなると、
- rectselecting なら現在位置を記録して
- escapeしてmoveto seltopx, seltopy して lineno を覚える
- moveto selendx, selendy して lineno を比較して lineno で同一行かどうか覚える
- 現在位置だった場所反対の位置から beginrect して現在位置まで移動
という感じですね。

>これを変更すると何か他のマクロに影響が出ないか心配なところもありますが、
>ずれているものが直って良くなることはあっても、悪くなるケースは考えずらい
>かもしれないです。そのあたりをよく考えたいと思います。

よろしくお願いします。

[ ]
RE:25542 BOX選択中のseltopcolumnとselenNo.25548
秀丸担当 さん 08/10/20 11:40
 

>回避するとなると、
>- rectselecting なら現在位置を記録して
>- escapeしてmoveto seltopx, seltopy して lineno を覚える
>- moveto selendx, selendy して lineno を比較して lineno で同一行かどうか覚え
>る
>- 現在位置だった場所反対の位置から beginrect して現在位置まで移動
>という感じですね。

xtocolumn関数とytolineno関数でx,yからcolumn,linenoへの変換するという方法
もあります。
どちらでもできると思いますが、#l=ytolineno(seltopx,seltopy);とすると簡単
かもしれません。

[ ]