Closed zhenhua-wang closed 1 year ago
我又研究了一下vertico 和 ivy-posframe。发现ivy-posframe是用overlay来遮住echo area,我尝试在vertico中用相同办法,发现前面的count没法遮挡。跑去看vertico源码才发现vertico count也是通过overlay来展示的,所以只需要在添加overlay之前先删除vertico--count-ov就可以实现隐藏echo area
(advice-add 'vertico-posframe--show :after 'zw/vertico-posframe-hide-minibuffer)
(defun zw/vertico-posframe-hide-minibuffer (BUFFER WINDOW-POINT)
(remove-overlays (point-min) (point-min))
(let ((ov (make-overlay (point-min) (point-max) nil nil t)))
(overlay-put ov 'window (selected-window))
(overlay-put ov 'face
(let ((bg-color (face-background 'default nil)))
`( :background ,bg-color :foreground ,bg-color
:box nil :underline nil
:overline nil :strike-through nil)))
(setq-local cursor-type nil)))
不过有一个问题是,这样没法显示cursor
刚发现这一问题只在exwm中出现。。请问大佬知道大概要研究哪一部分吗?
vertico-posframe use (set-window-vscroll minibuffer-window 100) to hide prompt.
(defun vertico-posframe--handle-minibuffer-window ()
"Handle minibuffer window."
(let ((show-minibuffer-p (vertico-posframe--show-minibuffer-p))
(minibuffer-window (active-minibuffer-window)))
(setq-local max-mini-window-height 1)
(window-resize minibuffer-window
(- (window-pixel-height minibuffer-window))
nil nil 'pixelwise)
(set-window-vscroll minibuffer-window 100)
(when show-minibuffer-p
(set-window-vscroll minibuffer-window 0))))
ivy-posframe and vertio-posframe use different method to hide minibuffer's prompt.
好吧,一开始没看明白set-window-vscroll的作用,原来是把echo area翻出屏幕。
可能是exwm限制了这种窗口的移动。。我对window manager理解太浅了,应该没办法处理这个问题了,感谢回复
我猜测未必是限制了,可能是某个 hook 把翻出的效果不小心取消了
有道理,不过exwm太复杂,而且作者都抛弃这项目,我好几次都没研究明白。。。
我直接简单粗暴的定义了个poshandler把modeline和echo area挡住了。
666
我在开启vertico-posframe-mode 时, echo area会同步展示当前输入的指令 (如图)。请问如何不展示echo area?
另外,ivy-posframe就不会有这个问题,看了下代码,ivy-posframe是通过ivy-posframe-hide-minibuffer控制的。但设置vertico-posframe-show-minibuffer-rules 为 nil 没什么效果