是否有Emacs相当于Vim的C-w _
?此命令通过使当前窗口尽可能高来“最大化”当前窗口(从而将所有其他窗口缩小到尽可能小)。
重要的是,在Vim中,当您将当前窗口放大太远时,其他窗口不会消失。相反,当前窗口会停止放大,以便其他窗口可以继续存在。
在Emacs中,当窗口缩小到window-min-height
行以下时,窗口会消失。这很烦人。相反,我希望其他窗口缩小到window-min-height
行高,然后停止收缩,这样它们就不会消失。那我就可以做(enlarge-window 1000)
。但是我无法弄清楚如何让它发挥作用。
如果无法实现上述目标,我会采取其他策略来实现最大化。
答案 0 :(得分:1)
在我看来这有点奇怪的行为,但这应该让你开始:
编辑:根据评论过滤出两侧排成一行的窗口:
(defun maximize-window ()
(interactive)
(let* ((lpos (first (window-edges)))
(rpos (third (window-edges)))
(in-same-column-p
(lambda (w) (or (= lpos (first (window-edges w)))
(= rpos (third (window-edges w))))))
(other-windows (remove-if-not in-same-column-p
(rest (window-list))))
(other-heights (* (length other-windows) window-min-height))
(my-height (- (frame-height) other-heights)))
(setf (window-height) (- my-height 1))))
答案 1 :(得分:1)
这是我的镜头。对于最多5个窗口的窗口配置,它似乎工作得很好。但是当我有12个(大多数窗口指向相同的缓冲区)时,我已经感到困惑。所以,除非你有疯狂的窗口配置,应该为你工作:
注意:它会将窗口缩小到变量window-min-width
和window-min-height
指定的最小尺寸,这可能会超过实际最小值。
(defun my-maximize-current-window ()
"Maximize the current window"
(interactive)
(my-shrink-all-but-window-in-tree (get-buffer-window (current-buffer)) (car (window-tree))))
(defun my-shrink-all-but-window-in-tree (window tree)
(if (windowp tree)
(when (eq tree window) tree)
(let* ((left (my-shrink-all-but-window-in-tree window (caddr tree)))
(right (my-shrink-all-but-window-in-tree window (cadddr tree)))
(vertical (car tree))
(found (or left right)))
(my-shrink-windows (not vertical) (if right (caddr tree) (cadddr tree)))
(select-window window)
(when found (cons tree found)))))
(defun my-shrink-windows (vertical treetoshrink)
(if (windowp treetoshrink)
(let ((size (if vertical
(min 0 (- window-min-width (window-width treetoshrink)))
(min 0 (- window-min-height (window-height treetoshrink))))))
(select-window treetoshrink nil)
(enlarge-window size
vertical))
(my-shrink-windows vertical (caddr treetoshrink))
(my-shrink-windows vertical (cadddr treetoshrink))))
答案 2 :(得分:0)
我不知道你要求的答案。
作为备用工作流程,您是否可以使用switch-to-buffer
(默认情况下绑定到C-x b
)打开缓冲区,如果您在此处选项卡,则会获得一个列表供您选择从?
所以我只使用delete-other-windows
(默认绑定到C-x 1
),并使用switch-to-buffer
返回。
答案 3 :(得分:0)
如果它有用,一种解决方案是大幅度地水平和垂直放大当前窗口。
在~/.emacs
:
(defun enlarge-window-maximize()
(interactive)
(enlarge-window-horizontally 10000)
(enlarge-window 10000))
(global-set-key (kbd "C-x !") 'enlarge-window-maximize)
使用C-x !
使当前窗口变大(其他窗口缩小)
在C-x !
和C-x +
之间切换对我来说效果很好。