2012-10-21 22 views

回答

3

它看起來像應用建議的情況。問題是:什麼 意見。看看dired代碼,看起來正確的目標是 dired-mark-read-file-name,用於讀取目標文件名 。這將工作:

(defadvice dired-mark-read-file-name (after rv:dired-create-dir-when-needed (prompt dir op-symbol arg files &optional default) activate) 
    (when (member op-symbol '(copy move)) 
    (let ((directory-name (if (< 1 (length files)) 
           ad-return-value 
           (file-name-directory ad-return-value)))) 
     (when (and (not (file-directory-p directory-name)) 
       (y-or-n-p (format "directory %s doesn't exist, create it?" directory-name))) 
     (make-directory directory-name t))))) 

注意,也許第一whenwhen (member op-symbol '(copy move)))可以移除,以用於在dired這適用於文件創建更多的案例。但我不確定是什麼時候調用了dired-mark-read-file-name,所以我讓這個測試在那裏以減少潛在的不需要的副作用

+0

通過評估建議defun並使用dired-do-複製「C」它與以下消息出錯。複製'c:/Users/family/AppData/Roaming/temp.emacs'到'c:/Users/family/AppData/Roaming/temp110/temp.txt'失敗: (文件錯誤複製文件沒有這樣的文件或目錄c:/Users/family/AppData/Roaming/temp.emacs c:/Users/family/AppData/Roaming/temp110/temp.txt) 我在windows和dired +下使用emacs 24.2,它可能會重新定義dired-do-copy。有什麼建議麼? – Mikef

+0

它不處理這種情況。我的代碼正在做的是創建目錄,如果有幾個文件需要複製或移動,或者如果你已經給出了一個目錄名稱作爲複製到的位置的答案......我會尋找更好的解決方案如果我有時間... –

+0

好的,我修好了,它更簡單。 –