diff options
Diffstat (limited to 'lisp/wdired.el')
-rw-r--r-- | lisp/wdired.el | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/lisp/wdired.el b/lisp/wdired.el index d91853e64dd..40f4cd97190 100644 --- a/lisp/wdired.el +++ b/lisp/wdired.el @@ -4,7 +4,7 @@ ;; Filename: wdired.el ;; Author: Juan León Lahoz García <juanleon1@gmail.com> -;; Version: 2.0 +;; Old-Version: 2.0 ;; Keywords: dired, environment, files, renaming ;; This file is part of GNU Emacs. @@ -344,7 +344,7 @@ non-nil means return old filename." ;; Don't unquote the old name, it wasn't quoted in the first place (and file (setq file (wdired-normalize-filename file (not old))))) (if (or no-dir old) - file + (if no-dir (file-relative-name file) file) (and file (> (length file) 0) (concat (dired-current-directory) file)))))) @@ -461,10 +461,12 @@ non-nil means return old filename." (defun wdired-do-renames (renames) "Perform RENAMES in parallel." - (let ((residue ()) - (progress nil) - (errors 0) - (overwrite (or (not wdired-confirm-overwrite) 1))) + (let* ((residue ()) + (progress nil) + (errors 0) + (total (1- (length renames))) + (prep (make-progress-reporter "Renaming" 0 total)) + (overwrite (or (not wdired-confirm-overwrite) 1))) (while (or renames ;; We've done one round through the renames, we have found ;; some residue, but we also made some progress, so maybe @@ -472,6 +474,7 @@ non-nil means return old filename." (prog1 (setq renames residue) (setq progress nil) (setq residue nil))) + (progress-reporter-update prep (- total (length renames))) (let* ((rename (pop renames)) (file-new (cdr rename))) (cond @@ -519,6 +522,7 @@ non-nil means return old filename." (dired-log "Rename `%s' to `%s' failed:\n%s\n" file-ori file-new err))))))))) + (progress-reporter-done prep) errors)) (defun wdired-create-parentdirs (file-new) @@ -609,7 +613,10 @@ Optional arguments are ignored." (defun wdired--restore-dired-filename-prop (beg end _len) (save-match-data (save-excursion - (let ((lep (line-end-position))) + (let ((lep (line-end-position)) + (used-F (dired-check-switches + dired-actual-switches + "F" "classify"))) (beginning-of-line) (when (re-search-forward directory-listing-before-filename-regexp lep t) @@ -623,13 +630,17 @@ Optional arguments are ignored." (and (re-search-backward dired-permission-flags-regexp nil t) (looking-at "l") - (search-forward " -> " lep t)) + ;; macOS and Ultrix adds "@" to the end + ;; of symlinks when using -F. + (if (and used-F + dired-ls-F-marks-symlinks) + (re-search-forward "@? -> " lep t) + (search-forward " -> " lep t))) ;; When dired-listing-switches includes "F" ;; or "classify", don't treat appended ;; indicator characters as part of the file ;; name (bug#34915). - (and (dired-check-switches dired-actual-switches - "F" "classify") + (and used-F (re-search-forward "[*/@|=>]$" lep t))) (goto-char (match-beginning 0)) lep)) @@ -640,6 +651,7 @@ Optional arguments are ignored." See `wdired-use-dired-vertical-movement'. Optional prefix ARG says how many lines to move; default is one line." (interactive "^p") + (setq this-command 'next-line) ;Let `line-move' preserve the column. (with-no-warnings (next-line arg)) (if (or (eq wdired-use-dired-vertical-movement t) (and wdired-use-dired-vertical-movement @@ -653,6 +665,7 @@ says how many lines to move; default is one line." See `wdired-use-dired-vertical-movement'. Optional prefix ARG says how many lines to move; default is one line." (interactive "^p") + (setq this-command 'previous-line) ;Let `line-move' preserve the column. (with-no-warnings (previous-line arg)) (if (or (eq wdired-use-dired-vertical-movement t) (and wdired-use-dired-vertical-movement @@ -900,9 +913,9 @@ Like original function but it skips read-only words." (if (= (length perms-new) 10) (progn (setq perm-tmp - (int-to-string (wdired-perms-to-number perms-new))) - (unless (equal 0 (process-file dired-chmod-program - nil nil nil perm-tmp filename)) + (string-to-number + (int-to-string (wdired-perms-to-number perms-new)) 8)) + (unless (set-file-modes filename perm-tmp) (setq errors (1+ errors)) (dired-log "%s %s `%s' failed\n\n" dired-chmod-program perm-tmp filename))) |