求固定 M-x Prompt 那一行在最底下的方法。

有没有方法能让 M-x prompt 的那一行永远固定在 Minibuffer 的最底下?这样 completing-read 弹出的列表就位于 modeline 和 prompt中间。眼睛看起来更方便,我好像找不到相关的变量来控制。不知道大家有没有这样设置好的?

mct.el?

默认应该没有变量? 方案:

  1. 换 (ivy/vertico-)postframe 之类的,利用 posframe 在窗口中间弹出
  2. 换 vertico,mct,elmo

对对,就是你这样的,不知道你截图的这个用的是哪一个包呢?我在vertico中也没找到相关的设置。谢谢~

我主要使用terminal,所以posframe就不考虑了呢,谢谢提醒

好的,我去看一下。

好的,我在vertico/extensions/ 中找到了 vertico-reverse-mode.谢谢。

2 个赞

我只需要更改prompt line位置,不需要reverse candidates,所以还是不用vertico-reverse-mode了。魔改了一下,加了一个advice即可。

  (defun ad/vertico--display-prompt-bottom (lines)
    "Set prompt line to bottom in `vertico-mode'."
    (move-overlay vertico--candidates-ov (point-min) (point-min))
    (unless (eq vertico-resize t)
      (setq lines (nconc (make-list (max 0 (- vertico-count (length lines))) "\n") lines)))
    (let ((string (apply #'concat lines)))
      (add-face-text-property 0 (length string) 'default 'append string)
      (overlay-put vertico--candidates-ov 'before-string string))
    (vertico--resize-window (length lines)))
  (advice-add 'vertico--display-candidates :override #'ad/vertico--display-prompt-bottom)

题外话,你可以试试 vertico-buffer-mode 放到上面我还挺喜欢的。

好的,去看看