[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Opening a Dired buffer with an arbitrary list of files.
From: |
Mathias Dahl |
Subject: |
Re: Opening a Dired buffer with an arbitrary list of files. |
Date: |
Mon, 22 May 2006 08:42:40 +0200 |
User-agent: |
Gnus/5.11 (Gnus v5.11) Emacs/22.0.50 (windows-nt) |
Kevin Rodgers <ihs_4664@yahoo.com> writes:
> Alder Green wrote:
>> Is there a way open a Dired buffer containing an arbitrary list of files?
>> I can have those files listed in a plain text file, or maybe
>> provided
>> as list return value of an elisp function. But I'm wondering how I can
>> pass that list to be opened as a Dired buffer, and what format should
>> it take.
>
> Only if all the files are in the same directory:
>
> ,----[ C-h f dired RET ]
> | dired is an interactive compiled Lisp function in `dired.el'.
> | It is bound to C-x d, <menu-bar> <file> <dired>.
> | (dired dirname &optional switches)
> |
> | "Edit" directory dirname--delete, rename, print, etc. some files in it.
> | Optional second argument switches specifies the `ls' options used.
> | (Interactively, use a prefix argument to be able to specify switches.)
> | Dired displays a list of files in dirname (which may also have
> | shell wildcards appended to select certain files). If dirname is a cons,
> | its first element is taken as the directory name and the rest as an
> explicit
> | list of files to make directory entries for.
> | You can move around in it with the usual commands.
> | You can flag files for deletion with d and then
> | delete them by typing x.
> | Type h after entering Dired for more info.
> |
> | If dirname is already in a dired buffer, that buffer is used without
> refresh.
> |
> | [back]
> `----
>
> --
> Kevin
Hehe! :) It seems it pays off to read the documentation more
clearly. Check out the difference between these two implementations of
"gds-dired". The first one done by copy and pasting code from some
other place (don't remember, might have been `find-dired'), and the
second one using `dired':
(defun gds-dired-1 ()
"Use Google Desktop Search to find files and list them in dired.
It generates a result like `find-dired' does, but uses Google
Desktop Search to find matching files."
(interactive)
(let ((dir (read-directory-name "Set current directory: "))
(search (read-string "Search string: "))
(buf (get-buffer-create "*gds-dired*")))
(switch-to-buffer buf)
(kill-all-local-variables)
(setq buffer-read-only nil)
(erase-buffer)
(setq default-directory dir)
(dired-mode dir)
(use-local-map (append (make-sparse-keymap) (current-local-map)))
(define-key (current-local-map) "g" 'undefined)
;; Set subdir-alist so that Tree Dired will work:
(if (fboundp 'dired-simple-subdir-alist)
;; will work even with nested dired format (dired-nstd.el,v
;; 1.15 and later)
(dired-simple-subdir-alist)
;; else we have an ancient tree dired (or classic dired, where
;; this does no harm)
(set (make-local-variable 'dired-subdir-alist)
(list (cons default-directory (point-min-marker)))))
(setq buffer-read-only nil)
(insert " " dir ":\n")
;; Make second line a ``dir'' line in analogy to the ``total'' or
;; ``wildcard'' line.
(insert " GDS search results for \"" search "\"\n")
(let ((buffer-read-only nil)
(saved-pos nil))
(goto-char (point-max))
(setq mode-line-process (concat ": GDS search"))
(mapc
(lambda (x)
(when (file-exists-p x)
(insert " ")
(insert-directory (expand-file-name x) "")))
(gds-get-matching-files search gds-dired-number-of-hits))
(insert " at " (substring (current-time-string) 0 19))
(force-mode-line-update))
(goto-char (point-min))
(forward-line 1)
(dired-next-line 1)))
Somewhat shorter:
(defun gds-dired-2 ()
"Use Google Desktop Search to find files and list them in dired.
It generates a result like `find-dired' does, but uses Google
Desktop Search to find matching files."
(interactive)
(let ((dir (read-directory-name "Set current directory: "))
(search (read-string "Search string: ")))
(dired (cons dir (gds-get-matching-files
search gds-dired-number-of-hits)))))
:)
Thanks!