30.1 创建框架

要创建新框架,请调用函数 make-frame

Command: make-frame &optional parameters

该函数创建并返回一个新框架,显示当前缓冲区。

parameters 参数是一个关联列表,用于指定新框架的框架参数。 See 框架参数。如果你在 parameters 中指定了 terminal 参数,新框架将在该终端上创建。否则,如果你在 parameters 中指定了 window-system 框架参数, 该参数将决定框架显示在文本终端还是图形终端上。See 窗口系统。 如果两者均未指定,新框架将在与当前选中框架相同的终端上创建。

parameters 中未提及的任何参数均使用关联列表 default-frame-alist 中的值作为默认值(see 初始框架参数); 此处仍未指定的参数则从 X 资源或你操作系统上的等效机制中获取默认值 (see X Resources in The GNU Emacs Manual)。 框架创建完成后,该函数会从调用 make-frame 时选中的框架中 继承 frame-inherited-parameters(见下文)中尚未赋值的参数。

注意,在多显示器环境中(see 多终端), 窗口管理器可能不会按照 parameters 中的位置参数 指定的位置摆放框架(see 位置参数)。 例如,某些窗口管理器会将框架显示在包含窗口最大部分的显示器上 (也称为 dominating 主显示器)。

该函数本身不会将新框架设为选中框架。See 输入焦点。 此前选中的框架保持选中状态。但在图形终端上, 窗口系统可能会出于自身原因选中新框架。

Variable: before-make-frame-hook

make-frame 在创建框架之前运行的普通钩子。

Variable: after-make-frame-functions

make-frame 在创建框架之后运行的异常钩子。 after-make-frame-functions 中的每个函数接收一个参数, 即刚刚创建的框架。

注意,由你的初始化文件添加到这些钩子中的函数, 通常不会对初始框架执行,因为 Emacs 只在创建该框架之后 才读取初始化文件。但是,如果初始框架被指定使用独立的 迷你缓冲区框架(see 迷你缓冲区与框架), 则这些函数会在无迷你缓冲区的框架和迷你缓冲区框架上均运行。 或者,你可以在“早期初始化文件”中向这些钩子添加函数 (see 初始化文件),这样它们也会对初始框架生效。

Variable: frame-inherited-parameters

该变量指定新创建框架从当前选中框架继承的框架参数列表。 对于列表中的每个参数(一个符号),若在处理 make-frame 时尚未被赋值,该函数会将创建框架中此参数的值设为 其在选中框架中的对应值。

User Option: server-after-make-frame-hook

当 Emacs 服务器开始使用客户端框架时运行的普通钩子。 该钩子被调用时,客户端框架为当前选中框架。 注意,根据 emacsclient 的调用方式 (see Invoking emacsclient in The GNU Emacs Manual), 该客户端框架可能是为客户端新建的框架, 也可能是服务器为处理客户端命令而复用的已有框架。 See Emacs Server in The GNU Emacs Manual