4

アップデート

この問題は、Mountain Lion から Mavericks にアップグレードし、Emacs を 23.4 から 24.3 に更新すると解消されました。

更新終了

.emacs ファイルを含む

(set-foreground-color "white")
(set-background-color "black")

(setq mouse-wheel-scroll-amount '(1 ((shift) . 1) ((control) . nil)))
(setq mouse-wheel-progressive-speed nil)

ステップを減らして上下にスクロールすると、奇妙なパターンが表示されます

縦線

パターンの 1 つを拡大すると、

1本の垂直線を拡大

この問題はEmacs 22、23、そして現在はいくつかのバージョンの OSX (Mountain Lion を含む) の 24 に存在します。既知のレンダリング バグですか? 修正はありますか?

フリンジリナムも変更するという提案は私にとってはうまくいきません。他にどこを見ることができますか?

デフォルトの白い背景と黒い前景を使用すると、これらの線は表示されないか、(私には) 知覚できません。

この問題の最もやっかいな点は、再描画 (Cl) を行ってもきれいなテキストにならないことです。

4

1 に答える 1

1

この問題は、OS X の LCD フォント スムージング アルゴリズムと emacs がスクロールの実装に使用するアルゴリズムとの相互作用に関連しています。

下の図は、フォント スムージングをオフ (左) とオン (右) にしたものです。この設定は、システム環境設定\一般にあります。どちらの場合も、プログラムを 1 行スクロールしました。OS X がフォント スムージングをオンにして「@」を描画すると、「@」専用のピクセルだけでなく、隣接する (空白の) 文字の青いピクセルも使用されます。

emacs がスクロールするとき、変更する必要があると判断した文字のみを変更します。文字が空白で、スクロール後も空白のままである場合、文字は変更されません。この最適化は 2013 年でも有効です。つまり、2 文字が空白であることをテストすることは、1 文字を描画するよりもコストがかかります。しかし、この最適化は現在ではほとんど必要なく、バグのある表示になってしまいます。

上記の仮説が成り立つ場合、次の問題は最適化をオフにできるかどうかになります。各スクロールでフルスクリーンを再描画するか、少なくとも空白以外の文字に隣接している場合は空白のままの文字を再描画するようにemacsに依頼することは可能ですか?

フォント スムージング オフ (左) とオン (右)

もちろん、単純にフォント スムージングをオフにすることもできます。拡大された画像は、平滑化されていない画像の方が優れていることを示唆することさえあります。実際には、フォントが自然な (拡大されていない) サイズで表示される場合、スムージングによって文字がはるかに読みやすくなり、大きなフォントを使用する必要がなくなります。

「c();」の両側のパターン 下の画像はバグと一致しています。OS X は、左側に青のピクセルを使用し、右側に赤/黄褐色のピクセルを使用します (おそらく、これはディスプレイの RGB パターンに関連しています)。スクロール時に残った垂直線は、スクロールされた文字の左側または右側から抜けたかどうかに応じて、青または赤/黄褐色/レンガのいずれかになります。

左側に青いヒント。 右側の赤いヒント

アップデート

この問題は、この nightlyで解決されました。Emacs 24.3.50.1 によって生成された拡大c();図は、フォント スムージングが Emacs 24.3.1 によって生成されたものと同じままであることを示しています。しかし、出力は同じではありません。テキストの各 2 行の間に、少なくとも 1 行のピクセルの余分な水平行があります。

于 2013-05-15T16:19:11.440 に答える