【发布时间】:2015-08-31 21:39:30
【问题描述】:
我正在使用 define-auto-insert '("\.org\'" . "org skeleton") 宏来插入标题。每当我创建任何新的 org 文件时,它都可以正常工作。但它也将自动标题插入到另一个空的 orgs 文件(出于某种特殊原因使用 touch 命令创建)。有人可以建议我以任何方式使宏在我在emacs中打开它们时不会在已创建的空文件中添加标题吗?
【问题讨论】:
我正在使用 define-auto-insert '("\.org\'" . "org skeleton") 宏来插入标题。每当我创建任何新的 org 文件时,它都可以正常工作。但它也将自动标题插入到另一个空的 orgs 文件(出于某种特殊原因使用 touch 命令创建)。有人可以建议我以任何方式使宏在我在emacs中打开它们时不会在已创建的空文件中添加标题吗?
【问题讨论】:
Autoinsert 并不是真正为区分而设计的。实现这一点的最简单方法是将自动插入函数与另一个函数包装起来,然后将其注册到新的文件挂钩中。例如:
(defun auto-insert-guard ()
"Prevent auto-insertion for files that exist already"
(interactive)
(unless (file-exists-p (buffer-file-name))
(auto-insert)))
用这个代替钩子:
(add-hook 'find-file-hook 'auto-insert-guard)
它显然可以比这更复杂,您可能只想对某些类型的文件使用此保护。
有时您会看到使用 defadvice 完成的类似操作,但这通常更脆弱,当您稍后返回时可能难以理解。
【讨论】: