From 20f70ede43c938dd9c3c67f231ae6c645464f16e Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Wed, 19 Sep 2012 01:57:45 +0300 Subject: [PATCH] * lisp/dired-aux.el (dired-do-chxxx, dired-do-chmod): Default file attributes for M-n are pulled from the file at point. (dired-do-chgrp, dired-do-chown, dired-do-touch): Doc fix. Suggested by Drew Adams. Fixes: debbugs:10624 --- etc/NEWS | 4 ++++ lisp/ChangeLog | 7 +++++++ lisp/dired-aux.el | 37 +++++++++++++++++++++++++++---------- lisp/dired.el | 10 +++++++++- 4 files changed, 47 insertions(+), 11 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 3344158b73c..35d540a9b85 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -459,6 +459,10 @@ channel keys found, if any. if the command ends in `;' (when operating on multiple files). Otherwise, it executes the command on each file in parallel. +*** Typing M-n in the minibuffer of `dired-do-chmod', `dired-do-chgrp', +`dired-do-chown', `dired-do-touch' pulls the file attributes of the +file at point. + *** The minibuffer default for `=' (`dired-diff) has changed. It is now the backup file for the file at point, if one exists, rather than the file at the mark. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c17eff81100..43eddd7c699 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2012-09-18 Juri Linkov + + * dired-aux.el (dired-do-chxxx, dired-do-chmod): Default file + attributes for M-n are pulled from the file at point. + (dired-do-chgrp, dired-do-chown, dired-do-touch): Doc fix. + Suggested by Drew Adams. (Bug#10624) + 2012-09-18 Dmitry Gutov * progmodes/ruby-mode.el (ruby-brace-to-do-end): Don't add extra diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el index e5ca463e8d4..54f9f03a69c 100644 --- a/lisp/dired-aux.el +++ b/lisp/dired-aux.el @@ -223,10 +223,17 @@ List has a form of (file-name full-file-name (attribute-list))." ;; OP-SYMBOL is the type of operation (for use in `dired-mark-pop-up'). ;; ARG describes which files to use, as in `dired-get-marked-files'. (let* ((files (dired-get-marked-files t arg)) - (default (and (eq op-symbol 'touch) - (stringp (car files)) - (format-time-string "%Y%m%d%H%M.%S" - (nth 5 (file-attributes (car files)))))) + ;; The source of default file attributes is the file at point. + (default-file (dired-get-filename t)) + (default (when default-file + (cond ((eq op-symbol 'touch) + (format-time-string + "%Y%m%d%H%M.%S" + (nth 5 (file-attributes default-file)))) + ((eq op-symbol 'chown) + (nth 2 (file-attributes default-file 'string))) + ((eq op-symbol 'chgrp) + (nth 3 (file-attributes default-file 'string)))))) (prompt (concat "Change " attribute-name " of %s to" (if (eq op-symbol 'touch) " (default now): " @@ -263,11 +270,15 @@ List has a form of (file-name full-file-name (attribute-list))." ;;;###autoload (defun dired-do-chmod (&optional arg) "Change the mode of the marked (or next ARG) files. -Symbolic modes like `g+w' are allowed." +Symbolic modes like `g+w' are allowed. +Type M-n to pull the file attributes of the file at point +into the minibuffer." (interactive "P") (let* ((files (dired-get-marked-files t arg)) - (modestr (and (stringp (car files)) - (nth 8 (file-attributes (car files))))) + ;; The source of default file attributes is the file at point. + (default-file (dired-get-filename t)) + (modestr (when default-file + (nth 8 (file-attributes default-file)))) (default (and (stringp modestr) (string-match "^.\\(...\\)\\(...\\)\\(...\\)$" modestr) @@ -300,7 +311,9 @@ Symbolic modes like `g+w' are allowed." ;;;###autoload (defun dired-do-chgrp (&optional arg) - "Change the group of the marked (or next ARG) files." + "Change the group of the marked (or next ARG) files. +Type M-n to pull the file attributes of the file at point +into the minibuffer." (interactive "P") (if (memq system-type '(ms-dos windows-nt)) (error "chgrp not supported on this system")) @@ -308,7 +321,9 @@ Symbolic modes like `g+w' are allowed." ;;;###autoload (defun dired-do-chown (&optional arg) - "Change the owner of the marked (or next ARG) files." + "Change the owner of the marked (or next ARG) files. +Type M-n to pull the file attributes of the file at point +into the minibuffer." (interactive "P") (if (memq system-type '(ms-dos windows-nt)) (error "chown not supported on this system")) @@ -317,7 +332,9 @@ Symbolic modes like `g+w' are allowed." ;;;###autoload (defun dired-do-touch (&optional arg) "Change the timestamp of the marked (or next ARG) files. -This calls touch." +This calls touch. +Type M-n to pull the file attributes of the file at point +into the minibuffer." (interactive "P") (dired-do-chxxx "Timestamp" dired-touch-program 'touch arg)) diff --git a/lisp/dired.el b/lisp/dired.el index 54921a4ea66..df1b5698f12 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -3744,7 +3744,7 @@ Ask means pop up a menu for the user to select one of copy, move or link." ;;;;;; dired-run-shell-command dired-do-shell-command dired-do-async-shell-command ;;;;;; dired-clean-directory dired-do-print dired-do-touch dired-do-chown ;;;;;; dired-do-chgrp dired-do-chmod dired-compare-directories dired-backup-diff -;;;;;; dired-diff) "dired-aux" "dired-aux.el" "3c768e470d5d053d0049e0286ce38da7") +;;;;;; dired-diff) "dired-aux" "dired-aux.el" "3650b53533253c50b10e2aa8c9005ebf") ;;; Generated autoloads from dired-aux.el (autoload 'dired-diff "dired-aux" "\ @@ -3798,22 +3798,30 @@ Examples of PREDICATE: (autoload 'dired-do-chmod "dired-aux" "\ Change the mode of the marked (or next ARG) files. Symbolic modes like `g+w' are allowed. +Type M-n to pull the file attributes of the file at point +into the minibuffer. \(fn &optional ARG)" t nil) (autoload 'dired-do-chgrp "dired-aux" "\ Change the group of the marked (or next ARG) files. +Type M-n to pull the file attributes of the file at point +into the minibuffer. \(fn &optional ARG)" t nil) (autoload 'dired-do-chown "dired-aux" "\ Change the owner of the marked (or next ARG) files. +Type M-n to pull the file attributes of the file at point +into the minibuffer. \(fn &optional ARG)" t nil) (autoload 'dired-do-touch "dired-aux" "\ Change the timestamp of the marked (or next ARG) files. This calls touch. +Type M-n to pull the file attributes of the file at point +into the minibuffer. \(fn &optional ARG)" t nil) -- 2.11.4.GIT