如何防止emacs在没有警告的情况下覆盖文件?

时间:2012-12-31 02:37:31

标签: emacs

在两个不同的场合,我用emacs覆盖了重要文件,直到后来才意识到这一点。发生这种情况是因为各种命令(特别是org-agenda-writeorg-export)将简单地替换现有文件,而不会警告已存在具有该名称的文件。有没有办法配置emacs以便不会发生这种情况?

1 个答案:

答案 0 :(得分:1)

org-agenda-write使用write-file来保存您的日程。从程序调用时,此函数将覆盖现有文件而无需确认。 write-file深埋在org-agenda-write内,并且直接修改它可能会在Emacs的其他地方引起令人惊讶的错误。但是,您可以将org-agenda-write包含在around建议中。这是一种巧妙的方法来添加对文件存在的检查,并在覆盖之前提醒用户。

(defadvice org-agenda-write (around my-file-check)
  "Check if a file exists before writing the agenda to it."
  (if (file-exists-p file)
      (if (y-or-n-p (format "Overwrite %s?" file))
          ad-do-it)
    ad-do-it))

(ad-activate 'org-agenda-write)

这可能有资格成为org-agenda-write中的错误,如果你在orgmode邮件列表上很好地提问,他们可能会确信这个检查是默认行为。

org-export的文件编写行为看起来更复杂一些,可能会利用外部程序来完成。不过,如果你愿意,你可以使用类似的包装。