1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-07 06:50:23 -08:00

Do interactive tagging for dired commands

* lisp/dired-aux.el (dired-diff, dired-backup-diff)
(dired-compare-directories, dired-do-chmod, dired-do-chgrp)
(dired-do-chown, dired-do-touch, dired-do-print, dired-clean-directory)
(dired-do-async-shell-command, dired-do-shell-command, dired-kill-line)
(dired-do-kill-lines, dired-do-compress-to, dired-do-compress)
(dired-do-byte-compile, dired-do-load, dired-do-redisplay)
(dired-reset-subdir-switches, dired-create-directory)
(dired-create-empty-file, dired-do-copy, dired-do-symlink)
(dired-do-relsymlink, dired-do-hardlink, dired-do-rename)
(dired-do-rename-regexp, dired-do-copy-regexp, dired-do-hardlink-regexp)
(dired-do-symlink-regexp, dired-do-relsymlink-regexp, dired-upcase)
(dired-downcase, dired-maybe-insert-subdir, dired-insert-subdir)
(dired-kill-tree, dired-prev-subdir, dired-mark-subdir-files)
(dired-kill-subdir, dired-tree-up, dired-tree-down, dired-hide-subdir)
(dired-hide-all, dired-isearch-filenames, dired-isearch-filenames-regexp)
(dired-do-isearch, dired-do-isearch-regexp, dired-do-search)
(dired-do-query-replace-regexp, dired-do-find-regexp)
(dired-do-find-regexp-and-replace, dired-show-file-type)
(dired-vc-next-action):
* lisp/dired-x.el (dired-mark-extension, dired-mark-suffix)
(dired-flag-extension, dired-clean-patch, dired-clean-tex)
(dired-very-clean-tex, dired-mark-omitted, dired-omit-expunge)
(dired-mark-unmarked-files, dired-do-find-marked-files, dired-vm)
(dired-rmail, dired-do-run-mail, dired-mark-sexp,
dired-x-bind-find-file):
* lisp/dired.el (dired-mouse-drag, dired-undo, dired-toggle-read-only)
(dired-next-line, dired-previous-line, dired-next-dirline)
(dired-prev-dirline, dired-up-directory, dired-get-file-for-visit)
(dired-find-file, dired-find-alternate-file, dired-mouse-find-file)
(dired-mouse-find-file-other-window, dired-mouse-find-file-other-frame)
(dired-view-file, dired-find-file-other-window, dired-display-file)
(dired-copy-filename-as-kill, dired-next-subdir)
(dired-build-subdir-alist, dired-goto-file, dired-do-flagged-delete)
(dired-do-delete, dired-next-marked-file, dired-prev-marked-file)
(dired-mark, dired-unmark, dired-flag-file-deletion)
(dired-unmark-backward, dired-toggle-marks, dired-mark-files-regexp)
(dired-number-of-marked-files, dired-mark-files-containing-regexp)
(dired-flag-files-regexp, dired-mark-symlinks, dired-mark-directories)
(dired-mark-executables, dired-flag-auto-save-files)
(dired-flag-garbage-files, dired-flag-backup-files, dired-change-marks)
(dired-unmark-all-marks, dired-unmark-all-files)
(dired-sort-toggle-or-edit, dired-mark-for-click)
(dired-enable-click-to-select-mode): Tag commands as applicable only
for dired-mode.
This commit is contained in:
Visuwesh 2023-10-29 20:21:57 +05:30 committed by Eli Zaretskii
parent bb64e3a798
commit 1c70458519
3 changed files with 132 additions and 114 deletions

View file

