find-file-noselect 函数使用两个重要子例程,它们在用户 Lisp 代码中有时也很有用:create-file-buffer 与 after-find-file。本节说明它们的用法。
该函数为访问 filename 创建一个名称合适的框架并返回。若名称未被占用,则直接使用 filename(不含目录部分);否则附加类似 ‘<2>’ 的字符串以获得未占用名称。另见 Creating Buffers。 注意 uniquify 库会影响该函数的结果。参见 See Uniquify in The GNU Emacs Manual。
注意: create-file-buffer 不会将新框架与文件关联,也不会选中该框架。它同样不会使用默认主模式。
(create-file-buffer "foo")
⇒ #<buffer foo>
(create-file-buffer "foo")
⇒ #<buffer foo<2>>
(create-file-buffer "foo")
⇒ #<buffer foo<3>>
该函数被 find-file-noselect 使用。
它内部调用 generate-new-buffer(see Creating Buffers)。
该函数设置框架主模式,并解析局部变量(see Emacs 如何选择主模式)。它由 find-file-noselect 与默认的恢复函数调用(see 恢复缓冲区)。
若因文件不存在(但其所在目录存在)导致读取文件出错,调用方应为 error 传入非 nil 值。此时 after-find-file 会发出警告:‘(New file)’。若为更严重的错误,调用方通常不应调用 after-find-file。
若 warn 非 nil,当存在比被访问文件更新的自动保存文件时,该函数会发出警告。
若 noauto 非 nil,表示不启用或禁用自动保存模式。该模式会保持之前的启用状态不变。
若 after-find-file-from-revert-buffer 非 nil,表示本次调用来自 revert-buffer。该参数本身无直接效果,但部分模式函数与钩子函数会检查其值。
若 nomodes 非 nil,表示不修改框架主模式、不处理文件中的局部变量设置、不运行 find-file-hook。该特性在某些情况下被 revert-buffer 使用。
after-find-file 执行的最后一步是调用列表 find-file-hook 中的所有函数。