Spec-Zone.ru › Elisp

Разделение и объединение фреймов

Следующие две функции полезны для переноса частей раскладки окон (см. Основные понятия об окнах Emacs) одного фрейма в два отдельных фрейма, а также для объединения раскладок окон двух отдельных фреймов в один фрейм.

Команда: split-frame &optional frame arg

Эта команда переносит некоторые окна указанного фрейма frame в новый фрейм, а затем удаляет их из frame. frame должен быть действующим фреймом; по умолчанию используется выбранный фрейм. arg задаёт количество переносимых окон; по умолчанию это значение равно 1. В интерактивном режиме arg — это префиксный аргумент.

На первом шаге дочерние окна (см. Окна и фреймы) главного окна фрейма frame (см. Боковые окна) делятся на две части. Первая часть включает первые arg дочерних окон, если arg положительно, и последние −arg дочерних окон, если arg отрицательно. Во вторую часть входят остальные дочерние окна главного окна фрейма frame.

На втором шаге каждое окно той части, в которую не входит выбранное окно фрейма frame (см. Выбор окон), клонируется (см. Конфигурации окон) в созданный новый фрейм, а затем удаляется из frame. Обратите внимание, что на этом шаге исходная идентичность клонированных окон (см. Основные понятия об окнах Emacs) утрачивается. Однако идентичность окон, оставшихся во фрейме frame, сохраняется. На последнем шаге клонированные окна удаляются из frame, после чего возвращается созданный новый фрейм.

Эта функция сигнализирует об ошибке, если arg равно нулю или не является числом, либо если главное окно фрейма frame является действующим или содержит не больше дочерних окон, чем указано абсолютным значением arg.

Команда: merge-frames &optional frame1 frame2 vertical

Эта команда переносит главное окно (см. Боковые окна) фрейма frame2 во фрейм frame1. И frame1, и frame2 должны указывать на действующие фреймы.

На первом шаге главное окно фрейма frame1 разделяется. Если vertical не равен nil, новое окно создаётся под старым главным окном фрейма frame1. В противном случае новое окно создаётся справа от главного окна фрейма frame1.

На втором шаге новое окно становится клоном (см. Конфигурации окон) главного окна фрейма frame2. На этом шаге исходная идентичность клонированных окон (см. Основные понятия об окнах Emacs) утрачивается. На последнем шаге, если объединение прошло успешно, фрейм frame2 удаляется, после чего возвращается frame1.

В интерактивном режиме vertical — это префиксный аргумент, frame1 — выбранный фрейм, а frame2 — фрейм, следующий за frame1 в списке всех фреймов (см. Поиск всех фреймов). Если в вызовах из Lisp аргументы frame1 и frame2 опущены или равны nil, им присваиваются указанные выше значения по умолчанию.

Как правило, последующий вызов merge-frames не позволяет «отменить» вызов split-frame по следующим причинам: на втором шаге merge-frame помещает главное окно фрейма frame2 во внутреннее окно, созданное при разделении на первом шаге. В конфигурации фрейма frame1 до вызова split-frame такого окна не было. Кроме того, после завершения объединения окно, клонированное из главного окна фрейма frame2, займёт столько же места, сколько занимало главное окно фрейма frame1 до объединения. Это может не соответствовать исходному распределению пространства в раскладке.

Поэтому, если вы предпочитаете временно отделять окна для работы с ними в отдельном фрейме, а затем возвращаться к исходной раскладке исходного фрейма, поступайте следующим образом: сохраните конфигурацию (см. Конфигурации окон) исходного фрейма, вызовите split-frame для создания отдельного фрейма, а затем восстановите сохранённую конфигурацию исходного фрейма и удалите отдельный фрейм.

Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Splitting-and-Merging-Frames.html

Spec-Zone.ru

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