Spec-Zone.ru › Elisp

Основные понятия окон Emacs

Окно — это область экрана, которую можно использовать для отображения буфера (см. Буферы). Окна объединяются в кадры (см. Кадры). Каждый кадр содержит как минимум одно окно; пользователь может разделить кадр на несколько неперекрывающихся окон, чтобы одновременно просматривать несколько буферов. Программы на Lisp могут использовать несколько окон для самых разных целей. Например, в Rmail можно просматривать сводку заголовков сообщений в одном окне, а содержимое выбранного сообщения — в другом окне.

В Emacs термин «окно» имеет значение, отличное от того, которое принято в графических средах рабочего стола и оконных системах, таких как X Window System. Когда Emacs запущен в X, каждому графическому окну X, принадлежащему процессу Emacs, соответствует один кадр Emacs. Когда Emacs запущен в текстовом терминале, каждый кадр Emacs занимает весь экран терминала. В обоих случаях кадр может содержать одно или несколько окон Emacs. Чтобы избежать неоднозначности, мы используем термин окно оконной системы, когда имеем в виду окно оконной системы, соответствующее кадру Emacs.

В отличие от окон X, окна Emacs расположены плиткой; они никогда не перекрывают друг друга в пределах кадра. При создании, изменении размера или удалении окна освободившееся или необходимое пространство берётся у других окон того же кадра или передаётся им, поэтому общая площадь кадра не меняется. Расположение окон кадра — это результат всех операций по размещению окон в этом кадре.

В Emacs Lisp окна представлены специальным типом объектов Lisp (см. Тип окна). Два окна идентичны тогда и только тогда, когда они представлены одним и тем же объектом Lisp.

Функция: windowp object

Эта функция возвращает t, если object является окном (независимо от того, отображает ли оно буфер). В противном случае она возвращает nil.

Активное окно — это окно, которое действительно отображает буфер в кадре.

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

Эта функция возвращает t, если object является активным окном, и nil в противном случае. Активное окно отображает буфер.

Окна в каждом кадре организованы в дерево окон. См. Окна и кадры. Листовые узлы каждого дерева окон — это активные окна, то есть окна, фактически отображающие буферы. Внутренние узлы дерева окон — это внутренние окна, которые не являются активными.

Допустимое окно — это активное или внутреннее окно. Допустимое окно можно удалить, то есть убрать из кадра (см. Удаление окон); после этого оно перестаёт быть допустимым, но объект Lisp, представляющий его, всё ещё может быть доступен по ссылкам из других объектов Lisp. Удалённое окно можно снова сделать допустимым, восстановив сохранённую конфигурацию окон (см. Конфигурации окон).

Отличить допустимые окна от удалённых можно с помощью window-valid-p.

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

Эта функция возвращает t, если object является активным окном или внутренним окном в дереве окон. В противном случае она возвращает nil, в том числе если object является удалённым окном.

На следующей схеме показана структура активного окна:

        ____________________________________________
       |________________ Tab Line _______________|RD| ^
       |______________ Header Line ______________|  | |
     ^ |LS|LM|LF|                       |RF|RM|RS|  | |
     | |  |  |  |                       |  |  |  |  | |
Window |  |  |  |                       |  |  |  |  | Window
Body | |  |  |  |      Window Body      |  |  |  |  | Total
Height |  |  |  |                       |  |  |  |  | Height
     | |  |  |  |<- Window Body Width ->|  |  |  |  | |
     v |__|__|__|_______________________|__|__|__|  | |
       |_________ Horizontal Scroll Bar _________|  | |
       |_______________ Mode Line _______________|__| |
       |_____________ Bottom Divider _______________| v
        <---------- Window Total Width ------------>

В центре этого окна находится основная область, в которой отображается текст буфера. Основная область может быть окружена рядом необязательных областей, которые мы будем называть элементами оформления окна. Слева и справа, от внутренних к внешним, расположены левая и правая каймы, обозначенные LF и RF (см. Каймы); левое и правое поля, обозначенные на схеме LM и RM (см. Отображение в полях); левая или правая вертикальная полоса прокрутки, из которых в каждый момент времени присутствует только одна, обозначенная LS или RS (см. Полосы прокрутки); и правый разделитель, обозначенный RD (см. Разделители окон). Вместе они образуют левые и правые элементы оформления окна.

В верхней части окна находятся строка вкладок и строка заголовка (см. Строки заголовка окна). Область текста окна включает строку заголовка и строку вкладок, если они присутствуют в окне. В нижней части окна находятся горизонтальная полоса прокрутки (см. Полосы прокрутки); строка режима (см. Формат строки режима); и нижний разделитель (см. Разделители окон). Вместе они образуют верхние и нижние элементы оформления окна.

На схеме не показаны две особые области:

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

В обоих случаях получившийся элемент считается частью основной области окна, хотя занимаемое им место на экране нельзя использовать для отображения текста буфера.

Обратите также внимание, что номера строк (и окружающие их пробелы), отображаемые с помощью display-line-numbers-mode (см. Настройка отображения в Руководстве GNU Emacs), также не считаются элементами оформления; они тоже являются частью основной области окна.

Внутренние окна не отображают текст и не имеют элементов оформления. Поэтому понятие «основная область» к ним неприменимо. В действительности большинство функций, работающих с основной областью окна, при вызове для внутреннего окна завершаются ошибкой.

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

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/Basic-Windows.html

Spec-Zone.ru

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