ivy弹出的框能不能固定在下方?

Image%20059

不想要一敲M-x或执行counsel-find-file之类的不停的弹出来,希望这个框就固定在下方,执行命令完了后失去光标或者变空都可以。

有什么办法做到吗?貌似都没人有这种需求?

用 ido 符合你需求

这个不好办,ivy用的是minibuffer。用helm应该可以做到

试试 ivy-posframe GitHub - tumashu/ivy-posframe: ivy-posframe is a ivy extension, which let ivy use posframe to show its candidate menu, ivy-posframe is a **GNU ELPA** package.

也可以实现这种样式: :rofl:

ivy-posframe可以固定位置的话,那是不是可以split一个window(假设叫mini-window)在下方,然后调矮一点,再设置ivy-posframe出现在mini-window中,变相得到那种效果?不知道ivy-posframe可不可以这样跨window显示?然后还得想办法固定下方的mini-window不轻易被关闭。

不知道helm怎样可以做到?

ido有点矮,而且是水平显示候选项,看着有点累,如果是ido vertical那和ivy又差不多了。

不用这么麻烦,ivy-posframe可以将ivy固定到屏幕4个边的任何地方,不过默认只包含几个常用点的函数,可以跨emacs window

能用在终端下吗?

刚试了下感觉体验蛮好的,windows gui能用(emacs26),ssh连到linux下好像不能显示出来(emacs27)。

frame的意思是不是需要能创建frame的gui版本才行。

对,终端下面如果想要实现你那种效果, 只有两种选择: minibuffer 或者 普通 window, emacs26以上的gui版本支持 child-frame 特性,所以可以使用child-frame来实现你的功能,posframe就是使用 child-frame 特性实现的弹出菜单库

找到一个set-minibuffer-window的函数,我尝试这样设置:

(setq min-win (split-window nil 30)) (set-minibuffer-window min-win)

结果报错:Window is not a minibuffer window

查看函数实现是C函数,里面先判断是MINI_WINDOW_P才让设置。:joy:

image_20190310180306

看不明白楼主什么要求,好像是把ivy的高度调小就行?ido又说太矮(所以要高一点的ido?),普通的ivy又说要固定下方(ivy不就是在下方?),可以setq一下ivy-height

用helm吧

楼主的意思是一直保持住ivy的空间?那恐怕不行,因为minibuffer不止ivy自己用的。有时让你回答yn这样也会占用minibuffer。就会闪一下?

另一方面这是屏幕太大?不然保持ivy显示不会占用太多空间么

有一个重要问题你没有考虑,就是窗口切换的问题。

我认为 Emacs 开两个窗口是最顺手的,因为此时按 C-x o 跳转的目标窗口是唯一,完全无脑操作。

+-----------+
|     |     |
|     |     |
|  A  |  B  |
|     |     |
|     |     |
+-----------+

一旦分割成三个窗口,则切换窗口时需要进行 2 选 1,这会使得操作流畅度大大受阻,每多开一个窗口,痛苦指数加倍增长。

+-----------+
|     |     |
|  A  |  B  |
|     |     |
|-----------|
|     C     |
+-----------+

所以,一旦你在底部固定了一个窗口,你将失去两个编辑窗口的便利:因为你只能在 3 窗口模式下进行 2 窗口编辑。

+-----------+        +-----------+
|           |        |     |     |
|     A     |        |  A  |  B  |
|           |   ->   |     |     |
|-----------|        |-----------|
|     C     |        |     C     |
+-----------+        +-----------+
1 个赞

没有用过helm吧?

我一直用 helm。

helm 窗口用完就关闭,当让不会有问题。但是 helm 窗口关闭之前,是可以 C-x o 跳过去的,我经常这样跳去复制滤后的 helm 列表内容。

若是把这个窗口固定住,它必然会成为跳转目标之一。除非去拦截跳转动作,让它忽略这个固定的窗口。