eglot补全提示问题

我在使用eglot的时候,发现有时候一些补全选项会错位,很奇怪,等到截上图的时候,发现有没有可能是中文的原因?有什么解决办法吗?

我觉得不是eglot的问题把,应该是你的补全框架的问题。

你用的是company吧,你需要用一个利用emacs child-frame特性显示补全列表的插件,company有company-box和company-posframe两种选择

好像用的不是company,因为我在M-x命令那里没找到有company命令

之前配置过company,但是用的是lsp-mode,也有这样的问题。现在换到eglot,不配置之后也是有这样的问题,我也觉得不是lsp插件的问题,从截图看我觉得中文字体的问题更大一点,像是中文占两个单词导致的偏移

company不提供interactive command吧,目前补全框架里面提供in-buffer补全的只有company默认使用这种用overlay画出来的补全列表,一有中文就会错位,还有一个auto-complete也是不过早就没人用了

oh~谢谢你的提醒,我才开始用emacs才不久,很多东西都没有概念。我去eglot主页看了一下,好像确实是用的company,但是我使用了company-posframe这个包,好像仍然没有解决的:

应该是需要设置点啥吧,看下company-posframe的GitHub有没有写怎么用的,我很久之前就不用company了忘记了

好像就写了一个简单的怎么开启mode,其他的没有了,company-box也能解决类似的问题吗?我去试试

看起来像是终端下,这是popup.el本身的问题,posframe是只能在gui版本下生效的。 终端下的解决办法是编译一个 https://git.savannah.gnu.org/cgit/emacs.git/log/?h=scratch/tty-child-frames 这个分支的emacs,可以在终端下用posframe,但这个分支目前依旧有些bug。

自己折腾又对ui有追求的话,对着centaur抄就行,没啥魔法,好修改

好的,了解了,谢谢你🙏

我想我知道大概是什么个情况了

看起来像是终端下,这是popup.el本身的问题

确实是这个问题,因为我没有安装company,用的是corfu和corfu-terminal,而在terminal环境下用的corfu-terminal又是用的popop.el作为的child-frames的替代,所以出现了这个问题:)