-
Notifications
You must be signed in to change notification settings - Fork 163
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
折り返しされた際、文字数カウントが合わない #1233
Comments
複数行に折り返されたレイアウト行のうち、先頭と末尾のレイアウト行を除いた中間のレイアウト行数分だけカウントが少ないようです。 GetLengthWithoutEOL() を GetLengthWithEOL() - 1 に置換した影響かと>354033d#diff-8038a8583a5548b60ab7e451ea17113e レイアウト行は改行文字で終端しないことがありますから、無条件に -1 すれば実際より目減りします。 |
お見事、それ多分正解。 さて、どう直したものか。 |
LenWithEOL にすると CRLF が⒈文字になります(非互換)。元の通り LenWithoutEOL + EOLLen なら CRLF は2文字です。 |
PRを辿ってみました。 元ネタは高速化のために色々変えてるわけですが、方向性がおかしかったかというとそうでもないと思っています。GetLineStrが効率悪い感じなのはきっとそうなわけで。 どうしたらいいか。 思い付く感じでは、選択の始点(行・桁)と選択の終点(行・桁)を物理位置(行・オフセット)に変換して、一連のUNICODE文字列を取得してから一括でバイトシーケンスに変換してバイト数を求めたら速いんじゃないかな、とか。 |
ま、PRは、みんなでレビューしてるので共同責任ってことで、どうするかに集中しましょ(笑) 対処療法、選択範囲(行)の中に画面橋折り返し改行が何個あるか数えて足す。。。ああダメな直し方の予感w 内部実装わかってないのでどうすれば早いかには全然貢献できそうにないですが、 |
自分で書いといてスルーしてましたが、変なトコもう1つありました。
全角100文字を選択してるのに 201桁 とは、これ如何に。 桁=半角1個分を1とする幅の単位。全角は2桁になる。 全角100文字を桁数に換算した場合の期待値は200桁なので、ここもおかしいっす。 |
文字数カウントの話ですからキャレット位置は無関係です。 100文字選択しているのに「95 chars」。消えた5文字は全7レイアウト行のうち先頭と末尾の2レイアウト行を除いた5レイアウト行から、改行文字(※存在しない)の分として無条件に引かれた -1 × 5 です。 |
お、これ自分が入れてしまった不具合ですね。直さないと…。 |
#1241 が merge されて問題が解消したと思うので close します。 |
問題内容
100文字の日本語を入力した際、全選択でのステータスバーの文字数カウントが
折り返しなし: 100 chars
30桁で折り返し: 95 chars
となってしまいます。
再現手順
日本語改行無し文字列100文字にて折り返し無しで選択と、30桁設定後折り返しありにして、文字列選択。
再現頻度
OSDNより取り急ぎ転載(すいません、私の方で今未検証)
v2.3.2では未発生を確認済。
問題のカテゴリ
環境情報
v2.4.0
スクリーンショット
The text was updated successfully, but these errors were encountered: