【问题标题】:Allow dired-do-copy and dired-do-rename to create new dir on the fly允许 dired-do-copy 和 dired-do-rename 即时创建新目录
【发布时间】:2012-10-21 01:30:31
【问题描述】:

有没有人有一个 emacs lisp hack 允许在 dired-do-copy 或 dired-do-rename 期间动态创建一个新目录?我知道可以在运行这两个命令之一之前创建它。某些类型的“你确定...”提示的加分。

【问题讨论】:

    标签: emacs elisp file-management dired


    【解决方案1】:

    这看起来像是一个应用建议的案例。问题是:要做什么 建议。查看 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)))))
    

    请注意,可能会删除第一个 when (when (member op-symbol '(copy move))) 以适用于更多在 dired 中创建文件的情况。但我不确定何时调用 dired-mark-read-file-name,所以我让这个测试在那里减少潜在的不需要的副作用

    【讨论】:

    • 通过评估建议 defun 并使用 dired-do-copy "C" 尝试了测试它错误地显示以下消息。复制c:/Users/family/AppData/Roaming/temp.emacs' to c:/Users/family/AppData/Roaming/temp110/temp.txt' failed: (file-error Copying file no such file or directory c:/Users/family/AppData/Roaming/temp.emacs c: /Users/family/AppData/Roaming/temp110/temp.txt) 我在 windows 和 dired+ 下使用 emacs 24.2,这可能会重新定义 dired-do-copy。有什么建议吗?
    • 它不处理这种情况。我的代码正在做的是创建目录,如果有多个文件要复制或移动,或者如果您已经给出了目录名称作为复制位置的答案...如果我有时间,我会寻找更好的解决方案...
    • 好的,我修好了,这样就更简单了。
    • 效果很好,试了好几个案例。默认情况下,EMACS 应该以这种方式工作。谢谢迈克
    猜你喜欢
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多