[New Package] helm-symbol-hint 给 helm 的函数/变量候选项增加简短提示

Screenshot_2021-04-11_at_12_09_18_PM_helm-symbol-hint

helm 其实自带一个 helm-popup-tip-mode,不过它是显示文件的。我懒得去提交 pr,也不想把它搞复杂了,所以单独立一个项目,这样也方便维护。

hint 生成原则是:有文档显示文档(最关键的那一行),没文档显示函数原型,没文档的变量显示 Not documented

2 个赞

老铁可以参考ivy-richall-the-icons-ivy-rich的效果,途中看起来还是有不同。

起初有考虑过,但是感觉稍嫌密集,甚至还有点担心会拖慢 helm (毕竟 helm 性能不佳是有口碑的),所以先实现单条并且延迟显示。

如果事实证明我的担心是多余的,可以考虑作为可选项加入。

helm前期已经耗费大量时间准备好了,后面这点资源不算什么了,大不了显示当前函数/变量的文档。ivy-rich的经验看应该不是瓶颈。

我试了一下,在快速输入,候选列表不断变化的情况下,有点卡顿。

ivy 先天就比 helm 做得好,只要设置好 transformer 函数,它仅作用于显示区域(即便 M-x 总共有 5000 多项),不用操心翻页之类的问题。

helm 没有提供这个机制,所以它为了减少耗时,限制 M-x 只列出 100 项,它假定用户不会真的翻完 100 项,而是改为输入关键字缩小范围。可能我的电脑也不太好,反复取 100 项的文档也是有点耗时,如果仅取显示区域,需要自行处理翻页问题等等。

哦,原来helm底层是这么处理的,那就有点麻烦了

类似 ivy-rich 的效果已经实现有一阵子了,目前没发现啥大毛病:

大佬没用 selectrum 之类的吗?

selectrum 裸测感觉比 ivy 稍微迟钝一些,全配置估计还有许多地方需要调整,helm 也还没到不可用的地步。

对,我的感受也是。selectrum 生态还不够完善,很多东西都要自己做更多的配置,有些功能也不全,性能其实也不好说。我现在都是全套ivy配置,感觉很完善了,性能和功能都兼顾。

这两天实现了对 Imenu 的支持:

imenu-with-helm-symbol-hint

现在已不仅限于 describe-{variable,function}:

(defvar helm-symbol-hint-source-method-alist
  '(("Emacs Commands history" . helm-symbol-hint--symbol-summary)
    ("Emacs Commands"         . helm-symbol-hint--symbol-summary)
    ("describe-function"      . helm-symbol-hint--symbol-summary)
    ("describe-variable"      . helm-symbol-hint--symbol-summary)
    ("describe-command"       . helm-symbol-hint--symbol-summary)
    ("completion-at-point"    . helm-symbol-hint--symbol-summary)
    ("Imenu"                  . helm-symbol-hint--imenu-function-hint)
    ("describe-package"       . helm-symbol-hint--package-summary)
    ("package-install"        . helm-symbol-hint--package-summary)
    ("package-reinstall"      . helm-symbol-hint--package-summary)
    ("package-delete"         . helm-symbol-hint--installed-package-summary))
  "A list of (HELM-SOURCE . SUMMARY-METHOD).")
2 个赞