Document some Emacs 24.3 changes.
[bpt/emacs.git] / doc / emacs / dired.texi
CommitLineData
8cf51b2c 1@c This is part of the Emacs manual.
acaf905b 2@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2012
4ebe9902 3@c Free Software Foundation, Inc.
8cf51b2c 4@c See file emacs.texi for copying conditions.
e0b1591b 5@node Dired
8cf51b2c 6@chapter Dired, the Directory Editor
59eda47f
RS
7@c This node is referenced in the tutorial. When renaming or deleting
8@c it, the tutorial needs to be adjusted.
8cf51b2c
GM
9@cindex Dired
10@cindex file management
11
12 Dired makes an Emacs buffer containing a listing of a directory, and
13optionally some of its subdirectories as well. You can use the normal
fac6225b
CY
14Emacs commands to move around in this buffer, and special Dired
15commands to operate on the listed files.
8cf51b2c 16
16152b76 17 The Dired buffer is ``read-only'', and inserting text in it is not
fac6225b
CY
18allowed. Ordinary printing characters such as @kbd{d} and @kbd{x} are
19redefined for special Dired commands. Some Dired commands @dfn{mark}
20or @dfn{flag} the @dfn{current file} (that is, the file on the current
21line); other commands operate on the marked files or on the flagged
22files. You first mark certain files in order to operate on all of
23them with one command.
8cf51b2c
GM
24
25 The Dired-X package provides various extra features for Dired mode.
8c62c205 26@xref{Top, Dired-X,,dired-x, Dired Extra User's Manual}.
8cf51b2c 27
fac6225b
CY
28 You can also view a list of files in a directory with @kbd{C-x C-d}
29(@code{list-directory}). Unlike Dired, this command does not allow
30you to operate on the listed files. @xref{Directories}.
31
8cf51b2c
GM
32@menu
33* Enter: Dired Enter. How to invoke Dired.
34* Navigation: Dired Navigation. Special motion commands in the Dired buffer.
35* Deletion: Dired Deletion. Deleting files with Dired.
36* Flagging Many Files:: Flagging files based on their names.
37* Visit: Dired Visiting. Other file operations through Dired.
8838673e
GM
38* Marks vs Flags:: Flagging for deletion vs marking.
39* Operating on Files:: How to copy, rename, print, compress, etc.
40 either one file or several files.
8cf51b2c
GM
41* Shell Commands in Dired:: Running a shell command on the marked files.
42* Transforming File Names:: Using patterns to rename multiple files.
53eced6d 43* Comparison in Dired:: Running @code{diff} by way of Dired.
8cf51b2c
GM
44* Subdirectories in Dired:: Adding subdirectories to the Dired buffer.
45@ifnottex
46* Subdir Switches:: Subdirectory switches in Dired.
47@end ifnottex
8838673e 48* Subdirectory Motion:: Moving across subdirectories, and up and down.
8cf51b2c
GM
49* Hiding Subdirectories:: Making subdirectories visible or invisible.
50* Updating: Dired Updating. Discarding lines for files of no interest.
53eced6d 51* Find: Dired and Find. Using @code{find} to choose the files for Dired.
8cf51b2c 52* Wdired:: Operating on files by editing the Dired buffer.
c5ae942b 53* Image-Dired:: Viewing image thumbnails in Dired.
8cf51b2c
GM
54* Misc: Misc Dired Features. Various other features.
55@end menu
56
57@node Dired Enter
58@section Entering Dired
59
60@findex dired
61@kindex C-x d
62@vindex dired-listing-switches
fac6225b
CY
63 To invoke Dired, type @kbd{C-x d} (@code{dired}). This reads a
64directory name using the minibuffer, and opens a @dfn{Dired buffer}
65listing the files in that directory. You can also supply a wildcard
66file name pattern as the minibuffer argument, in which case the Dired
67buffer lists all files matching that pattern. The usual history and
68completion commands can be used in the minibuffer; in particular,
69@kbd{M-n} puts the name of the visited file (if any) in the minibuffer
70(@pxref{Minibuffer History}).
71
72 You can also invoke Dired by giving @kbd{C-x C-f} (@code{find-file})
73a directory name.
8cf51b2c
GM
74
75 The variable @code{dired-listing-switches} specifies the options to
c40a7de7
CY
76give to @command{ls} for listing the directory; this string
77@emph{must} contain @samp{-l}. If you use a prefix argument with the
78@code{dired} command, you can specify the @command{ls} switches with the
79minibuffer before you enter the directory specification. No matter
80how they are specified, the @command{ls} switches can include short
81options (that is, single characters) requiring no arguments, and long
82options (starting with @samp{--}) whose arguments are specified with
83@samp{=}.
8cf51b2c 84
90a6258b 85@vindex dired-use-ls-dired
c40a7de7
CY
86 If your @command{ls} program supports the @samp{--dired} option,
87Dired automatically passes it that option; this causes @command{ls} to
88emit special escape sequences for certain unusual file names, without
89which Dired will not be able to parse those names. The first time you
90run Dired in an Emacs session, it checks whether @command{ls} supports
91the @samp{--dired} option by calling it once with that option. If the
92exit code is 0, Dired will subsequently use the @samp{--dired} option;
93otherwise it will not. You can inhibit this check by customizing the
94variable @code{dired-use-ls-dired}. The value @code{unspecified} (the
95default) means to perform the check; any other non-@code{nil} value
96means to use the @samp{--dired} option; and @code{nil} means not to
97use the @samp{--dired} option.
98
99 On MS-Windows and MS-DOS systems, Emacs emulates @command{ls}.
100@xref{ls in Lisp}, for options and peculiarities of this emulation.
8cf51b2c 101
8cf51b2c
GM
102@findex dired-other-window
103@kindex C-x 4 d
104@findex dired-other-frame
105@kindex C-x 5 d
c40a7de7 106 To display the Dired buffer in another window, use @kbd{C-x 4 d}
eceeb5fc 107(@code{dired-other-window}). @kbd{C-x 5 d}
c40a7de7
CY
108(@code{dired-other-frame}) displays the Dired buffer in a separate
109frame.
110
111@kindex q @r{(Dired)}
112@findex quit-window
113 Typing @kbd{q} (@code{quit-window}) buries the Dired buffer, and
114deletes its window if the window was created just for that buffer.
8cf51b2c
GM
115
116@node Dired Navigation
117@section Navigation in the Dired Buffer
118
119@kindex C-n @r{(Dired)}
120@kindex C-p @r{(Dired)}
121 All the usual Emacs cursor motion commands are available in Dired
122buffers. The keys @kbd{C-n} and @kbd{C-p} are redefined to put the
123cursor at the beginning of the file name on the line, rather than at
124the beginning of the line.
125
126@kindex SPC @r{(Dired)}
127 For extra convenience, @key{SPC} and @kbd{n} in Dired are equivalent
fac6225b
CY
128to @kbd{C-n}. @kbd{p} is equivalent to @kbd{C-p}. (Moving by lines
129is so common in Dired that it deserves to be easy to type.) @key{DEL}
130(move up and unflag) is also often useful simply for moving up
131(@pxref{Dired Deletion}).
8cf51b2c
GM
132
133@findex dired-goto-file
134@kindex j @r{(Dired)}
fac6225b
CY
135 @kbd{j} (@code{dired-goto-file}) prompts for a file name using the
136minibuffer, and moves point to the line in the Dired buffer describing
137that file.
138
139@cindex searching Dired buffers
c40a7de7 140@findex dired-isearch-filenames
fac6225b 141@vindex dired-isearch-filenames
c40a7de7
CY
142@findex dired-isearch-filenames-regexp
143@kindex M-s f C-s @r{(Dired)}
144@kindex M-s f M-C-s @r{(Dired)}
fac6225b
CY
145 @kbd{M-s f C-s} (@code{dired-isearch-filenames}) performs a forward
146incremental search in the Dired buffer, looking for matches only
147amongst the file names and ignoring the rest of the text in the
148buffer. @kbd{M-s f M-C-s} (@code{dired-isearch-filenames-regexp})
149does the same, using a regular expression search. If you change the
13989ab1 150variable @code{dired-isearch-filenames} to @code{t}, then the
fac6225b 151usual search commands also limit themselves to the file names; for
607f5f88
JL
152instance, @kbd{C-s} behaves like @kbd{M-s f C-s}. If the value is
153@code{dwim}, then search commands match the file names only when point
154was on a file name initially. @xref{Search}, for information about
155incremental search.
8cf51b2c
GM
156
157 Some additional navigation commands are available when the Dired
158buffer includes several directories. @xref{Subdirectory Motion}.
159
160@node Dired Deletion
161@section Deleting Files with Dired
162@cindex flagging files (in Dired)
163@cindex deleting files (in Dired)
164
165 One of the most frequent uses of Dired is to first @dfn{flag} files for
166deletion, then delete the files that were flagged.
167
168@table @kbd
169@item d
cd996018 170Flag this file for deletion (@code{dired-flag-file-deletion}).
8cf51b2c 171@item u
cd996018 172Remove the deletion flag (@code{dired-unmark}).
8cf51b2c 173@item @key{DEL}
cd996018
CY
174Move point to previous line and remove the deletion flag on that line
175(@code{dired-unmark-backward}).
8cf51b2c 176@item x
cd996018 177Delete files flagged for deletion (@code{dired-do-flagged-delete}).
8cf51b2c
GM
178@end table
179
180@kindex d @r{(Dired)}
181@findex dired-flag-file-deletion
182 You can flag a file for deletion by moving to the line describing
183the file and typing @kbd{d} (@code{dired-flag-file-deletion}). The
184deletion flag is visible as a @samp{D} at the beginning of the line.
185This command moves point to the next line, so that repeated @kbd{d}
cd996018
CY
186commands flag successive files. A numeric prefix argument serves as a
187repeat count; a negative count means to flag preceding files.
188
189 If the region is active, the @kbd{d} command flags all files in the
190region for deletion; in this case, the command does not move point,
191and ignores any prefix argument.
8cf51b2c
GM
192
193@kindex u @r{(Dired deletion)}
194@kindex DEL @r{(Dired)}
195 The reason for flagging files for deletion, rather than deleting
196files immediately, is to reduce the danger of deleting a file
197accidentally. Until you direct Dired to delete the flagged files, you
198can remove deletion flags using the commands @kbd{u} and @key{DEL}.
199@kbd{u} (@code{dired-unmark}) works just like @kbd{d}, but removes
200flags rather than making flags. @key{DEL}
201(@code{dired-unmark-backward}) moves upward, removing flags; it is
cd996018
CY
202like @kbd{u} with argument @minus{}1. A numeric prefix argument to
203either command serves as a repeat count, with a negative count meaning
204to unflag in the opposite direction. If the region is active, these
205commands instead unflag all files in the region, without moving point.
8cf51b2c
GM
206
207@kindex x @r{(Dired)}
208@findex dired-do-flagged-delete
cd996018
CY
209 To delete flagged files, type @kbd{x}
210(@code{dired-do-flagged-delete}). This command displays a list of all
211the file names flagged for deletion, and requests confirmation with
212@kbd{yes}. If you confirm, Dired deletes the flagged files, then
fac6225b
CY
213deletes their lines from the text of the Dired buffer. The Dired
214buffer, with somewhat fewer lines, remains selected.
8cf51b2c
GM
215
216 If you answer @kbd{no} or quit with @kbd{C-g} when asked to confirm, you
217return immediately to Dired, with the deletion flags still present in
218the buffer, and no files actually deleted.
219
220@cindex recursive deletion
221@vindex dired-recursive-deletes
222 You can delete empty directories just like other files, but normally
223Dired cannot delete directories that are nonempty. If the variable
224@code{dired-recursive-deletes} is non-@code{nil}, then Dired can
225delete nonempty directories including all their contents. That can
226be somewhat risky.
227
f2d7be88 228@vindex delete-by-moving-to-trash
04e2ce72
CY
229 If you change the variable @code{delete-by-moving-to-trash} to
230@code{t}, the above deletion commands will move the affected files or
231directories into the operating system's Trash, instead of deleting
232them outright. @xref{Misc File Ops}.
f2d7be88 233
8cf51b2c
GM
234@node Flagging Many Files
235@section Flagging Many Files at Once
236@cindex flagging many files for deletion (in Dired)
237
fac6225b
CY
238 The @kbd{#}, @kbd{~}, @kbd{.}, @kbd{% &}, and @kbd{% d} commands
239flag many files for deletion, based on their file names:
240
8cf51b2c
GM
241@table @kbd
242@item #
243Flag all auto-save files (files whose names start and end with @samp{#})
244for deletion (@pxref{Auto Save}).
245
246@item ~
247Flag all backup files (files whose names end with @samp{~}) for deletion
248(@pxref{Backup}).
249
8cf51b2c
GM
250@item .@: @r{(Period)}
251Flag excess numeric backup files for deletion. The oldest and newest
252few backup files of any one file are exempt; the middle ones are
253flagged.
254
fac6225b
CY
255@item % &
256Flag for deletion all files with certain kinds of names which suggest
257you could easily create those files again.
258
8cf51b2c
GM
259@item % d @var{regexp} @key{RET}
260Flag for deletion all files whose names match the regular expression
261@var{regexp}.
262@end table
263
8cf51b2c
GM
264@kindex # @r{(Dired)}
265@findex dired-flag-auto-save-files
266@cindex deleting auto-save files
fac6225b
CY
267 @kbd{#} (@code{dired-flag-auto-save-files}) flags all files whose
268names look like auto-save files---that is, files whose names begin and
269end with @samp{#}. @xref{Auto Save}.
8cf51b2c
GM
270
271@kindex ~ @r{(Dired)}
272@findex dired-flag-backup-files
fac6225b
CY
273 @kbd{~} (@code{dired-flag-backup-files}) flags all files whose names
274say they are backup files---that is, files whose names end in
275@samp{~}. @xref{Backup}.
8cf51b2c
GM
276
277@kindex . @r{(Dired)}
278@vindex dired-kept-versions
279@findex dired-clean-directory
fac6225b
CY
280 @kbd{.} (period, @code{dired-clean-directory}) flags just some of
281the backup files for deletion: all but the oldest few and newest few
282backups of any one file. Normally, the number of newest versions kept
283for each file is given by the variable @code{dired-kept-versions}
284(@strong{not} @code{kept-new-versions}; that applies only when
285saving). The number of oldest versions to keep is given by the
286variable @code{kept-old-versions}.
8cf51b2c
GM
287
288 Period with a positive numeric argument, as in @kbd{C-u 3 .},
289specifies the number of newest versions to keep, overriding
290@code{dired-kept-versions}. A negative numeric argument overrides
291@code{kept-old-versions}, using minus the value of the argument to
292specify the number of oldest versions of each file to keep.
293
fac6225b
CY
294@kindex % & @r{(Dired)}
295@findex dired-flag-garbage-files
296@vindex dired-garbage-files-regexp
297@cindex deleting some backup files
298 @kbd{% &} (@code{dired-flag-garbage-files}) flags files whose names
299match the regular expression specified by the variable
300@code{dired-garbage-files-regexp}. By default, this matches certain
301files produced by @TeX{}, @samp{.bak} files, and the @samp{.orig} and
302@samp{.rej} files produced by @code{patch}.
303
8cf51b2c
GM
304@findex dired-flag-files-regexp
305@kindex % d @r{(Dired)}
fac6225b
CY
306 @kbd{% d} flags all files whose names match a specified regular
307expression (@code{dired-flag-files-regexp}). Only the non-directory
308part of the file name is used in matching. You can use @samp{^} and
309@samp{$} to anchor matches. You can exclude certain subdirectories
310from marking by hiding them while you use @kbd{% d}. @xref{Hiding
311Subdirectories}.
8cf51b2c
GM
312
313@node Dired Visiting
314@section Visiting Files in Dired
315
316 There are several Dired commands for visiting or examining the files
317listed in the Dired buffer. All of them apply to the current line's
318file; if that file is really a directory, these commands invoke Dired on
319that subdirectory (making a separate Dired buffer).
320
321@table @kbd
322@item f
323@kindex f @r{(Dired)}
324@findex dired-find-file
325Visit the file described on the current line, like typing @kbd{C-x C-f}
326and supplying that file name (@code{dired-find-file}). @xref{Visiting}.
327
328@item @key{RET}
329@itemx e
330@kindex RET @r{(Dired)}
331@kindex e @r{(Dired)}
332Equivalent to @kbd{f}.
333
334@ignore @c This command seems too risky to document at all.
335@item a
336@kindex a @r{(Dired)}
337@findex dired-find-alternate-file
338Like @kbd{f}, but replaces the contents of the Dired buffer with
339that of an alternate file or directory (@code{dired-find-alternate-file}).
340@end ignore
341
342@item o
343@kindex o @r{(Dired)}
344@findex dired-find-file-other-window
345Like @kbd{f}, but uses another window to display the file's buffer
346(@code{dired-find-file-other-window}). The Dired buffer remains visible
347in the first window. This is like using @kbd{C-x 4 C-f} to visit the
348file. @xref{Windows}.
349
350@item C-o
351@kindex C-o @r{(Dired)}
352@findex dired-display-file
353Visit the file described on the current line, and display the buffer in
354another window, but do not select that window (@code{dired-display-file}).
355
356@item Mouse-1
357@itemx Mouse-2
358@findex dired-mouse-find-file-other-window
c40a7de7 359Visit the file whose name you clicked on
8cf51b2c
GM
360(@code{dired-mouse-find-file-other-window}). This uses another window
361to display the file, like the @kbd{o} command.
362
363@item v
364@kindex v @r{(Dired)}
365@findex dired-view-file
c40a7de7
CY
366View the file described on the current line, with View mode
367(@code{dired-view-file}). View mode provides convenient commands to
368navigate the buffer but forbids changing it; @xref{View Mode}.
8cf51b2c
GM
369
370@item ^
371@kindex ^ @r{(Dired)}
372@findex dired-up-directory
373Visit the parent directory of the current directory
374(@code{dired-up-directory}). This is equivalent to moving to the line
375for @file{..} and typing @kbd{f} there.
376@end table
377
378@node Marks vs Flags
379@section Dired Marks vs. Flags
380
381@cindex marking many files (in Dired)
382 Instead of flagging a file with @samp{D}, you can @dfn{mark} the
383file with some other character (usually @samp{*}). Most Dired
384commands to operate on files use the files marked with @samp{*}. The
fac6225b 385only command that operates on flagged files is @kbd{x}, which deletes
8cf51b2c
GM
386them.
387
388 Here are some commands for marking with @samp{*}, for unmarking, and
389for operating on marks. (@xref{Dired Deletion}, for commands to flag
390and unflag files.)
391
392@table @kbd
393@item m
394@itemx * m
395@kindex m @r{(Dired)}
396@kindex * m @r{(Dired)}
397@findex dired-mark
cd996018
CY
398Mark the current file with @samp{*} (@code{dired-mark}). If the
399region is active, mark all files in the region instead; otherwise, if
400a numeric argument @var{n} is supplied, mark the next @var{n} files
401instead, starting with the current file (if @var{n} is negative, mark
402the previous @minus{}@var{n} files).
8cf51b2c
GM
403
404@item * *
405@kindex * * @r{(Dired)}
406@findex dired-mark-executables
407@cindex marking executable files (in Dired)
408Mark all executable files with @samp{*}
409(@code{dired-mark-executables}). With a numeric argument, unmark all
410those files.
411
412@item * @@
413@kindex * @@ @r{(Dired)}
414@findex dired-mark-symlinks
415@cindex marking symbolic links (in Dired)
416Mark all symbolic links with @samp{*} (@code{dired-mark-symlinks}).
417With a numeric argument, unmark all those files.
418
419@item * /
420@kindex * / @r{(Dired)}
421@findex dired-mark-directories
422@cindex marking subdirectories (in Dired)
423Mark with @samp{*} all files which are directories, except for
424@file{.} and @file{..} (@code{dired-mark-directories}). With a numeric
425argument, unmark all those files.
426
427@item * s
428@kindex * s @r{(Dired)}
429@findex dired-mark-subdir-files
430Mark all the files in the current subdirectory, aside from @file{.}
431and @file{..} (@code{dired-mark-subdir-files}).
432
433@item u
434@itemx * u
435@kindex u @r{(Dired)}
436@kindex * u @r{(Dired)}
437@findex dired-unmark
cd996018
CY
438Remove any mark on this line (@code{dired-unmark}). If the region is
439active, unmark all files in the region instead; otherwise, if a
440numeric argument @var{n} is supplied, unmark the next @var{n} files
441instead, starting with the current file (if @var{n} is negative,
442unmark the previous @minus{}@var{n} files).
8cf51b2c
GM
443
444@item @key{DEL}
445@itemx * @key{DEL}
446@kindex * DEL @r{(Dired)}
447@findex dired-unmark-backward
448@cindex unmarking files (in Dired)
449Move point to previous line and remove any mark on that line
cd996018
CY
450(@code{dired-unmark-backward}). If the region is active, unmark all
451files in the region instead; otherwise, if a numeric argument @var{n}
452is supplied, unmark the @var{n} preceding files instead, starting with
453the current file (if @var{n} is negative, unmark the next
454@minus{}@var{n} files).
8cf51b2c
GM
455
456@item * !
457@itemx U
458@kindex * ! @r{(Dired)}
459@kindex U @r{(Dired)}
460@findex dired-unmark-all-marks
461Remove all marks from all the files in this Dired buffer
462(@code{dired-unmark-all-marks}).
463
464@item * ? @var{markchar}
465@itemx M-@key{DEL}
466@kindex * ? @r{(Dired)}
467@kindex M-DEL @r{(Dired)}
468@findex dired-unmark-all-files
469Remove all marks that use the character @var{markchar}
470(@code{dired-unmark-all-files}). The argument is a single
471character---do not use @key{RET} to terminate it. See the description
472of the @kbd{* c} command below, which lets you replace one mark
473character with another.
474
475With a numeric argument, this command queries about each marked file,
476asking whether to remove its mark. You can answer @kbd{y} meaning yes,
477@kbd{n} meaning no, or @kbd{!} to remove the marks from the remaining
478files without asking about them.
479
480@item * C-n
481@itemx M-@}
482@findex dired-next-marked-file
483@kindex * C-n @r{(Dired)}
484@kindex M-@} @r{(Dired)}
485Move down to the next marked file (@code{dired-next-marked-file})
486A file is ``marked'' if it has any kind of mark.
487
488@item * C-p
489@itemx M-@{
490@findex dired-prev-marked-file
491@kindex * C-p @r{(Dired)}
492@kindex M-@{ @r{(Dired)}
493Move up to the previous marked file (@code{dired-prev-marked-file})
494
495@item t
496@itemx * t
497@kindex t @r{(Dired)}
498@kindex * t @r{(Dired)}
499@findex dired-toggle-marks
500@cindex toggling marks (in Dired)
501Toggle all marks (@code{dired-toggle-marks}): files marked with @samp{*}
502become unmarked, and unmarked files are marked with @samp{*}. Files
503marked in any other way are not affected.
504
505@item * c @var{old-markchar} @var{new-markchar}
506@kindex * c @r{(Dired)}
507@findex dired-change-marks
508Replace all marks that use the character @var{old-markchar} with marks
509that use the character @var{new-markchar} (@code{dired-change-marks}).
510This command is the primary way to create or use marks other than
511@samp{*} or @samp{D}. The arguments are single characters---do not use
512@key{RET} to terminate them.
513
514You can use almost any character as a mark character by means of this
515command, to distinguish various classes of files. If @var{old-markchar}
516is a space (@samp{ }), then the command operates on all unmarked files;
517if @var{new-markchar} is a space, then the command unmarks the files it
518acts on.
519
520To illustrate the power of this command, here is how to put @samp{D}
521flags on all the files that have no marks, while unflagging all those
522that already have @samp{D} flags:
523
524@example
525* c D t * c SPC D * c t SPC
526@end example
527
528This assumes that no files were already marked with @samp{t}.
529
530@item % m @var{regexp} @key{RET}
531@itemx * % @var{regexp} @key{RET}
532@findex dired-mark-files-regexp
533@kindex % m @r{(Dired)}
534@kindex * % @r{(Dired)}
535Mark (with @samp{*}) all files whose names match the regular expression
536@var{regexp} (@code{dired-mark-files-regexp}). This command is like
537@kbd{% d}, except that it marks files with @samp{*} instead of flagging
538with @samp{D}.
539
540Only the non-directory part of the file name is used in matching. Use
541@samp{^} and @samp{$} to anchor matches. You can exclude
542subdirectories by temporarily hiding them (@pxref{Hiding
543Subdirectories}).
544
545@item % g @var{regexp} @key{RET}
546@findex dired-mark-files-containing-regexp
547@kindex % g @r{(Dired)}
548@cindex finding files containing regexp matches (in Dired)
549Mark (with @samp{*}) all files whose @emph{contents} contain a match for
550the regular expression @var{regexp}
551(@code{dired-mark-files-containing-regexp}). This command is like
552@kbd{% m}, except that it searches the file contents instead of the file
553name.
554
c40a7de7
CY
555@item C-/
556@itemx C-x u
8cf51b2c 557@itemx C-_
8cf51b2c
GM
558@kindex C-_ @r{(Dired)}
559@findex dired-undo
560Undo changes in the Dired buffer, such as adding or removing
561marks (@code{dired-undo}). @emph{This command does not revert the
562actual file operations, nor recover lost files!} It just undoes
563changes in the buffer itself.
564
565In some cases, using this after commands that operate on files can
566cause trouble. For example, after renaming one or more files,
567@code{dired-undo} restores the original names in the Dired buffer,
568which gets the Dired buffer out of sync with the actual contents of
569the directory.
570@end table
571
572@node Operating on Files
573@section Operating on Files
574@cindex operating on files in Dired
575
576 This section describes the basic Dired commands to operate on one file
577or several files. All of these commands are capital letters; all of
578them use the minibuffer, either to read an argument or to ask for
579confirmation, before they act. All of them let you specify the
580files to manipulate in these ways:
581
582@itemize @bullet
583@item
584If you give the command a numeric prefix argument @var{n}, it operates
585on the next @var{n} files, starting with the current file. (If @var{n}
586is negative, the command operates on the @minus{}@var{n} files preceding
587the current line.)
588
589@item
590Otherwise, if some files are marked with @samp{*}, the command operates
591on all those files.
592
593@item
594Otherwise, the command operates on the current file only.
595@end itemize
596
597@noindent
598Certain other Dired commands, such as @kbd{!} and the @samp{%}
599commands, use the same conventions to decide which files to work on.
600
601@vindex dired-dwim-target
602@cindex two directories (in Dired)
603 Commands which ask for a destination directory, such as those which
604copy and rename files or create links for them, try to guess the default
605target directory for the operation. Normally, they suggest the Dired
606buffer's default directory, but if the variable @code{dired-dwim-target}
607is non-@code{nil}, and if there is another Dired buffer displayed in the
608next window, that other buffer's directory is suggested instead.
609
610 Here are the file-manipulating Dired commands that operate on files.
611
612@table @kbd
613@findex dired-do-copy
614@kindex C @r{(Dired)}
615@cindex copying files (in Dired)
616@item C @var{new} @key{RET}
617Copy the specified files (@code{dired-do-copy}). The argument @var{new}
618is the directory to copy into, or (if copying a single file) the new
619name. This is like the shell command @code{cp}.
620
621@vindex dired-copy-preserve-time
622If @code{dired-copy-preserve-time} is non-@code{nil}, then copying
623with this command preserves the modification time of the old file in
624the copy, like @samp{cp -p}.
625
626@vindex dired-recursive-copies
627@cindex recursive copying
628The variable @code{dired-recursive-copies} controls whether to copy
629directories recursively (like @samp{cp -r}). The default is
2bfab837 630@code{top}, which means to ask before recursively copying a directory.
8cf51b2c
GM
631
632@item D
633@findex dired-do-delete
634@kindex D @r{(Dired)}
635Delete the specified files (@code{dired-do-delete}). This is like the
636shell command @code{rm}.
637
638Like the other commands in this section, this command operates on the
639@emph{marked} files, or the next @var{n} files. By contrast, @kbd{x}
640(@code{dired-do-flagged-delete}) deletes all @dfn{flagged} files.
641
642@findex dired-do-rename
643@kindex R @r{(Dired)}
644@cindex renaming files (in Dired)
645@cindex moving files (in Dired)
646@item R @var{new} @key{RET}
647Rename the specified files (@code{dired-do-rename}). If you rename a
648single file, the argument @var{new} is the new name of the file. If
649you rename several files, the argument @var{new} is the directory into
c40a7de7 650which to move the files (this is like the shell command @command{mv}).
8cf51b2c
GM
651
652Dired automatically changes the visited file name of buffers associated
653with renamed files so that they refer to the new names.
654
655@findex dired-do-hardlink
656@kindex H @r{(Dired)}
657@cindex hard links (in Dired)
658@item H @var{new} @key{RET}
659Make hard links to the specified files (@code{dired-do-hardlink}).
c40a7de7 660This is like the shell command @command{ln}. The argument @var{new} is
8cf51b2c
GM
661the directory to make the links in, or (if making just one link) the
662name to give the link.
663
664@findex dired-do-symlink
665@kindex S @r{(Dired)}
666@cindex symbolic links (creation in Dired)
667@item S @var{new} @key{RET}
668Make symbolic links to the specified files (@code{dired-do-symlink}).
669This is like @samp{ln -s}. The argument @var{new} is the directory to
670make the links in, or (if making just one link) the name to give the
671link.
672
673@findex dired-do-chmod
674@kindex M @r{(Dired)}
675@cindex changing file permissions (in Dired)
676@item M @var{modespec} @key{RET}
c40a7de7
CY
677Change the mode (also called @dfn{permission bits}) of the specified
678files (@code{dired-do-chmod}). @var{modespec} can be in octal or
679symbolic notation, like arguments handled by the @command{chmod}
680program.
8cf51b2c
GM
681
682@findex dired-do-chgrp
683@kindex G @r{(Dired)}
684@cindex changing file group (in Dired)
685@item G @var{newgroup} @key{RET}
686Change the group of the specified files to @var{newgroup}
687(@code{dired-do-chgrp}).
688
689@findex dired-do-chown
690@kindex O @r{(Dired)}
691@cindex changing file owner (in Dired)
692@item O @var{newowner} @key{RET}
693Change the owner of the specified files to @var{newowner}
694(@code{dired-do-chown}). (On most systems, only the superuser can do
695this.)
696
697@vindex dired-chown-program
698The variable @code{dired-chown-program} specifies the name of the
c40a7de7
CY
699program to use to do the work (different systems put @command{chown}
700in different places).
8cf51b2c
GM
701
702@findex dired-do-touch
703@kindex T @r{(Dired)}
704@cindex changing file time (in Dired)
705@item T @var{timestamp} @key{RET}
706Touch the specified files (@code{dired-do-touch}). This means
707updating their modification times to the present time. This is like
708the shell command @code{touch}.
709
710@findex dired-do-print
711@kindex P @r{(Dired)}
712@cindex printing files (in Dired)
713@item P @var{command} @key{RET}
714Print the specified files (@code{dired-do-print}). You must specify the
715command to print them with, but the minibuffer starts out with a
716suitable guess made using the variables @code{lpr-command} and
717@code{lpr-switches} (the same variables that @code{lpr-buffer} uses;
718@pxref{Printing}).
719
720@findex dired-do-compress
721@kindex Z @r{(Dired)}
722@cindex compressing files (in Dired)
723@item Z
724Compress the specified files (@code{dired-do-compress}). If the file
725appears to be a compressed file already, uncompress it instead.
726
86d7a550
DU
727@findex epa-dired-do-decrypt
728@kindex :d @r{(Dired)}
729@cindex decrypting files (in Dired)
730@item :d
731Decrypt the specified files (@code{epa-dired-do-decrypt}).
732@xref{Dired integration,,, epa, EasyPG Assistant User's Manual}.
733
734@findex epa-dired-do-verify
735@kindex :v @r{(Dired)}
736@cindex verifying digital signatures on files (in Dired)
737@item :v
738Verify digital signatures on the specified files (@code{epa-dired-do-verify}).
739@xref{Dired integration,,, epa, EasyPG Assistant User's Manual}.
740
741@findex epa-dired-do-sign
742@kindex :s @r{(Dired)}
743@cindex signing files (in Dired)
744@item :s
745Digitally sign the specified files (@code{epa-dired-do-sign}).
746@xref{Dired integration,,, epa, EasyPG Assistant User's Manual}.
747
748@findex epa-dired-do-encrypt
749@kindex :e @r{(Dired)}
750@cindex encrypting files (in Dired)
751@item :e
752Encrypt the specified files (@code{epa-dired-do-encrypt}).
753@xref{Dired integration,,, epa, EasyPG Assistant User's Manual}.
754
8cf51b2c
GM
755@findex dired-do-load
756@kindex L @r{(Dired)}
757@cindex loading several files (in Dired)
758@item L
759Load the specified Emacs Lisp files (@code{dired-do-load}).
760@xref{Lisp Libraries}.
761
762@findex dired-do-byte-compile
763@kindex B @r{(Dired)}
764@cindex byte-compiling several files (in Dired)
765@item B
766Byte compile the specified Emacs Lisp files
767(@code{dired-do-byte-compile}). @xref{Byte Compilation,, Byte
768Compilation, elisp, The Emacs Lisp Reference Manual}.
769
770@kindex A @r{(Dired)}
771@findex dired-do-search
772@cindex search multiple files (in Dired)
773@item A @var{regexp} @key{RET}
774Search all the specified files for the regular expression @var{regexp}
775(@code{dired-do-search}).
776
777This command is a variant of @code{tags-search}. The search stops at
778the first match it finds; use @kbd{M-,} to resume the search and find
779the next match. @xref{Tags Search}.
780
781@kindex Q @r{(Dired)}
782@findex dired-do-query-replace-regexp
783@cindex search and replace in multiple files (in Dired)
784@item Q @var{regexp} @key{RET} @var{to} @key{RET}
785Perform @code{query-replace-regexp} on each of the specified files,
786replacing matches for @var{regexp} with the string
787@var{to} (@code{dired-do-query-replace-regexp}).
788
789This command is a variant of @code{tags-query-replace}. If you exit the
790query replace loop, you can use @kbd{M-,} to resume the scan and replace
791more matches. @xref{Tags Search}.
792@end table
793
794@node Shell Commands in Dired
795@section Shell Commands in Dired
796@cindex shell commands, Dired
797
798@findex dired-do-shell-command
799@kindex ! @r{(Dired)}
800@kindex X @r{(Dired)}
801The Dired command @kbd{!} (@code{dired-do-shell-command}) reads a
802shell command string in the minibuffer and runs that shell command on
fac6225b
CY
803one or more files. The files that the shell command operates on are
804determined in the usual way for Dired commands (@pxref{Operating on
805Files}). The command @kbd{X} is a synonym for @kbd{!}.
8cf51b2c 806
fac6225b
CY
807 The command @kbd{&} (@code{dired-do-async-shell-command}) does the
808same, except that it runs the shell command asynchronously. You can
809also do this with @kbd{!}, by appending a @samp{&} character to the
810end of the shell command.
8cf51b2c 811
fac6225b
CY
812 For both @kbd{!} and @kbd{&}, the working directory for the shell
813command is the top-level directory of the Dired buffer.
814
815 If you tell @kbd{!} or @kbd{&} to operate on more than one file, the
816shell command string determines how those files are passed to the
817shell command:
8cf51b2c
GM
818
819@itemize @bullet
820@item
fac6225b 821If you use @samp{*} surrounded by whitespace in the command string,
8cf51b2c
GM
822then the command runs just once, with the list of file names
823substituted for the @samp{*}. The order of file names is the order of
824appearance in the Dired buffer.
825
826Thus, @kbd{! tar cf foo.tar * @key{RET}} runs @code{tar} on the entire
827list of file names, putting them into one tar file @file{foo.tar}.
828
829If you want to use @samp{*} as a shell wildcard with whitespace around
830it, write @samp{*""}. In the shell, this is equivalent to @samp{*};
fac6225b
CY
831but since the @samp{*} is not surrounded by whitespace, Dired does not
832treat it specially.
8cf51b2c
GM
833
834@item
fac6225b
CY
835Otherwise, if the command string contains @samp{?} surrounded by
836whitespace, Emacs runs the shell command once @emph{for each file},
837substituting the current file name for @samp{?} each time. You can
838use @samp{?} more than once in the command; the same file name
839replaces each occurrence.
8cf51b2c
GM
840
841@item
fac6225b 842If the command string contains neither @samp{*} nor @samp{?}, Emacs
9805f81d
DM
843runs the shell command once for each file, adding the file name at the
844end. For example, @kbd{! uudecode @key{RET}} runs @code{uudecode} on
845each file.
8cf51b2c
GM
846@end itemize
847
848 To iterate over the file names in a more complicated fashion, use an
849explicit shell loop. For example, here is how to uuencode each file,
850making the output file name by appending @samp{.uu} to the input file
851name:
852
853@example
854for file in * ; do uuencode "$file" "$file" >"$file".uu; done
855@end example
856
fac6225b
CY
857 The @kbd{!} and @kbd{&} commands do not attempt to update the Dired
858buffer to show new or modified files, because they don't know what
859files will be changed. Use the @kbd{g} command to update the Dired
860buffer (@pxref{Dired Updating}).
861
862 @xref{Single Shell}, for information about running shell commands
863outside Dired.
8cf51b2c
GM
864
865@node Transforming File Names
866@section Transforming File Names in Dired
867
868 This section describes Dired commands which alter file names in a
869systematic way. Each command operates on some or all of the marked
870files, using a new name made by transforming the existing name.
871
872 Like the basic Dired file-manipulation commands (@pxref{Operating on
873Files}), the commands described here operate either on the next
874@var{n} files, or on all files marked with @samp{*}, or on the current
875file. (To mark files, use the commands described in @ref{Marks vs
876Flags}.)
877
878 All of the commands described in this section work
879@emph{interactively}: they ask you to confirm the operation for each
880candidate file. Thus, you can select more files than you actually
881need to operate on (e.g., with a regexp that matches many files), and
882then filter the selected names by typing @kbd{y} or @kbd{n} when the
883command prompts for confirmation.
884
885@table @kbd
886@findex dired-upcase
887@kindex % u @r{(Dired)}
888@cindex upcase file names
889@item % u
890Rename each of the selected files to an upper-case name
891(@code{dired-upcase}). If the old file names are @file{Foo}
892and @file{bar}, the new names are @file{FOO} and @file{BAR}.
893
894@item % l
895@findex dired-downcase
896@kindex % l @r{(Dired)}
897@cindex downcase file names
898Rename each of the selected files to a lower-case name
899(@code{dired-downcase}). If the old file names are @file{Foo} and
900@file{bar}, the new names are @file{foo} and @file{bar}.
901
902@item % R @var{from} @key{RET} @var{to} @key{RET}
903@kindex % R @r{(Dired)}
904@findex dired-do-rename-regexp
905@itemx % C @var{from} @key{RET} @var{to} @key{RET}
906@kindex % C @r{(Dired)}
907@findex dired-do-copy-regexp
908@itemx % H @var{from} @key{RET} @var{to} @key{RET}
909@kindex % H @r{(Dired)}
910@findex dired-do-hardlink-regexp
911@itemx % S @var{from} @key{RET} @var{to} @key{RET}
912@kindex % S @r{(Dired)}
913@findex dired-do-symlink-regexp
914These four commands rename, copy, make hard links and make soft links,
915in each case computing the new name by regular-expression substitution
916from the name of the old file.
917@end table
918
919 The four regular-expression substitution commands effectively
920perform a search-and-replace on the selected file names. They read
921two arguments: a regular expression @var{from}, and a substitution
922pattern @var{to}; they match each ``old'' file name against
923@var{from}, and then replace the matching part with @var{to}. You can
924use @samp{\&} and @samp{\@var{digit}} in @var{to} to refer to all or
925part of what the pattern matched in the old file name, as in
926@code{replace-regexp} (@pxref{Regexp Replace}). If the regular
927expression matches more than once in a file name, only the first match
928is replaced.
929
930 For example, @kbd{% R ^.*$ @key{RET} x-\& @key{RET}} renames each
931selected file by prepending @samp{x-} to its name. The inverse of this,
932removing @samp{x-} from the front of each file name, is also possible:
933one method is @kbd{% R ^x-\(.*\)$ @key{RET} \1 @key{RET}}; another is
934@kbd{% R ^x- @key{RET} @key{RET}}. (Use @samp{^} and @samp{$} to anchor
935matches that should span the whole file name.)
936
937 Normally, the replacement process does not consider the files'
938directory names; it operates on the file name within the directory. If
939you specify a numeric argument of zero, then replacement affects the
940entire absolute file name including directory name. (A non-zero
941argument specifies the number of files to operate on.)
942
943 You may want to select the set of files to operate on using the same
944regexp @var{from} that you will use to operate on them. To do this,
945mark those files with @kbd{% m @var{from} @key{RET}}, then use the
946same regular expression in the command to operate on the files. To
947make this more convenient, the @kbd{%} commands to operate on files
948use the last regular expression specified in any @kbd{%} command as a
949default.
950
951@node Comparison in Dired
952@section File Comparison with Dired
953@cindex file comparison (in Dired)
954@cindex compare files (in Dired)
955
8cf51b2c
GM
956@findex dired-diff
957@kindex = @r{(Dired)}
cd996018
CY
958 The @kbd{=} (@code{dired-diff}) command compares the current file
959(the file at point) with another file (read using the minibuffer)
960using the @command{diff} program. The file specified with the
961minibuffer is the first argument of @command{diff}, and file at point
962is the second argument. The output of the @command{diff} program is
963shown in a buffer using Diff mode (@pxref{Comparing Files}).
964
965 If the region is active, the default for the file read using the
966minibuffer is the file at the mark (i.e.@: the ordinary Emacs mark,
967not a Dired mark; @pxref{Setting Mark}). Otherwise, if the file at
968point has a backup file (@pxref{Backup}), that is the default.
8cf51b2c
GM
969
970@node Subdirectories in Dired
971@section Subdirectories in Dired
972@cindex subdirectories in Dired
973@cindex expanding subdirectories in Dired
974
c40a7de7
CY
975 A Dired buffer usually displays just one directory, but you can
976optionally include its subdirectories as well.
8cf51b2c
GM
977
978 The simplest way to include multiple directories in one Dired buffer is
c40a7de7 979to specify the options @samp{-lR} for running @command{ls}. (If you give a
8cf51b2c
GM
980numeric argument when you run Dired, then you can specify these options
981in the minibuffer.) That produces a recursive directory listing showing
982all subdirectories at all levels.
983
984 More often, you will want to show only specific subdirectories. You
c40a7de7 985can do this with @kbd{i} (@code{dired-maybe-insert-subdir}):
8cf51b2c
GM
986
987@table @kbd
988@findex dired-maybe-insert-subdir
989@kindex i @r{(Dired)}
990@item i
991@cindex inserted subdirectory (Dired)
992@cindex in-situ subdirectory (Dired)
993Insert the contents of a subdirectory later in the buffer.
994@end table
995
c40a7de7
CY
996@noindent
997If you use this command on a line that describes a file which is a
998directory, it inserts the contents of that directory into the same
999Dired buffer, and moves there. Inserted subdirectory contents follow
1000the top-level directory of the Dired buffer, just as they do in
1001@samp{ls -lR} output.
1002
1003 If the subdirectory's contents are already present in the buffer,
1004the @kbd{i} command just moves to it.
1005
1006 In either case, @kbd{i} sets the Emacs mark before moving, so
1007@kbd{C-u C-@key{SPC}} returns to your previous position in the Dired
1008buffer (@pxref{Setting Mark}). You can also use @samp{^} to return to
1009the parent directory in the same Dired buffer (@pxref{Dired
1010Visiting}).
1011
1012 Use the @kbd{l} command (@code{dired-do-redisplay}) to update the
1013subdirectory's contents, and use @kbd{C-u k} on the subdirectory
1014header line to remove the subdirectory listing (@pxref{Dired
1015Updating}). You can also hide and show inserted subdirectories
1016(@pxref{Hiding Subdirectories}).
8cf51b2c 1017
8cf51b2c
GM
1018@ifnottex
1019@include dired-xtra.texi
1020@end ifnottex
1021
1022@node Subdirectory Motion
1023@section Moving Over Subdirectories
1024
1025 When a Dired buffer lists subdirectories, you can use the page motion
1026commands @kbd{C-x [} and @kbd{C-x ]} to move by entire directories
1027(@pxref{Pages}).
1028
1029@cindex header line (Dired)
1030@cindex directory header lines
1031 The following commands move across, up and down in the tree of
1032directories within one Dired buffer. They move to @dfn{directory header
1033lines}, which are the lines that give a directory's name, at the
1034beginning of the directory's contents.
1035
1036@table @kbd
1037@findex dired-next-subdir
1038@kindex C-M-n @r{(Dired)}
1039@item C-M-n
1040Go to next subdirectory header line, regardless of level
1041(@code{dired-next-subdir}).
1042
1043@findex dired-prev-subdir
1044@kindex C-M-p @r{(Dired)}
1045@item C-M-p
1046Go to previous subdirectory header line, regardless of level
1047(@code{dired-prev-subdir}).
1048
1049@findex dired-tree-up
1050@kindex C-M-u @r{(Dired)}
1051@item C-M-u
1052Go up to the parent directory's header line (@code{dired-tree-up}).
1053
1054@findex dired-tree-down
1055@kindex C-M-d @r{(Dired)}
1056@item C-M-d
1057Go down in the directory tree, to the first subdirectory's header line
1058(@code{dired-tree-down}).
1059
1060@findex dired-prev-dirline
1061@kindex < @r{(Dired)}
1062@item <
1063Move up to the previous directory-file line (@code{dired-prev-dirline}).
1064These lines are the ones that describe a directory as a file in its
1065parent directory.
1066
1067@findex dired-next-dirline
1068@kindex > @r{(Dired)}
1069@item >
1070Move down to the next directory-file line (@code{dired-prev-dirline}).
1071@end table
1072
1073@node Hiding Subdirectories
1074@section Hiding Subdirectories
8b74f389
BG
1075@cindex hiding subdirectories (Dired)
1076@cindex showing hidden subdirectories (Dired)
8cf51b2c 1077
8cf51b2c
GM
1078 @dfn{Hiding} a subdirectory means to make it invisible, except for its
1079header line.
1080
1081@table @kbd
1082@item $
1083@findex dired-hide-subdir
1084@kindex $ @r{(Dired)}
8b74f389
BG
1085Hide or show the subdirectory that point is in, and move point to the
1086next subdirectory (@code{dired-hide-subdir}). This is a toggle. A
1087numeric argument serves as a repeat count.
8cf51b2c
GM
1088
1089@item M-$
1090@findex dired-hide-all
1091@kindex M-$ @r{(Dired)}
1092Hide all subdirectories in this Dired buffer, leaving only their header
1093lines (@code{dired-hide-all}). Or, if any subdirectory is currently
1094hidden, make all subdirectories visible again. You can use this command
1095to get an overview in very deep directory trees or to move quickly to
1096subdirectories far away.
1097@end table
1098
1099 Ordinary Dired commands never consider files inside a hidden
1100subdirectory. For example, the commands to operate on marked files
1101ignore files in hidden directories even if they are marked. Thus you
1102can use hiding to temporarily exclude subdirectories from operations
1103without having to remove the Dired marks on files in those
1104subdirectories.
1105
e3e0fb39 1106@xref{Dired Updating}, for how to insert or delete a subdirectory listing.
8b74f389 1107
8cf51b2c
GM
1108@node Dired Updating
1109@section Updating the Dired Buffer
1110@cindex updating Dired buffer
1111@cindex refreshing displayed files
1112
1113 This section describes commands to update the Dired buffer to reflect
1114outside (non-Dired) changes in the directories and files, and to delete
1115part of the Dired buffer.
1116
1117@table @kbd
1118@item g
1119Update the entire contents of the Dired buffer (@code{revert-buffer}).
1120
1121@item l
1122Update the specified files (@code{dired-do-redisplay}). You specify the
1123files for @kbd{l} in the same way as for file operations.
1124
1125@item k
1126Delete the specified @emph{file lines}---not the files, just the lines
1127(@code{dired-do-kill-lines}).
1128
1129@item s
1130Toggle between alphabetical order and date/time order
1131(@code{dired-sort-toggle-or-edit}).
1132
1133@item C-u s @var{switches} @key{RET}
1134Refresh the Dired buffer using @var{switches} as
1135@code{dired-listing-switches}.
1136@end table
1137
1138@kindex g @r{(Dired)}
1139@findex revert-buffer @r{(Dired)}
1140 Type @kbd{g} (@code{revert-buffer}) to update the contents of the
1141Dired buffer, based on changes in the files and directories listed.
1142This preserves all marks except for those on files that have vanished.
1143Hidden subdirectories are updated but remain hidden.
1144
1145@kindex l @r{(Dired)}
1146@findex dired-do-redisplay
1147 To update only some of the files, type @kbd{l}
1148(@code{dired-do-redisplay}). Like the Dired file-operating commands,
1149this command operates on the next @var{n} files (or previous
1150@minus{}@var{n} files), or on the marked files if any, or on the
1151current file. Updating the files means reading their current status,
1152then updating their lines in the buffer to indicate that status.
1153
1154 If you use @kbd{l} on a subdirectory header line, it updates the
1155contents of the corresponding subdirectory.
1156
4102856c
CY
1157@vindex dired-auto-revert-buffer
1158 If you use @kbd{C-x d} or some other Dired command to visit a
1159directory that is already being shown in a Dired buffer, Dired
1160switches to that buffer but does not update it. If the buffer is not
1161up-to-date, Dired displays a warning telling you to type @key{g} to
1162update it. You can also tell Emacs to revert each Dired buffer
1163automatically when you revisit it, by setting the variable
1164@code{dired-auto-revert-buffer} to a non-@code{nil} value.
1165
8cf51b2c
GM
1166@kindex k @r{(Dired)}
1167@findex dired-do-kill-lines
1168 To delete the specified @emph{file lines} from the buffer---not
1169delete the files---type @kbd{k} (@code{dired-do-kill-lines}). Like
1170the file-operating commands, this command operates on the next @var{n}
1171files, or on the marked files if any; but it does not operate on the
1172current file as a last resort.
1173
1174 If you use @kbd{k} with a numeric prefix argument to kill the line
1175for a file that is a directory, which you have inserted in the Dired
ff9ad330
LMI
1176buffer as a subdirectory, it removed that subdirectory line from the
1177buffer as well. Typing @kbd{C-u k} on the header line for a
1178subdirectory also removes the subdirectory line from the Dired buffer.
8cf51b2c
GM
1179
1180 The @kbd{g} command brings back any individual lines that you have
1181killed in this way, but not subdirectories---you must use @kbd{i} to
1182reinsert a subdirectory.
1183
1184@cindex Dired sorting
1185@cindex sorting Dired buffer
1186@kindex s @r{(Dired)}
1187@findex dired-sort-toggle-or-edit
1188 The files in a Dired buffers are normally listed in alphabetical order
1189by file names. Alternatively Dired can sort them by date/time. The
1190Dired command @kbd{s} (@code{dired-sort-toggle-or-edit}) switches
1191between these two sorting modes. The mode line in a Dired buffer
1192indicates which way it is currently sorted---by name, or by date.
1193
1194 @kbd{C-u s @var{switches} @key{RET}} lets you specify a new value for
1195@code{dired-listing-switches}.
1196
1197@node Dired and Find
1198@section Dired and @code{find}
1199@cindex @code{find} and Dired
1200
1201 You can select a set of files for display in a Dired buffer more
fac6225b 1202flexibly by using the @command{find} utility to choose the files.
8cf51b2c
GM
1203
1204@findex find-name-dired
1205 To search for files with names matching a wildcard pattern use
1206@kbd{M-x find-name-dired}. It reads arguments @var{directory} and
1207@var{pattern}, and chooses all the files in @var{directory} or its
1208subdirectories whose individual names match @var{pattern}.
1209
1210 The files thus chosen are displayed in a Dired buffer, in which the
1211ordinary Dired commands are available.
1212
1213@findex find-grep-dired
1214 If you want to test the contents of files, rather than their names,
1215use @kbd{M-x find-grep-dired}. This command reads two minibuffer
fac6225b
CY
1216arguments, @var{directory} and @var{regexp}; it chooses all the files
1217in @var{directory} or its subdirectories that contain a match for
1218@var{regexp}. It works by running the programs @command{find} and
1219@command{grep}. See also @kbd{M-x grep-find}, in @ref{Grep
1220Searching}. Remember to write the regular expression for
1221@command{grep}, not for Emacs. (An alternative method of showing
1222files whose contents match a given regexp is the @kbd{% g
1223@var{regexp}} command, see @ref{Marks vs Flags}.)
8cf51b2c
GM
1224
1225@findex find-dired
fac6225b
CY
1226 The most general command in this series is @kbd{M-x find-dired},
1227which lets you specify any condition that @command{find} can test. It
1228takes two minibuffer arguments, @var{directory} and @var{find-args};
1229it runs @command{find} in @var{directory}, passing @var{find-args} to
1230tell @command{find} what condition to test. To use this command, you
1231need to know how to use @command{find}.
8cf51b2c
GM
1232
1233@vindex find-ls-option
c40a7de7 1234 The format of listing produced by these commands is controlled by
e517eda4
GM
1235the variable @code{find-ls-option}. This is a pair of options; the
1236first specifying how to call @command{find} to produce the file listing,
1237and the second telling Dired to parse the output.
8cf51b2c
GM
1238
1239@findex locate
1240@findex locate-with-filter
1241@cindex file database (locate)
1242@vindex locate-command
1243 The command @kbd{M-x locate} provides a similar interface to the
fac6225b 1244@command{locate} program. @kbd{M-x locate-with-filter} is similar, but
8cf51b2c
GM
1245keeps only files whose names match a given regular expression.
1246
1247 These buffers don't work entirely like ordinary Dired buffers: file
1248operations work, but do not always automatically update the buffer.
1249Reverting the buffer with @kbd{g} deletes all inserted subdirectories,
1250and erases all flags and marks.
1251
1252@node Wdired
1253@section Editing the Dired Buffer
1254
1255@cindex wdired mode
1256@findex wdired-change-to-wdired-mode
1257 Wdired is a special mode that allows you to perform file operations
1258by editing the Dired buffer directly (the ``W'' in ``Wdired'' stands
16152b76 1259for ``writable''.) To enter Wdired mode, type @kbd{C-x C-q}
fac6225b
CY
1260(@code{dired-toggle-read-only}) while in a Dired buffer.
1261Alternatively, use the @samp{Immediate / Edit File Names} menu item.
8cf51b2c
GM
1262
1263@findex wdired-finish-edit
1264 While in Wdired mode, you can rename files by editing the file names
1265displayed in the Dired buffer. All the ordinary Emacs editing
1266commands, including rectangle operations and @code{query-replace}, are
1267available for this. Once you are done editing, type @kbd{C-c C-c}
1268(@code{wdired-finish-edit}). This applies your changes and switches
1269back to ordinary Dired mode.
1270
1271 Apart from simply renaming files, you can move a file to another
1272directory by typing in the new file name (either absolute or
1273relative). To mark a file for deletion, delete the entire file name.
1274To change the target of a symbolic link, edit the link target name
1275which appears next to the link name.
1276
1277 The rest of the text in the buffer, such as the file sizes and
1278modification dates, is marked read-only, so you can't edit it.
1279However, if you set @code{wdired-allow-to-change-permissions} to
1280@code{t}, you can edit the file permissions. For example, you can
1281change @samp{-rw-r--r--} to @samp{-rw-rw-rw-} to make a file
1282world-writable. These changes also take effect when you type @kbd{C-c
1283C-c}.
1284
1285@node Image-Dired
1286@section Viewing Image Thumbnails in Dired
1287@cindex image-dired mode
1288@cindex image-dired
1289
1290 Image-Dired is a facility for browsing image files. It provides viewing
1291the images either as thumbnails or in full size, either inside Emacs
1292or through an external viewer.
1293
1294@kindex C-t d @r{(Image-Dired)}
1295@findex image-dired-display-thumbs
1296 To enter Image-Dired, mark the image files you want to look at in
1297the Dired buffer, using @kbd{m} as usual. Then type @kbd{C-t d}
1298(@code{image-dired-display-thumbs}). This creates and switches to a
1299buffer containing image-dired, corresponding to the marked files.
1300
1301 You can also enter Image-Dired directly by typing @kbd{M-x
1302image-dired}. This prompts for a directory; specify one that has
1303image files. This creates thumbnails for all the images in that
16152b76 1304directory, and displays them all in the ``thumbnail buffer''. This
8cf51b2c
GM
1305takes a long time if the directory contains many image files, and it
1306asks for confirmation if the number of image files exceeds
1307@code{image-dired-show-all-from-dir-max-files}.
1308
1309 With point in the thumbnail buffer, you can type @kbd{RET}
1310(@code{image-dired-display-thumbnail-original-image}) to display a
1311sized version of it in another window. This sizes the image to fit
1312the window. Use the arrow keys to move around in the buffer. For
1313easy browsing, use @kbd{SPC}
1314(@code{image-dired-display-next-thumbnail-original}) to advance and
1315display the next image. Typing @kbd{DEL}
1316(@code{image-dired-display-previous-thumbnail-original}) backs up to
1317the previous thumbnail and displays that instead.
1318
1319@vindex image-dired-external-viewer
1320 To view and the image in its original size, either provide a prefix
1321argument (@kbd{C-u}) before pressing @kbd{RET}, or type
1322@kbd{C-@key{RET}} (@code{image-dired-thumbnail-display-external}) to
1323display the image in an external viewer. You must first configure
1324@code{image-dired-external-viewer}.
1325
1326 You can delete images through Image-Dired also. Type @kbd{d}
1327(@code{image-dired-flag-thumb-original-file}) to flag the image file
1328for deletion in the Dired buffer. You can also delete the thumbnail
1329image from the thumbnail buffer with @kbd{C-d}
1330(@code{image-dired-delete-char}).
1331
1332 More advanced features include @dfn{image tags}, which are metadata
1333used to categorize image files. The tags are stored in a plain text
1334file configured by @code{image-dired-db-file}.
1335
1336 To tag image files, mark them in the dired buffer (you can also mark
1337files in Dired from the thumbnail buffer by typing @kbd{m}) and type
39e26906
RS
1338@kbd{C-t t} (@code{image-dired-tag-files}). This reads the tag name
1339in the minibuffer. To mark files having a certain tag, type @kbd{C-t f}
8cf51b2c
GM
1340(@code{image-dired-mark-tagged-files}). After marking image files
1341with a certain tag, you can use @kbd{C-t d} to view them.
1342
1343 You can also tag a file directly from the thumbnail buffer by typing
1344@kbd{t t} and you can remove a tag by typing @kbd{t r}. There is also
1345a special ``tag'' called ``comment'' for each file (it is not a tag in
1346the exact same sense as the other tags, it is handled slightly
1347different). That is used to enter a comment or description about the
1348image. You comment a file from the thumbnail buffer by typing
1349@kbd{c}. You will be prompted for a comment. Type @kbd{C-t c} to add
1350a comment from Dired (@code{image-dired-dired-comment-files}).
1351
1352 Image-Dired also provides simple image manipulation. In the
1353thumbnail buffer, type @kbd{L} to rotate the original image 90 degrees
1354anti clockwise, and @kbd{R} to rotate it 90 degrees clockwise. This
1355rotation is lossless, and uses an external utility called JpegTRAN.
1356
1357@node Misc Dired Features
1358@section Other Dired Features
1359
1360@kindex + @r{(Dired)}
1361@findex dired-create-directory
fac6225b 1362 The command @kbd{+} (@code{dired-create-directory}) reads a
c40a7de7
CY
1363directory name, and creates that directory. It signals an error if
1364the directory already exists.
fac6225b
CY
1365
1366@cindex searching multiple files via Dired
c40a7de7
CY
1367@kindex M-s a C-s @r{(Dired)}
1368@kindex M-s a M-C-s @r{(Dired)}
1369@findex dired-do-isearch
1370@findex dired-do-isearch-regexp
fac6225b
CY
1371 The command @kbd{M-s a C-s} (@code{dired-do-isearch}) begins a
1372``multi-file'' incremental search on the marked files. If a search
1373fails at the end of a file, typing @kbd{C-s} advances to the next
1374marked file and repeats the search; at the end of the last marked
1375file, the search wraps around to the first marked file. The command
1376@kbd{M-s a M-C-s} (@code{dired-do-isearch-regexp}) does the same with
1377a regular expression search. @xref{Repeat Isearch}, for information
1378about search repetition.
8cf51b2c
GM
1379
1380@cindex Adding to the kill ring in Dired.
1381@kindex w @r{(Dired)}
1382@findex dired-copy-filename-as-kill
fac6225b 1383 The command @kbd{w} (@code{dired-copy-filename-as-kill}) puts the
8cf51b2c 1384names of the marked (or next @var{n}) files into the kill ring, as if
fac6225b
CY
1385you had killed them with @kbd{C-w}. The names are separated by a
1386space.
8cf51b2c
GM
1387
1388 With a zero prefix argument, this uses the absolute file name of
1389each marked file. With just @kbd{C-u} as the prefix argument, it uses
1390file names relative to the Dired buffer's default directory. (This
1391can still contain slashes if in a subdirectory.) As a special case,
1392if point is on a directory headerline, @kbd{w} gives you the absolute
1393name of that directory. Any prefix argument or marked files are
1394ignored in this case.
1395
1396 The main purpose of this command is so that you can yank the file
1397names into arguments for other Emacs commands. It also displays what
1398it added to the kill ring, so you can use it to display the list of
1399currently marked files in the echo area.
1400
4ebe9902
GM
1401@cindex Dired and version control
1402 If the directory you are visiting is under version control
1403(@pxref{Version Control}), then the normal VC diff and log commands
1404will operate on the selected files.
1405
8cf51b2c
GM
1406@findex dired-compare-directories
1407 The command @kbd{M-x dired-compare-directories} is used to compare
1408the current Dired buffer with another directory. It marks all the files
1409that are ``different'' between the two directories. It puts these marks
1410in all Dired buffers where these files are listed, which of course includes
1411the current buffer.
1412
1413 The default comparison method (used if you type @key{RET} at the
1414prompt) is to compare just the file names---each file name that does
16152b76 1415not appear in the other directory is ``different''. You can specify
8cf51b2c
GM
1416more stringent comparisons by entering a Lisp expression, which can
1417refer to the variables @code{size1} and @code{size2}, the respective
1418file sizes; @code{mtime1} and @code{mtime2}, the last modification
1419times in seconds, as floating point numbers; and @code{fa1} and
1420@code{fa2}, the respective file attribute lists (as returned by the
1421function @code{file-attributes}). This expression is evaluated for
1422each pair of like-named files, and if the expression's value is
16152b76 1423non-@code{nil}, those files are considered ``different''.
8cf51b2c
GM
1424
1425 For instance, the sequence @code{M-x dired-compare-directories
1426@key{RET} (> mtime1 mtime2) @key{RET}} marks files newer in this
1427directory than in the other, and marks files older in the other
1428directory than in this one. It also marks files with no counterpart,
1429in both directories, as always.
1430
1431@cindex drag and drop, Dired
50b063c3 1432 On the X Window System, Emacs supports the ``drag and drop''
8cf51b2c
GM
1433protocol. You can drag a file object from another program, and drop
1434it onto a Dired buffer; this either moves, copies, or creates a link
1435to the file in that directory. Precisely which action is taken is
1436determined by the originating program. Dragging files out of a Dired
1437buffer is currently not supported.