从spacemacs迁移到DOOM;company-childframe by @tumashu

company-childframe 现在只能在 最新版的 macOS emacs-26 上面跑…

是最新的,26.0.91

最好能试验出在什么情况下出现这种问题,不然无法调试,特别是我这种没果子机的穷b

其实是你连虚拟机都懒得开。

哈哈,我用的一个5年前的笔记本,虚拟机就免了

加了点调试信息, 发现company-childframe-compute-pixel-position这函数里, 输入参数pos一样, 但这个值会变: (cdr (posn-x-y posn-top-left)), 有时候是504, 有时候是518, 下面是posn-at-point的返回值

(#<window 6 on a.cpp> 427 (72 . 518) 0 (! . 0) 427 (5 . 28) nil (0 . 14) (9 . 18))

(#<window 6 on a.cpp> 427 (72 . 504) 0 nil 427 (5 . 28) nil (0 . 0) (9 . 18))

上面那个是有问题的时候, y值大一点. 另外, 两个返回值里OBJECT这一位不一样

好像是跟flycheck-mode有冲突, 关了返回值就对了, 坑啊.

照理说linux和windows上也会出现

我在window 下测试了一下,似乎没有你说的问题,不会又是 macOS 上面的问题吧。。。。

我在linux上试了一下也有这问题, 你试试下面的代码:

linux 下还没有试,不过 window 下似乎没问题, 对了,你确定是用的最新的 company-childframe?

github上前天上午的版本, 刚才又下载了最新的, 还是有同样的问题

回去我在 linux 下试试看。

我在我 linux 机子上测试了一下, 也没有发现你提到的类似问题, 你到 company-childframe 上面提交一个 issue 吧, 看其他人能不能遇到类似的问题.

排查了半天, 好像是因为设置了这个:

(setq truncate-lines t)

这个是emacs内置选项, 如果是它的原因, 那就是emacs的bug了

我这边还是没有重现你说的这个问题.

情况挺复杂啊, 进一步排查, 跟下面这一行也有关:

(setq company-frontends '(company-childframe-frontend))

和下面这行同时存在就出问题:

(setq truncate-lines t)

另外, 又跟flycheck-mode有关, 搞不清楚什么原理

这个我测测试出来了, 到 emacs-devel 发了一个邮件咨询了一下,正在等待反馈,个人感觉是 posn-at-point 的bug

我感觉这是 flycheck 的问题, 它似乎在 pos 的位置插了一个小图片,所以导致 posn-at-point 得到这个图片的 position 而不是 buffer当前的 position。

你可以试试 (setq flycheck-indication-mode nil)

flycheck这个overlay用的挺复杂, 不过emacs的文档里好像是推荐这样使用的

37.13.6 The Overlay Arrow

里面有一段:

You can do a similar job by creating an overlay with a ‘before-string’ property. *Note Overlay Properties::.