aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard M. Stallman1998-05-24 00:55:39 +0000
committerRichard M. Stallman1998-05-24 00:55:39 +0000
commite9b8e22d7e86d39636c88a70690849fcf304ce88 (patch)
tree9aad0609cc375f386633e4e52519150288ffb105
parentecb079ed6d2740f1b624781338236bf04b319919 (diff)
downloademacs-e9b8e22d7e86d39636c88a70690849fcf304ce88.tar.gz
emacs-e9b8e22d7e86d39636c88a70690849fcf304ce88.zip
(dired-mark-files-containing-regexp): New command.
(dired-mode-map): Bind it to %g and in menu bar.
-rw-r--r--lisp/dired.el29
1 files changed, 29 insertions, 0 deletions
diff --git a/lisp/dired.el b/lisp/dired.el
index 348fda3017b..8b602c60777 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -853,6 +853,7 @@ If DIRNAME is already in a dired buffer, that buffer is used without refresh."
853 (define-key map "%u" 'dired-upcase) 853 (define-key map "%u" 'dired-upcase)
854 (define-key map "%l" 'dired-downcase) 854 (define-key map "%l" 'dired-downcase)
855 (define-key map "%d" 'dired-flag-files-regexp) 855 (define-key map "%d" 'dired-flag-files-regexp)
856 (define-key map "%g" 'dired-mark-files-containing-regexp)
856 (define-key map "%m" 'dired-mark-files-regexp) 857 (define-key map "%m" 'dired-mark-files-regexp)
857 (define-key map "%r" 'dired-do-rename-regexp) 858 (define-key map "%r" 'dired-do-rename-regexp)
858 (define-key map "%C" 'dired-do-copy-regexp) 859 (define-key map "%C" 'dired-do-copy-regexp)
@@ -987,6 +988,8 @@ If DIRNAME is already in a dired buffer, that buffer is used without refresh."
987 '("Flag..." . dired-flag-files-regexp)) 988 '("Flag..." . dired-flag-files-regexp))
988 (define-key map [menu-bar regexp mark] 989 (define-key map [menu-bar regexp mark]
989 '("Mark..." . dired-mark-files-regexp)) 990 '("Mark..." . dired-mark-files-regexp))
991 (define-key map [menu-bar regexp mark]
992 '("Mark Containing..." . dired-mark-files-containing-regexp))
990 993
991 (define-key map [menu-bar mark] 994 (define-key map [menu-bar mark]
992 (cons "Mark" (make-sparse-keymap "Mark"))) 995 (cons "Mark" (make-sparse-keymap "Mark")))
@@ -2148,6 +2151,32 @@ object files--just `.o' will mark more than you might think."
2148 (and fn (string-match regexp (file-name-nondirectory fn))))) 2151 (and fn (string-match regexp (file-name-nondirectory fn)))))
2149 "matching file"))) 2152 "matching file")))
2150 2153
2154(defun dired-mark-files-containing-regexp (regexp &optional marker-char)
2155 "Mark all files with contents containing REGEXP for use in later commands.
2156A prefix argument means to unmark them instead.
2157`.' and `..' are never marked."
2158 (interactive
2159 (list (dired-read-regexp (concat (if current-prefix-arg "Unmark" "Mark")
2160 " files containing (regexp): "))
2161 (if current-prefix-arg ?\040)))
2162 (let ((dired-marker-char (or marker-char dired-marker-char)))
2163 (dired-mark-if
2164 (and (not (looking-at dired-re-dot))
2165 (not (eolp)) ; empty line
2166 (let ((fn (dired-get-filename nil t)))
2167 (and fn (save-excursion
2168 ;; For now we do it inside emacs
2169 ;; Grep might be better if there are a lot of files
2170 (message "Checking %s" fn)
2171 (let* ((prebuf (get-file-buffer fn)))
2172 (find-file fn)
2173 (goto-char (point-min))
2174 (prog1
2175 (re-search-forward regexp nil t)
2176 (if (not prebuf) (kill-buffer nil))))
2177 ))))
2178 "matching file")))
2179
2151(defun dired-flag-files-regexp (regexp) 2180(defun dired-flag-files-regexp (regexp)
2152 "In dired, flag all files containing the specified REGEXP for deletion. 2181 "In dired, flag all files containing the specified REGEXP for deletion.
2153The match is against the non-directory part of the filename. Use `^' 2182The match is against the non-directory part of the filename. Use `^'