最大化Emacs窗口而不会让其他人消失

时间:2009-09-17 21:22:50

标签: vim emacs

是否有Emacs相当于Vim的C-w _?此命令通过使当前窗口尽可能高来“最大化”当前窗口(从而将所有其他窗口缩小到尽可能小)。

重要的是,在Vim中,当您将当前窗口放大太远时,其他窗口不会消失。相反,当前窗口会停止放大,以便其他窗口可以继续存在。

在Emacs中,当窗口缩小到window-min-height行以下时,窗口会消失。这很烦人。相反,我希望其他窗口缩小到window-min-height行高,然后停止收缩,这样它们就不会消失。那我就可以做(enlarge-window 1000)。但是我无法弄清楚如何让它发挥作用。

如果无法实现上述目标,我会采取其他策略来实现最大化。

4 个答案:

答案 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-widthwindow-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 +之间切换对我来说效果很好。