Emacs26.1が5月28日にリリースされました。 いくつか大きな新機能・変更点を挙げておくと、
- 限定的なLispスレッドの導入(協調的にマルチタスクができる)
- X上でのちらつき防止のためのダブルバッファ対応
- 行番号表示をネイティブサポート(プラグインでのサポートに比べてパフォーマンスが向上)
- 行単位での水平スクロール(今まではスクロールすると画面全体がスクロールした)
となっています。
この中で、今回の話はダブルバッファ対応に関係しています。
非端末上のEmacsのカーソルは、設定次第で点滅させることができます。 私のEmacsも点滅する設定になっているのですが、Emacs26.1へのアップデート直後から、カーソルの点滅が異常でした。 通常は点灯したり消灯したりを一定の比率で繰り返すのですが、不規則な点滅とでも表現すれば良いのでしょうか、点灯が長く続いたり、一瞬だけカーソルが点灯して後は全く見えなくなってしまったりと、挙動が変です。 確認のためにEmacs25.4に戻すと、カーソルは正常に動作します。
しばらく原因を探った結果、Emacsのダブルバッファリング対応が悪さをしていると分かりました。 手元の環境では、今までにEmacsでちらつきを経験したこともなく、またそもそもXにdbe(Double Buffering Extension)もロードしていませんでした。 そのため、今回から導入されたダブルバッファリングを禁止することで、問題を解決できました。
ダブルバッファリングを禁止するには、起動時に読まれるinit.el
ファイルなどに以下のように記載するだけです。
(set-frame-parameter nil 'inhibit-double-buffering t)
これでうまく動作するようになりました。