Основные понятия окон Emacs
Окно — это область экрана, которая может быть использована для отображения буфера (см. Буферы). Окна сгруппированы в фреймы (см. Фреймы). Каждый фрейм содержит по крайней мере одно окно; пользователь может разделить фрейм на несколько непересекающихся окон, чтобы просматривать несколько буферов одновременно. Программы Lisp могут использовать несколько окон для различных целей. Например, в Rmail вы можете просмотреть сводку заголовков сообщений в одном окне и содержимое выбранного сообщения в другом окне.
Emacs использует термин «окно» с другим значением, чем в графических настольных средах и оконных системах, таких как X Window System. Когда Emacs запускается на X, каждое графическое окно X, принадлежащее процессу Emacs, соответствует одному фрейму Emacs. Когда Emacs запускается на текстовом терминале, каждый фрейм Emacs заполняет весь экран терминала. В любом случае, фрейм может содержать одно или несколько окон Emacs. Для разграничения мы используем термин окно-системы, когда имеем в виду окно-систему, соответствующее фрейму Emacs.
В отличие от окон X, окна Emacs выложены плитками; они никогда не перекрываются в пределах области своего фрейма. При создании, изменении размера или удалении окна изменения в области окна берутся или отдаются другим окнам в том же фрейме, так что общая площадь фрейма остается неизменной.
В Emacs Lisp окна представлены специальным типом объекта Lisp (см. Тип окна).
- Функция: windowp объект
Эта функция возвращает
t, если объект является окном (отображает ли оно буфер или нет). В противном случае возвращаетnil.
Активное окно — это окно, которое фактически отображает буфер во фрейме.
- Функция: window-live-p объект
Эта функция возвращает
t, если объект является активным окном, иnilв противном случае. Активное окно — это окно, которое отображает буфер.
Окна в каждом фрейме организованы в дерево окон. См. Окна и фреймы. Листовые узлы каждого дерева окон являются активными окнами — теми, которые фактически отображают буферы. Внутренние узлы дерева окон являются внутренними окнами, которые не являются активными.
Действительное окно — это окно, которое является либо активным, либо внутренним. Действительное окно может быть удалено, т.е. удалено из своего фрейма (см. Удаление окон); затем оно больше не является действительным, но объект Lisp, представляющий его, может по-прежнему ссылаться на него из других объектов Lisp. Удаленное окно может быть сделано действительным снова путем восстановления сохраненной конфигурации окон (см. Конфигурации окон).
Вы можете различать действительные окна и удаленные окна с помощью window-valid-p.
- Функция: window-valid-p объект
Эта функция возвращает
t, если объект является активным окном или внутренним окном в дереве окон. В противном случае возвращаетnil, в том числе в случае, когда объект является удаленным окном.
На следующем схематическом изображении показана структура активного окна:
____________________________________________
|________________ 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, (см. Display Custom в Руководство GNU Emacs), тоже не считаются украшениями; они тоже являются частью тела окна.
Внутренние окна не отображают текст и не имеют украшений. Следовательно, понятие «тела» для них не имеет смысла. Фактически, большинство функций, работающих с телом окна, вернут ошибку при применении к внутреннему окну.
По умолчанию, фрейм Emacs имеет одно специальное активное окно, используемое для отображения сообщений и приема пользовательского ввода — окно минибуфера (см. Окна минибуфера). Поскольку окно минибуфера используется для отображения текста, у него есть тело, но нет строки вкладок, строки заголовка или границ. Наконец, окно подсказки, которое используется для отображения подсказки в фрейме подсказки (см. Подсказки), также имеет тело, но не имеет украшений.
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/Basic-Windows.html