确实可以~感谢。
另外,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都是提供文档的后端加的,你有什么需求吗?
我好奇一下。。因为我试了lsp
和elpy
的文档,貌似都没有fontlock。。另外一个小问题就是,没文档的会显示个空白的格子。可能原来在minibuffer的时候也显示,只是看不到。。
辛苦你了 遇到这么多问题。这个估计是因为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
才有加上去的。
顺带说一下,如果可以把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各种小细节上,提供一个开箱即用的附加功能这样。
我不是说要把flycheck这些加到这个包里。。只是感觉posframe
是相对底层的API,如果有个高层的 API 像lsp-ui
这样的,很多包就能直接调用了~
你说的也有道理。如果你觉得确实有用,可以看看我的代码,抽取底层的部分做一个新的包。
其实我没看过posframe posframe自带这些功能吗
GitHub - tumashu/posframe: Pop a posframe (just a child-frame) at point, posframe is a **GNU ELPA** package! 可以研究研究,个人感觉 posframe 包装的还是不错的, 老王卖瓜