]> git.eshelyaron.com Git - emacs.git/commitdiff
Do interactive tagging for dired commands
authorVisuwesh <visuweshm@gmail.com>
Sun, 29 Oct 2023 14:51:57 +0000 (20:21 +0530)
committerEli Zaretskii <eliz@gnu.org>
Sat, 18 Nov 2023 08:41:45 +0000 (10:41 +0200)
* 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.

lisp/dired-aux.el
lisp/dired-x.el
lisp/dired.el

index e0bcae6b0052e574d1904ef405eeefda73679334..02194e6ff4542ebb4a173b5c14300dd76c46ae0d 100644 (file)
@@ -264,7 +264,8 @@ the string of command switches used as the third argument of `diff'."
          (read-string "Options for diff: "
                       (if (stringp diff-switches)
                           diff-switches
-                        (mapconcat #'identity diff-switches " ")))))))
+                        (mapconcat #'identity diff-switches " "))))))
+   dired-mode)
   (let ((current (dired-get-filename t)))
     (when (or (equal (expand-file-name file)
                     (expand-file-name current))
@@ -290,7 +291,8 @@ With prefix arg, prompt for argument SWITCHES which is options for `diff'."
                          (if (stringp diff-switches)
                              diff-switches
                            (mapconcat #'identity diff-switches " "))))
-     nil))
+     nil)
+   dired-mode)
   (diff-backup (dired-get-filename) switches))
 
 ;;;###autoload
@@ -336,7 +338,8 @@ only in the active region if `dired-mark-region' is non-nil."
        (read-directory-name (format "Compare %s with: "
                                     (dired-current-directory))
                             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))
          (file-alist1 (dired-files-attributes dir1))
          (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:
 resetting it makes the file read-only.  Changing any other bit
 has no effect on MS-Windows."
-  (interactive "P")
+  (interactive "P" dired-mode)
   (let* ((files (dired-get-marked-files t arg nil nil t))
         ;; The source of default file attributes is the file at point.
         (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] \
 to pull the file attributes of the file at point
 into the minibuffer."
-  (interactive "P")
+  (interactive "P" dired-mode)
   (if (and (memq system-type '(ms-dos windows-nt))
            (not (file-remote-p default-directory)))
       (error "chgrp not supported on this system"))
@@ -553,7 +556,7 @@ into the minibuffer."
 Type \\<minibuffer-local-completion-map>\\[next-history-element] \
 to pull the file attributes of the file at point
 into the minibuffer."
-  (interactive "P")
+  (interactive "P" dired-mode)
   (if (and (memq system-type '(ms-dos windows-nt))
            (not (file-remote-p default-directory)))
       (error "chown not supported on this system"))
@@ -566,7 +569,7 @@ This calls touch.
 Type Type \\<minibuffer-local-completion-map>\\[next-history-element] \
 to pull the file attributes of the file at point
 into the minibuffer."
-  (interactive "P")
+  (interactive "P" dired-mode)
   (dired-do-chxxx "Timestamp" dired-touch-program 'touch arg))
 
 ;; 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.
 Uses the shell command coming from variables `lpr-command' and
 `lpr-switches' as default."
-  (interactive "P")
+  (interactive "P" dired-mode)
   (require 'lpr)
   (let* ((file-list (dired-get-marked-files t arg nil nil t))
         (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]
 with a prefix argument."
-  (interactive "P")
+  (interactive "P" dired-mode)
   (setq keep (if keep (prefix-numeric-value keep) dired-kept-versions))
   (let ((early-retention (if (< keep 0) (- keep) kept-old-versions))
        (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:
       (dired-read-shell-command "& on %s: " current-prefix-arg files)
       current-prefix-arg
-      files)))
+      files))
+   dired-mode)
   (unless (string-match-p "&[ \t]*\\'" command)
     (setq command (concat command " &")))
   (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:
       (dired-read-shell-command "! on %s: " current-prefix-arg files)
       current-prefix-arg
-      files)))
+      files))
+   dired-mode)
   (let* ((on-each (not (dired--star-or-qmark-p command "*" 'keep)))
         (no-subst (not (dired--star-or-qmark-p command "?" 'keep)))
          (confirmations nil)
@@ -1342,7 +1347,7 @@ See `dired-guess-shell-alist-user'."
   "Kill the current line (not the files).
 With a prefix argument, kill that many lines starting with the current line.
 (A negative argument kills backward.)"
