Spec-Zone.ru › Elisp

Конфигурации окон

Конфигурация окна записывает всю компоновку одного кадра — все окна, их размеры, их украшения, какие буферы они содержат, как эти буферы прокручиваются и их значение точки. Она также включает значение minibuffer-scroll-window. В качестве исключения конфигурация окна не записывает значение точки в выбранном окне для текущего буфера.

Вы можете восстановить всю компоновку кадра, восстановив ранее сохраненную конфигурацию окна. Если вы хотите записать компоновку всех кадров, а не только одного, используйте конфигурацию кадра вместо конфигурации окна. См. Конфигурации кадров.

Функция: current-window-configuration &optional frame

Эта функция возвращает новый объект, представляющий текущую конфигурацию окна кадра frame. По умолчанию frame — это выбранный кадр. Переменная window-persistent-parameters определяет, какие параметры окна (если таковые имеются) сохраняются этой функцией. См. Параметры окна.

Функция: set-window-configuration configuration &optional dont-set-frame dont-set-miniwindow

Эта функция восстанавливает конфигурацию окон и буферов, как указано в configuration, для кадра, для которого был создан configuration, независимо от того, выбран этот кадр или нет. Аргумент configuration должен быть значением, которое ранее возвращалось функцией current-window-configuration для этого кадра. Обычно функция также выбирает кадр, который записан в конфигурации, но если dont-set-frame имеет не-nil, она оставляет выбранным кадр, который был выбран в начале функции.

Обычно функция восстанавливает сохраненный минибуфер (если таковой имеется), но если dont-set-miniwindow имеет не-nil, текущий минибуфер в начале функции (если таковой имеется) остаётся в мини-окне.

Если кадр, из которого был сохранён configuration, неактивен, все, что делает эта функция, это восстанавливает значение переменной minibuffer-scroll-window и корректирует значение, возвращаемое minibuffer-selected-window. В этом случае функция возвращает nil. В противном случае она возвращает t.

Если буфер окна из configuration был убит с момента создания configuration, это окно, как правило, удаляется из восстановленной конфигурации. Однако, если это окно является последним окном, оставшимся в восстановленной конфигурации, в нём отображается другой активный буфер.

Вот способ использования этой функции для достижения того же эффекта, что и save-window-excursion:

(let ((config (current-window-configuration)))
  (unwind-protect
      (progn (split-window-below nil)
             …)
    (set-window-configuration config)))
Макрос: save-window-excursion forms…

Этот макрос записывает конфигурацию окна выбранного кадра, выполняет forms последовательно, затем восстанавливает предыдущую конфигурацию окна. Возвращаемое значение — значение последней формы в forms.

Большинство кодов Lisp не должны использовать этот макрос; save-selected-window обычно достаточно. В частности, этот макрос не может надёжно предотвратить открытие новых окон кодом в forms, потому что новые окна могут быть открыты в других кадрах (см. Выбор окна), и save-window-excursion сохраняет и восстанавливает конфигурацию окна только в текущем кадре.

Функция: window-configuration-p object

Эта функция возвращает t, если object — конфигурация окна.

Функция: compare-window-configurations config1 config2

Эта функция сравнивает две конфигурации окон с точки зрения структуры окон, но игнорирует значения точки и сохранённые позиции прокрутки — она может вернуть t, даже если эти аспекты различаются.

Функция: window-configuration-frame config

Эта функция возвращает кадр, для которого была создана конфигурация окна config.

Другие примитивы для просмотра конфигураций окон были бы уместны, но не реализованы, потому что нам они не понадобились. См. файл winner.el для некоторых дополнительных операций с конфигурациями окон.

Объекты, возвращаемые current-window-configuration, умирают вместе с процессом Emacs. Для сохранения конфигурации окна на диске и чтения её обратно в другой сессии Emacs вы можете использовать описанные ниже функции. Эти функции также полезны для клонирования состояния кадра в произвольное активное окно (set-window-configuration фактически клонирует окна кадра в корневое окно только этого кадра).

Функция: window-state-get &optional window writable

Эта функция возвращает состояние window в виде объекта Lisp. Аргумент window должен быть допустимым окном и по умолчанию равен корневому окну выбранного кадра.

Если необязательный аргумент writable имеет не-nil, это означает, что не следует использовать метки для отслеживания позиций, таких как window-point или window-start. Этот аргумент должен быть не-nil, когда состояние записывается на диск и читается обратно в другой сессии.

Вместе аргумент writable и переменная window-persistent-parameters определяют, какие параметры окна сохраняются этой функцией. См. Параметры окна.

Возвращаемое значение window-state-get может быть использовано в той же сессии для создания копии окна в другом окне. Его также можно записать на диск и считать обратно в другую сессию. В любом случае, используйте следующую функцию для восстановления состояния окна.

Функция: window-state-put state &optional window ignore

Эта функция помещает состояние окна state в window. Аргумент state должен быть состоянием окна, возвращённым предыдущим вызовом window-state-get, см. выше. Необязательный аргумент window может быть активным окном или внутренним окном (см. Окна и кадры). Если window не является активным окном, оно заменяется новым активным окном, созданным в том же кадре перед помещением state в него. Если window — nil, оно помещает состояние окна в новое окно.

Если необязательный аргумент ignore имеет не-nil, это означает, что нужно игнорировать минимальные размеры окон и ограничения на фиксированный размер. Если ignore — safe, это означает, что окна могут быть как минимум одной строкой и/или двумя столбцами.

Функции window-state-get и window-state-put также позволяют обмениваться содержимым двух активных окон. Следующая функция делает именно это:

Команда: window-swap-states &optional window-1 window-2 size

Эта команда меняет состояния двух активных окон window-1 и window-2. window-1 должно указывать на активное окно и по умолчанию равно выбранному. window-2 должно указывать на активное окно и по умолчанию равно окну, следующему за window-1 в циклическом порядке окон, исключая минибуфер и включая активные окна на всех видимых кадрах.

Необязательный аргумент size имеет не-nil, означает, что попробовать поменять размеры window-1 и window-2 тоже. Значение height означает обмен высотами только, значение width означает обмен ширинами только, а t означает обмен и шириной, и высотой, если это возможно. Кадры этой функцией не переразмеряются.

Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Window-Configurations.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API