【高速化】Emacsのカーソル移動が重い?現在行ハイライトhl-line-modeに原因があるかも…

現在行をハイライトする global-hl-line-mode は、
当たり前すぎてもはや空気のようなマイナーモードだと思います。

しかし、これを有効にするとカーソル移動がけっこう重くなります。

Core i7でも重くなったと感じるくらいなので、
多くのマシンで影響がでることでしょう。

C-nで延々と下にカーソルを移動して描画が止まったら
重くなった証拠です。

原因は pre-command-hookpost-command-hook という
各コマンドの前後に実行されるフックです。

たくさんのパッケージを使っていると、
これらのフックにたくさんの関数が登録されるため、
どんどん重くなっていきます。

確かに便利なフックですが、多用すると
まるで足枷をはめながら動くことになります。

では、どうすればいいかというと、代わりに
run-with-idle-timer というアイドル時に実行される
タイマー関数を設定すればよいことです。

アイドル時に実行されるので、タイマーが実行される前に
次のコマンドを実行すればその間は関数が実行されません。

global-hl-line-modeを使う代わりに
タイマーを使ってみてください。

この設定で0.1秒後に現在行がハイライトされるようになります。

(defun global-hl-line-timer-function ()
  (global-hl-line-unhighlight-all)
  (let ((global-hl-line-mode t))
    (global-hl-line-highlight)))
(setq global-hl-line-timer
      (run-with-idle-timer 0.1 t 'global-hl-line-timer-function))
;; (cancel-timer global-hl-line-timer)

騙されたと思って設定してみてください。

ほんと、カーソル移動が軽くなりますから!!


本サイトは、広大なるEmacs界の道具としてあなたの役に立ちたいという純粋な奉仕で運営しています。 掲載しているコードは複写・転載など自由に使っていただいて構いません。 改良・MELPAパッケージ化していただけると最高に嬉しいです。

もし、うまく動作しないのならば rubikitch __at__ ruby-lang __dot__ org までメールしてください。

[応援お願いします]


このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

タグ

トラックバック&コメント

この投稿のトラックバックURL:

コメントをどうぞ

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このページの先頭へ