2012-12-31 57 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

相關問題