changeset 97153:989ae5dfb320

(dired-do-chmod): Set default value to the original mode string using absolute notation like u=rwx,g=rx,o=rx. Use it as a new arg `default' of `dired-mark-read-string'. (dired-mark-read-string): Add new optional arg `default'.
author Juri Linkov <juri@jurta.org>
date Thu, 31 Jul 2008 17:17:35 +0000
parents 2ac24d99ed4d
children f239a0459b5c
files lisp/dired-aux.el
diffstat 1 files changed, 15 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/dired-aux.el	Thu Jul 31 16:52:11 2008 +0000
+++ b/lisp/dired-aux.el	Thu Jul 31 17:17:35 2008 +0000
@@ -255,9 +255,20 @@
 Symbolic modes like `g+w' are allowed."
   (interactive "P")
   (let* ((files (dired-get-marked-files t arg))
+	 (modestr (and (stringp (car files))
+		       (nth 8 (file-attributes (car files)))))
+	 (default
+	   (and (stringp modestr)
+		(string-match "^.\\(...\\)\\(...\\)\\(...\\)$" modestr)
+		(replace-regexp-in-string
+		 "-" ""
+		 (format "u=%s,g=%s,o=%s"
+			 (match-string 1 modestr)
+			 (match-string 2 modestr)
+			 (match-string 3 modestr)))))
 	 (modes (dired-mark-read-string
 		 "Change mode of %s to: " nil
-		 'chmod arg files))
+		 'chmod arg files default))
 	 (num-modes (if (string-match "^[0-7]+" modes)
 			(string-to-number modes 8))))
     (dolist (file files)
@@ -358,14 +369,14 @@
 ;; If the current file was used, the list has but one element and ARG
 ;; does not matter. (It is non-nil, non-integer in that case, namely '(4)).
 
-(defun dired-mark-read-string (prompt initial op-symbol arg files)
-  ;; PROMPT for a string, with INITIAL input.
+(defun dired-mark-read-string (prompt initial op-symbol arg files &optional default)
+  ;; PROMPT for a string, with INITIAL input and DEFAULT value.
   ;; Other args are used to give user feedback and pop-up:
   ;; OP-SYMBOL of command, prefix ARG, marked FILES.
   (dired-mark-pop-up
    nil op-symbol files
    (function read-string)
-   (format prompt (dired-mark-prompt arg files)) initial))
+   (format prompt (dired-mark-prompt arg files)) initial nil default))
 
 ;;; Cleaning a directory: flagging some backups for deletion.