Spec-Zone.ru › Elisp

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

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

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

Нет примитива для создания объектов терминала. 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 Windows, он использует 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 Windows, такие как 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’

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

‘source’

Источник информации о многомониторной настройке как строка; например, ‘XRandr’ или ‘Xinerama’.

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

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

Вот пример данных, полученных от этой функции на дисплее с 2 мониторами:

  (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 (строка).

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

Spec-Zone.ru

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