这个我用 linux 感觉也没有这个问题,是不是 mac 上才有的?
mac和windows都有这个问题,Linux是不是速度快无感知?理论上第一次计算位置和显示的时候确实是在左上角,对吧?可以问问其他小伙伴是否观察到同样的情况。
方便的话录个视频看看
可以设定 width 和 height 了,谢谢二呆大佬
但还是搞不定长宽随candidates变化的问题 我参考vertico-posframe的posframe-size,设置了posframe给selectrum,但是总不能随candidates变化长宽,都是以min-width和min-height为准。mini-frame是可以随candidates变化长宽的,应该selectrum的candidates没问题。company-posframe也参考了,因为company-mode设置了很多min-tooltip˙之类的变量,感觉设置起来比较简单一些。
大佬有空可以帮我看看吗?
selectrum代码:selectrum/selectrum.el at master · radian-software/selectrum · GitHub
selectrum调用posframe代码:Additional Configuration · radian-software/selectrum Wiki · GitHub
我自己瞎写的(高亮行以上代码):如果 selectrum-posframe-height 为 10, selectrum-posframe-min-height 为5,selectrum candidates 为2,那实际posframe的高就是5,不能根据candidates来变。不知道怎样写min max。
你把 :height :width :min-height :min-width 都删除,宽度就根据内容决定了。
不设置 :width 和 :height 之后, posframe 的尺寸基本上是通过 fit-frame-to-buffer 来决定的,你可以看看它的docstring,大概就知道怎么处理了
对了,你好升级到最新的 posframe, 旧版本的 width 和 height,处理不太符合直觉
嗯嗯,selectrum mini-frame posframe都删掉,重新下载最新版的。设置 :width 和 :height 也都能起效了。
把 :height :width :min-height :min-width 都删除后,每次激活posframe,长宽都不一样,不能根据candidate而定:
看了官方文档和seletrum代码,seletrum写了(fit-frame-to-buffer 'vertically),我把'vertically
改为 t ,没啥作用。
seletrum说明给selectrum-display-action设置弹窗之后,内容应该都交给新的窗口来显示。 selectrum-display-action的代码块里生成了一个selectrum–display-action-buffer,不知道是不是因为posframe找不到这个buffer才会导致上图问题。fit-frame-to-buffer的时候fit不到selectrum–display-action-buffer?
有可能是 posframe 弹出之后, 菜单的内容才更新了,所以 posframe 无法调整尺寸,你可以试试 refresh 参数,比如 :refresh 0.1 ,也许有用
类似
(defvar buf " *test*")
(posframe-show buf :refresh 0.25)
(with-current-buffer buf
(erase-buffer)
(insert "fffffggg"))
记得下载最新的 posframe, 我刚刚fix一个bug。
管用!应该就是因为“posframe 弹出之后, 菜单的内容才更新”。终于搞定了,谢谢二呆大佬!
我刚用ffmpeg录了一个,不知道为什么录制的视频里看不出 “使用了posframe-delete
后,每次激活posframe,posframe先在左上角生成,再对齐到point处” 的一闪而过。看看 @seagle0128 大佬方不方便录一个
(when (posframe-workable-p)
(posframe-show " *my-posframe-buffer*"
:string "This is a test"
:position (point)))
(posframe-hide " *my-posframe-buffer*")
(posframe-delete " *my-posframe-buffer*")
感觉child-frame
应该就是先在某个位置生成再对齐到新位置,而不是在新位置直接生成,至少在macos下如此。mini-frame
也会看到这个对齐过程:我给mini-frame
用了光标poshandler,mini-frame
先在上次光标的位置生成,再闪到现光标处。
录屏看不到闪烁效果的,用手机试试?
对的,不过正常情况下,新建的frame是隐藏的,等对齐以后,才让它显示,mac 的child-frame实现可能存在问题.
我试着用比较 hack 的方式,降低闪烁面积的大小,你可以试试有没有效果
这个已经设置为自动隐藏了。
下面两个例子,哪个在 minibuffer ?
(posframe-show " test1"
:position (cons 0 -1)
:string "This is test1"
:border-color "red"
:border-width 2
:timeout 1)
(posframe-show " test2"
:position (cons 0 (- (frame-pixel-height)
(default-font-height)))
:string "This is test2"
:border-color "green"
:border-width 1
:timeout 1)