vertico-posframe, 喜欢的同学拿去

再伪装一下 :laughing:

有哪位大佬知道minibuffer-prompt怎么隐藏掉吗?

           :poshandler-extra-info
           (list :company-margin margin
                 :company-prefix-length (length company-prefix))

谢谢大佬提醒!不过看着上面的截图,好像posframe-poshandler-point-top-left-corner + 隐藏 结果数 和 minibuffer-prompt 就可以表现的跟company-mode一模一样了(前提是背景色需要统一),现在着手解决 “隐藏 结果数 和 minibuffer-prompt:joy: (上图和下图很接近了~)

(defun vertico-posframe--display (lines)
  "Display LINES in posframe."
  (let ((count (vertico--format-count))
        (prompt (minibuffer-prompt))
        (content (minibuffer-contents)))
    (with-current-buffer (get-buffer-create vertico-posframe--buffer)
      (add-hook 'window-selection-change-functions 'vertico-posframe--select nil 'local)
      (setq-local inhibit-modification-hooks t
                  cursor-in-non-selected-windows 'box)
      (erase-buffer)
      (insert (propertize (concat count prompt) 'face 'minibuffer-prompt)
---------------------------------------------------------------------------------
              content
              (propertize " " 'face 'vertico-posframe-cursor)
              "\n" (string-join lines)))
    (with-selected-window (vertico-posframe-last-window)
      (apply #'posframe-show
             vertico-posframe--buffer
             :font vertico-posframe-font
             :poshandler vertico-posframe-poshandler
             :background-color (face-attribute 'vertico-posframe :background nil t)
             :foreground-color (face-attribute 'vertico-posframe :foreground nil t)
             :border-width vertico-posframe-border-width
             :border-color (face-attribute 'vertico-posframe-border :background nil t)
             :override-parameters vertico-posframe-parameters
             :refposhandler vertico-posframe-refposhandler
             :hidehandler #'vertico-posframe-hidehandler
             :lines-truncate t
             (funcall vertico-posframe-size-function)))))

帅气帅气!成功伪装成了company-mode ,啊哈哈哈……除了增加fringe会导致awesome和posframe两词的间距增大,其他的就没啥区别了。

我是直接把(concat count prompt)中的 count prompt删掉了,不过这样方式不大好,package更新后就失效了要重新删掉。大佬方便时可以设置为一个可以 (setq ... count prompt... nil) 的函数吗? :pray:

或者有没有办法直接在init-file里 (put 'minibuffer-prompt 'disabled t)(setq minibuffer-prompt nil)之类的写法?(这两句我试了都没用 :joy:

感谢大佬一路耐心解答,请喝咖啡 :handshake:

把更改过得函数放到你自己的配置中,不就OK了

还可以这样,除了占地面积大就没啥问题了 :joy: 谢谢大佬!

Using Emacs Episode 80 Vertico, Marginalia, Consult, and Embark

@tumashu vertico-posframe 很好用,谢谢!

遇到一个输入的问题,比如切换 Buffer 时,如果选择某个 Buffer 后,再按 C-a,输入点切换到 minibuffer 中了,而 posframe 的光标位置还是尾部。我想问的是,minibuffer 可以不输入提示么,只在 posframe 中编辑?

你没有理解这个包的工作方式,你一直在minibuffer中输入,posframe只是把minibuffer中的内容显示出来,它不做输入处理

你看到的minibuffer中的光标其实是一个带颜色的空格,假的

我的也有这个问题,激活 vertico-posframe 之后,minibuffer 左下角还有个小光标,如果能去掉这个小光标应该就能解决这个问题了。

嗯,理解了。但posframe 没有显示插入点位置,在做中间字符的修改时 ,还是需要看 minibuffer 的,如果能在 posframe 中直接修改就完美了。比如下面的情况,就不怎么友好。

image

image

这个posframe是不支持的,想实现需要mini-frame之类的包。对于两个地方显示不一致的问题,我会想想怎么处理,应该有办法

二呆大佬,posframe设置min-width为0使其自适应内容宽度,但配合marginalia使用时,会出现这个问题:首次激活vertico-posframe,宽度为图一,C-n 到最后一个candidate时宽度为图二。第二次之后激活vertico-posframe宽度都默认保持为图二了(即保持为最大的宽度),不能再缩小为图一。

解决办法,用(posframe-delete-all):

  (defun vertico-posframe--hide ()
  "Hide vertico buffer."
  (when (posframe-workable-p)
    (posframe-delete-all)))

您看看要不要改一下?另外,激活vertico-posframe后minibuffer还有个光标一闪一闪的,这个可以隐藏的吗? :sweat_smile:

试试新的代码吧,minibuffer 遮挡的相当严实

这个不建议这么设置,因为如果输入错误,导致没有选项,posframe 宽度会急剧缩小,闪瞎眼

竟然用了一块白板遮住了minibuffer :joy: 但是会遮盖到部分mode-line。非全屏化的情况下,移动emacs之后,这块白板还停留在原地……可不可以把minibuffer的光标、promopt、输入内容的前景色设置为emacs背景色?在vertico-posframe里再设置回原来的颜色。这样也能起到隐藏的作用,但是不知道会不会影响awesome-tray这样的mode-line。ivy-posframe就很稳啊,它是这么处理这类问题的?

确实,我设置为比较小的非零值,表现挺好的了。谢谢大佬!

另外,与meow-mode(normal模式,光标样式为box)共用时,会导致vertico-posframe残留光标(c那里),需要输入3个以上字符才能消失:(下图的vertico-posframe是昨天下午新commit前的版本)

好像在 selectrum + mini-frame + posframe 方案里,可以做到mini-frame作为输入框,posframe作为candidates显示框,两者是分离的。我试试能不能实现这个效果:(感觉vertico-posframe不够ivy-posframe稳,试试曲线救国~)

我这边没有这个问题,可能是你用的 emacs child-frame 实现有问题。

ivy-posframe 说白了,也是用个白白遮挡,只不过它的白板使用 overlay 机制