-
Notifications
You must be signed in to change notification settings - Fork 11
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
WindowsのgVimでスクロールするとゴミが残る #715
Comments
お手数ですが |
いくらか引用させて頂きました。問題ありましたら消しますのでご指摘下さい。 |
gist に置いておきました。 |
うむ。僕の環境では再現しなかったでです。 |
僕の環境でも再現しませんでした。 |
@yoheie 何かオプションが絡んでませんか? |
私はメイリオを使っていたときにその問題に悩まされた記憶があります。 |
あらためて確認しましたところ、全く同じ設定でも別のPCでは問題が発生しませんでした。 特定の環境でしか発生しないことが分かりましたので、まずは私の方で環境側の要因を調べてみます。 |
経過報告です。 現時点で問題が発生する PC は 2台、発生しない PC は 2台です。 4台とも Windows 7 32bit です。 問題が発生する 2台目の PC では、ホイールスクロールの行数は 3行で、表示行数が6~38行のときに発生します。 guifont は下記を試しましたが、どのフォントでも発生します。
|
renderoptionsでDirectX使ってますか? |
ああ |
@yoheie 関係ないかもですが、グラフィックカードのメーカー(チップ)やドライバーのバージョン番号って、わかりませんかね? 発生する環境には、何か共通項があるんじゃないかと推測しています。 |
って、これ関係あるんじゃないかな… 綺麗に分かれてるんだし。 |
すみません、その後調べていたらUltimateの1台でも出ました… |
問題が出る環境:
問題が出ていない環境:
でした。 |
つまり Intel か。私もあとで試してみます。 |
とりあえず以下の環境で試したが再現しなかった (´・ω・`)
ドライバーのバージョンかしら? |
ちなみに最新のドライバーは 15.X とかみたいw |
考えられるのは
といったところでしょうか。 |
@yoheie マウスはOEM提供ドライバでしょうか?物によっては WM_MOUSEHWHEEL だったりスクロールバーにメッセージを送ったりする物だったり色々だった気がします。 |
64 bit 版で起きてるので環境投下します。
マウスのドライバは OS のをそのまま使ってるみたいです。 |
マウスのドライバは、発生しないPCと発生するPCのうちの1台はメーカー独自、残りの2台はWindows標準のものです。 別の要因、あるいは複合的な要因である可能性を考えて、私の確認した4台で発生する環境と発生しない環境の相違点を調べてみました。
が候補として挙げられるかもしれません。 |
ご報告が遅くなってしまいましたが、
これらにつきましては未インストールのPCで発生することを確認しました。 |
だいぶ経ってしまいましたが追加情報です。
|
すみません、間違って閉じちゃったので開き直しました… |
たぶん家のノートで再現しなかったの、ホイールを使わなかったからだと思います。 |
@yoheie 👍 素晴らしい! |
てかこのまま vim-dev に持って行ってはたして取り込んでくれるだろうか |
@mattn 皆で「俺のPCでも起きてて困ってたんだけど、このpatchで直ったぜ!Awesome!!」射撃しましょう! |
とりあえず僕がやったこと
しかもこの GetPixel、書き直した位置(X_FILL/Y_FILL)じゃないと直らない。 |
gui_update_cursor() の最後だと、スクロールと関係ないときにも ScrollWindowEx() ですが、 gui_mch_delete_lines()・gui_mch_insert_lines() からしか |
スクロールメッセージを受け取ったら直接は画面更新せずに curwin なんかの内部状態を更新してその後 update_screen() あたりから画面更新用のメッセージが生成 (screen_del_lines()のout_char("\n")) されて gui_write() から呼ばれます。私もよくわかってませんが。 |
回避方法ですが 'renderoptions' で directx を指定すると発生しなくなるかもしれません。 |
うちのマウス、タッチマウスでスクロールが良い感じでピーキーなので 参加できなくて寂しい |
私の環境ではこの方法でも回避できませんでした。 パッチですが、 @ynkdir さんのご指摘どおり ScrollWindowEx() の直前で行うようにしてみました。 |
いちおう確認したいんですがenc=utf-8とttfフォントも指定しましたか |
よさげに思います。 |
gvim.exe -u NONE -N で起動後 enc・guifont・renderoptions 全てをそのとおり |
@yoheie patch&メール内容問題ないと思います。:+1: |
directx が有効だと問題が発生しないようなので、intel_gpu_workaround()の先頭に
もう1点気になる点として、この問題、16bit Windowsでは発生するのでしょうか。 |
あ、encとフォントもチェックしないとダメですね。 |
これでどうでしょう。
|
問題があるとかでなければチェックしなくてもいいかなと思いますが。お好きなほうで。 |
GetTextMetrics() と GetPixel() の処理時間がどのくらいか分かりませんが、フォントまで調べる必要は無いのではないかという気がします。 |
GetPixel は何かを変更するAPIでもないし、GetTextMetricsの方が明らかに計算量が多いので、encとdirectx だけ避けておけばいいと思います。 |
全部の条件が揃ったときだけ return したいので、フォントのチェックだけ除くというわけにはいかないかと。 |
👍 |
パッチもすっきりで良いですね。 |
7.4.869 で取り込まれました。 |
@yoheie 👍 お疲れ様でした。 |
🎉 |
㊗️ |
WindowsのgVimでホイールスクロールすると、別の行の文字がゴミとして残ってしまう場合があります。
カーソルがいた場所にあった文字が、マウスホイールでスクロールした後の場所に表示として残ってしまっているようです。
確認環境:
確認手順:
表示行数が一定の範囲内のとき発生するようです。
私の環境ではホイールスクロールの行数が5行になっていて、表示行数が8行〜33行のときに発生しています。
_vimrc・_gvimrcは消した状態でも発生しています。
The text was updated successfully, but these errors were encountered: