movetolinenoの桁番号 と column のオリジNo.24925
Yoshi0815 さん 08/05/16 18:40
 
ともに「エディタ的」で扱う命令ですが、

movetolinenoの桁番号 → 1オリジン
column → 0オリジン
となっているようです。

例えば column と lineno を退避して movetolineno で元の
位置に戻ろうとするとずれてしまいます。

以下の命令はカーソルが移動しないはずですが、1文字分左に
移動してしまいます。
movetolineno column, lineno;

1オリジンの方が正しいと考えてよろしいですか?

[ ]
RE:24925 movetolinenoの桁番号 と columnNo.24926
h-tom さん 08/05/16 20:18
 

h-tom です。

>ともに「エディタ的」で扱う命令ですが、
>
>movetolinenoの桁番号 → 1オリジン
>column → 0オリジン
>となっているようです。
<省 略>
>1オリジンの方が正しいと考えてよろしいですか?

ヘルプに書いてありますよ。
>movetolinenoは、XY座標の代わりに「エディタ的」に計算した行番号と桁番号で
>カーソルを移動します。
>  movetolineno 桁番号, 行番号
>桁番号は、タブ文字は1つとして数えた番号です。movetoと違い、桁番号も行番
>号も1から始まります。
>たとえばファイルの先頭に移動するには、
>  movetolineno 1, 1;
>です。ちなみに、columnの返す値は0から始まるので注意してください。

[ ]
RE:24926 movetolinenoの桁番号 と columnNo.24927
Yoshi0815 さん 08/05/16 21:40
 
ご回答ありがとうございます。


ヘルプの内容は理解しています。

ただ、「エディタ的」な桁番号が0オリジンなのか1オリジンなのか
命令によって違ってしまっているので、統一すべきかと思います。

ワープロ的な座標を表す(x, y)に対するエディタ的な座標を表す
値を(column, lineno)と考えているんですが、columnはエディタ的
な値ではないんですかね。

movetolineno(column, lineno)は不可で
gettext2(column, lineno, 〜)は可

これだと座標指定の概念がわかりづらく、混乱してしまいます。
現位置のエディタ的な桁番号の取得もできないですし。

[ ]
RE:24927 movetolinenoの桁番号 と columnNo.24930
Yoshi0815 さん 08/05/16 23:00
 
エディタ的だと他にも問題が見つかったので、断念しました。
折り返しを意識しなくていいのは魅力的でしたが。。。

上記の訂正
・gettext2(column, lineno, 〜) は gettext2(x, lineno, 〜)
・x はエディタ的な値ではない

お手数ですが、config文で折り返しを「最大」にできる仕様の検討を
お願いします。まれに2000では足りないケースがあります。

[ ]
RE:24930 movetolinenoの桁番号 と columnNo.24931
Yoshi0815 さん 08/05/16 23:01
 
再訂正
x はエディタ的な値ではない → x はワープロ的な値ではない

失礼しました。

[ ]
RE:24931 movetolinenoの桁番号 と columnNo.24934
Yoshi0815 さん 08/05/16 23:48
 
見つかった問題書いておきますね。
フリーカーソルモードで moveto は改行の後ろに移動できるが
movetolineno は移動できない。

仕様的に移動できても問題ないならご検討お願いします。

[ ]
RE:24934 movetolinenoの桁番号 と columnNo.24935
アルビレオ さん 08/05/17 04:11
 
ユーザーのアルビレオです。

>見つかった問題書いておきますね。
>フリーカーソルモードで moveto は改行の後ろに移動できるが
>movetolineno は移動できない。
>
>仕様的に移動できても問題ないならご検討お願いします。

問題があると思います。

movetoの場合の桁位置は折り返し桁数より大きくなることはありえないので、折
り返しより大きな数字を指定しても折り返し桁数以内に丸めることができます。
それに対してmovetolinenoは折り返し桁数より大きな数字を指定することも可能
です。
たとえば80桁折り返しでテキストは40桁までしかないとき、movetolinenoで100
桁目を指定したらカーソルをどこに移動させればいいのでしょう。

「行末を含んだ行以内であれば行末以降にも移動可能に」という方法もありそう
ですが、折り返し桁数には依存しないはずの「エディタ的数え方」に折り返し桁
数によって変化する挙動をさせるのは仕様として美しくないし、それによるトラ
ブルも考えられます。

[ ]
RE:24935 movetolinenoの桁番号 と columnNo.24936
きいろいまふらあ さん 08/05/17 08:02
 
きいろいまふらあです。
アルビレオさんのご指摘に追加させていただきます。

>ユーザーのアルビレオです。
>
>>見つかった問題書いておきますね。
>>フリーカーソルモードで moveto は改行の後ろに移動できるが
>>movetolineno は移動できない。
>>
>>仕様的に移動できても問題ないならご検討お願いします。
>
>問題があると思います。
>
>movetoの場合の桁位置は折り返し桁数より大きくなることはありえないので、折
>り返しより大きな数字を指定しても折り返し桁数以内に丸めることができます。
>それに対してmovetolinenoは折り返し桁数より大きな数字を指定することも可能
>です。
>たとえば80桁折り返しでテキストは40桁までしかないとき、movetolinenoで100
>桁目を指定したらカーソルをどこに移動させればいいのでしょう。
>
>「行末を含んだ行以内であれば行末以降にも移動可能に」という方法もありそう
>ですが、折り返し桁数には依存しないはずの「エディタ的数え方」に折り返し桁
>数によって変化する挙動をさせるのは仕様として美しくないし、それによるトラ
>ブルも考えられます。

さらに、movetolinenoはタブを1文字として扱うことになっているので、文字が
既に入力されている領域でないと移動先の座標が確定しないのではないかと思い
ます。

[ ]
RE:24930 movetolinenoの桁番号 と columnNo.24937
h-tom さん 08/05/17 08:43
 

h-tom です。

>お手数ですが、config文で折り返しを「最大」にできる仕様の検討を
>お願いします。まれに2000では足りないケースがあります。
Ver.6以降なら、config文で「最大」に指定できますよ?

座標系に関しては、movetolinenoのみ、気をつかえばいい話のような気がします。

[ ]
RE:24937 movetolinenoの桁番号 と columnNo.24943
秀丸担当 さん 08/05/19 09:39
 

>>お手数ですが、config文で折り返しを「最大」にできる仕様の検討を
>>お願いします。まれに2000では足りないケースがあります。
>Ver.6以降なら、config文で「最大」に指定できますよ?

config "xAutoAdjustOrikaeshi:2";
で設定上の「最大」にはできますが、これは上限の2000になるという意味の最大
です。
無限という意味の最大にはいまのところできません。
上限を増やすことは次期バージョンで検討していますが、無限にすることは内部
的な仕組みを変えなくてはいけないので、簡単にはできないかもしれないです。

[ ]
RE:24936 movetolinenoの桁番号 と columnNo.24944
秀丸担当 さん 08/05/19 09:39
 

>movetolinenoの桁番号 → 1オリジン
>column → 0オリジン
>となっているようです。

確かに分かりづらいので、moveto2 というのがあれば統一感があっていいでしょ
うか。
そういう感じで将来バージョンで検討してみようかと。

フリーカーソル位置に移動できないのは、アルビレオさんやきいろいまふらあさ
んが言われるような理由もあります。

改行以降は半角空白に換算した位置にしてやってできないこともないと思います
が、
折り返しを無視した考えのマクロを作るのに、折り返しの有無によって改行以降
の有効なフリーカーソルの量が変化するマクロを考えるというのは矛盾している
というか、使い道が無いかもしれないです。

[ ]
RE:24944 movetolinenoの桁番号 と columnNo.24951
Yoshi0815 さん 08/05/21 00:00
 
みなさんレスありがとうございます。

> 確かに分かりづらいので、moveto2 というのがあれば統一感があっていいでしょう
>か。
> そういう感じで将来バージョンで検討してみようかと。

なるほど。それだと既存のマクロにも影響与えないですね。
オリジンを意識しなくて済む moveto2 を作っていただけるとわかりやすくて助かり
ます。


> フリーカーソル位置に移動できないのは、アルビレオさんやきいろいまふらあさ
> んが言われるような理由もあります。

改行の後ろでも column の値は求まっていたので、その点は問題ないかと思いました
が、
確かにワープロ的な値の方に矛盾がでますね。
マクロを試しているうちにバグらしきものを見つけたので新規投稿でお伝えしますね。


> 折り返しを無視した考えのマクロを作るのに、折り返しの有無によって改行以降
> の有効なフリーカーソルの量が変化するマクロを考えるというのは矛盾している
> というか、使い道が無いかもしれないです。

過去に作成したマクロをワープロ的からエディタ的に作り変えていました。
矩形選択する際、選択範囲の column の最大値でという用途で使いたかったんですが、
改行の後ろに移動できないのと、さらに「折り返しを意識しない矩形選択」が
不可だったため断念しました。

「折り返しを意識しない矩形選択」もお願いしたいところなんですが、実装は難し
すぎですよね。ニーズも少なそうですし。

[ ]
RE:24943 movetolinenoの桁番号 と columnNo.24952
Yoshi0815 さん 08/05/21 00:01
 
> config "xAutoAdjustOrikaeshi:2";
> で設定上の「最大」にはできますが、これは上限の2000になるという意味の最大で
>す。
> 無限という意味の最大にはいまのところできません。

65535だったと勘違いしていました。


> 上限を増やすことは次期バージョンで検討していますが、無限にすることは内部
> 的な仕組みを変えなくてはいけないので、簡単にはできないかもしれないです。

無限ではなくてもある程度大きい値の方が助かるので、よろしくお願いします。

[ ]