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上也会出现
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::.