给eglot加了个childframe的显示模块

作者好像不想加childframe的支持,所以我从lsp-ui抄了个childframe显示的模块到eglot:GitHub - casouri/eldoc-box: childframe doc for eglot and anything that uses eldoc

有兴趣的用一下看看有没有bug。

如果有人用,帮我看一下childframe有没有边框?我这里好像显示不出来。

4 个赞

默认是没有边框的,大概是这个样子 111

用鼠标在任意地方点击一下就有了边框,大概是这个样子的 222

改变窗口大小时,这个 childframe 不会消失但也不会改变位置

好滴,谢谢。还是不清楚为啥没有边框,有可能是mac的锅。

这个有困扰吗?

之前试了的时候,总是觉得 childframe 应该跟谁窗口改变位置或者直接消失,现在想想其实你这种也是一种设计思路。

PS: childframe 的边框计算的时候好像有点问题,当这个 childframe 太大而 emacs 本身的窗口并不是很大的时候,childframe 的左边一部分被遮挡了:

跟窗口一起改变的话比较麻烦,得不偿失。childframe被挡住是因为一些操作系统不允许childrame占用主窗口以外的空间。你可以设置eldoc-box-max-pixel-widtheldoc-box-max-pixel-height。说起来我可以改下代码支持eldoc-box-max-pixel-width设为函数,这样你可以自定义一个函数动态地设置最大宽度/高度。

位置可以更改吗?好像只会在右上角显示。

另个,当光标位置在函数参数而非函数名的时候,显示内容似乎不正常?

我试了一下,确实是这样,但是把eldoc-box-hover-mode关闭,eldoc在echo area显示的就是不全的内容。所以这个跟eldoc-box没关系。你可以去eglot或者pyls的主页发issue。

只有一个窗口会在右上角显示,两个并列的窗口的话会在光标所在窗口的另一边显示,应该不会覆盖光标。你想改位置是因为什么问题?

你的边框没问题吗?你的Emacs和mac版本是多少?

边框问题是指…?是指窗口太小childframe跳到外面吗?

窗口放大后依旧正常显示在右上角。

什么时候会有两个并列窗口显示呢?我比较倾向于在当前光标的位置显示附近显示,例如: 函数签名的话,可以在光标上一行那样。如果是文档的话,可以在光标下一行或者右侧附近显示。像我第一个贴那样,签名在那么右上角,签名内容少显示了还要把视线移那么远看。。。

macOS: 10.14.2 emacs:GNU Emacs 26.1.90 (build 1, x86_64-apple-darwin18.2.0, Carbon Version 158 AppKit 1671.1) of 2018-11-28

哦看到边框问题了。默认就有边框的,不用点。

补个图,像vs这样。

个人意见是,在echo area附近的好处是不用把视线往上,或者在光标附近也一样。在右上角的话,就有点远了。。这也是我为什么不太喜欢lsp-ui的原因,窗口太大的话,要视线右线才看到。直接用flycheck-posframe的话,瞬间就能看到。

有道理,我会加入一个选项。

我个人不喜欢光标下现实是因为会挡住,不方便。VSCode是怎么解决的?是点一下其他地方,文档就会没还是什么?

个人感觉在光标下显示主要是和Company显示比较一致。Company-quickhelp的话在选项右侧显示。和vscode也一样。

我看了一下vscode,它的文档显示是根据鼠标,而不是光标。鼠标移去就显示,移走就消失。窗口大小改变不影响显示或消失。只要鼠标下面有symbol,就会一直显示。

我加个C-g隐藏的选项吧。鼠标对Emacs用处不大。

我倒是觉得隐藏不隐藏不重要。。光标下面有符号就显示好了。

我是不知道你啦……对我来说下面有东西遮挡挺烦的。

这东西确实个人喜好。。顺便问下边框颜色可以改变的不?

1 个赞

可以的

位置选项加了通知一下哈谢谢

自从lsp出来后没赶流行了,请教一下,eglot是类似lsp-mode的东西么?连接lsp server作为interface给出相应语言补全等功能?