Быстрый способ закрыть все окна, кроме одного, а затем вернуться к предыдущей настройке окна?

12

Я хочу закрыть все мои окна, кроме текущего, и развернуть кадр до максимума, чтобы я мог быстро увидеть все в буфере в этом одном окне, а затем вернуться к моей предыдущей настройке окна. Как бы я поступил так?

Андрей
источник
Эта ссылка может помочь.
Nsukami _
3
Не совсем понятно, что вы подразумеваете под «закрыть» или «увидеть все в одном кадре». Не позволит ли (поднимая и) максимизировать интересующий вас кадр увидеть все в этом кадре? Другие кадры все еще будут там, но будут скрыты за развернутым кадром. Это тривиально, если это соответствует вашим потребностям.
Дрю
1
Просто чтобы убедиться, что вы используете в Emacs определение слова frame , верно? Какая вещь верхнего уровня, которой управляет ваш оконный менеджер?
zck
@zck Я имею в виду отдельные видимые буферы, на которые разбит мой экран. Я хочу максимизировать один буфер, чтобы заполнить весь экран, а затем отменить его, чтобы я мог видеть все буферы в их первоначальной конфигурации. Я извиняюсь, если я неправильно понял словарный запас, я попытался найти его и выбрать лучшее слово для использования
Эндрю
2
Чтобы уточнить терминологию, смотрите: В чем разница между буфером, файлом, окном и фреймом?
Дан

Ответы:

14

Различные разделы текста, которые вы видите в Emacs, являются окнами . Вы можете, например, создать новое окно с помощью C-x 2. Да, эта терминология сбивает с толку. Это предшествует большинству систем графического интерфейса, так что это понятно, если все еще сбивает с толку.

Но как только мы узнаем, что говорим об окнах, мы можем внести необходимые изменения. Чтобы избавиться от всех окон, кроме того, в котором находится точка, запустите C-x 1, сопоставьте delete-other-windows.

Затем, для того, чтобы вернуться к тому, что у вас было раньше, есть довольно полезная библиотека под названием Winner-Mode . Это позволяет отменить и повторить изменения в конфигурации вашего окна.

Поэтому включите режим победителя с помощью M-x winner-mode, а затем после вызова C-x 1вы можете нажать, C-c leftчтобы отменить изменение конфигурации окна, вернув окнам то, что они были.

Если вы хотите постоянно включить режим победителя, поместите (winner-mode)файл инициализации.

zck
источник
7

Использование winner-modeудобно, но если вы действительно хотите переключаться между одним окном и многооконной конфигурацией, вот что я использовал раньше:

(defvar window-split-saved-config nil)

(defun window-split-toggle-one-window ()
  "Make the current window fill the frame.
If there is only one window try reverting to the most recently saved
window configuration."
  (interactive)
  (if (and window-split-saved-config (not (window-parent)))
      (set-window-configuration window-split-saved-config)
    (setq window-split-saved-config (current-window-configuration))
    (delete-other-windows)))

Вы можете связать это, например, C-x 1и использовать тот же ключ для переключения состояний.

glucas
источник
1

Я использую следующее, скопированное из Интернета. Это быстрый способ оставить текущую конфигурацию окна. После того, как вы закончите, используйте, exit-recursive-editчтобы вернуться.

;; http://www.emacswiki.org/emacs/RecursiveEditPreservingWindowConfig    
;; inspired by Erik Naggum's `recursive-edit-with-single-window'

(defmacro recursive-edit-preserving-window-config (body)
  "*Return a command that enters a recursive edit after executing BODY.
 Upon exiting the recursive edit (with\\[exit-recursive-edit] (exit)
 or \\[abort-recursive-edit] (abort)), restore window configuration
 in current frame."
  `(lambda ()
     "See the documentation for `recursive-edit-preserving-window-config'."
     (interactive)
     (save-window-excursion
       ,body
       (recursive-edit))))

(global-set-key (kbd "C-c 0") (recursive-edit-preserving-window-config (delete-window)))
(global-set-key (kbd "C-c 1") (recursive-edit-preserving-window-config
                               (if (one-window-p 'ignore-minibuffer)
                                   (error "Current window is the only window in its frame")
                                 (delete-other-windows))))
clemera
источник