1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Windows10上のSpacemacsでHelm Git Grepが頻繁に固まる

Last updated at Posted at 2020-03-01

概要

Windows10でSpacemacsを使っている時、Helm Git Grep ( Space g /)で文字の高速タイピングをすると高確率でフリーズする。

1文字打つ度に反応速度が凄い (デフォルトは0.01秒っぽい)ので、高速タイプによって処理が衝突したりしているのかもしれない。

1文字ずつ反応を確かめながら打たねばならずストレスが凄い。

ひとまずの対処

Spacemacsの設定ファイル .spacemacs ( Space f e d)の dotspacemacs/user-config ()内で、Helmの入力に対する反応速度を操作する。

具体的には以下をやる。

  • Helmのミニバッファ ( Space f fなど)が開いたら追加の判定を始める
  • もしHelm Git Grepのバッファなら、入力から反応までの遅延時間 helm-input-idle-delayを0.5秒に遅らせる
  • それ以外のバッファなら、 helm-input-idle-delayを0.01秒に戻す

以下のように追記する。

(defun dotspacemacs/user-config ()

  ;;; Helm

  ;; 入力への反応時間を `Git Grep`のときだけ遅らせ、それ以外では戻す
  (add-hook 'helm-minibuffer-set-up-hook
            (function (lambda ()
                        (if (equal (helm-buffer-get) "*helm git grep*")
                            ;; (message "Helm Git Grepですねぇ!")
                            (setq helm-input-idle-delay 0.5)
                          (setq helm-input-idle-delay 0.01)))))

)

毎回書き換えが起こるのはつらいな、と思い、こういう方法もあるかも。
(バッファ名がhelmじゃないなら書き換え自体しない)

(add-hook 'helm-minibuffer-set-up-hook
            (function
             (lambda ()
               (let ((buffer-name (helm-buffer-get)))
                 (if (string-match "*helm.*" buffer-name)
                     (if (equal buffer-name "*helm git grep*")
                         ;; (message "Helm Git Grepですねぇ!")
                         (setq helm-input-idle-delay 0.5)
                       (setq helm-input-idle-delay 0.01))
                   nil)))))

場当たり的に対処するなら

helmの設定に helm-input-idle-delayを追加すれば、以下のように遅延時間を (全体的に)0.2秒遅らせることもできる。

dotspacemacs-configuration-layers
'(
  ;; ここ
  (helm :variables
        helm-input-idle-delay 0.2)

  )

ただし、これだと Ctrl + lでのディレクトリ移動など、通常のHelm操作までラグる。

解決までの経緯

dotspacemacs-which-key-delayではダメ

最初にSpacemacs自体の設定で解決することを考えたが、 dotspacemacs-which-key-delayでは対象範囲が広すぎた。

しかもSpacemacs全体の反応速度は落ちるくせに、Helm Git Grepは元気に反応してしまう。

helm-input-idle-delayは有効

次に、各レイヤーの設定を見た。幸いHelm layerには helm-input-idle-delayの存在を確認できた。

定義ジャンプすると、初期値は0.01秒っぽい。

これで急場はしのげたが、Helm全体の反応速度を落としてしまうので良くない。

helm-grep-input-idle-delayが使えない

巷でやり玉に挙げられていたのは helm-grep-input-idle-delayだった。

cf. Emacs helm grep flickering

定義を見るとこんな感じで、grepのときだけ別途に遅延させてくれるらしい。

(defcustom helm-grep-input-idle-delay 0.6
  "Same as `helm-input-idle-delay' but for grep commands.
It have a higher value than `helm-input-idle-delay' to avoid
flickering when updating."
  :group 'helm-grep
  :type 'float)

……が、Spacemacsではどうやら機能していなかった :innocent:

helm-input-idle-delayを動的に変えることに

どうしようもないので、バッファがHelm Git Grepのときだけ一時的に遅延時間を変えられないか、と考えていた。その結果、生まれたのが冒頭のアレ。

バッファ判定はどのタイミングでフックすればできるのか、そのバッファ名をどうやれば取得できるのか、自力で調べるのがとてもつらかった。

もっと良い方法もあるだろうが、これ以上は頑張れない。。。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?