vertico-posframe, 喜欢的同学拿去

说实话,让 mini-frame 使用 poshandler 也只能是凑合使用,毕竟 poshandler 是专门为 posframe 设计的。

目前[selectrum + mini-frame + posframe]的表现已经很满意了,瑕不掩瑜。谢谢!

顺手也测试了posframe-poshandler-p0.5p0-to-f0.5p1在vertico-posframe和ivy-frame中的表现:

vertico-posframe主要还是上面提到的问题3,暂时用不了这个posframe了;

ivy-frame表现很稳定,没出现什么问题(如下图)。 :+1:

另外,顺便再请教一个问题 :pray:

我在 Window Frame Parameters 找了上图红圈两个参数,但是都不能成功去掉ivy-posframe的灰色边框,这是啥情况呢?我配置写错了吗?

试试最新的 vertico-posframe,应该可以了

运行 posframe-delete-all 之后,再看看有没有效果。

这个最新版的 posframe 试着修复了。

:astonished:吃个饭的时间就修复好,大佬高效,都没问题了。 :+1:

M-x posframe-delete-all 之后还是不行,我尝试设置背景色为蓝色是有效的,说明这样写在 (use-package …) 里的逻辑或用法没问题。麻烦您看看,谢谢! :pray:

暂时没思路怎么处理,先搁置吧

我突然发现,你应该设置face: vertico-posframe-border 来改变border的颜色

看到readme的vertico-posframe-parameters就一直在尝试添加一些参数,都忘了M-x customize-face找一找face。:joy:

ivy-posframe和vertico-posframe都通过这个方法设置好了,谢谢大佬!

新发现了一个问题,就是在左侧window激活posframe并输入内容时posframe会立即跑回右侧window那里——白天测试时没输入内容,所以没发现这个问题:

而ivy-posframe则表现就好,同情况下输入内容时posframe是左移使其右缘与emacs右缘重合:

题外话:同样是输入input,ivy搜出不少结果而vertico和selectrum却一个都没,这是什么情况呢?:thinking:

我这边 vertico-posframe 没有发现这个问题, 不过我试着修复了一下,也许有用。

已经没有这个问题了,谢谢大佬! :pray:

@tumashu 大佬,打扰了!我想实现 “当posframe从下往上展开时,即当高亮行下方空间不够时posframe会上移至高亮行上方,M-x prompt 和 vertico candidates结果反过来排列”。

第一步是“posframe从下往上展开”,请问 “当posframe从下往上展开时” 这个判断语句该怎么写呢?posframe里有没有独立的一个函数是表示“从下往上展开”的?(注:posframe是posframe-poshandler-point-window-center

第二步是“结果反过来排列”,解决办法是vertico-reverse-mode或:

自己仿照已经有的 poshandler 写一个 poshandler 函数吧,这也是 poshandler 机制实现的初衷。

你把获取的座标的 y 值,减去 posframe 的高度,不就实现了吗?

这个很好判断, poshandler返回的座标是 posframe 的左上角的座标,你用它的 y 值,和 (posn-x-y (posn-at-point)) 获得的 y 比较大小,不就知道菜单是上弹还是下弹了吗? 不过你如果 elisp 不太熟悉,就不建议折腾了。

直接试了vertico-reverse-mode,发现跟vertico-posframe同用时并不起效,只是把C-n和C-p调过来,candidates展示不变。不折腾了,谢谢大佬提示!

在 gccemacs 29 没有,但是 Emacsmacport(emacs 27) 有这个问题。按照你们的讨论,我这里的问题也差不多解决了。

大佬,定义vertico-posframe-border face是因为这个原因吗?

不是,只是定义成face, 方便theme添加支持

翻了一下 posframe.el 发现了这个利器,可玩性飙升 :scream_cat:膜拜大佬!

现在用户可以根据上述例子的规则自定义 poshandler 了吗?但是发现后面 defalias 了很多 poshandler,这是所有弹窗方式都包含了?

自己写了一下p0p0-to-p0p0,发现有定义好的posframe-poshandler-point-top-left-corner,立马用上。现在离 “实现弹窗样式与compang-mode保持一致” 这一目标又近了一步,啊哈哈哈。

顺便再请教一下:posframe的 width 可以根据 candidate 长短而自动变化吗?像company-mode那样自动变宽度。(不好意思,近日问了很多问题,真是麻烦了 :pray: