Emacs 将每个终端表示为一个 terminal object(终端对象) 数据类型 (see 终端类型)。在 GNU 和类 Unix 系统上,Emacs 可以在每个会话中 同时使用多个终端。在其他系统上,它只能使用单个终端。每个终端对象具有 以下属性:
terminal-live-p 返回的符号
(即 x、t、w32、ns、pc、haiku、
pgtk 或 android)。See 框架。
没有用于直接创建终端对象的原语。Emacs 会在需要时自动创建,
例如当你调用 make-frame-on-display(见下文)时。
该函数返回 terminal 所使用设备的文件名。
如果 terminal 被省略或为 nil,则默认为当前选中框架所属的终端。
terminal 也可以是一个框架,表示该框架所属的终端。
该函数返回所有可用终端对象的列表。
该函数返回设备名为 device 的终端。
如果 device 是字符串,它可以是终端设备的文件名,
或是格式为 ‘host:server.screen’ 的 X 显示器名称。
如果 device 是一个框架,该函数返回该框架所属的终端;
nil 表示当前选中框架。最后,如果 device 是表示可用终端的
终端对象,则直接返回该终端。如果参数不属于以上任何一种,
该函数会抛出错误。
该函数删除 terminal 上的所有框架并释放其占用的资源。
它会运行异常钩子 delete-terminal-functions,
并将 terminal 作为参数传递给每个函数。
如果 terminal 被省略或为 nil,则默认为当前选中框架所属的终端。
terminal 也可以是一个框架,表示该框架所属的终端。
通常情况下,如果你尝试删除唯一的活动终端,该函数会抛出错误,
但如果 force 为非 nil,则允许执行此操作。
当某个终端上的最后一个框架被删除时,Emacs 会自动调用此函数
(see 删除框架)。
由 delete-terminal 运行的异常钩子。
每个函数接收一个参数,即传递给 delete-terminal 的
terminal 参数。由于技术细节,这些函数可能在终端删除之前
或删除之后立即被调用。
少数 Lisp 变量是 terminal-local(终端局部的);
也就是说,它们为每个终端保留独立的绑定。任何时刻生效的绑定,
都属于当前选中框架所在的终端。这些变量包括
default-minibuffer-frame、defining-kbd-macro、
last-kbd-macro 和 system-key-alist。
它们始终是终端局部的,永远不能成为缓冲区局部的
(see 缓冲区局部变量)。
在 GNU 和类 Unix 系统上,每个 X 显示器都是独立的图形终端。
当 Emacs 在 X 窗口系统内启动时,它会使用由环境变量 DISPLAY
或 ‘--display’ 选项指定的 X 显示器(see Initial Options in The GNU Emacs Manual)。Emacs 可以通过命令
make-frame-on-display 连接到其他 X 显示器。
每个 X 显示器都有自己的选中框架和自己的迷你缓冲区窗口;
但在任意时刻,只有其中一个框架是全局选中框架
(see 输入焦点)。Emacs 还可以通过与 emacsclient 程序交互,
连接到其他文本终端。See Emacs Server in The GNU Emacs Manual。
单个 X 服务器可以管理多个显示器。每个 X 显示器都有一个三部分组成的名称: ‘hostname:displaynumber.screennumber’。 第一部分 hostname 指定显示器物理连接的机器名称。 第二部分 displaynumber 是从 0 开始编号的数字, 用于标识连接到该机器、共享同一键盘和定点设备(鼠标、数位板等)的 一个或多个显示器。第三部分 screennumber 标识从 0 开始的屏幕编号 (独立显示器),属于该 X 服务器上的一个显示器集合。 当你使用属于同一服务器的两个或多个屏幕时,Emacs 会通过名称的相似性 识别它们共享同一个键盘。
不使用 X 窗口系统的系统(例如 MS-Windows)不支持 X 显示器的概念, 并且每台主机上只有一个显示器。这些系统上的显示器名称不遵循上述三段式格式; 例如,MS-Windows 系统上的显示器名称是常量字符串 ‘w32’, 它的存在仅为兼容,以便你可以将其传递给期望接收显示器名称的函数。
该函数在 display 上创建并返回一个新框架, 其他框架参数取自关联列表 parameters。 display 应为 X 显示器的名称(字符串)。
在创建框架之前,该函数会确保 Emacs 已设置为显示图形。
例如,如果 Emacs 尚未处理 X 资源(例如在文本终端上启动时),
会在此刻进行处理。在其他所有方面,该函数的行为与 make-frame 相同
(see 创建框架)。
该函数返回一个列表,标明 Emacs 已连接到哪些 X 显示器。 列表中的元素为字符串,每个字符串都是一个显示器名称。
该函数打开到 X 显示器 display 的连接,
但不在该显示器上创建框架。通常 Emacs Lisp 程序无需调用此函数,
因为 make-frame-on-display 会自动调用它。
调用该函数的唯一用途是检查能否与指定 X 显示器建立通信。
可选参数 xrm-string 如果不为 nil,
则是一个包含资源名称与值的字符串,格式与 .Xresources 文件相同。
See X Resources in The GNU Emacs Manual.
这些值会应用于在此显示器上创建的所有 Emacs 框架,
并覆盖 X 服务器中记录的资源值。下面是该字符串的示例:
"*BorderWidth: 3\n*InternalBorder: 2\n"
如果 must-succeed 为非 nil,
打开连接失败会直接终止 Emacs。否则会抛出普通的 Lisp 错误。
该函数关闭到显示器 display 的连接。 执行此操作之前,你必须先删除该显示器上所有已打开的框架 (see 删除框架)。
在某些多显示器配置中,单个 X 显示器会输出到多个物理显示器。
你可以使用函数 display-monitor-attributes-list 和
frame-monitor-attributes 获取此类配置的相关信息。
该函数返回 display 上的物理显示器属性列表,
其中 display 可以是显示器名称(字符串)、终端或框架;
如果省略或为 nil,则默认为当前选中框架的显示器。
列表中的每个元素都是一个关联列表,表示一个物理显示器的属性。
第一个元素对应主显示器。属性键与值如下:
显示器屏幕左上角的位置及其尺寸,单位为像素, 格式为 ‘(x y width height)’。 注意,如果该显示器不是主显示器,部分坐标可能为负数。
工作区域(可用空间)的左上角位置与尺寸,单位为像素, 格式为 ‘(x y width height)’。 该值可能与 ‘geometry’ 不同,因为各种窗口管理器组件(停靠栏、任务栏等) 占用的空间可能会被排除在工作区域之外。 这些组件是否会缩减工作区域取决于平台与环境。 同样,如果该显示器不是主显示器,部分坐标可能为负数。
宽度与高度,单位为毫米,格式为 ‘(width height)’
被该物理显示器主导的框架列表(见下文)。
物理显示器的名称,为 string 类型。
多显示器信息的来源,为 string 类型; 在 X 环境下可能为 ‘XRandR 1.5’、‘XRandr’、‘Xinerama’、 ‘Gdk’ 或 ‘fallback’。最后一种 ‘source’ 值表示 Emacs 编译时未启用 GTK 且无 XRandR 或 Xinerama 扩展, 此时多物理显示器信息会被视为整体构成单个显示器。
x、y、width 和 height 均为整数。 ‘name’ 和 ‘source’ 可能不存在。
当一个框架的最大区域位于某物理显示器内时, 该框架即由该显示器 dominated 主导; 或者(如果框架与任何物理显示器都不相交) 距离该框架最近的显示器为主导显示器。 图形显示中的每个(非工具提示)框架(无论是否可见) 在同一时刻都恰好由一个物理显示器主导, 尽管框架可以跨多个(或不跨任何)物理显示器。
以下是该函数在双显示器上返回数据的示例:
(display-monitor-attributes-list) ⇒ (((geometry 0 0 1920 1080) ;; 左侧主显示器 (workarea 0 0 1920 1050) ;; 任务栏占用了部分高度 (mm-size 677 381) (name . "DISPLAY1") (frames #<frame emacs@host *Messages* 0x11578c0> #<frame emacs@host *scratch* 0x114b838>)) ((geometry 1920 0 1680 1050) ;; 右侧显示器 (workarea 1920 0 1680 1050) ;; 整个屏幕均可使用 (mm-size 593 370) (name . "DISPLAY2") (frames)))
该函数返回主导(见上文)frame 的物理显示器属性, frame 默认为当前选中框架。
在多显示器上,可以使用命令 make-frame-on-monitor
在指定显示器上创建框架。
该函数在位于 display 上的 monitor 上创建并返回新框架,
其他框架参数取自关联列表 parameters。
monitor 应为物理显示器的名称,
与函数 display-monitor-attributes-list 在属性 name 中
返回的字符串相同。display 应为 X 显示器名称(字符串)。
该变量是一个异常钩子,当显示器配置发生变化时会被运行,
例如多显示器配置中显示器被旋转、移动、添加或移除,
主显示器变更,或显示器分辨率改变时。
调用时会传入一个参数,即显示器配置发生变化的终端。
程序应使用该终端作为参数调用 display-monitor-attributes-list,
以获取该终端上新的显示器配置。