我不知道 Emacs 28 可不可以,我用的是 Emacs 29
你要确定poshandler运行的时候,激活光标到底在哪,估计在minibuffer吧?
还真是 请问该怎么办呢?
我刚用brew install emacs-plus@29
安装了29,还是不行。请问你是怎样配置的啊?能否参考一下vertico-posframe的配置?
我试着修复了一下,但不知道有没有其它副作用
帅气帅气,就是这效果 谢谢大佬!
我用vertico-posframe试了试(setq vertico-posframe-poshandler 'posframe-poshandler-point-window-center)
,很帅:
但是在C-x 3
多一个窗口之后出现了3个问题:
问题1、posframe长宽固定不可变且超出emacs边缘(下图1),如果是fullscreen下,则看不到超出的部分窗体。当输入内容时,超出的部分才会跳回到emacs里(下图2)。只有一个窗口时posframe长宽可变,表现很好(下图3、4)。
诉求:如果在多窗口情况下也能自动改变posframe长宽适应window大小就完美了。或者多提供一个posframe-poshandler-point-frame-center
函数(位置是在point的下一行居整个emacs的中间;大小自动适配整个emacs的长宽,而不是window的长宽),适配更多的使用场景,毕竟不同电脑屏幕大小不同,多开的window数也不同。(得寸进尺了 )
问题2:第一次激活posframe时,位置正确,但是移动emacs后,位置还是原来的位置,如图:(与上图比较)(注:移动emacs后随意输入点东西以移动一下光标,可以解决该问题)
问题3:C-x 3
C-x o
光标移动到新开的window后,vertivo-posframe没跟上,还停留在左边原window那里,如图:
我想要ivy-posframe测试一下有没有类似的情况,但是ivy-posframe没有ivy-posframe-display-at-point-window-center
,只能用ivy-posframe-display-at-window-center
代替。发现ivy-posframe会出现问题1(是不是根据window来计算posframe大小都会出现这个问题?)和问题2(注:移动emacs后随意输入点东西以移动一下光标,不可以解决该问题),没有出现问题3,如图:
最后再用selectrum配合miniframe(setup显示内容的窗口)和posframe(提供位置信息)来试试
配置:
(setq mini-frame-show-parameters
(lambda ()
(let* ((info (posframe-poshandler-argbuilder mini-frame-frame))
(posn (posframe-poshandler-point-window-center info)))
`((left . ,(car posn))
(top . , (cdr posn))
))))
单个window时表现不错(如下图2),但是会出现问题2((注:移动emacs后随意输入点东西以移动一下光标,可以解决该问题)。问题1没测试,因为selectrum是用mini-frame来显示内容的,与posframe无关。
C-x 3
之后会报错:let*: Wrong type argument: stringp, nil
意思是某个参数没传过去?toggle-debug-on-error
后的错误提示如下图1:
这个暂时处理不了,因为我不知道在 vertico 下如何获取minibuffer激活之前激活的window,
大佬,这个 New function. 是解决什么问题的?是新的计算位置的函数吗?更新后还是会遇到上述问题呢。
这个问题挺想解决的。没有这个问题就:selectrum + mini-frame + posframe = selectrum-posframe了。
哈哈,我没做什么特别的配置。
我使用的是用 Nix 上 emacs-overlay 安装的 gccemacs,当然也是 macOS。
我的配置地址:GitHub - ixnij/dotfiles: The configuration files of editors, shells and so on.
啊,竟然激活mode就能顺利使用了 请问有遇到过我上述的问题123吗? 尝试一下这样配置看看: (setq vertico-posframe-poshandler 'posframe-poshandler-point-window-center)
意思是,在高亮行的下一行居window中间弹出。
解决这个问题的,用这个 poshandler 之后,弹出的 posframe 会放到 frame 中间,而不是 window 中间。
从报错信息看不出什么原因,你如果能定位到哪行代码报错,估计就好解决了。
这个问题应该暂时解决了
试试最新版的 posframe 吧,也许解决了
感谢大佬! 测试完了,我的环境:macos big sur 11.5.1 emacs-plus 29.0.5
在fullscreen和maximized下,表现很好。一个字,帅。就是我心念念的“在高亮行的下一行居window中间弹出”
还发现个小问题,在非fullscreen和非maximized下,posframe找不准最左侧第一个window的位置(下图一,与上图比较),在其他新开(C-x 2... C-x 3...
)的window时位置就很准确(下图二)。
posframe-poshandler-p0.5p0-to-f0.5p1 试试这个 poshandler, 这个 poshandler 就是居中到 frame 的
这个 poshandler运行很好,没出现上述这个小问题,位置找得很准。很帅 为了和posframe-poshandler-point-window-center
命名一致,建议将posframe-poshandler-p0.5p0-to-f0.5p1
更名为posframe-poshandler-point-frame-center
。
我其实觉得 posframe-poshandler-point-window-center 不是一个好名字,只是由于兼容性问题,我无法更改了, 心得命名规则虽然看起来有点乱,但是很有规律。
至此,selectrum-posframe = selectrum + mini-frame + posframe 的方案就基本定型了。
只是有个小瑕疵,当弹窗方式为 posframe-poshandler-point-window-center
和 posframe-poshandler-p0.5p0-to-f0.5p1
时,启动emacs后首次激活posframe,在水平方向上找不到位置,会在emacs的中点垂线上弹出,第二次之后激活posframe就能找准方向了。