2014-05-03 2 views
3

Когда я ввожу r в Emacs dirmode, он переходит в режим, который позволяет выполнять операции с каталогом (например, переименование, перемещение, удаление) путем редактирования списка.Создание каталога путем редактирования

У меня есть определенный файл, скажем, foo, и я хочу, чтобы создать новый каталог ниже его исходный каталог, имя этого каталога в качестве foo, и переместить файл в этот каталог, и дать ему другое имя, скажем bar :

/path/to/the/file/foo 
↓ 
/path/to/the/file/foo/bar 

Я отредактировал список в этом режиме и сохранил, но операция не удалась. Похоже, что редактирование не позволяет создавать каталоги. Есть ли какой-то хак, который я могу сделать, чтобы это стало возможным?

У меня есть много подобных задач, и редактирование на emacs dirmode проще всего для меня, чем запись сценария оболочки для его выполнения.

+1

Звучит как очень полезная функция, добавленная в wdired, поэтому я предлагаю вам «M-x report-emacs-bug» с просьбой об этой новой функции. – Stefan

ответ

2

Вы можете переопределить реализацию wdired-do-renames следующим образом (идея в том только, чтобы создать родительский каталог для каждого файла назначения, прежде чем делать переименование):

diff --git a/lisp/wdired.el b/lisp/wdired.el 
index 2e53944..cc838cf 100644 
--- a/lisp/wdired.el 
+++ b/lisp/wdired.el 
@@ -490,6 +490,7 @@ non-nil means return old filename." 
       (require 'dired-aux) 
       (condition-case err 
        (let ((dired-backup-overwrite nil)) 
+     (wdired-create-parentdirs file-new) 
        (dired-rename-file file-ori file-new 
             overwrite)) 
       (error 
@@ -499,6 +500,10 @@ non-nil means return old filename." 
          err))))))))) 
    errors)) 

+(defun wdired-create-parentdirs (file-new) 
+ "Create parent directories of destination filename." 
+ (message "create dir for file %s" file-new) 
+ (make-directory (file-name-directory file-new) t)) 

(defun wdired-exit() 
    "Exit wdired and return to dired mode. 

Источник: Йоаким Verona через http://www.emacswiki.org/emacs/WDired#toc1 (я вымыл патч только немного)

1

AFAIK, вы не можете создать каталог таким образом, то есть в режиме wdired (именно это вы используете, когда Dired buffer доступен для редактирования).

Однако вы можете просто выйти из wdired (C-x C-q), а затем использовать + для создания каталога.

(Кстати, я думаю, что у вас есть опечатка:. C-r в Dired не переключается в режим wdired, т.е. редактируемость/только для чтения Это просто вызывает isearch-backward используется C-x C-q для переключения только для чтения.).