emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [External] : Visiting a set of files listed in a file


From: Drew Adams
Subject: RE: [External] : Visiting a set of files listed in a file
Date: Sat, 9 Apr 2022 17:44:40 +0000

> Can Emacs visit a set of files listed in a file?
> 
> For example, I have a text file with
> 
> /path_to/file1.f90
> /path_to/file2.txt
> /path_to/file3.c
> /path_to/file4.tex
> ....
> 
> How can I visit all those files without doing that manually which could
> be tedious if the file to be visited are 40-50?
> It would be useful doing that both from command line and inside
> Emacs...

This should do what you want.  You'll need to (require 'dired-x),
if you don't already do that (or you'll need to replace the call
to `dired-simultaneous-find-file' by code that does its job.

Try: `M-x visit-files-listed-in-file'.

(defun visit-files-listed-in-file (listing-file &optional noselect default-dir)
  "Visit each of the files in LISTING-FILE in a buffer.
With a prefix arg, visit the files but don't display them.
When called from lisp:
 Non-nil NOSELECT acts like a prefix arg.
 Non-nil DEFAULT-DIR is used as the `default-directory' for expanding
  relative file names."
  (interactive "fFile with file list: \nP")
  (let ((files  (file-names-from-listing-file listing-file)))
    (dired-simultaneous-find-file files noselect)))
    
(defun file-names-from-listing-file (listing-file &optional default-dir)
  "Return file names in LISTING-FILE as a list of file-name strings.
The file names returned are absolute.
File names in LISTING-FILE can be strings (double-quoted) or not, and
 they can be absolute or relative. 
Optional arg DEFAULT-DIR is used as `default-directory' to expand any
 relative file names."
  (let ((files  ())
        file)
    (with-current-buffer (find-file-noselect listing-file)
      (goto-char (point-min))
      (while (not (eobp))
        (setq file  (read (current-buffer)))
        (unless (stringp file) (setq file  (format "%s" file)))
        (when (setq file  (expand-file-name file default-dir))
          (push file files))
        (forward-line 1)))
    (nreverse files)))

This just leverages what you get with Dired by marking the files
you want to visit and then using `F', which is bound to command
`dired-do-find-marked-files'.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]