2012-12-31 56 views
1

在两种不同的情况下,我用emacs覆盖了重要的文件,直到后来才意识到它。发生这种情况的原因是各种命令(特别是org-agenda-writeorg-export)只会替换现有文件,而不会发出具有该名称的文件已存在的警告。有没有办法配置emacs,这样就不会发生?如何防止emacs在不发出警告的情况下覆盖文件?

+4

您可以举出覆盖文件的命令示例吗? – Juancho

+1

是的,请提供重现步骤。 –

回答

1

org-agenda-write使用write-file来保存您的日程。当从程序调用该函数时,该函数将覆盖现有文件而无需确认。 write-file被深埋在org-agenda-write之内,并且直接修改它可能会导致Emacs其他地方出现令人惊讶的错误。但是,您可以将org-agenda-write换成周围的建议。这是一种简洁的方式来添加对文件存在的检查,并在覆盖文件之前提醒用户。

(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) 

这可能有资格作为一个bug在org-agenda-write,如果你的org-模式邮件列表上很好地询问他们可能会被说服,使这个检查的默认行为。

org-export的文件写入行为看起来有点牵扯,可能会借鉴外部程序来完成。不过,如果你愿意的话,你可以使用类似的包装。

+0

谢谢,我会试一试这段代码。我认为如果没有适用于任何试图覆盖现有文件而没有警告的功能的全局解决方案? –

+0

你可以建议'写入文件'。但是,像这样的基本功能混淆是有风险的,因为写文件被许多其他代码使用。大多数文件写入功能已经检查覆盖。如果他们不这可能是一个应该修复的错误。这是最好的全球解决方案。 – Tyler

相关问题