2018年5月28日月曜日

helm-default-display-bufferの変更で手元のhelm-swoopが使用不能になったので修正

2018-05-28現在の最新のhelmにupdateした所、helm-swoopが
Symbol's value as variable is void: helm-swoop-pattern
なるerrorを吐くようになったので原因を調べてみた。

順当にhelm-swoopのgithubのpageを見てみる


今年(2018)の1/22に:

cf. [Symbol's value as variable is void: helm-swoop-pattern · Issue #123 · ShingoFukuyama/helm-swoop](https://github.com/ShingoFukuyama/helm-swoop/issues/123)

そのものずばりのtitleのissueがfileされている。この中で触れられているように、helmのcoreの方でhelm-default-display-bufferに修正が入って、それが影響しているとのこと。その後のdiffなどを見ている限り、vanillaのまま使っているなら対応済みのようだ。

原因と対策


個人的には、helm-swoop実行時にfull widthで表示させるために、問題になっているhelm-swoop-split-window-functionを自前で設定していたのが原因でerrorが出ていた。helm-default-display-bufferの変更に合わせて適当にargumentを追加しておく:

*** before ***

-  (setq helm-swoop-split-window-function
- '(lambda (buffer)
-    (helm-default-display-buffer buffer)))

*** after ***

+  (setq helm-swoop-split-window-function
+ '(lambda (buffer &optional resume)
+    (helm-default-display-buffer buffer)))

もしかしたら&optional resumeじゃなくて&rest resumeにしておいた方が、今後またargumentsに変更があった時に対応しやすいかもしれない。

おまけ1. 原因の特定の仕方


*scratch* bufferで:

(setq debug-on-error t)
(setq helm-swoop-pattern "")

などとお膳立てした後に徐にhelm-swoopを起動するとbacktraceが見られる。

自前の設定が問題だというのはこれで分かった。

おまけ2. helm-occur


helm-swoopはとても便利に使っているが、そのalternativeとなるものも存在している。その一つがhelm-occurで、helm-occurを実行する他に、isearchからもhelm-occur-from-isearchを使えば呼び出せる。

helm-swoopはメンテの頻度が低いとか (だからと言って本家にも取り込まれなさそうだ)、実行速度に問題があるとしてhelm-occurを勧める向きもある。機能の全てではないにしろ、候補の選択に伴ってcursor positionも移動するような設定も可能みたいなので一応紹介はしておく。

ちなみに設定すればmigemoも使える。


0 件のコメント:

コメントを投稿