给eglot加了个childframe的显示模块

确实可以~感谢。

另外,childframe的最大宽度可否可以加个参数设置一下,或者自动设成不超当前window(可能frame更合适)的范围内?

这个也有呀,你甚至可以设置一个函数即时计算最大宽/高

我把移除eldoc-pre-command-refresh-echo-area的代码加eldoc-box-hover-at-point-mode了。

点赞。。大神都不用睡觉的吗。。

其实就一行代码,只不过这两天搬家比较忙。说到大神我还差得远嘞。

This feature may included in VSCode

顺便问下,childframe里文档的fontlock渲染需要设置什么吗?

eldoc-box不做修改,font-lock都是提供文档的后端加的,你有什么需求吗?

我好奇一下。。因为我试了lspelpy的文档,貌似都没有fontlock。。另外一个小问题就是,没文档的会显示个空白的格子。可能原来在minibuffer的时候也显示,只是看不到。。

34

辛苦你了 :joy: 遇到这么多问题。这个估计是因为lsp返回了一个空字符串作为文档。你试试用这个覆盖原来的函数:

(defun eldoc-box--display (str)
  "Display STR in childframe."
  (unless (equal str "")
    (let ((doc-buffer (get-buffer-create eldoc-box--buffer)))
      (with-current-buffer doc-buffer
        (setq mode-line-format nil)
        ;; without this, clicking childframe will make doc buffer the current buffer
        ;; and `eldoc-box--maybe-cleanup' in `eldoc-box--cleanup-timer' will clear the childframe
        (setq eldoc-box-hover-mode t)
        (erase-buffer)
        (insert str))
      (eldoc-box--get-frame doc-buffer))))

貌似可以了~谢谢。。

那么我把这个加到master


我平时不用lsp所以不是很清楚,不过一般eldoc后端都会加上font lock,eldoc-box就不画蛇添足了。

嗯,我看到README里有,所有好奇一下。发现应该是eglot才有加上去的。

:joy:顺带说一下,如果可以把eldoc-box里childframe部分的代码提出来,做成一个类似lsp-ui的模块就好了。这样可以比较好的方便eldoc, flycheck,flymake等含有xxx-display-function之类的模块调用,可以显示在当前光标下,也可以显示在右边,frame样式也像现在可订制。

谢谢你的建议,你说的这个有posframe的。我一开始只是觉得eglot在echo area显示文档跳来跳去实在蛋疼,想给eglot加一个类似lsp-ui的显示文档的附加功能,所以直接去lsp-ui 抄了点代码改吧改吧就用起来了(一开始叫eglot-doc,后来eglot的作者说可以把这个功能延展到eldoc上,我才改成eldoc-box)。因为只是简单的chilframe显示,也就没搞posframe。

这个包的定位我还是放在处理eldoc各种小细节上,提供一个开箱即用的附加功能这样。

2 个赞

我不是说要把flycheck这些加到这个包里。。只是感觉posframe是相对底层的API,如果有个高层的 API 像lsp-ui这样的,很多包就能直接调用了~

你说的也有道理。如果你觉得确实有用,可以看看我的代码,抽取底层的部分做一个新的包。

:grinning::grinning::grinning::grinning::grinning::grinning::grinning:

其实我没看过posframe :sweat_smile: posframe自带这些功能吗

GitHub - tumashu/posframe: Pop a posframe (just a child-frame) at point, posframe is a **GNU ELPA** package! 可以研究研究,个人感觉 posframe 包装的还是不错的, 老王卖瓜 :grinning:

1 个赞