Разверните окна Emacs, чтобы другие не исчезали - PullRequest
1 голос
/ 18 сентября 2009

Есть ли Emacs-эквивалент Vim's C-w _? Эта команда «максимизирует» текущее окно, делая его как можно более высоким (таким образом, все остальные окна уменьшаются до минимума).

Важно, что в Vim другие окна не исчезают, когда вы слишком сильно увеличиваете текущее окно. Вместо этого текущее окно перестает увеличиваться, чтобы другие окна могли продолжать жить.

В Emacs окна исчезают, когда они сжимаются ниже window-min-height линий. Это раздражает. Вместо этого я хочу, чтобы другие окна уменьшились до window-min-height линий, а затем прекратили сокращаться, чтобы они не исчезали. Тогда я мог бы просто сделать (enlarge-window 1000). Однако я не могу понять, как заставить это работать.

Я открыт для других стратегий максимизации окон, если вышеописанное невозможно.

Ответы [ 4 ]

1 голос
/ 18 сентября 2009

На мой взгляд, это немного странное поведение, но с этого стоит начать:

edit: отфильтровывать окна, расположенные с обеих сторон, по комментариям:

(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 голос
/ 18 сентября 2009

Вот мой выстрел в это.Кажется, что это работает очень хорошо для конфигурации окон до 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))))
0 голосов
/ 03 ноября 2016

В случае, если это полезно, одним из решений является увеличение текущего окна по горизонтали и вертикали на огромную величину.

В вашем ~/.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 + хорошо работает для меня.

0 голосов
/ 18 сентября 2009

Я не знаю ответ, который вы просили.

В качестве альтернативного рабочего процесса, вас не интересует, что открытые буферы доступны с switch-to-buffer (по умолчанию привязан к C-x b) и что, если вы перейдете на эту точку, вы получите список на выбор? *

Поэтому я просто использую delete-other-windows (по умолчанию привязан к C-x 1) и использую switch-to-buffer для возврата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...