(define-key map "t" 'dired-do-toggle)
(define-key map "u" 'dired-unmark)
(define-key map "v" 'dired-view-file)
+ (define-key map "w" 'dired-copy-filename-as-kill)
(define-key map "x" 'dired-do-flagged-delete)
(define-key map "y" 'dired-show-file-type)
(define-key map "+" 'dired-create-directory)
nil
(point))))
+\f
+;;; COPY NAMES OF MARKED FILES INTO KILL-RING.
+
+(defun dired-copy-filename-as-kill (&optional arg)
+ "Copy names of marked (or next ARG) files into the kill ring.
+The names are separated by a space.
+With a zero prefix arg, use the complete pathname of each marked file.
+With \\[universal-argument], use the relative pathname of each marked file.
+
+If on a subdir headerline, use subdirname instead; prefix arg is ignored
+in this case.
+
+You can then feed the file name(s) to other commands with \\[yank]."
+ (interactive "P")
+ (let ((string
+ (or (dired-get-subdir)
+ (mapconcat (function identity)
+ (if arg
+ (cond ((zerop (prefix-numeric-value arg))
+ (dired-get-marked-files))
+ ((integerp arg)
+ (dired-get-marked-files 'no-dir arg))
+ (t ; else a raw arg
+ (dired-get-marked-files t)))
+ (dired-get-marked-files 'no-dir))
+ " "))))
+ (kill-new string)
+ (message "%s" string)))
+
\f
;; Keeping Dired buffers in sync with the filesystem and with each other