Mac OS X で Emacs のビープをビジュアルにすると中央に出る変な表示を消す|visible-bell ring-bell-function

今回は Mac OS X 上での Emacs についてです。るびきちさん@日刊Emacs 2016-09-05の記事に記載がありましたね。

現在、 GNU Emacs For Mac OS Xの Emacs ver24.5-1を使っています。で、いつの頃からか少し気になる症状が出てきました。例えば先頭行でC-pを押すと、ウィンドウ中央になにやら他の行を拡大したような四角い領域が表示されます。文面ではわかりづらいと思うので、キャプチャしてみました。こんな感じ。

もっさりする Emacs For Mac OS X

変な表示が出る Emacs For Mac OS X

なにやら中央に変な表示がされるのはわかると思います。なんだこりゃ。

まずはバグ(というか問題箇所)の特定ですね。手始めに -Q オプションをつけて起動してみると、再現しません。ということは、なにか初期化ファイル(.emacs, .emacs.d/init.el)の設定に問題があるのではと考えられます。ここまで絞れればは二分探索の出番ですね。「二分探索?なにそれ?」と思った人はこのページの末尾を見てから、ググってください。二分探索を知らないとデバッグに死ぬほど時間かかりますですよ。

話を戻して、問題箇所の特定です。結論から言うと、下記のところが悪さしていました。「べっ」ていうビープ音が嫌だったのでそれを抑止するための設定です。


;; Beep をビジュアルに設定.
(setq visible-bell t)

Windows7 や Ubuntu では同じ設定でも、今回の現象は見たことないので、 Mac OS X だけの問題かなと思います。
で、今回採用した解決方法は下記の通り。ビープを無視しちゃいます。


;; Beep をビジュアルに設定.
;; (setq visible-bell t)

;; Beep を無視. エコーエリアにはメッセージが表示される.
(setq ring-bell-function 'ignore)

これにて問題の変は表示はされなくなりました。お疲れ様でした。

もし、初期化ファイル(.emacs, .emacs.d/init.el)をいろんなOS環境で共有している場合は、下記の記事を参考に設定を分けるのもいいかもしれませんね。

Emacs の設定ファイルを複数環境で共有する方法|user-login-name
Emacs を使うなかで設定ファイル(通称 .emacs)を複数の環境で共有したい場合があります。複数のOS(Windows & Linux など)で1つの .emacs を共有する時や、 tramp...

以上、GNU Emacs For Mac OS X でビープをビジュアライズするとビープ発生時に画面中央に変な表示がされることがある問題の回避方法でした!

バグの箇所の特定にWikipediaのでバッグのページには「二分探索を使わない場合の探索時間が最大tだとすれば、二分探索を使った場合の探索時間は最大log2 tである」とあります。ようは二分探索超早い!てことです。1,000,000 箇所怪しいところがあっても、二分探索ならたった20回の試行で特定できますよ!