Spec-Zone.ru › Elisp

Несколько терминалов

Emacs представляет каждый термин как тип данных объект терминала (см. Тип терминала). В системах GNU и Unix Emacs может одновременно использовать несколько терминалов в каждом сеансе. В других системах он может использовать только один терминал. Каждый объект терминала имеет следующие атрибуты:

  • Имя устройства, используемого терминалом (например, ‘:0.0’ или /dev/tty).
  • Системы кодирования терминала и клавиатуры, используемые в терминале. См. Кодировка ввода-вывода терминала.
  • Тип дисплея, связанного с терминалом. Это символ, возвращаемый функцией terminal-live-p (то есть x, t, w32, ns, pc, haiku, pgtk или android). См. Окна.
  • Список параметров терминала. См. Параметры терминала.

Примитива для создания объектов терминала нет. Emacs создает их по мере необходимости, например, когда вы вызываете make-frame-on-display (описанную ниже).

Функция: terminal-name &optional terminal

Эта функция возвращает имя файла устройства, используемого terminal. Если terminal опущен или равен nil, по умолчанию используется терминал выбранного окна. terminal также может быть окном; в этом случае используется терминал этого окна.

Функция: terminal-list

Эта функция возвращает список всех активных объектов терминалов.

Функция: get-device-terminal device

Эта функция возвращает терминал, имя устройства которого задано аргументом device. Если device — строка, это может быть имя файла устройства терминала или имя дисплея X в форме ‘host:server.screen’. Если device — окно, эта функция возвращает терминал этого окна; nil означает выбранное окно. Наконец, если device — объект терминала, представляющий активный терминал, возвращается этот терминал. Функция выдает ошибку, если ее аргумент не относится ни к одному из перечисленных выше типов.

Функция: delete-terminal &optional terminal force

Эта функция удаляет все окна на terminal и освобождает используемые им ресурсы. Она запускает нестандартный хук delete-terminal-functions, передавая terminal в качестве аргумента каждой функции.

Если terminal опущен или равен nil, по умолчанию используется терминал выбранного окна. terminal также может быть окном; в этом случае используется терминал этого окна.

Обычно эта функция выдает ошибку, если вы пытаетесь удалить единственный активный терминал, но если force не равен nil, это разрешается. Emacs автоматически вызывает эту функцию при удалении последнего окна на терминале (см. Удаление окон).

Переменная: delete-terminal-functions

Нестандартный хук, запускаемый функцией delete-terminal. Каждая функция получает один аргумент — аргумент terminal, переданный функции delete-terminal. Из-за технических особенностей функции могут вызываться непосредственно перед удалением терминала или сразу после него.

Некоторые переменные Lisp являются локальными для терминала; то есть для каждого терминала существует отдельная привязка. В любой момент действует привязка для терминала, которому принадлежит текущее выбранное окно. К таким переменным относятся default-minibuffer-frame, defining-kbd-macro, last-kbd-macro и system-key-alist. Они всегда локальны для терминала и никогда не могут быть локальными для буфера (см. Переменные, локальные для буфера).

В системах GNU и Unix каждый дисплей X является отдельным графическим терминалом. При запуске Emacs из оконной системы X он использует дисплей X, указанный в переменной среды DISPLAY или параметром ‘--display’ (см. Параметры запуска в Руководстве по GNU Emacs). Emacs может подключаться к другим дисплеям X с помощью команды make-frame-on-display. У каждого дисплея X есть собственное выбранное окно и собственные окна минибуфера; однако в каждый конкретный момент только одно из этих окон является выбранным окном (см. Фокус ввода). Emacs может подключаться даже к другим текстовым терминалам, взаимодействуя с программой emacsclient. См. Сервер Emacs в Руководстве по GNU Emacs.

Один X-сервер может обслуживать несколько дисплеев. Имя каждого дисплея X состоит из трех частей: ‘hostname:displaynumber.screennumber’. Первая часть, hostname, указывает имя машины, к которой физически подключен дисплей. Вторая часть, displaynumber, — это нумеруемое с нуля значение, обозначающее один или несколько мониторов, подключенных к этой машине и использующих общую клавиатуру и указательное устройство (мышь, планшет и т. д.). Третья часть, screennumber, обозначает номер экрана (отсчет начинается с нуля; экран соответствует отдельному монитору), входящего в состав единой группы мониторов на этом X-сервере. Если вы используете два или более экранов, принадлежащих одному серверу, Emacs определяет по сходству их имен, что они используют одну клавиатуру.

Системы, не использующие оконную систему X, например MS-Windows, не поддерживают понятие дисплеев X и имеют только один дисплей на каждом хосте. Имя дисплея в этих системах не соответствует описанному выше трехчастному формату; например, в системах MS-Windows именем дисплея является постоянная строка ‘w32’. Она существует для обеспечения совместимости, чтобы ее можно было передавать функциям, ожидающим имя дисплея.

Команда: make-frame-on-display display &optional parameters

Эта функция создает и возвращает новое окно на дисплее display, используя остальные параметры окна из списка ассоциаций parameters. display должно быть именем дисплея X (строкой).

Перед созданием окна эта функция проверяет, настроен ли Emacs для отображения графики. Например, если Emacs еще не обработал ресурсы X (например, если он был запущен в текстовом терминале), функция делает это в этот момент. Во всех остальных отношениях эта функция работает так же, как make-frame (см. Создание окон).

