helm 下执行 describe-* 的时候不能按 C-j 预览?

比如 M-x

m-x-persistent-action-1

在弹出窗口顶端有提示「C-j: Describe this command (keeping session)」,按下之后临时弹出 *Help* 窗口:

m-x-persistent-action-2

describe-{variable, function} 的时候 C-j 变成 DoNothing 了:

nothing-for-describe-variable

我试了一下早期的 helm-20190331.750 按 C-j 是有相应的 persistent action 的。

找到原因了。

@thierryvolpiattoAllow minibuffer completion using emacs style · emacs-helm/helm@070adab · GitHub 明确删除了:

(helm-completing-read-handlers-alist): Now completion on symbols use emacs style with default handler, remove entries using helm-completing-read-symbols.

自己加回去就可以了。

不知为何要删除这些设置,留着会有什么影响?多亏了 git 二分法帮我迅速定位问题所在。

不清楚所谓的 emacs style completion-styles 是什么情况?很久前,我这里的 Helm 体验变得很差,不知道是 Helm 还是 Emacs 还是两者的缘故,匹配和之前不同了,后来我设置了 (setq helm-completion-style 'flex),到现在也没搞清楚怎么回事。

这个我也困惑了一阵子。同一个 style 竟然表现不一致,最后只好分开设置:

(setq helm-completion-style 'helm-fuzzy)

(define-advice helm-M-x (:around (fn arg) set-emacs-completion-style)
  (let ((helm-completion-style 'emacs))
    (funcall fn arg))))

现在不知道有没有修复。

试了一下 flex'(flex) (后者是作者推荐的写法) 都有问题。会导致 kill-buffer 排序颠倒,默认选中项竟然不是当前 buffer, 刚刚已经错杀好几个 buffer 了:

emacs-27-helm-completion-style-flex

这个问题竟然又是在 070adab3a18def6f9a602cad98ba9197e106606f 引入的😓