@ -264,7 +264,8 @@ the string of command switches used as the third argument of `diff'."
(read-string "Options for diff: " (read-string "Options for diff: "
(if (stringp diff-switches) (if (stringp diff-switches)
diff-switches diff-switches
(mapconcat #'identity diff-switches " "))))))) (mapconcat #'identity diff-switches " "))))))
dired-mode)
(let ((current (dired-get-filename t))) (let ((current (dired-get-filename t)))
(when (or (equal (expand-file-name file) (when (or (equal (expand-file-name file)
(expand-file-name current)) (expand-file-name current))
@ -290,7 +291,8 @@ With prefix arg, prompt for argument SWITCHES which is options for `diff'."
(if (stringp diff-switches) (if (stringp diff-switches)
diff-switches diff-switches
(mapconcat #'identity diff-switches " ")))) (mapconcat #'identity diff-switches " "))))
nil)) nil)
dired-mode)
(diff-backup (dired-get-filename) switches)) (diff-backup (dired-get-filename) switches))
;;;###autoload ;;;###autoload
@ -336,7 +338,8 @@ only in the active region if `dired-mark-region' is non-nil."
(read-directory-name (format "Compare %s with: " (read-directory-name (format "Compare %s with: "
(dired-current-directory)) (dired-current-directory))
target-dir target-dir t))) target-dir target-dir t)))
(read-from-minibuffer "Mark if (lisp expr or RET): " nil nil t nil "nil"))) (read-from-minibuffer "Mark if (lisp expr or RET): " nil nil t nil "nil"))
dired-mode)
(let* ((dir1 (dired-current-directory)) (let* ((dir1 (dired-current-directory))
(file-alist1 (dired-files-attributes dir1)) (file-alist1 (dired-files-attributes dir1))
(file-alist2 (dired-files-attributes dir2)) (file-alist2 (dired-files-attributes dir2))
@ -497,7 +500,7 @@ Alternatively, see the man page for \"chmod(1)\".
Note that on MS-Windows only the `w' (write) bit is meaningful: Note that on MS-Windows only the `w' (write) bit is meaningful:
resetting it makes the file read-only. Changing any other bit resetting it makes the file read-only. Changing any other bit
has no effect on MS-Windows." has no effect on MS-Windows."
(interactive "P") (interactive "P" dired-mode)
(let* ((files (dired-get-marked-files t arg nil nil t)) (let* ((files (dired-get-marked-files t arg nil nil t))
;; The source of default file attributes is the file at point. ;; The source of default file attributes is the file at point.
(default-file (dired-get-filename t t)) (default-file (dired-get-filename t t))
@ -541,7 +544,7 @@ has no effect on MS-Windows."
Type \\<minibuffer-local-completion-map>\\[next-history-element] \ Type \\<minibuffer-local-completion-map>\\[next-history-element] \
to pull the file attributes of the file at point to pull the file attributes of the file at point
into the minibuffer." into the minibuffer."
(interactive "P") (interactive "P" dired-mode)
(if (and (memq system-type '(ms-dos windows-nt)) (if (and (memq system-type '(ms-dos windows-nt))
(not (file-remote-p default-directory))) (not (file-remote-p default-directory)))
(error "chgrp not supported on this system")) (error "chgrp not supported on this system"))
@ -553,7 +556,7 @@ into the minibuffer."
Type \\<minibuffer-local-completion-map>\\[next-history-element] \ Type \\<minibuffer-local-completion-map>\\[next-history-element] \
to pull the file attributes of the file at point to pull the file attributes of the file at point
into the minibuffer." into the minibuffer."
(interactive "P") (interactive "P" dired-mode)
(if (and (memq system-type '(ms-dos windows-nt)) (if (and (memq system-type '(ms-dos windows-nt))
(not (file-remote-p default-directory))) (not (file-remote-p default-directory)))
(error "chown not supported on this system")) (error "chown not supported on this system"))
@ -566,7 +569,7 @@ This calls touch.
Type Type \\<minibuffer-local-completion-map>\\[next-history-element] \ Type Type \\<minibuffer-local-completion-map>\\[next-history-element] \
to pull the file attributes of the file at point to pull the file attributes of the file at point
into the minibuffer." into the minibuffer."
(interactive "P") (interactive "P" dired-mode)
(dired-do-chxxx "Timestamp" dired-touch-program 'touch arg)) (dired-do-chxxx "Timestamp" dired-touch-program 'touch arg))
;; Process all the files in FILES in batches of a convenient size, ;; Process all the files in FILES in batches of a convenient size,
@ -618,7 +621,7 @@ into the minibuffer."
"Print the marked (or next ARG) files. "Print the marked (or next ARG) files.
Uses the shell command coming from variables `lpr-command' and Uses the shell command coming from variables `lpr-command' and
`lpr-switches' as default." `lpr-switches' as default."
(interactive "P") (interactive "P" dired-mode)
(require 'lpr) (require 'lpr)
(let* ((file-list (dired-get-marked-files t arg nil nil t)) (let* ((file-list (dired-get-marked-files t arg nil nil t))
(lpr-switches (lpr-switches
@ -674,7 +677,7 @@ Negative prefix arg KEEP overrides `kept-old-versions' with KEEP made positive.
To clear the flags on these files, you can use \\[dired-flag-backup-files] To clear the flags on these files, you can use \\[dired-flag-backup-files]
with a prefix argument." with a prefix argument."
(interactive "P") (interactive "P" dired-mode)
(setq keep (if keep (prefix-numeric-value keep) dired-kept-versions)) (setq keep (if keep (prefix-numeric-value keep) dired-kept-versions))
(let ((early-retention (if (< keep 0) (- keep) kept-old-versions)) (let ((early-retention (if (< keep 0) (- keep) kept-old-versions))
(late-retention (if (<= keep 0) dired-kept-versions keep)) (late-retention (if (<= keep 0) dired-kept-versions keep))
@ -828,7 +831,8 @@ Commands that are run asynchronously do not accept user input."
;; Want to give feedback whether this file or marked files are used: ;; Want to give feedback whether this file or marked files are used:
(dired-read-shell-command "& on %s: " current-prefix-arg files) (dired-read-shell-command "& on %s: " current-prefix-arg files)
current-prefix-arg current-prefix-arg
files))) files))
dired-mode)
(unless (string-match-p "&[ \t]*\\'" command) (unless (string-match-p "&[ \t]*\\'" command)
(setq command (concat command " &"))) (setq command (concat command " &")))
(dired-do-shell-command command arg file-list)) (dired-do-shell-command command arg file-list))
@ -895,7 +899,8 @@ Also see the `dired-confirm-shell-command' variable."
;; Want to give feedback whether this file or marked files are used: ;; Want to give feedback whether this file or marked files are used:
(dired-read-shell-command "! on %s: " current-prefix-arg files) (dired-read-shell-command "! on %s: " current-prefix-arg files)
current-prefix-arg current-prefix-arg
files))) files))
dired-mode)
(let* ((on-each (not (dired--star-or-qmark-p command "*" 'keep))) (let* ((on-each (not (dired--star-or-qmark-p command "*" 'keep)))
(no-subst (not (dired--star-or-qmark-p command "?" 'keep))) (no-subst (not (dired--star-or-qmark-p command "?" 'keep)))
(confirmations nil) (confirmations nil)
@ -1342,7 +1347,7 @@ See `dired-guess-shell-alist-user'."
"Kill the current line (not the files). "Kill the current line (not the files).
With a prefix argument, kill that many lines starting with the current line. With a prefix argument, kill that many lines starting with the current line.
(A negative argument kills backward.)" (A negative argument kills backward.)"
(interactive "P") (interactive "P" dired-mode)
(setq arg (prefix-numeric-value arg)) (setq arg (prefix-numeric-value arg))
(let (buffer-read-only file) (let (buffer-read-only file)
(while (/= 0 arg) (while (/= 0 arg)
@ -1383,7 +1388,7 @@ lines removed by this invocation, for the reporting message.
A FMT of \"\" will suppress the messaging." A FMT of \"\" will suppress the messaging."
;; Returns count of killed lines. ;; Returns count of killed lines.
(interactive "P") (interactive "P" dired-mode)
(if arg (if arg
(if (dired-get-subdir) (if (dired-get-subdir)
(dired-kill-subdir) (dired-kill-subdir)
@ -1520,7 +1525,7 @@ output file. %i path(s) are relative, while %o is absolute.")
Prompt for the archive file name. Prompt for the archive file name.
Choose the archiving command based on the archive file-name extension Choose the archiving command based on the archive file-name extension
and `dired-compress-files-alist'." and `dired-compress-files-alist'."
(interactive) (interactive nil dired-mode)
(let* ((in-files (dired-get-marked-files nil nil nil nil t)) (let* ((in-files (dired-get-marked-files nil nil nil nil t))
(out-file (expand-file-name (read-file-name "Compress to: "))) (out-file (expand-file-name (read-file-name "Compress to: ")))
(rule (cl-find-if (rule (cl-find-if
@ -1758,7 +1763,7 @@ the directory and all of its subdirectories, recursively,
into a .tar.gz archive. into a .tar.gz archive.
If invoked on a .tar.gz or a .tgz or a .zip or a .7z archive, If invoked on a .tar.gz or a .tgz or a .zip or a .7z archive,
uncompress and unpack all the files in the archive." uncompress and unpack all the files in the archive."
(interactive "P") (interactive "P" dired-mode)
(dired-map-over-marks-check #'dired-compress arg 'compress t)) (dired-map-over-marks-check #'dired-compress arg 'compress t))
@ -1787,7 +1792,7 @@ uncompress and unpack all the files in the archive."
;;;###autoload ;;;###autoload
(defun dired-do-byte-compile (&optional arg) (defun dired-do-byte-compile (&optional arg)
"Byte compile marked (or next ARG) Emacs Lisp files." "Byte compile marked (or next ARG) Emacs Lisp files."
(interactive "P") (interactive "P" dired-mode)
(dired-map-over-marks-check #'dired-byte-compile arg 'byte-compile t)) (dired-map-over-marks-check #'dired-byte-compile arg 'byte-compile t))
(defun dired-load () (defun dired-load ()
@ -1804,7 +1809,7 @@ uncompress and unpack all the files in the archive."
;;;###autoload ;;;###autoload
(defun dired-do-load (&optional arg) (defun dired-do-load (&optional arg)
"Load the marked (or next ARG) Emacs Lisp files." "Load the marked (or next ARG) Emacs Lisp files."
(interactive "P") (interactive "P" dired-mode)
(dired-map-over-marks-check #'dired-load arg 'load t)) (dired-map-over-marks-check #'dired-load arg 'load t))
;;;###autoload ;;;###autoload
@ -1821,7 +1826,7 @@ You can reset all subdirectory switches to the default using
\\<dired-mode-map>\\[dired-reset-subdir-switches]. \\<dired-mode-map>\\[dired-reset-subdir-switches].
See Info node `(emacs)Subdir switches' for more details." See Info node `(emacs)Subdir switches' for more details."
;; Moves point if the next ARG files are redisplayed. ;; Moves point if the next ARG files are redisplayed.
(interactive "P\np") (interactive "P\np" dired-mode)
(if (and test-for-subdir (dired-get-subdir)) (if (and test-for-subdir (dired-get-subdir))
(let* ((dir (dired-get-subdir)) (let* ((dir (dired-get-subdir))
(switches (cdr (assoc-string dir dired-switches-alist)))) (switches (cdr (assoc-string dir dired-switches-alist))))
@ -1851,7 +1856,7 @@ See Info node `(emacs)Subdir switches' for more details."
(defun dired-reset-subdir-switches () (defun dired-reset-subdir-switches ()
"Set `dired-switches-alist' to nil and revert Dired buffer." "Set `dired-switches-alist' to nil and revert Dired buffer."
(interactive) (interactive nil dired-mode)
(setq dired-switches-alist nil) (setq dired-switches-alist nil)
(revert-buffer)) (revert-buffer))
@ -2691,7 +2696,8 @@ FILENAME is a full file name."
Parent directories of DIRECTORY are created as needed. Parent directories of DIRECTORY are created as needed.
If DIRECTORY already exists, signal an error." If DIRECTORY already exists, signal an error."
(interactive (interactive
(list (read-file-name "Create directory: " (dired-current-directory)))) (list (read-file-name "Create directory: " (dired-current-directory)))
dired-mode)
(let* ((expanded (directory-file-name (expand-file-name directory))) (let* ((expanded (directory-file-name (expand-file-name directory)))
new) new)
(if (file-exists-p expanded) (if (file-exists-p expanded)
@ -2708,7 +2714,7 @@ If DIRECTORY already exists, signal an error."
Add a new entry for the new file in the Dired buffer. Add a new entry for the new file in the Dired buffer.
Parent directories of FILE are created as needed. Parent directories of FILE are created as needed.
If FILE already exists, signal an error." If FILE already exists, signal an error."
(interactive (list (read-file-name "Create empty file: "))) (interactive (list (read-file-name "Create empty file: ")) dired-mode)
(let* ((expanded (expand-file-name file)) (let* ((expanded (expand-file-name file))
new) new)
(if (file-exists-p expanded) (if (file-exists-p expanded)
@ -2771,7 +2777,7 @@ element 4 (`\\[universal-argument]'), the inverted value of
`dired-copy-dereference' will be used. `dired-copy-dereference' will be used.
Also see `dired-do-revert-buffer'." Also see `dired-do-revert-buffer'."
(interactive "P") (interactive "P" dired-mode)
(let ((dired-recursive-copies dired-recursive-copies) (let ((dired-recursive-copies dired-recursive-copies)
(dired-copy-dereference (if (equal arg '(4)) (dired-copy-dereference (if (equal arg '(4))
(not dired-copy-dereference) (not dired-copy-dereference)
@ -2794,7 +2800,7 @@ suggested for the target directory depends on the value of
For relative symlinks, use \\[dired-do-relsymlink]. For relative symlinks, use \\[dired-do-relsymlink].
Also see `dired-do-revert-buffer'." Also see `dired-do-revert-buffer'."
(interactive "P") (interactive "P" dired-mode)
(dired-do-create-files 'symlink #'make-symbolic-link (dired-do-create-files 'symlink #'make-symbolic-link
"Symlink" arg dired-keep-marker-symlink)) "Symlink" arg dired-keep-marker-symlink))
@ -2811,7 +2817,7 @@ not absolute ones like
foo -> /ugly/file/name/that/may/change/any/day/bar/foo foo -> /ugly/file/name/that/may/change/any/day/bar/foo
For absolute symlinks, use \\[dired-do-symlink]." For absolute symlinks, use \\[dired-do-symlink]."
(interactive "P") (interactive "P" dired-mode)
(dired-do-create-files 'relsymlink #'dired-make-relative-symlink (dired-do-create-files 'relsymlink #'dired-make-relative-symlink
"RelSymLink" arg dired-keep-marker-relsymlink)) "RelSymLink" arg dired-keep-marker-relsymlink))
@ -2876,7 +2882,7 @@ suggested for the target directory depends on the value of
`dired-dwim-target', which see. `dired-dwim-target', which see.
Also see `dired-do-revert-buffer'." Also see `dired-do-revert-buffer'."
(interactive "P") (interactive "P" dired-mode)
(dired-do-create-files 'hardlink #'dired-hardlink (dired-do-create-files 'hardlink #'dired-hardlink
"Hardlink" arg dired-keep-marker-hardlink)) "Hardlink" arg dired-keep-marker-hardlink))
@ -2897,7 +2903,7 @@ The default suggested for the target directory depends on the value
of `dired-dwim-target', which see. of `dired-dwim-target', which see.
Also see `dired-do-revert-buffer'." Also see `dired-do-revert-buffer'."
(interactive "P") (interactive "P" dired-mode)
(when (seq-find (lambda (file) (when (seq-find (lambda (file)
(member (file-name-nondirectory file) '("." ".."))) (member (file-name-nondirectory file) '("." "..")))
(dired-get-marked-files nil arg)) (dired-get-marked-files nil arg))
@ -2996,7 +3002,7 @@ REGEXP defaults to the last regexp used.
With a zero prefix arg, renaming by regexp affects the absolute file name. With a zero prefix arg, renaming by regexp affects the absolute file name.
Normally, only the non-directory part of the file name is used and changed." Normally, only the non-directory part of the file name is used and changed."
(interactive (dired-mark-read-regexp "Rename")) (interactive (dired-mark-read-regexp "Rename") dired-mode)
(dired-do-create-files-regexp (dired-do-create-files-regexp
#'dired-rename-file #'dired-rename-file
"Rename" arg regexp newname whole-name dired-keep-marker-rename)) "Rename" arg regexp newname whole-name dired-keep-marker-rename))
@ -3005,7 +3011,7 @@ Normally, only the non-directory part of the file name is used and changed."
(defun dired-do-copy-regexp (regexp newname &optional arg whole-name) (defun dired-do-copy-regexp (regexp newname &optional arg whole-name)
"Copy selected files whose names match REGEXP to NEWNAME. "Copy selected files whose names match REGEXP to NEWNAME.
See function `dired-do-rename-regexp' for more info." See function `dired-do-rename-regexp' for more info."
(interactive (dired-mark-read-regexp "Copy")) (interactive (dired-mark-read-regexp "Copy") dired-mode)
(let ((dired-recursive-copies nil)) ; No recursive copies. (let ((dired-recursive-copies nil)) ; No recursive copies.
(dired-do-create-files-regexp (dired-do-create-files-regexp
#'dired-copy-file #'dired-copy-file
@ -3016,7 +3022,7 @@ See function `dired-do-rename-regexp' for more info."
(defun dired-do-hardlink-regexp (regexp newname &optional arg whole-name) (defun dired-do-hardlink-regexp (regexp newname &optional arg whole-name)
"Hardlink selected files whose names match REGEXP to NEWNAME. "Hardlink selected files whose names match REGEXP to NEWNAME.
See function `dired-do-rename-regexp' for more info." See function `dired-do-rename-regexp' for more info."
(interactive (dired-mark-read-regexp "HardLink")) (interactive (dired-mark-read-regexp "HardLink") dired-mode)
(dired-do-create-files-regexp (dired-do-create-files-regexp
#'add-name-to-file #'add-name-to-file
"HardLink" arg regexp newname whole-name dired-keep-marker-hardlink)) "HardLink" arg regexp newname whole-name dired-keep-marker-hardlink))
@ -3025,7 +3031,7 @@ See function `dired-do-rename-regexp' for more info."
(defun dired-do-symlink-regexp (regexp newname &optional arg whole-name) (defun dired-do-symlink-regexp (regexp newname &optional arg whole-name)
"Symlink selected files whose names match REGEXP to NEWNAME. "Symlink selected files whose names match REGEXP to NEWNAME.
See function `dired-do-rename-regexp' for more info." See function `dired-do-rename-regexp' for more info."
(interactive (dired-mark-read-regexp "SymLink")) (interactive (dired-mark-read-regexp "SymLink") dired-mode)
(dired-do-create-files-regexp (dired-do-create-files-regexp
#'make-symbolic-link #'make-symbolic-link
"SymLink" arg regexp newname whole-name dired-keep-marker-symlink)) "SymLink" arg regexp newname whole-name dired-keep-marker-symlink))
@ -3035,7 +3041,7 @@ See function `dired-do-rename-regexp' for more info."
"RelSymlink all marked files containing REGEXP to NEWNAME. "RelSymlink all marked files containing REGEXP to NEWNAME.
See functions `dired-do-rename-regexp' and `dired-do-relsymlink' See functions `dired-do-rename-regexp' and `dired-do-relsymlink'
for more info." for more info."
(interactive (dired-mark-read-regexp "RelSymLink")) (interactive (dired-mark-read-regexp "RelSymLink") dired-mode)
(dired-do-create-files-regexp (dired-do-create-files-regexp
#'dired-make-relative-symlink #'dired-make-relative-symlink
"RelSymLink" arg regexp newname whole-name dired-keep-marker-relsymlink)) "RelSymLink" arg regexp newname whole-name dired-keep-marker-relsymlink))
@ -3080,13 +3086,13 @@ Type \\`SPC' or \\`y' to %s one file, \\`DEL' or \\`n' to skip to next,
;;;###autoload ;;;###autoload
(defun dired-upcase (&optional arg) (defun dired-upcase (&optional arg)
"Rename all marked (or next ARG) files to upper case." "Rename all marked (or next ARG) files to upper case."
(interactive "P") (interactive "P" dired-mode)
(dired-rename-non-directory #'upcase "Rename upcase" arg)) (dired-rename-non-directory #'upcase "Rename upcase" arg))
;;;###autoload ;;;###autoload
(defun dired-downcase (&optional arg) (defun dired-downcase (&optional arg)
"Rename all marked (or next ARG) files to lower case." "Rename all marked (or next ARG) files to lower case."
(interactive "P") (interactive "P" dired-mode)
(dired-rename-non-directory #'downcase "Rename downcase" arg)) (dired-rename-non-directory #'downcase "Rename downcase" arg))
@ -3114,7 +3120,8 @@ See Info node `(emacs)Subdir switches' for more details."
(list (dired-get-filename) (list (dired-get-filename)
(if current-prefix-arg (if current-prefix-arg
(read-string "Switches for listing: " (read-string "Switches for listing: "
(or dired-subdir-switches dired-actual-switches))))) (or dired-subdir-switches dired-actual-switches))))
dired-mode)
(let ((opoint (point))) (let ((opoint (point)))
;; We don't need a marker for opoint as the subdir is always ;; We don't need a marker for opoint as the subdir is always
;; inserted *after* opoint. ;; inserted *after* opoint.
@ -3146,7 +3153,8 @@ This function takes some pains to conform to `ls -lR' output."
(list (dired-get-filename) (list (dired-get-filename)
(if current-prefix-arg (if current-prefix-arg
(read-string "Switches for listing: " (read-string "Switches for listing: "
(or dired-subdir-switches dired-actual-switches))))) (or dired-subdir-switches dired-actual-switches))))
dired-mode)
(setq dirname (file-name-as-directory (expand-file-name dirname))) (setq dirname (file-name-as-directory (expand-file-name dirname)))
(or no-error-if-not-dir-p (or no-error-if-not-dir-p
(file-directory-p dirname) (file-directory-p dirname)
@ -3223,7 +3231,7 @@ In interactive use, the command prompts for DIRNAME.
When called from Lisp, if REMEMBER-MARKS is non-nil, return an alist When called from Lisp, if REMEMBER-MARKS is non-nil, return an alist
of marked files. If KILL-ROOT is non-nil, kill DIRNAME as well." of marked files. If KILL-ROOT is non-nil, kill DIRNAME as well."
(interactive "DKill tree below directory: \ni\nP") (interactive "DKill tree below directory: \ni\nP" dired-mode)
(setq dirname (file-name-as-directory (expand-file-name dirname))) (setq dirname (file-name-as-directory (expand-file-name dirname)))
(let ((s-alist dired-subdir-alist) dir m-alist) (let ((s-alist dired-subdir-alist) dir m-alist)
(while s-alist (while s-alist
@ -3377,7 +3385,8 @@ When called interactively and not on a subdir line, go to this subdir's line."
(list (if current-prefix-arg (list (if current-prefix-arg
(prefix-numeric-value current-prefix-arg) (prefix-numeric-value current-prefix-arg)
;; if on subdir start already, don't stay there! ;; if on subdir start already, don't stay there!
(if (dired-get-subdir) 1 0)))) (if (dired-get-subdir) 1 0)))
dired-mode)
(dired-next-subdir (- arg) no-error-if-not-found no-skip)) (dired-next-subdir (- arg) no-error-if-not-found no-skip))
;;;###autoload ;;;###autoload
@ -3410,7 +3419,7 @@ The next char is \\n."
"Mark all files except `.' and `..' in current subdirectory. "Mark all files except `.' and `..' in current subdirectory.
If the Dired buffer shows multiple directories, this command If the Dired buffer shows multiple directories, this command
marks the files listed in the subdirectory that point is in." marks the files listed in the subdirectory that point is in."
(interactive) (interactive nil dired-mode)
(let ((p-min (dired-subdir-min))) (let ((p-min (dired-subdir-min)))
(dired-mark-files-in-region p-min (dired-subdir-max)))) (dired-mark-files-in-region p-min (dired-subdir-max))))
@ -3419,7 +3428,7 @@ marks the files listed in the subdirectory that point is in."
"Remove all lines of current subdirectory. "Remove all lines of current subdirectory.
Lower levels are unaffected." Lower levels are unaffected."
;; With optional REMEMBER-MARKS, return a mark-alist. ;; With optional REMEMBER-MARKS, return a mark-alist.
(interactive) (interactive nil dired-mode)
(let* ((beg (dired-subdir-min)) (let* ((beg (dired-subdir-min))
(end (dired-subdir-max)) (end (dired-subdir-max))
(modflag (buffer-modified-p)) (modflag (buffer-modified-p))
@ -3446,7 +3455,7 @@ Lower levels are unaffected."
;;;###autoload ;;;###autoload
(defun dired-tree-up (arg) (defun dired-tree-up (arg)
"Go up ARG levels in the Dired tree." "Go up ARG levels in the Dired tree."
(interactive "p") (interactive "p" dired-mode)
(let ((dir (dired-current-directory))) (let ((dir (dired-current-directory)))
(while (>= arg 1) (while (>= arg 1)
(setq arg (1- arg) (setq arg (1- arg)
@ -3458,7 +3467,7 @@ Lower levels are unaffected."
;;;###autoload ;;;###autoload
(defun dired-tree-down () (defun dired-tree-down ()
"Go down in the Dired tree." "Go down in the Dired tree."
(interactive) (interactive nil dired-mode)
(let ((dir (dired-current-directory)) ; has slash (let ((dir (dired-current-directory)) ; has slash
pos case-fold-search) ; filenames are case sensitive pos case-fold-search) ; filenames are case sensitive
(let ((rest (reverse dired-subdir-alist)) elt) (let ((rest (reverse dired-subdir-alist)) elt)
@ -3480,7 +3489,7 @@ Lower levels are unaffected."
"Hide or unhide the current subdirectory and move to next directory. "Hide or unhide the current subdirectory and move to next directory.
Optional prefix arg is a repeat factor. Optional prefix arg is a repeat factor.
Use \\[dired-hide-all] to (un)hide all directories." Use \\[dired-hide-all] to (un)hide all directories."
(interactive "p") (interactive "p" dired-mode)
(with-silent-modifications (with-silent-modifications
(while (>= (setq arg (1- arg)) 0) (while (>= (setq arg (1- arg)) 0)
(let* ((cur-dir (dired-current-directory)) (let* ((cur-dir (dired-current-directory))
@ -3501,7 +3510,7 @@ Use \\[dired-hide-all] to (un)hide all directories."
"Hide all subdirectories, leaving only their header lines. "Hide all subdirectories, leaving only their header lines.
If there is already something hidden, make everything visible again. If there is already something hidden, make everything visible again.
Use \\[dired-hide-subdir] to (un)hide a particular subdirectory." Use \\[dired-hide-subdir] to (un)hide a particular subdirectory."
(interactive "P") (interactive "P" dired-mode)
(with-silent-modifications (with-silent-modifications
(if (text-property-any (point-min) (point-max) 'invisible 'dired) (if (text-property-any (point-min) (point-max) 'invisible 'dired)
(dired--unhide (point-min) (point-max)) (dired--unhide (point-min) (point-max))
@ -3577,14 +3586,14 @@ It's intended to override the default search function."
;;;###autoload ;;;###autoload
(defun dired-isearch-filenames () (defun dired-isearch-filenames ()
"Search for a string using Isearch only in file names in the Dired buffer." "Search for a string using Isearch only in file names in the Dired buffer."
(interactive) (interactive nil dired-mode)
(setq-local dired-isearch-filenames t) (setq-local dired-isearch-filenames t)
(isearch-forward nil t)) (isearch-forward nil t))
;;;###autoload ;;;###autoload
(defun dired-isearch-filenames-regexp () (defun dired-isearch-filenames-regexp ()
"Search for a regexp using Isearch only in file names in the Dired buffer." "Search for a regexp using Isearch only in file names in the Dired buffer."
(interactive) (interactive nil dired-mode)
(setq-local dired-isearch-filenames t) (setq-local dired-isearch-filenames t)
(isearch-forward-regexp nil t)) (isearch-forward-regexp nil t))
@ -3594,7 +3603,7 @@ It's intended to override the default search function."
;;;###autoload ;;;###autoload
(defun dired-do-isearch () (defun dired-do-isearch ()
"Search for a string through all marked files using Isearch." "Search for a string through all marked files using Isearch."
(interactive) (interactive nil dired-mode)
(multi-isearch-files (multi-isearch-files
(prog1 (dired-get-marked-files nil nil (prog1 (dired-get-marked-files nil nil
#'dired-nondirectory-p nil t) #'dired-nondirectory-p nil t)
@ -3603,7 +3612,7 @@ It's intended to override the default search function."
;;;###autoload ;;;###autoload
(defun dired-do-isearch-regexp () (defun dired-do-isearch-regexp ()
"Search for a regexp through all marked files using Isearch." "Search for a regexp through all marked files using Isearch."
(interactive) (interactive nil dired-mode)
(prog1 (multi-isearch-files-regexp (prog1 (multi-isearch-files-regexp
(dired-get-marked-files nil nil (dired-get-marked-files nil nil
'dired-nondirectory-p nil t)) 'dired-nondirectory-p nil t))
@ -3619,7 +3628,7 @@ If no files are marked, search through the file under point.
Stops when a match is found. Stops when a match is found.
To continue searching for next match, use command \\[fileloop-continue]." To continue searching for next match, use command \\[fileloop-continue]."
(interactive "sSearch marked files (regexp): ") (interactive "sSearch marked files (regexp): " dired-mode)
(fileloop-initialize-search (fileloop-initialize-search
regexp regexp
(dired-get-marked-files nil nil #'dired-nondirectory-p) (dired-get-marked-files nil nil #'dired-nondirectory-p)
@ -3642,7 +3651,8 @@ resume the query replace with the command \\[fileloop-continue]."
(let ((common (let ((common
(query-replace-read-args (query-replace-read-args
"Query replace regexp in marked files" t t))) "Query replace regexp in marked files" t t)))
(list (nth 0 common) (nth 1 common) (nth 2 common)))) (list (nth 0 common) (nth 1 common) (nth 2 common)))
dired-mode)
(dolist (file (dired-get-marked-files nil nil #'dired-nondirectory-p nil t)) (dolist (file (dired-get-marked-files nil nil #'dired-nondirectory-p nil t))
(let ((buffer (get-file-buffer file))) (let ((buffer (get-file-buffer file)))
(if (and buffer (with-current-buffer buffer (if (and buffer (with-current-buffer buffer
@ -3686,7 +3696,7 @@ matching `grep-find-ignored-directories' are skipped in the marked
directories. directories.
REGEXP should use constructs supported by your local `grep' command." REGEXP should use constructs supported by your local `grep' command."
(interactive "sSearch marked files (regexp): ") (interactive "sSearch marked files (regexp): " dired-mode)
(require 'grep) (require 'grep)
(require 'xref) (require 'xref)
(defvar grep-find-ignored-files) (defvar grep-find-ignored-files)
@ -3741,7 +3751,8 @@ function works."
(let ((common (let ((common
(query-replace-read-args (query-replace-read-args
"Query replace regexp in marked files" t t))) "Query replace regexp in marked files" t t)))
(list (nth 0 common) (nth 1 common)))) (list (nth 0 common) (nth 1 common)))
dired-mode)
(require 'xref) (require 'xref)
(defvar xref-show-xrefs-function) (defvar xref-show-xrefs-function)
(defvar xref-auto-jump-to-first-xref) (defvar xref-auto-jump-to-first-xref)
@ -3763,7 +3774,7 @@ function works."
If you give a prefix argument \\[universal-argument] to this command, and If you give a prefix argument \\[universal-argument] to this command, and
FILE is a symbolic link, then the command will print the type FILE is a symbolic link, then the command will print the type
of the target of the link instead." of the target of the link instead."
(interactive (list (dired-get-filename t) current-prefix-arg)) (interactive (list (dired-get-filename t) current-prefix-arg) dired-mode)
(let (process-file-side-effects) (let (process-file-side-effects)
(with-temp-buffer (with-temp-buffer
(if deref-symlinks (if deref-symlinks
@ -3796,7 +3807,7 @@ the same files/directories marked in the VC-Directory buffer that were
marked in the original Dired buffer. If the current directory doesn't marked in the original Dired buffer. If the current directory doesn't
belong to a VCS repository, prompt for a repository directory. In this belong to a VCS repository, prompt for a repository directory. In this
case, the VERBOSE argument is ignored." case, the VERBOSE argument is ignored."
(interactive "P") (interactive "P" dired-mode)
(let* ((marked-files (let* ((marked-files
(dired-get-marked-files nil nil nil nil t)) (dired-get-marked-files nil nil nil nil t))
(mark-files (mark-files

View file

@ -299,7 +299,7 @@ Optional MARKER-CHAR is marker to use.
Interactively, ask for EXTENSION. Interactively, ask for EXTENSION.
Prefixed with one \\[universal-argument], unmark files instead. Prefixed with one \\[universal-argument], unmark files instead.
Prefixed with two \\[universal-argument]'s, prompt for MARKER-CHAR and mark files with it." Prefixed with two \\[universal-argument]'s, prompt for MARKER-CHAR and mark files with it."
(interactive (dired--mark-suffix-interactive-spec)) (interactive (dired--mark-suffix-interactive-spec) dired-mode)
(setq extension (ensure-list extension)) (setq extension (ensure-list extension))
(dired-mark-files-regexp (dired-mark-files-regexp
(concat ".";; don't match names with nothing but an extension (concat ".";; don't match names with nothing but an extension
@ -323,7 +323,7 @@ Optional MARKER-CHAR is marker to use.
Interactively, ask for SUFFIX. Interactively, ask for SUFFIX.
Prefixed with one \\[universal-argument], unmark files instead. Prefixed with one \\[universal-argument], unmark files instead.
Prefixed with two \\[universal-argument]'s, prompt for MARKER-CHAR and mark files with it." Prefixed with two \\[universal-argument]'s, prompt for MARKER-CHAR and mark files with it."
(interactive (dired--mark-suffix-interactive-spec)) (interactive (dired--mark-suffix-interactive-spec) dired-mode)
(setq suffix (ensure-list suffix)) (setq suffix (ensure-list suffix))
(dired-mark-files-regexp (dired-mark-files-regexp
(concat ".";; don't match names with nothing but an extension (concat ".";; don't match names with nothing but an extension
@ -335,7 +335,7 @@ Prefixed with two \\[universal-argument]'s, prompt for MARKER-CHAR and mark file
(defun dired-flag-extension (extension) (defun dired-flag-extension (extension)
"In Dired, flag all files with a certain EXTENSION for deletion. "In Dired, flag all files with a certain EXTENSION for deletion.
A `.' is *not* automatically prepended to the string entered." A `.' is *not* automatically prepended to the string entered."
(interactive "sFlagging extension: ") (interactive "sFlagging extension: " dired-mode)
(dired-mark-extension extension dired-del-marker)) (dired-mark-extension extension dired-del-marker))
;; Define some unpopular file extensions. Used for cleaning and omitting. ;; Define some unpopular file extensions. Used for cleaning and omitting.
@ -364,7 +364,7 @@ A `.' is *not* automatically prepended to the string entered."
(defun dired-clean-patch () (defun dired-clean-patch ()
"Flag dispensable files created by patch for deletion. "Flag dispensable files created by patch for deletion.
See variable `dired-patch-unclean-extensions'." See variable `dired-patch-unclean-extensions'."
(interactive) (interactive nil dired-mode)
(dired-flag-extension dired-patch-unclean-extensions)) (dired-flag-extension dired-patch-unclean-extensions))
(defun dired-clean-tex () (defun dired-clean-tex ()
@ -372,7 +372,7 @@ See variable `dired-patch-unclean-extensions'."
See variables `dired-tex-unclean-extensions', See variables `dired-tex-unclean-extensions',
`dired-latex-unclean-extensions', `dired-bibtex-unclean-extensions' and `dired-latex-unclean-extensions', `dired-bibtex-unclean-extensions' and
`dired-texinfo-unclean-extensions'." `dired-texinfo-unclean-extensions'."
(interactive) (interactive nil dired-mode)
(dired-flag-extension (append dired-texinfo-unclean-extensions (dired-flag-extension (append dired-texinfo-unclean-extensions
dired-latex-unclean-extensions dired-latex-unclean-extensions
dired-bibtex-unclean-extensions dired-bibtex-unclean-extensions
@ -383,7 +383,7 @@ See variables `dired-tex-unclean-extensions',
See variables `dired-texinfo-unclean-extensions', See variables `dired-texinfo-unclean-extensions',
`dired-latex-unclean-extensions', `dired-bibtex-unclean-extensions' and `dired-latex-unclean-extensions', `dired-bibtex-unclean-extensions' and
`dired-texinfo-unclean-extensions'." `dired-texinfo-unclean-extensions'."
(interactive) (interactive nil dired-mode)
(dired-flag-extension (append dired-texinfo-unclean-extensions (dired-flag-extension (append dired-texinfo-unclean-extensions
dired-latex-unclean-extensions dired-latex-unclean-extensions
dired-bibtex-unclean-extensions dired-bibtex-unclean-extensions
@ -419,7 +419,7 @@ Should never be used as marker by the user or other packages.")
(defun dired-mark-omitted () (defun dired-mark-omitted ()
"Mark files matching `dired-omit-files' and `dired-omit-extensions'." "Mark files matching `dired-omit-files' and `dired-omit-extensions'."
(interactive) (interactive nil dired-mode)
(let ((dired-omit-mode nil)) (revert-buffer)) ;; Show omitted files (let ((dired-omit-mode nil)) (revert-buffer)) ;; Show omitted files
(dired-mark-unmarked-files (dired-omit-regexp) nil nil dired-omit-localp (dired-mark-unmarked-files (dired-omit-regexp) nil nil dired-omit-localp
(dired-omit-case-fold-p (if (stringp dired-directory) (dired-omit-case-fold-p (if (stringp dired-directory)
@ -455,7 +455,7 @@ if called from Lisp and buffer is bigger than `dired-omit-size-limit'.
Optional arg INIT-COUNT is an initial count tha'is added to the number Optional arg INIT-COUNT is an initial count tha'is added to the number
of lines omitted by this invocation of `dired-omit-expunge', in the of lines omitted by this invocation of `dired-omit-expunge', in the
status message." status message."
(interactive "sOmit files (regexp): \nP") (interactive "sOmit files (regexp): \nP" dired-mode)
;; Bind `dired-marker-char' to `dired-omit-marker-char', ;; Bind `dired-marker-char' to `dired-omit-marker-char',
;; then call `dired-do-kill-lines'. ;; then call `dired-do-kill-lines'.
(if (and dired-omit-mode (if (and dired-omit-mode
@ -531,7 +531,8 @@ files in the active region if `dired-mark-region' is non-nil."
(list (read-regexp (list (read-regexp
(format-prompt "Mark unmarked files matching regexp" "all") (format-prompt "Mark unmarked files matching regexp" "all")
nil 'dired-regexp-history) nil 'dired-regexp-history)
nil current-prefix-arg nil)) nil current-prefix-arg nil)
dired-mode)
(let ((dired-marker-char (if unflag-p ?\s dired-marker-char))) (let ((dired-marker-char (if unflag-p ?\s dired-marker-char)))
(dired-mark-if (dired-mark-if
(and (and
@ -736,7 +737,7 @@ displayed this way is restricted by the height of the current window and
To keep Dired buffer displayed, type \\[split-window-below] first. To keep Dired buffer displayed, type \\[split-window-below] first.
To display just marked files, type \\[delete-other-windows] first." To display just marked files, type \\[delete-other-windows] first."
(interactive "P") (interactive "P" dired-mode)
(dired-simultaneous-find-file (dired-get-marked-files nil nil nil nil t) (dired-simultaneous-find-file (dired-get-marked-files nil nil nil nil t)
noselect)) noselect))
@ -780,7 +781,7 @@ NOSELECT the files are merely found but not selected."
"Run VM on this file. "Run VM on this file.
With optional prefix argument, visits the folder read-only. With optional prefix argument, visits the folder read-only.
Otherwise obeys the value of `dired-vm-read-only-folders'." Otherwise obeys the value of `dired-vm-read-only-folders'."
(interactive "P") (interactive "P" dired-mode)
(let ((dir (dired-current-directory)) (let ((dir (dired-current-directory))
(fil (dired-get-filename))) (fil (dired-get-filename)))
(vm-visit-folder fil (or read-only (vm-visit-folder fil (or read-only
@ -792,7 +793,7 @@ Otherwise obeys the value of `dired-vm-read-only-folders'."
(defun dired-rmail () (defun dired-rmail ()
"Run RMAIL on this file." "Run RMAIL on this file."
(interactive) (interactive nil dired-mode)
(rmail (dired-get-filename))) (rmail (dired-get-filename)))
(defun dired-do-run-mail () (defun dired-do-run-mail ()
@ -800,7 +801,7 @@ Otherwise obeys the value of `dired-vm-read-only-folders'."
Prompt for confirmation first; if the user says yes, call Prompt for confirmation first; if the user says yes, call
`dired-vm' if `dired-bind-vm' is non-nil, `dired-rmail' `dired-vm' if `dired-bind-vm' is non-nil, `dired-rmail'
otherwise." otherwise."
(interactive) (interactive nil dired-mode)
(let ((file (dired-get-filename t))) (let ((file (dired-get-filename t)))
(if dired-bind-vm (if dired-bind-vm
(if (y-or-n-p (format-message (if (y-or-n-p (format-message
@ -886,7 +887,8 @@ only in the active region if `dired-mark-region' is non-nil."
(if current-prefix-arg (if current-prefix-arg
"UNmark" "UNmark"
"Mark"))) "Mark")))
current-prefix-arg)) current-prefix-arg)
dired-mode)
(message "%s" predicate) (message "%s" predicate)
(let ((dired-marker-char (if unflag-p ?\040 dired-marker-char)) (let ((dired-marker-char (if unflag-p ?\040 dired-marker-char))
inode s mode nlink uid gid size time name sym) inode s mode nlink uid gid size time name sym)
@ -1012,7 +1014,7 @@ is loaded then call \\[dired-x-bind-find-file]."
"Bind `dired-x-find-file' in place of `find-file' (or vice-versa). "Bind `dired-x-find-file' in place of `find-file' (or vice-versa).
Similarly for `dired-x-find-file-other-window' and `find-file-other-window'. Similarly for `dired-x-find-file-other-window' and `find-file-other-window'.
Binding direction based on `dired-x-hands-off-my-keys'." Binding direction based on `dired-x-hands-off-my-keys'."
(interactive) (interactive nil)
(if (called-interactively-p 'interactive) (if (called-interactively-p 'interactive)
(setq dired-x-hands-off-my-keys (setq dired-x-hands-off-my-keys
(not (y-or-n-p (format-message (not (y-or-n-p (format-message

View file

@ -1823,7 +1823,7 @@ see `dired-use-ls-dired' for more details.")
"Begin a drag-and-drop operation for the file at EVENT. "Begin a drag-and-drop operation for the file at EVENT.
If there are marked files and that file is marked, drag every If there are marked files and that file is marked, drag every
other marked file as well. Otherwise, unmark all files." other marked file as well. Otherwise, unmark all files."
(interactive "e") (interactive "e" dired-mode)
(when mark-active (when mark-active
(deactivate-mark)) (deactivate-mark))
(let* ((modifiers (event-modifiers event)) (let* ((modifiers (event-modifiers event))
@ -2662,7 +2662,7 @@ Keybindings:
"Undo in a Dired buffer. "Undo in a Dired buffer.
This doesn't recover lost files, it just undoes changes in the buffer itself. This doesn't recover lost files, it just undoes changes in the buffer itself.
You can use it to recover marks, killed lines or subdirs." You can use it to recover marks, killed lines or subdirs."
(interactive) (interactive nil dired-mode)
(let ((inhibit-read-only t)) (let ((inhibit-read-only t))
(undo)) (undo))
(dired-build-subdir-alist) (dired-build-subdir-alist)
@ -2674,7 +2674,7 @@ Actual changes in files cannot be undone by Emacs."))
If the current buffer can be edited with Wdired, (i.e. the major If the current buffer can be edited with Wdired, (i.e. the major
mode is `dired-mode'), call `wdired-change-to-wdired-mode'. mode is `dired-mode'), call `wdired-change-to-wdired-mode'.
Otherwise, toggle `read-only-mode'." Otherwise, toggle `read-only-mode'."
(interactive) (interactive nil dired-mode)
(unless (file-exists-p default-directory) (unless (file-exists-p default-directory)
(user-error "The current directory no longer exists")) (user-error "The current directory no longer exists"))
(when (and (not (file-writable-p default-directory)) (when (and (not (file-writable-p default-directory))
@ -2703,7 +2703,7 @@ to move; the default is one line.
Whether to skip empty lines and how to move from last line Whether to skip empty lines and how to move from last line
is controlled by `dired-movement-style'." is controlled by `dired-movement-style'."
(interactive "^p") (interactive "^p" dired-mode)
(if dired-movement-style (if dired-movement-style
(let ((old-position (progn (let ((old-position (progn
;; It's always true that we should move ;; It's always true that we should move
@ -2750,12 +2750,12 @@ to move; the default is one line.
Whether to skip empty lines and how to move from first line Whether to skip empty lines and how to move from first line
is controlled by `dired-movement-style'." is controlled by `dired-movement-style'."
(interactive "^p") (interactive "^p" dired-mode)
(dired-next-line (- (or arg 1)))) (dired-next-line (- (or arg 1))))
(defun dired-next-dirline (arg &optional opoint) (defun dired-next-dirline (arg &optional opoint)
"Goto ARGth next directory file line." "Goto ARGth next directory file line."
(interactive "p") (interactive "p" dired-mode)
(or opoint (setq opoint (point))) (or opoint (setq opoint (point)))
(if (if (> arg 0) (if (if (> arg 0)
(re-search-forward dired-re-dir nil t arg) (re-search-forward dired-re-dir nil t arg)
@ -2767,7 +2767,7 @@ is controlled by `dired-movement-style'."
(defun dired-prev-dirline (arg) (defun dired-prev-dirline (arg)
"Goto ARGth previous directory file line." "Goto ARGth previous directory file line."
(interactive "p") (interactive "p" dired-mode)
(dired-next-dirline (- arg))) (dired-next-dirline (- arg)))
(defun dired-up-directory (&optional other-window) (defun dired-up-directory (&optional other-window)
@ -2776,7 +2776,7 @@ Find the parent directory either in this buffer or another buffer.
Creates a buffer if necessary. Creates a buffer if necessary.
If OTHER-WINDOW (the optional prefix arg), display the parent If OTHER-WINDOW (the optional prefix arg), display the parent
directory in another window." directory in another window."
(interactive "P") (interactive "P" dired-mode)
(let* ((dir (dired-current-directory)) (let* ((dir (dired-current-directory))
(up (file-name-directory (directory-file-name dir)))) (up (file-name-directory (directory-file-name dir))))
(or (dired-goto-file (directory-file-name dir)) (or (dired-goto-file (directory-file-name dir))
@ -2791,7 +2791,7 @@ directory in another window."
(defun dired-get-file-for-visit () (defun dired-get-file-for-visit ()
"Get the current line's file name, with an error if file does not exist." "Get the current line's file name, with an error if file does not exist."
(interactive) (interactive nil dired-mode)
;; We pass t for second arg so that we don't get error for `.' and `..'. ;; We pass t for second arg so that we don't get error for `.' and `..'.
(let ((raw (dired-get-filename nil t)) (let ((raw (dired-get-filename nil t))
file-name) file-name)
@ -2811,7 +2811,7 @@ directory in another window."
#'dired-find-file "23.2") #'dired-find-file "23.2")
(defun dired-find-file () (defun dired-find-file ()
"In Dired, visit the file or directory named on this line." "In Dired, visit the file or directory named on this line."
(interactive) (interactive nil dired-mode)
(dired--find-possibly-alternative-file (dired-get-file-for-visit))) (dired--find-possibly-alternative-file (dired-get-file-for-visit)))
(defun dired--find-possibly-alternative-file (file) (defun dired--find-possibly-alternative-file (file)
@ -2843,7 +2843,7 @@ directory in another window."
(defun dired-find-alternate-file () (defun dired-find-alternate-file ()
"In Dired, visit file or directory on current line via `find-alternate-file'. "In Dired, visit file or directory on current line via `find-alternate-file'.
This kills the Dired buffer, then visits the current line's file or directory." This kills the Dired buffer, then visits the current line's file or directory."
(interactive) (interactive nil dired-mode)
(set-buffer-modified-p nil) (set-buffer-modified-p nil)
(find-alternate-file (dired-get-file-for-visit))) (find-alternate-file (dired-get-file-for-visit)))
;; Don't override the setting from .emacs. ;; Don't override the setting from .emacs.
@ -2857,7 +2857,7 @@ omitted or nil, these arguments default to `find-file' and `dired',
respectively. If `dired-kill-when-opening-new-dired-buffer' is respectively. If `dired-kill-when-opening-new-dired-buffer' is
non-nil, FIND-DIR-FUNC defaults to `find-alternate-file' instead, non-nil, FIND-DIR-FUNC defaults to `find-alternate-file' instead,
so that the original Dired buffer is not kept." so that the original Dired buffer is not kept."
(interactive "e") (interactive "e" dired-mode)
(or find-file-func (setq find-file-func 'find-file)) (or find-file-func (setq find-file-func 'find-file))
(let (window pos file) (let (window pos file)
(save-excursion (save-excursion
@ -2885,19 +2885,19 @@ so that the original Dired buffer is not kept."
(defun dired-mouse-find-file-other-window (event) (defun dired-mouse-find-file-other-window (event)
"In Dired, visit the file or directory name you click on in another window." "In Dired, visit the file or directory name you click on in another window."
(interactive "e") (interactive "e" dired-mode)
(dired-mouse-find-file event 'find-file-other-window 'dired-other-window)) (dired-mouse-find-file event 'find-file-other-window 'dired-other-window))
(defun dired-mouse-find-file-other-frame (event) (defun dired-mouse-find-file-other-frame (event)
"In Dired, visit the file or directory name you click on in another frame." "In Dired, visit the file or directory name you click on in another frame."
(interactive "e") (interactive "e" dired-mode)
(dired-mouse-find-file event 'find-file-other-frame 'dired-other-frame)) (dired-mouse-find-file event 'find-file-other-frame 'dired-other-frame))
(defun dired-view-file () (defun dired-view-file ()
"In Dired, examine a file in view mode, returning to Dired when done. "In Dired, examine a file in view mode, returning to Dired when done.
When file is a directory, show it in this buffer if it is inserted. When file is a directory, show it in this buffer if it is inserted.
Otherwise, display it in another buffer." Otherwise, display it in another buffer."
(interactive) (interactive nil dired-mode)
(let ((file (dired-get-file-for-visit))) (let ((file (dired-get-file-for-visit)))
(if (file-directory-p file) (if (file-directory-p file)
(or (and (cdr dired-subdir-alist) (or (and (cdr dired-subdir-alist)
@ -2907,12 +2907,12 @@ Otherwise, display it in another buffer."
(defun dired-find-file-other-window () (defun dired-find-file-other-window ()
"In Dired, visit this file or directory in another window." "In Dired, visit this file or directory in another window."
(interactive) (interactive nil dired-mode)
(dired--find-file #'find-file-other-window (dired-get-file-for-visit))) (dired--find-file #'find-file-other-window (dired-get-file-for-visit)))
(defun dired-display-file () (defun dired-display-file ()
"In Dired, display this file or directory in another window." "In Dired, display this file or directory in another window."
(interactive) (interactive nil dired-mode)
(display-buffer (find-file-noselect (dired-get-file-for-visit)) (display-buffer (find-file-noselect (dired-get-file-for-visit))
t)) t))
@ -3249,7 +3249,7 @@ If on a subdir headerline, use absolute subdirname instead;
prefix arg and marked files are ignored in this case. prefix arg and marked files are ignored in this case.
You can then feed the file name(s) to other commands with \\[yank]." You can then feed the file name(s) to other commands with \\[yank]."
(interactive "P") (interactive "P" dired-mode)
(let* ((files (let* ((files
(or (ensure-list (dired-get-subdir)) (or (ensure-list (dired-get-subdir))
(if arg (if arg
@ -3435,7 +3435,7 @@ As a side effect, killed dired buffers for DIR are removed from
;; Use 0 arg to go to this directory's header line. ;; Use 0 arg to go to this directory's header line.
;; NO-SKIP prevents moving to end of header line, returning whatever ;; NO-SKIP prevents moving to end of header line, returning whatever
;; position was found in dired-subdir-alist. ;; position was found in dired-subdir-alist.
(interactive "p") (interactive "p" dired-mode)
(let ((this-dir (dired-current-directory)) (let ((this-dir (dired-current-directory))
pos index) pos index)
;; nth with negative arg does not return nil but the first element ;; nth with negative arg does not return nil but the first element
@ -3456,7 +3456,7 @@ As a side effect, killed dired buffers for DIR are removed from
Returns the new value of the alist. Returns the new value of the alist.
If optional arg SWITCHES is non-nil, use its value If optional arg SWITCHES is non-nil, use its value
instead of `dired-actual-switches'." instead of `dired-actual-switches'."
(interactive) (interactive nil dired-mode)
(dired-clear-alist) (dired-clear-alist)
(save-excursion (save-excursion
(let* ((count 0) (let* ((count 0)
@ -3560,7 +3560,8 @@ instead of `dired-actual-switches'."
(list (expand-file-name (list (expand-file-name
(read-file-name "Goto file: " (read-file-name "Goto file: "
(dired-current-directory)))) (dired-current-directory))))
(push-mark))) (push-mark))
dired-mode)
(unless (file-name-absolute-p file) (unless (file-name-absolute-p file)
(error "File name `%s' is not absolute" file)) (error "File name `%s' is not absolute" file))
(setq file (directory-file-name file)) ; does no harm if not a directory (setq file (directory-file-name file)) ; does no harm if not a directory
@ -3759,7 +3760,7 @@ If NOMESSAGE is non-nil, we don't display any message
if there are no flagged files. if there are no flagged files.
`dired-recursive-deletes' controls whether deletion of `dired-recursive-deletes' controls whether deletion of
non-empty directories is allowed." non-empty directories is allowed."
(interactive) (interactive nil dired-mode)
(let* ((dired-marker-char dired-del-marker) (let* ((dired-marker-char dired-del-marker)
(regexp (dired-marker-regexp)) (regexp (dired-marker-regexp))
case-fold-search markers) case-fold-search markers)
@ -3789,7 +3790,7 @@ non-empty directories is allowed."
non-empty directories is allowed." non-empty directories is allowed."
;; This is more consistent with the file marking feature than ;; This is more consistent with the file marking feature than
;; dired-do-flagged-delete. ;; dired-do-flagged-delete.
(interactive "P") (interactive "P" dired-mode)
(let (markers) (let (markers)
(dired-internal-do-deletions (dired-internal-do-deletions
(nreverse (nreverse
@ -4093,7 +4094,7 @@ marked file is found after this line.
Optional argument OPOINT specifies the buffer position to Optional argument OPOINT specifies the buffer position to
return to if no ARGth marked file is found; it defaults to return to if no ARGth marked file is found; it defaults to
the position where this command was invoked." the position where this command was invoked."
(interactive "p\np") (interactive "p\np" dired-mode)
(or opoint (setq opoint (point)));; return to where interactively started (or opoint (setq opoint (point)));; return to where interactively started
(if (if (> arg 0) (if (if (> arg 0)
(re-search-forward dired-re-mark nil t arg) (re-search-forward dired-re-mark nil t arg)
@ -4114,7 +4115,7 @@ ARG is the numeric prefix argument and defaults to 1.
If WRAP is non-nil, which happens interactively, wrap around If WRAP is non-nil, which happens interactively, wrap around
to the end of the buffer and search backwards from there, if to the end of the buffer and search backwards from there, if
no ARGth marked file is found before this line." no ARGth marked file is found before this line."
(interactive "p\np") (interactive "p\np" dired-mode)
(dired-next-marked-file (- arg) wrap)) (dired-next-marked-file (- arg) wrap))
(defun dired-file-marker (file) (defun dired-file-marker (file)
@ -4153,7 +4154,7 @@ If on a subdir headerline, mark all its files except `.' and `..'.
Use \\[dired-unmark-all-files] to remove all marks Use \\[dired-unmark-all-files] to remove all marks
and \\[dired-unmark] on a subdir to remove the marks in and \\[dired-unmark] on a subdir to remove the marks in
this subdir." this subdir."
(interactive (list current-prefix-arg t)) (interactive (list current-prefix-arg t) dired-mode)
(cond (cond
;; Mark files in the active region. ;; Mark files in the active region.
((and interactive dired-mark-region ((and interactive dired-mark-region
@ -4192,7 +4193,7 @@ Otherwise, with a prefix arg, unmark files on the next ARG lines.
If looking at a subdir, unmark all its files except `.' and `..'. If looking at a subdir, unmark all its files except `.' and `..'.
If the region is active in Transient Mark mode, unmark all files If the region is active in Transient Mark mode, unmark all files
in the active region." in the active region."
(interactive (list current-prefix-arg t)) (interactive (list current-prefix-arg t) dired-mode)
(let ((dired-marker-char ?\s)) (let ((dired-marker-char ?\s))
(dired-mark arg interactive))) (dired-mark arg interactive)))
@ -4204,7 +4205,7 @@ Otherwise, with a prefix arg, flag files on the next ARG lines.
If on a subdir headerline, flag all its files except `.' and `..'. If on a subdir headerline, flag all its files except `.' and `..'.
If the region is active in Transient Mark mode, flag all files If the region is active in Transient Mark mode, flag all files
in the active region." in the active region."
(interactive (list current-prefix-arg t)) (interactive (list current-prefix-arg t) dired-mode)
(let ((dired-marker-char dired-del-marker)) (let ((dired-marker-char dired-del-marker))
(dired-mark arg interactive))) (dired-mark arg interactive)))
@ -4214,7 +4215,7 @@ Optional prefix ARG says how many lines to unmark/unflag; default
is one line. is one line.
If the region is active in Transient Mark mode, unmark all files If the region is active in Transient Mark mode, unmark all files
in the active region." in the active region."
(interactive "p") (interactive "p" dired-mode)
(dired-unmark (- arg) t)) (dired-unmark (- arg) t))
(defun dired-toggle-marks () (defun dired-toggle-marks ()
@ -4226,7 +4227,7 @@ As always, hidden subdirs are not affected.
In Transient Mark mode, if the mark is active, operate on the contents In Transient Mark mode, if the mark is active, operate on the contents
of the region if `dired-mark-region' is non-nil. Otherwise, operate of the region if `dired-mark-region' is non-nil. Otherwise, operate
on the whole buffer." on the whole buffer."
(interactive) (interactive nil dired-mode)
(save-excursion (save-excursion
(let ((inhibit-read-only t) (let ((inhibit-read-only t)
(beg (dired-mark--region-beginning)) (beg (dired-mark--region-beginning))
@ -4277,7 +4278,8 @@ object files--just `.o' will mark more than you might think."
(dired-get-filename nil t) t)) (dired-get-filename nil t) t))
"\\'")))) "\\'"))))
'dired-regexp-history) 'dired-regexp-history)
(if current-prefix-arg ?\s))) (if current-prefix-arg ?\s))
dired-mode)
(let ((dired-marker-char (or marker-char dired-marker-char))) (let ((dired-marker-char (or marker-char dired-marker-char)))
(dired-mark-if (dired-mark-if
(and (not (looking-at-p dired-re-dot)) (and (not (looking-at-p dired-re-dot))
@ -4288,7 +4290,7 @@ object files--just `.o' will mark more than you might think."
(defun dired-number-of-marked-files () (defun dired-number-of-marked-files ()
"Display the number and total size of the marked files." "Display the number and total size of the marked files."
(interactive) (interactive nil dired-mode)
(let* ((files (dired-get-marked-files nil nil nil t)) (let* ((files (dired-get-marked-files nil nil nil t))
(nmarked (nmarked
(cond ((null (cdr files)) (cond ((null (cdr files))
@ -4327,7 +4329,8 @@ since it was last visited."
(list (read-regexp (concat (if current-prefix-arg "Unmark" "Mark") (list (read-regexp (concat (if current-prefix-arg "Unmark" "Mark")
" files containing (regexp): ") " files containing (regexp): ")
nil 'dired-regexp-history) nil 'dired-regexp-history)
(if current-prefix-arg ?\s))) (if current-prefix-arg ?\s))
dired-mode)
(let ((dired-marker-char (or marker-char dired-marker-char))) (let ((dired-marker-char (or marker-char dired-marker-char)))
(dired-mark-if (dired-mark-if
(and (not (looking-at-p dired-re-dot)) (and (not (looking-at-p dired-re-dot))
@ -4356,7 +4359,8 @@ The match is against the non-directory part of the filename. Use `^'
and `$' to anchor matches. Exclude subdirs by hiding them. and `$' to anchor matches. Exclude subdirs by hiding them.
`.' and `..' are never flagged." `.' and `..' are never flagged."
(interactive (list (read-regexp "Flag for deletion (regexp): " (interactive (list (read-regexp "Flag for deletion (regexp): "
nil 'dired-regexp-history))) nil 'dired-regexp-history))
dired-mode)
(dired-mark-files-regexp regexp dired-del-marker)) (dired-mark-files-regexp regexp dired-del-marker))
(defun dired-mark-symlinks (unflag-p) (defun dired-mark-symlinks (unflag-p)
@ -4364,7 +4368,7 @@ The match is against the non-directory part of the filename. Use `^'
With prefix argument, unmark or unflag all those files. With prefix argument, unmark or unflag all those files.
If the region is active in Transient Mark mode, mark files If the region is active in Transient Mark mode, mark files
only in the active region if `dired-mark-region' is non-nil." only in the active region if `dired-mark-region' is non-nil."
(interactive "P") (interactive "P" dired-mode)
(let ((dired-marker-char (if unflag-p ?\s dired-marker-char))) (let ((dired-marker-char (if unflag-p ?\s dired-marker-char)))
(dired-mark-if (looking-at-p dired-re-sym) "symbolic link"))) (dired-mark-if (looking-at-p dired-re-sym) "symbolic link")))
@ -4373,7 +4377,7 @@ only in the active region if `dired-mark-region' is non-nil."
With prefix argument, unmark or unflag all those files. With prefix argument, unmark or unflag all those files.
If the region is active in Transient Mark mode, mark files If the region is active in Transient Mark mode, mark files
only in the active region if `dired-mark-region' is non-nil." only in the active region if `dired-mark-region' is non-nil."
(interactive "P") (interactive "P" dired-mode)
(let ((dired-marker-char (if unflag-p ?\s dired-marker-char))) (let ((dired-marker-char (if unflag-p ?\s dired-marker-char)))
(dired-mark-if (and (looking-at-p dired-re-dir) (dired-mark-if (and (looking-at-p dired-re-dir)
(not (looking-at-p dired-re-dot))) (not (looking-at-p dired-re-dot)))
@ -4384,7 +4388,7 @@ only in the active region if `dired-mark-region' is non-nil."
With prefix argument, unmark or unflag all those files. With prefix argument, unmark or unflag all those files.
If the region is active in Transient Mark mode, mark files If the region is active in Transient Mark mode, mark files
only in the active region if `dired-mark-region' is non-nil." only in the active region if `dired-mark-region' is non-nil."
(interactive "P") (interactive "P" dired-mode)
(let ((dired-marker-char (if unflag-p ?\s dired-marker-char))) (let ((dired-marker-char (if unflag-p ?\s dired-marker-char)))
(dired-mark-if (looking-at-p dired-re-exe) "executable file"))) (dired-mark-if (looking-at-p dired-re-exe) "executable file")))
@ -4396,7 +4400,7 @@ only in the active region if `dired-mark-region' is non-nil."
A prefix argument says to unmark or unflag those files instead. A prefix argument says to unmark or unflag those files instead.
If the region is active in Transient Mark mode, flag files If the region is active in Transient Mark mode, flag files
only in the active region if `dired-mark-region' is non-nil." only in the active region if `dired-mark-region' is non-nil."
(interactive "P") (interactive "P" dired-mode)
(let ((dired-marker-char (if unflag-p ?\s dired-del-marker))) (let ((dired-marker-char (if unflag-p ?\s dired-del-marker)))
(dired-mark-if (dired-mark-if
;; It is less than general to check for # here, ;; It is less than general to check for # here,
@ -4430,7 +4434,7 @@ only in the active region if `dired-mark-region' is non-nil."
(defun dired-flag-garbage-files () (defun dired-flag-garbage-files ()
"Flag for deletion all files that match `dired-garbage-files-regexp'." "Flag for deletion all files that match `dired-garbage-files-regexp'."
(interactive) (interactive nil dired-mode)
(dired-flag-files-regexp dired-garbage-files-regexp)) (dired-flag-files-regexp dired-garbage-files-regexp))
(defun dired-flag-backup-files (&optional unflag-p) (defun dired-flag-backup-files (&optional unflag-p)
@ -4438,7 +4442,7 @@ only in the active region if `dired-mark-region' is non-nil."
With prefix argument, unmark or unflag these files. With prefix argument, unmark or unflag these files.
If the region is active in Transient Mark mode, flag files If the region is active in Transient Mark mode, flag files
only in the active region if `dired-mark-region' is non-nil." only in the active region if `dired-mark-region' is non-nil."
(interactive "P") (interactive "P" dired-mode)
(let ((dired-marker-char (if unflag-p ?\s dired-del-marker))) (let ((dired-marker-char (if unflag-p ?\s dired-del-marker)))
(dired-mark-if (dired-mark-if
;; Don't call backup-file-name-p unless the last character looks like ;; Don't call backup-file-name-p unless the last character looks like
@ -4466,7 +4470,8 @@ OLD and NEW are both characters used to mark files."
(old (progn (message "Change (old mark): ") (read-char))) (old (progn (message "Change (old mark): ") (read-char)))
(new (progn (message "Change %c marks to (new mark): " old) (new (progn (message "Change %c marks to (new mark): " old)
(read-char)))) (read-char))))
(list old new))) (list old new))
dired-mode)
(dolist (c (list new old)) (dolist (c (list new old))
(if (or (not (char-displayable-p c)) (if (or (not (char-displayable-p c))
(eq c ?\r)) (eq c ?\r))
@ -4485,7 +4490,7 @@ OLD and NEW are both characters used to mark files."
(defun dired-unmark-all-marks () (defun dired-unmark-all-marks ()
"Remove all marks from all files in the Dired buffer." "Remove all marks from all files in the Dired buffer."
(interactive) (interactive nil dired-mode)
(dired-unmark-all-files ?\r)) (dired-unmark-all-files ?\r))
;; Bound in dired-unmark-all-files ;; Bound in dired-unmark-all-files
@ -4497,7 +4502,7 @@ After this command, type the mark character to remove,
or type RET to remove all marks. or type RET to remove all marks.
With prefix arg, query for each marked file. With prefix arg, query for each marked file.
Type \\[help-command] at that time for help." Type \\[help-command] at that time for help."
(interactive "cRemove marks (RET means all): \nP") (interactive "cRemove marks (RET means all): \nP" dired-mode)
(save-excursion (save-excursion
(let* ((count 0) (let* ((count 0)
(inhibit-read-only t) case-fold-search (inhibit-read-only t) case-fold-search
@ -4674,7 +4679,7 @@ Possible values:
(defun dired-sort-toggle-or-edit (&optional arg) (defun dired-sort-toggle-or-edit (&optional arg)
"Toggle sorting by date, and refresh the Dired buffer. "Toggle sorting by date, and refresh the Dired buffer.
With a prefix argument, edit the current listing switches instead." With a prefix argument, edit the current listing switches instead."
(interactive "P") (interactive "P" dired-mode)
(when dired-sort-inhibit (when dired-sort-inhibit
(error "Cannot sort this Dired buffer")) (error "Cannot sort this Dired buffer"))
(if arg (if arg
@ -5044,7 +5049,7 @@ Interactively with prefix argument, read FILE-NAME."
(defun dired-mark-for-click (event) (defun dired-mark-for-click (event)
"Mark or unmark the file underneath the mouse click at EVENT. "Mark or unmark the file underneath the mouse click at EVENT.
See `dired-click-to-select-mode' for more details." See `dired-click-to-select-mode' for more details."
(interactive "e") (interactive "e" dired-mode)
(let ((posn (event-start event)) (let ((posn (event-start event))
(inhibit-read-only t)) (inhibit-read-only t))
(with-selected-window (posn-window posn) (with-selected-window (posn-window posn)
@ -5067,7 +5072,7 @@ See `dired-click-to-select-mode' for more details."
"Enable `dired-click-to-select-mode' and mark the file under EVENT. "Enable `dired-click-to-select-mode' and mark the file under EVENT.
If there is no file under EVENT, call `touch-screen-hold' with If there is no file under EVENT, call `touch-screen-hold' with
EVENT instead." EVENT instead."
(interactive "e") (interactive "e" dired-mode)
(let* ((posn (event-start event)) (let* ((posn (event-start event))
(window (posn-window posn)) (window (posn-window posn))
(point (posn-point posn))) (point (posn-point posn)))