Функция: x-display-list

Эта функция возвращает список дисплеев X, с которыми Emacs установил соединение. Элементы списка — строки, каждая из которых является именем дисплея.

Функция: x-open-connection display &optional xrm-string must-succeed

Эта функция устанавливает соединение с дисплеем X display, не создавая на нем окна. Обычно программам на Emacs Lisp не нужно вызывать эту функцию, так как make-frame-on-display вызывает ее автоматически. Единственная причина вызвать ее — проверить, можно ли установить связь с указанным дисплеем X.

Необязательный аргумент xrm-string, если он не равен nil, представляет собой строку с именами и значениями ресурсов в том же формате, что и в файле .Xresources. См. Ресурсы X в Руководстве по GNU Emacs. Эти значения применяются ко всем окнам Emacs, созданным на этом дисплее, и переопределяют значения ресурсов, сохраненные на X-сервере. Пример того, как может выглядеть эта строка:

"*BorderWidth: 3\n*InternalBorder: 2\n"

Если must-succeed не равен nil, сбой при установке соединения приводит к завершению работы Emacs. В противном случае возникает обычная ошибка Lisp.

Функция: x-close-connection display

Эта функция закрывает соединение с дисплеем display. Прежде чем сделать это, необходимо удалить все окна, открытые на этом дисплее (см. Удаление окон).

В некоторых конфигурациях с несколькими мониторами один дисплей X выводит изображение более чем на один физический монитор. Для получения сведений о таких конфигурациях можно использовать функции display-monitor-attributes-list и frame-monitor-attributes.

Функция: display-monitor-attributes-list &optional display

Эта функция возвращает список атрибутов физических мониторов на дисплее display. Аргументом может быть имя дисплея (строка), терминал или окно; если он опущен или равен nil, по умолчанию используется дисплей выбранного окна. Каждый элемент списка — список ассоциаций, представляющий атрибуты физического монитора. Первый элемент соответствует основному монитору. Ключи атрибутов и их значения:

‘geometry’

Положение верхнего левого угла экрана монитора и его размер в пикселях в формате ‘(x y width height)’. Обратите внимание, что у некоторых координат может быть отрицательное значение, если монитор не является основным.

‘workarea’

Положение верхнего левого угла и размер рабочей области (доступного пространства) в пикселях в формате ‘(x y width height)’. Она может отличаться от ‘geometry’, поскольку рабочая область может не включать пространство, занимаемое различными элементами оконного менеджера (док-панелями, панелями задач и т. д.). Вычитание такого пространства из рабочей области зависит от платформы и среды. И здесь у некоторых координат может быть отрицательное значение, если монитор не является основным.

‘mm-size’

Ширина и высота в миллиметрах в формате ‘(width height)’

‘frames’

Список окон, для которых этот физический монитор является доминирующим (см. ниже).

‘name’

Имя физического монитора в виде string.

‘source’

Источник сведений о конфигурации с несколькими мониторами в виде string; в X это может быть ‘XRandR 1.5’, ‘XRandr’, ‘Xinerama’, ‘Gdk’ или ‘fallback’. Последнее значение ‘source’ означает, что Emacs собран без GTK и без расширений XRandR или Xinerama; в этом случае сведения о нескольких физических мониторах будут представлены так, как если бы все они вместе образовывали один монитор.

x, y, width и height — целые числа. Значения ‘name’ и ‘source’ могут отсутствовать.

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

Ниже приведен пример данных, возвращаемых этой функцией для дисплея с двумя мониторами:

  (display-monitor-attributes-list)
  ⇒
  (((geometry 0 0 1920 1080) ;; Left-hand, primary monitor
    (workarea 0 0 1920 1050) ;; A taskbar occupies some of the height
    (mm-size 677 381)
    (name . "DISPLAY1")
    (frames #<frame emacs@host *Messages* 0x11578c0>
            #<frame emacs@host *scratch* 0x114b838>))
   ((geometry 1920 0 1680 1050) ;; Right-hand monitor
    (workarea 1920 0 1680 1050) ;; Whole screen can be used
    (mm-size 593 370)
    (name . "DISPLAY2")
    (frames)))
Функция: frame-monitor-attributes &optional frame

Эта функция возвращает атрибуты физического монитора, доминирующего (см. выше) над frame; по умолчанию используется выбранное окно.

В конфигурациях с несколькими мониторами можно использовать команду make-frame-on-monitor, чтобы создавать окна на указанном мониторе.

Команда: make-frame-on-monitor monitor &optional display parameters

Эта функция создает и возвращает новое окно на мониторе monitor, расположенном на дисплее display, используя остальные параметры окна из списка ассоциаций parameters. monitor должно быть именем физического монитора — той же строкой, которую возвращает функция display-monitor-attributes-list для атрибута name. display должно быть именем дисплея X (строкой).

Переменная: display-monitors-changed-functions

Эта переменная является нестандартным хуком, который запускается при изменении конфигурации мониторов. Такое может произойти, если монитор повернули, переместили, добавили в конфигурацию с несколькими мониторами или удалили из нее, если изменился основной монитор или разрешение монитора. Хук вызывается с одним аргументом — терминалом, на котором изменилась конфигурация мониторов. Для получения новой конфигурации мониторов на этом терминале программы должны вызвать display-monitor-attributes-list, передав терминал в качестве аргумента.

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/Multiple-Terminals.html

Spec-Zone.ru

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