不想要一敲M-x或执行counsel-find-file之类的不停的弹出来,希望这个框就固定在下方,执行命令完了后失去光标或者变空都可以。
有什么办法做到吗?貌似都没人有这种需求?
不想要一敲M-x或执行counsel-find-file之类的不停的弹出来,希望这个框就固定在下方,执行命令完了后失去光标或者变空都可以。
有什么办法做到吗?貌似都没人有这种需求?
用 ido 符合你需求
这个不好办,ivy用的是minibuffer。用helm应该可以做到
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才让设置。
看不明白楼主什么要求,好像是把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 |
+-----------+ +-----------+
没有用过helm吧?
我一直用 helm。
helm 窗口用完就关闭,当让不会有问题。但是 helm 窗口关闭之前,是可以 C-x o
跳过去的,我经常这样跳去复制滤后的 helm 列表内容。
若是把这个窗口固定住,它必然会成为跳转目标之一。除非去拦截跳转动作,让它忽略这个固定的窗口。