-  (interactive "P")
+  (interactive "P" dired-mode)
   (setq arg (prefix-numeric-value arg))
   (let (buffer-read-only file)
     (while (/= 0 arg)
@@ -1383,7 +1388,7 @@ lines removed by this invocation, for the reporting message.
 
 A FMT of \"\" will suppress the messaging."
   ;; Returns count of killed lines.
-  (interactive "P")
+  (interactive "P" dired-mode)
   (if arg
       (if (dired-get-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.
 Choose the archiving command based on the archive file-name extension
 and `dired-compress-files-alist'."
-  (interactive)
+  (interactive nil dired-mode)
   (let* ((in-files (dired-get-marked-files nil nil nil nil t))
          (out-file (expand-file-name (read-file-name "Compress to: ")))
          (rule (cl-find-if
@@ -1758,7 +1763,7 @@ the directory and all of its subdirectories, recursively,
 into a .tar.gz 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."
-  (interactive "P")
+  (interactive "P" dired-mode)
   (dired-map-over-marks-check #'dired-compress arg 'compress t))
 
 \f
@@ -1787,7 +1792,7 @@ uncompress and unpack all the files in the archive."
 ;;;###autoload
 (defun dired-do-byte-compile (&optional arg)
   "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))
 
 (defun dired-load ()
@@ -1804,7 +1809,7 @@ uncompress and unpack all the files in the archive."
 ;;;###autoload
 (defun dired-do-load (&optional arg)
   "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))
 
 ;;;###autoload
@@ -1821,7 +1826,7 @@ You can reset all subdirectory switches to the default using
 \\<dired-mode-map>\\[dired-reset-subdir-switches].
 See Info node `(emacs)Subdir switches' for more details."
   ;; 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))
       (let* ((dir (dired-get-subdir))
             (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 ()
   "Set `dired-switches-alist' to nil and revert Dired buffer."
-  (interactive)
+  (interactive nil dired-mode)
   (setq dired-switches-alist nil)
   (revert-buffer))
 
@@ -2691,7 +2696,8 @@ FILENAME is a full file name."
 Parent directories of DIRECTORY are created as needed.
 If DIRECTORY already exists, signal an error."
   (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)))
         new)
     (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.
 Parent directories of FILE are created as needed.
 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))
          new)
     (if (file-exists-p expanded)
@@ -2771,7 +2777,7 @@ element 4 (`\\[universal-argument]'), the inverted value of
 `dired-copy-dereference' will be used.
 
 Also see `dired-do-revert-buffer'."
-  (interactive "P")
+  (interactive "P" dired-mode)
   (let ((dired-recursive-copies dired-recursive-copies)
         (dired-copy-dereference (if (equal arg '(4))
                                     (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].
 
 Also see `dired-do-revert-buffer'."
-  (interactive "P")
+  (interactive "P" dired-mode)
   (dired-do-create-files 'symlink #'make-symbolic-link
                          "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
 
 For absolute symlinks, use \\[dired-do-symlink]."
-  (interactive "P")
+  (interactive "P" dired-mode)
   (dired-do-create-files 'relsymlink #'dired-make-relative-symlink
                          "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.
 
 Also see `dired-do-revert-buffer'."
-  (interactive "P")
+  (interactive "P" dired-mode)
   (dired-do-create-files 'hardlink #'dired-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.
 
 Also see `dired-do-revert-buffer'."
-  (interactive "P")
+  (interactive "P" dired-mode)
   (when (seq-find (lambda (file)
                     (member (file-name-nondirectory file) '("." "..")))
                   (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.
 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-rename-file
    "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)
   "Copy selected files whose names match REGEXP to NEWNAME.
 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.
     (dired-do-create-files-regexp
      #'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)
   "Hardlink selected files whose names match REGEXP to NEWNAME.
 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
    #'add-name-to-file
    "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)
   "Symlink selected files whose names match REGEXP to NEWNAME.
 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
    #'make-symbolic-link
    "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.
 See functions `dired-do-rename-regexp' and `dired-do-relsymlink'
 for more info."
-  (interactive (dired-mark-read-regexp "RelSymLink"))
+  (interactive (dired-mark-read-regexp "RelSymLink") dired-mode)
   (dired-do-create-files-regexp
    #'dired-make-relative-symlink
    "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
 (defun dired-upcase (&optional arg)
   "Rename all marked (or next ARG) files to upper case."
-  (interactive "P")
+  (interactive "P" dired-mode)
   (dired-rename-non-directory #'upcase "Rename upcase" arg))
 
 ;;;###autoload
 (defun dired-downcase (&optional arg)
   "Rename all marked (or next ARG) files to lower case."
-  (interactive "P")
+  (interactive "P" dired-mode)
   (dired-rename-non-directory #'downcase "Rename downcase" arg))
 
 \f
@@ -3114,7 +3120,8 @@ See Info node `(emacs)Subdir switches' for more details."
    (list (dired-get-filename)
         (if current-prefix-arg
             (read-string "Switches for listing: "
-                         (or dired-subdir-switches dired-actual-switches)))))
+                         (or dired-subdir-switches dired-actual-switches))))
+   dired-mode)
   (let ((opoint (point)))
     ;; We don't need a marker for opoint as the subdir is always
     ;; inserted *after* opoint.
@@ -3146,7 +3153,8 @@ This function takes some pains to conform to `ls -lR' output."
    (list (dired-get-filename)
         (if current-prefix-arg
             (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)))
   (or no-error-if-not-dir-p
       (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
 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)))
   (let ((s-alist dired-subdir-alist) dir m-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
             (prefix-numeric-value current-prefix-arg)
           ;; 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))
 
 ;;;###autoload
@@ -3410,7 +3419,7 @@ The next char is \\n."
   "Mark all files except `.' and `..' in current subdirectory.
 If the Dired buffer shows multiple directories, this command
 marks the files listed in the subdirectory that point is in."
-  (interactive)
+  (interactive nil dired-mode)
   (let ((p-min (dired-subdir-min)))
     (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.
 Lower levels are unaffected."
   ;; With optional REMEMBER-MARKS, return a mark-alist.
-  (interactive)
+  (interactive nil dired-mode)
   (let* ((beg (dired-subdir-min))
         (end (dired-subdir-max))
         (modflag (buffer-modified-p))
@@ -3446,7 +3455,7 @@ Lower levels are unaffected."
 ;;;###autoload
 (defun dired-tree-up (arg)
   "Go up ARG levels in the Dired tree."
-  (interactive "p")
+  (interactive "p" dired-mode)
   (let ((dir (dired-current-directory)))
     (while (>= arg 1)
       (setq arg (1- arg)
@@ -3458,7 +3467,7 @@ Lower levels are unaffected."
 ;;;###autoload
 (defun dired-tree-down ()
   "Go down in the Dired tree."
-  (interactive)
+  (interactive nil dired-mode)
   (let ((dir (dired-current-directory)) ; has slash
        pos case-fold-search)           ; filenames are case sensitive
     (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.
 Optional prefix arg is a repeat factor.
 Use \\[dired-hide-all] to (un)hide all directories."
-  (interactive "p")
+  (interactive "p" dired-mode)
   (with-silent-modifications
     (while (>=  (setq arg (1- arg)) 0)
       (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.
 If there is already something hidden, make everything visible again.
 Use \\[dired-hide-subdir] to (un)hide a particular subdirectory."
-  (interactive "P")
+  (interactive "P" dired-mode)
   (with-silent-modifications
     (if (text-property-any (point-min) (point-max) 'invisible 'dired)
        (dired--unhide (point-min) (point-max))
@@ -3577,14 +3586,14 @@ It's intended to override the default search function."
 ;;;###autoload
 (defun dired-isearch-filenames ()
   "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)
   (isearch-forward nil t))
 
 ;;;###autoload
 (defun dired-isearch-filenames-regexp ()
   "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)
   (isearch-forward-regexp nil t))
 
@@ -3594,7 +3603,7 @@ It's intended to override the default search function."
 ;;;###autoload
 (defun dired-do-isearch ()
   "Search for a string through all marked files using Isearch."
-  (interactive)
+  (interactive nil dired-mode)
   (multi-isearch-files
    (prog1 (dired-get-marked-files nil nil
                                   #'dired-nondirectory-p nil t)
@@ -3603,7 +3612,7 @@ It's intended to override the default search function."
 ;;;###autoload
 (defun dired-do-isearch-regexp ()
   "Search for a regexp through all marked files using Isearch."
-  (interactive)
+  (interactive nil dired-mode)
   (prog1 (multi-isearch-files-regexp
           (dired-get-marked-files nil nil
                                   '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.
 
 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
    regexp
    (dired-get-marked-files nil nil #'dired-nondirectory-p)
@@ -3642,7 +3651,8 @@ resume the query replace with the command \\[fileloop-continue]."
    (let ((common
          (query-replace-read-args
           "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))
     (let ((buffer (get-file-buffer file)))
       (if (and buffer (with-current-buffer buffer
@@ -3686,7 +3696,7 @@ matching `grep-find-ignored-directories' are skipped in the marked
 directories.
 
 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 'xref)
   (defvar grep-find-ignored-files)
@@ -3741,7 +3751,8 @@ function works."
    (let ((common
           (query-replace-read-args
            "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)
   (defvar xref-show-xrefs-function)
   (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
 FILE is a symbolic link, then the command will print the type
 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)
     (with-temp-buffer
       (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
 belong to a VCS repository, prompt for a repository directory.  In this
 case, the VERBOSE argument is ignored."
-  (interactive "P")
+  (interactive "P" dired-mode)
   (let* ((marked-files
           (dired-get-marked-files nil nil nil nil t))
          (mark-files
index b7824fa81bd67918d42f8e7610cd8b29438d0c57..04b3c783084f1acf7f1b4beffd190374cd2b6b9e 100644 (file)
@@ -299,7 +299,7 @@ Optional MARKER-CHAR is marker to use.
 Interactively, ask for EXTENSION.
 Prefixed with one \\[universal-argument], unmark files instead.
 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))
   (dired-mark-files-regexp
    (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.
 Prefixed with one \\[universal-argument], unmark files instead.
 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))
   (dired-mark-files-regexp
    (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)
   "In Dired, flag all files with a certain EXTENSION for deletion.
 A `.' is *not* automatically prepended to the string entered."
-  (interactive "sFlagging extension: ")
+  (interactive "sFlagging extension: " dired-mode)
   (dired-mark-extension extension dired-del-marker))
 
 ;; 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 ()
   "Flag dispensable files created by patch for deletion.
 See variable `dired-patch-unclean-extensions'."
-  (interactive)
+  (interactive nil dired-mode)
   (dired-flag-extension dired-patch-unclean-extensions))
 
 (defun dired-clean-tex ()
@@ -372,7 +372,7 @@ See variable `dired-patch-unclean-extensions'."
 See variables `dired-tex-unclean-extensions',
 `dired-latex-unclean-extensions', `dired-bibtex-unclean-extensions' and
 `dired-texinfo-unclean-extensions'."
-  (interactive)
+  (interactive nil dired-mode)
   (dired-flag-extension (append dired-texinfo-unclean-extensions
                                 dired-latex-unclean-extensions
                                 dired-bibtex-unclean-extensions
@@ -383,7 +383,7 @@ See variables `dired-tex-unclean-extensions',
 See variables `dired-texinfo-unclean-extensions',
 `dired-latex-unclean-extensions', `dired-bibtex-unclean-extensions' and
 `dired-texinfo-unclean-extensions'."
-  (interactive)
+  (interactive nil dired-mode)
   (dired-flag-extension (append dired-texinfo-unclean-extensions
                                 dired-latex-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 ()
   "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
   (dired-mark-unmarked-files (dired-omit-regexp) nil nil dired-omit-localp
                              (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
 of lines omitted by this invocation of `dired-omit-expunge', in the
 status message."
-  (interactive "sOmit files (regexp): \nP")
+  (interactive "sOmit files (regexp): \nP" dired-mode)
   ;; Bind `dired-marker-char' to `dired-omit-marker-char',
   ;; then call `dired-do-kill-lines'.
   (if (and dired-omit-mode
@@ -531,7 +531,8 @@ files in the active region if `dired-mark-region' is non-nil."
    (list (read-regexp
           (format-prompt "Mark unmarked files matching regexp" "all")
           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)))
     (dired-mark-if
      (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 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)
                                 noselect))
 
@@ -780,7 +781,7 @@ NOSELECT the files are merely found but not selected."
   "Run VM on this file.
 With optional prefix argument, visits the folder read-only.
 Otherwise obeys the value of `dired-vm-read-only-folders'."
-  (interactive "P")
+  (interactive "P" dired-mode)
   (let ((dir (dired-current-directory))
         (fil (dired-get-filename)))
     (vm-visit-folder fil (or read-only
@@ -792,7 +793,7 @@ Otherwise obeys the value of `dired-vm-read-only-folders'."
 
 (defun dired-rmail ()
   "Run RMAIL on this file."
-  (interactive)
+  (interactive nil dired-mode)
   (rmail (dired-get-filename)))
 
 (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
 `dired-vm' if `dired-bind-vm' is non-nil, `dired-rmail'
 otherwise."
-  (interactive)
+  (interactive nil dired-mode)
   (let ((file (dired-get-filename t)))
     (if dired-bind-vm
        (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
                       "UNmark"
                     "Mark")))
-         current-prefix-arg))
+         current-prefix-arg)
+   dired-mode)
   (message "%s" predicate)
   (let ((dired-marker-char (if unflag-p ?\040 dired-marker-char))
         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).
 Similarly for `dired-x-find-file-other-window' and `find-file-other-window'.
 Binding direction based on `dired-x-hands-off-my-keys'."
-  (interactive)
+  (interactive nil)
   (if (called-interactively-p 'interactive)
       (setq dired-x-hands-off-my-keys
             (not (y-or-n-p (format-message
index 8919d2c223f2ab7bb79eb4a851cb91e586b4f140..583cb2475e2f1b2529cd7b24d67641de2b3936aa 100644 (file)
@@ -1823,7 +1823,7 @@ see `dired-use-ls-dired' for more details.")
   "Begin a drag-and-drop operation for the file at EVENT.
 If there are marked files and that file is marked, drag every
 other marked file as well.  Otherwise, unmark all files."
-  (interactive "e")
+  (interactive "e" dired-mode)
   (when mark-active
     (deactivate-mark))
   (let* ((modifiers (event-modifiers event))
@@ -2662,7 +2662,7 @@ Keybindings:
   "Undo in a Dired buffer.
 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."
-  (interactive)
+  (interactive nil dired-mode)
   (let ((inhibit-read-only t))
     (undo))
   (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
 mode is `dired-mode'), call `wdired-change-to-wdired-mode'.
 Otherwise, toggle `read-only-mode'."
-  (interactive)
+  (interactive nil dired-mode)
   (unless (file-exists-p default-directory)
     (user-error "The current directory no longer exists"))
   (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
 is controlled by `dired-movement-style'."
-  (interactive "^p")
+  (interactive "^p" dired-mode)
   (if dired-movement-style
       (let ((old-position (progn
                             ;; 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
 is controlled by `dired-movement-style'."
-  (interactive "^p")
+  (interactive "^p" dired-mode)
   (dired-next-line (- (or arg 1))))
 
 (defun dired-next-dirline (arg &optional opoint)
   "Goto ARGth next directory file line."
-  (interactive "p")
+  (interactive "p" dired-mode)
   (or opoint (setq opoint (point)))
   (if (if (> arg 0)
          (re-search-forward dired-re-dir nil t arg)
@@ -2767,7 +2767,7 @@ is controlled by `dired-movement-style'."
 
 (defun dired-prev-dirline (arg)
   "Goto ARGth previous directory file line."
-  (interactive "p")
+  (interactive "p" dired-mode)
   (dired-next-dirline (- arg)))
 
 (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.
 If OTHER-WINDOW (the optional prefix arg), display the parent
 directory in another window."
-  (interactive "P")
+  (interactive "P" dired-mode)
   (let* ((dir (dired-current-directory))
         (up (file-name-directory (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 ()
   "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 `..'.
   (let ((raw (dired-get-filename nil t))
        file-name)
@@ -2811,7 +2811,7 @@ directory in another window."
   #'dired-find-file "23.2")
 (defun dired-find-file ()
   "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)))
 
 (defun dired--find-possibly-alternative-file (file)
@@ -2843,7 +2843,7 @@ directory in another window."
 (defun dired-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."
-  (interactive)
+  (interactive nil dired-mode)
   (set-buffer-modified-p nil)
   (find-alternate-file (dired-get-file-for-visit)))
 ;; 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
 non-nil, FIND-DIR-FUNC defaults to `find-alternate-file' instead,
 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))
   (let (window pos file)
     (save-excursion
@@ -2885,19 +2885,19 @@ so that the original Dired buffer is not kept."
 
 (defun dired-mouse-find-file-other-window (event)
   "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))
 
 (defun dired-mouse-find-file-other-frame (event)
   "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))
 
 (defun dired-view-file ()
   "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.
 Otherwise, display it in another buffer."
-  (interactive)
+  (interactive nil dired-mode)
   (let ((file (dired-get-file-for-visit)))
     (if (file-directory-p file)
        (or (and (cdr dired-subdir-alist)
@@ -2907,12 +2907,12 @@ Otherwise, display it in another buffer."
 
 (defun dired-find-file-other-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)))
 
 (defun dired-display-file ()
   "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))
                  t))
 
@@ -3249,7 +3249,7 @@ If on a subdir headerline, use absolute subdirname instead;
 prefix arg and marked files are ignored in this case.
 
 You can then feed the file name(s) to other commands with \\[yank]."
-  (interactive "P")
+  (interactive "P" dired-mode)
   (let* ((files
           (or (ensure-list (dired-get-subdir))
               (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.
   ;; NO-SKIP prevents moving to end of header line, returning whatever
   ;; position was found in dired-subdir-alist.
-  (interactive "p")
+  (interactive "p" dired-mode)
   (let ((this-dir (dired-current-directory))
        pos index)
     ;; 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.
 If optional arg SWITCHES is non-nil, use its value
 instead of `dired-actual-switches'."
-  (interactive)
+  (interactive nil dired-mode)
   (dired-clear-alist)
   (save-excursion
     (let* ((count 0)
@@ -3560,7 +3560,8 @@ instead of `dired-actual-switches'."
        (list (expand-file-name
              (read-file-name "Goto file: "
                              (dired-current-directory))))
-     (push-mark)))
+     (push-mark))
+   dired-mode)
   (unless (file-name-absolute-p file)
     (error "File name `%s' is not absolute" file))
   (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.
 `dired-recursive-deletes' controls whether deletion of
 non-empty directories is allowed."
-  (interactive)
+  (interactive nil dired-mode)
   (let* ((dired-marker-char dired-del-marker)
         (regexp (dired-marker-regexp))
         case-fold-search markers)
@@ -3789,7 +3790,7 @@ non-empty directories is allowed."
 non-empty directories is allowed."
   ;; This is more consistent with the file marking feature than
   ;; dired-do-flagged-delete.
-  (interactive "P")
+  (interactive "P" dired-mode)
   (let (markers)
     (dired-internal-do-deletions
      (nreverse
@@ -4093,7 +4094,7 @@ marked file is found after this line.
 Optional argument OPOINT specifies the buffer position to
 return to if no ARGth marked file is found; it defaults to
 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
   (if (if (> arg 0)
          (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
 to the end of the buffer and search backwards from there, if
 no ARGth marked file is found before this line."
-  (interactive "p\np")
+  (interactive "p\np" dired-mode)
   (dired-next-marked-file (- arg) wrap))
 
 (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
 and \\[dired-unmark] on a subdir to remove the marks in
 this subdir."
-  (interactive (list current-prefix-arg t))
+  (interactive (list current-prefix-arg t) dired-mode)
   (cond
    ;; Mark files in the active 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 the region is active in Transient Mark mode, unmark all files
 in the active region."
-  (interactive (list current-prefix-arg t))
+  (interactive (list current-prefix-arg t) dired-mode)
   (let ((dired-marker-char ?\s))
     (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 the region is active in Transient Mark mode, flag all files
 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))
     (dired-mark arg interactive)))
 
@@ -4214,7 +4215,7 @@ Optional prefix ARG says how many lines to unmark/unflag; default
 is one line.
 If the region is active in Transient Mark mode, unmark all files
 in the active region."
-  (interactive "p")
+  (interactive "p" dired-mode)
   (dired-unmark (- arg) t))
 
 (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
 of the region if `dired-mark-region' is non-nil.  Otherwise, operate
 on the whole buffer."
-  (interactive)
+  (interactive nil dired-mode)
   (save-excursion
     (let ((inhibit-read-only t)
           (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-regexp-history)
-        (if current-prefix-arg ?\s)))
+        (if current-prefix-arg ?\s))
+   dired-mode)
   (let ((dired-marker-char (or marker-char dired-marker-char)))
     (dired-mark-if
      (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 ()
   "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))
          (nmarked
           (cond ((null (cdr files))
@@ -4327,7 +4329,8 @@ since it was last visited."
    (list (read-regexp (concat (if current-prefix-arg "Unmark" "Mark")
                               " files containing (regexp): ")
                       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)))
     (dired-mark-if
      (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 `..' are never flagged."
   (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))
 
 (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.
 If the region is active in Transient Mark mode, mark files
 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)))
     (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.
 If the region is active in Transient Mark mode, mark files
 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)))
     (dired-mark-if (and (looking-at-p dired-re-dir)
                        (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.
 If the region is active in Transient Mark mode, mark files
 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)))
     (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.
 If the region is active in Transient Mark mode, flag files
 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)))
     (dired-mark-if
      ;; 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 ()
   "Flag for deletion all files that match `dired-garbage-files-regexp'."
-  (interactive)
+  (interactive nil dired-mode)
   (dired-flag-files-regexp dired-garbage-files-regexp))
 
 (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.
 If the region is active in Transient Mark mode, flag files
 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)))
     (dired-mark-if
      ;; 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)))
          (new (progn (message  "Change %c marks to (new mark): " old)
                      (read-char))))
-     (list old new)))
+     (list old new))
+   dired-mode)
   (dolist (c (list new old))
     (if (or (not (char-displayable-p c))
             (eq c ?\r))
@@ -4485,7 +4490,7 @@ OLD and NEW are both characters used to mark files."
 
 (defun dired-unmark-all-marks ()
   "Remove all marks from all files in the Dired buffer."
-  (interactive)
+  (interactive nil dired-mode)
   (dired-unmark-all-files ?\r))
 
 ;; 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.
 With prefix arg, query for each marked file.
 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
     (let* ((count 0)
           (inhibit-read-only t) case-fold-search
@@ -4674,7 +4679,7 @@ Possible values:
 (defun dired-sort-toggle-or-edit (&optional arg)
   "Toggle sorting by date, and refresh the Dired buffer.
 With a prefix argument, edit the current listing switches instead."
-  (interactive "P")
+  (interactive "P" dired-mode)
   (when dired-sort-inhibit
     (error "Cannot sort this Dired buffer"))
   (if arg
@@ -5044,7 +5049,7 @@ Interactively with prefix argument, read FILE-NAME."
 (defun dired-mark-for-click (event)
   "Mark or unmark the file underneath the mouse click at EVENT.
 See `dired-click-to-select-mode' for more details."
-  (interactive "e")
+  (interactive "e" dired-mode)
   (let ((posn (event-start event))
         (inhibit-read-only t))
     (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.
 If there is no file under EVENT, call `touch-screen-hold' with
 EVENT instead."
-  (interactive "e")
+  (interactive "e" dired-mode)
   (let* ((posn (event-start event))
          (window (posn-window posn))
          (point (posn-point posn)))