Prefer UTF-8 for documentation.
[bpt/emacs.git] / doc / emacs / dired.texi
CommitLineData
8cf51b2c 1@c This is part of the Emacs manual.
ab422c4d
PE
2@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2013 Free Software
3@c 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
fc83c2de 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 807 The command @kbd{&} (@code{dired-do-async-shell-command}) does the
fc83c2de 808same, except that it runs the shell command asynchronously. (You can
fac6225b 809also do this with @kbd{!}, by appending a @samp{&} character to the
fc83c2de
CY
810end of the shell command.) When the command operates on more than one
811file, it runs multiple parallel copies of the specified shell command,
812one for each file. As an exception, if the specified shell command
813ends in @samp{;} or @samp{;&}, the shell command is run in the
814background on each file sequentially; Emacs waits for each invoked
815shell command to terminate before running the next one.
8cf51b2c 816
fac6225b
CY
817 For both @kbd{!} and @kbd{&}, the working directory for the shell
818command is the top-level directory of the Dired buffer.
819
820 If you tell @kbd{!} or @kbd{&} to operate on more than one file, the
821shell command string determines how those files are passed to the
822shell command:
8cf51b2c
GM
823
824@itemize @bullet
825@item
fac6225b 826If you use @samp{*} surrounded by whitespace in the command string,
8cf51b2c
GM
827then the command runs just once, with the list of file names
828substituted for the @samp{*}. The order of file names is the order of
829appearance in the Dired buffer.
830
831Thus, @kbd{! tar cf foo.tar * @key{RET}} runs @code{tar} on the entire
832list of file names, putting them into one tar file @file{foo.tar}.
833
834If you want to use @samp{*} as a shell wildcard with whitespace around
835it, write @samp{*""}. In the shell, this is equivalent to @samp{*};
fac6225b
CY
836but since the @samp{*} is not surrounded by whitespace, Dired does not
837treat it specially.
8cf51b2c
GM
838
839@item
fac6225b
CY
840Otherwise, if the command string contains @samp{?} surrounded by
841whitespace, Emacs runs the shell command once @emph{for each file},
842substituting the current file name for @samp{?} each time. You can
843use @samp{?} more than once in the command; the same file name
844replaces each occurrence.
8cf51b2c
GM
845
846@item
fac6225b 847If the command string contains neither @samp{*} nor @samp{?}, Emacs
9805f81d
DM
848runs the shell command once for each file, adding the file name at the
849end. For example, @kbd{! uudecode @key{RET}} runs @code{uudecode} on
850each file.
8cf51b2c
GM
851@end itemize
852
853 To iterate over the file names in a more complicated fashion, use an
854explicit shell loop. For example, here is how to uuencode each file,
855making the output file name by appending @samp{.uu} to the input file
856name:
857
858@example
859for file in * ; do uuencode "$file" "$file" >"$file".uu; done
860@end example
861
fac6225b
CY
862 The @kbd{!} and @kbd{&} commands do not attempt to update the Dired
863buffer to show new or modified files, because they don't know what
864files will be changed. Use the @kbd{g} command to update the Dired
865buffer (@pxref{Dired Updating}).
866
867 @xref{Single Shell}, for information about running shell commands
868outside Dired.
8cf51b2c
GM
869
870@node Transforming File Names
871@section Transforming File Names in Dired
872
873 This section describes Dired commands which alter file names in a
874systematic way. Each command operates on some or all of the marked
875files, using a new name made by transforming the existing name.
876
877 Like the basic Dired file-manipulation commands (@pxref{Operating on
878Files}), the commands described here operate either on the next
879@var{n} files, or on all files marked with @samp{*}, or on the current
880file. (To mark files, use the commands described in @ref{Marks vs
881Flags}.)
882
883 All of the commands described in this section work
884@emph{interactively}: they ask you to confirm the operation for each
885candidate file. Thus, you can select more files than you actually
886need to operate on (e.g., with a regexp that matches many files), and
887then filter the selected names by typing @kbd{y} or @kbd{n} when the
888command prompts for confirmation.
889
890@table @kbd
891@findex dired-upcase
892@kindex % u @r{(Dired)}
893@cindex upcase file names
894@item % u
895Rename each of the selected files to an upper-case name
896(@code{dired-upcase}). If the old file names are @file{Foo}
897and @file{bar}, the new names are @file{FOO} and @file{BAR}.
898
899@item % l
900@findex dired-downcase
901@kindex % l @r{(Dired)}
902@cindex downcase file names
903Rename each of the selected files to a lower-case name
904(@code{dired-downcase}). If the old file names are @file{Foo} and
905@file{bar}, the new names are @file{foo} and @file{bar}.
906
907@item % R @var{from} @key{RET} @var{to} @key{RET}
908@kindex % R @r{(Dired)}
909@findex dired-do-rename-regexp
910@itemx % C @var{from} @key{RET} @var{to} @key{RET}
911@kindex % C @r{(Dired)}
912@findex dired-do-copy-regexp
913@itemx % H @var{from} @key{RET} @var{to} @key{RET}
914@kindex % H @r{(Dired)}
915@findex dired-do-hardlink-regexp
916@itemx % S @var{from} @key{RET} @var{to} @key{RET}
917@kindex % S @r{(Dired)}
918@findex dired-do-symlink-regexp
919These four commands rename, copy, make hard links and make soft links,
920in each case computing the new name by regular-expression substitution
921from the name of the old file.
922@end table
923
924 The four regular-expression substitution commands effectively
925perform a search-and-replace on the selected file names. They read
926two arguments: a regular expression @var{from}, and a substitution
927pattern @var{to}; they match each ``old'' file name against
928@var{from}, and then replace the matching part with @var{to}. You can
929use @samp{\&} and @samp{\@var{digit}} in @var{to} to refer to all or
930part of what the pattern matched in the old file name, as in
931@code{replace-regexp} (@pxref{Regexp Replace}). If the regular
932expression matches more than once in a file name, only the first match
933is replaced.
934
935 For example, @kbd{% R ^.*$ @key{RET} x-\& @key{RET}} renames each
936selected file by prepending @samp{x-} to its name. The inverse of this,
937removing @samp{x-} from the front of each file name, is also possible:
938one method is @kbd{% R ^x-\(.*\)$ @key{RET} \1 @key{RET}}; another is
939@kbd{% R ^x- @key{RET} @key{RET}}. (Use @samp{^} and @samp{$} to anchor
940matches that should span the whole file name.)
941
942 Normally, the replacement process does not consider the files'
943directory names; it operates on the file name within the directory. If
944you specify a numeric argument of zero, then replacement affects the
945entire absolute file name including directory name. (A non-zero
946argument specifies the number of files to operate on.)
947
948 You may want to select the set of files to operate on using the same
949regexp @var{from} that you will use to operate on them. To do this,
950mark those files with @kbd{% m @var{from} @key{RET}}, then use the
951same regular expression in the command to operate on the files. To
952make this more convenient, the @kbd{%} commands to operate on files
953use the last regular expression specified in any @kbd{%} command as a
954default.
955
956@node Comparison in Dired
957@section File Comparison with Dired
958@cindex file comparison (in Dired)
959@cindex compare files (in Dired)
960
8cf51b2c
GM
961@findex dired-diff
962@kindex = @r{(Dired)}
cd996018
CY
963 The @kbd{=} (@code{dired-diff}) command compares the current file
964(the file at point) with another file (read using the minibuffer)
965using the @command{diff} program. The file specified with the
966minibuffer is the first argument of @command{diff}, and file at point
967is the second argument. The output of the @command{diff} program is
968shown in a buffer using Diff mode (@pxref{Comparing Files}).
969
970 If the region is active, the default for the file read using the
1df7defd 971minibuffer is the file at the mark (i.e., the ordinary Emacs mark,
cd996018
CY
972not a Dired mark; @pxref{Setting Mark}). Otherwise, if the file at
973point has a backup file (@pxref{Backup}), that is the default.
8cf51b2c
GM
974
975@node Subdirectories in Dired
976@section Subdirectories in Dired
977@cindex subdirectories in Dired
978@cindex expanding subdirectories in Dired
979
c40a7de7
CY
980 A Dired buffer usually displays just one directory, but you can
981optionally include its subdirectories as well.
8cf51b2c
GM
982
983 The simplest way to include multiple directories in one Dired buffer is
c40a7de7 984to specify the options @samp{-lR} for running @command{ls}. (If you give a
8cf51b2c
GM
985numeric argument when you run Dired, then you can specify these options
986in the minibuffer.) That produces a recursive directory listing showing
987all subdirectories at all levels.
988
989 More often, you will want to show only specific subdirectories. You
c40a7de7 990can do this with @kbd{i} (@code{dired-maybe-insert-subdir}):
8cf51b2c
GM
991
992@table @kbd
993@findex dired-maybe-insert-subdir
994@kindex i @r{(Dired)}
995@item i
996@cindex inserted subdirectory (Dired)
997@cindex in-situ subdirectory (Dired)
998Insert the contents of a subdirectory later in the buffer.
999@end table
1000
c40a7de7
CY
1001@noindent
1002If you use this command on a line that describes a file which is a
1003directory, it inserts the contents of that directory into the same
1004Dired buffer, and moves there. Inserted subdirectory contents follow
1005the top-level directory of the Dired buffer, just as they do in
1006@samp{ls -lR} output.
1007
1008 If the subdirectory's contents are already present in the buffer,
1009the @kbd{i} command just moves to it.
1010
1011 In either case, @kbd{i} sets the Emacs mark before moving, so
1012@kbd{C-u C-@key{SPC}} returns to your previous position in the Dired
1013buffer (@pxref{Setting Mark}). You can also use @samp{^} to return to
1014the parent directory in the same Dired buffer (@pxref{Dired
1015Visiting}).
1016
1017 Use the @kbd{l} command (@code{dired-do-redisplay}) to update the
1018subdirectory's contents, and use @kbd{C-u k} on the subdirectory
1019header line to remove the subdirectory listing (@pxref{Dired
1020Updating}). You can also hide and show inserted subdirectories
1021(@pxref{Hiding Subdirectories}).
8cf51b2c 1022
8cf51b2c
GM
1023@ifnottex
1024@include dired-xtra.texi
1025@end ifnottex
1026
1027@node Subdirectory Motion
1028@section Moving Over Subdirectories
1029
1030 When a Dired buffer lists subdirectories, you can use the page motion
1031commands @kbd{C-x [} and @kbd{C-x ]} to move by entire directories
1032(@pxref{Pages}).
1033
1034@cindex header line (Dired)
1035@cindex directory header lines
1036 The following commands move across, up and down in the tree of
1037directories within one Dired buffer. They move to @dfn{directory header
1038lines}, which are the lines that give a directory's name, at the
1039beginning of the directory's contents.
1040
1041@table @kbd
1042@findex dired-next-subdir
1043@kindex C-M-n @r{(Dired)}
1044@item C-M-n
1045Go to next subdirectory header line, regardless of level
1046(@code{dired-next-subdir}).
1047
1048@findex dired-prev-subdir
1049@kindex C-M-p @r{(Dired)}
1050@item C-M-p
1051Go to previous subdirectory header line, regardless of level
1052(@code{dired-prev-subdir}).
1053
1054@findex dired-tree-up
1055@kindex C-M-u @r{(Dired)}
1056@item C-M-u
1057Go up to the parent directory's header line (@code{dired-tree-up}).
1058
1059@findex dired-tree-down
1060@kindex C-M-d @r{(Dired)}
1061@item C-M-d
1062Go down in the directory tree, to the first subdirectory's header line
1063(@code{dired-tree-down}).
1064
1065@findex dired-prev-dirline
1066@kindex < @r{(Dired)}
1067@item <
1068Move up to the previous directory-file line (@code{dired-prev-dirline}).
1069These lines are the ones that describe a directory as a file in its
1070parent directory.
1071
1072@findex dired-next-dirline
1073@kindex > @r{(Dired)}
1074@item >
1075Move down to the next directory-file line (@code{dired-prev-dirline}).
1076@end table
1077
1078@node Hiding Subdirectories
1079@section Hiding Subdirectories
8b74f389
BG
1080@cindex hiding subdirectories (Dired)
1081@cindex showing hidden subdirectories (Dired)
8cf51b2c 1082
8cf51b2c
GM
1083 @dfn{Hiding} a subdirectory means to make it invisible, except for its
1084header line.
1085
1086@table @kbd
1087@item $
1088@findex dired-hide-subdir
1089@kindex $ @r{(Dired)}
8b74f389
BG
1090Hide or show the subdirectory that point is in, and move point to the
1091next subdirectory (@code{dired-hide-subdir}). This is a toggle. A
1092numeric argument serves as a repeat count.
8cf51b2c
GM
1093
1094@item M-$
1095@findex dired-hide-all
1096@kindex M-$ @r{(Dired)}
1097Hide all subdirectories in this Dired buffer, leaving only their header
1098lines (@code{dired-hide-all}). Or, if any subdirectory is currently
1099hidden, make all subdirectories visible again. You can use this command
1100to get an overview in very deep directory trees or to move quickly to
1101subdirectories far away.
1102@end table
1103
1104 Ordinary Dired commands never consider files inside a hidden
1105subdirectory. For example, the commands to operate on marked files
1106ignore files in hidden directories even if they are marked. Thus you
1107can use hiding to temporarily exclude subdirectories from operations
1108without having to remove the Dired marks on files in those
1109subdirectories.
1110
e3e0fb39 1111@xref{Dired Updating}, for how to insert or delete a subdirectory listing.
8b74f389 1112
8cf51b2c
GM
1113@node Dired Updating
1114@section Updating the Dired Buffer
1115@cindex updating Dired buffer
1116@cindex refreshing displayed files
1117
1118 This section describes commands to update the Dired buffer to reflect
1119outside (non-Dired) changes in the directories and files, and to delete
1120part of the Dired buffer.
1121
1122@table @kbd
1123@item g
1124Update the entire contents of the Dired buffer (@code{revert-buffer}).
1125
1126@item l
1127Update the specified files (@code{dired-do-redisplay}). You specify the
1128files for @kbd{l} in the same way as for file operations.
1129
1130@item k
1131Delete the specified @emph{file lines}---not the files, just the lines
1132(@code{dired-do-kill-lines}).
1133
1134@item s
1135Toggle between alphabetical order and date/time order
1136(@code{dired-sort-toggle-or-edit}).
1137
1138@item C-u s @var{switches} @key{RET}
1139Refresh the Dired buffer using @var{switches} as
1140@code{dired-listing-switches}.
1141@end table
1142
1143@kindex g @r{(Dired)}
1144@findex revert-buffer @r{(Dired)}
1145 Type @kbd{g} (@code{revert-buffer}) to update the contents of the
1146Dired buffer, based on changes in the files and directories listed.
1147This preserves all marks except for those on files that have vanished.
1148Hidden subdirectories are updated but remain hidden.
1149
1150@kindex l @r{(Dired)}
1151@findex dired-do-redisplay
1152 To update only some of the files, type @kbd{l}
1153(@code{dired-do-redisplay}). Like the Dired file-operating commands,
1154this command operates on the next @var{n} files (or previous
1155@minus{}@var{n} files), or on the marked files if any, or on the
1156current file. Updating the files means reading their current status,
1157then updating their lines in the buffer to indicate that status.
1158
1159 If you use @kbd{l} on a subdirectory header line, it updates the
1160contents of the corresponding subdirectory.
1161
4102856c
CY
1162@vindex dired-auto-revert-buffer
1163 If you use @kbd{C-x d} or some other Dired command to visit a
1164directory that is already being shown in a Dired buffer, Dired
1165switches to that buffer but does not update it. If the buffer is not
1166up-to-date, Dired displays a warning telling you to type @key{g} to
1167update it. You can also tell Emacs to revert each Dired buffer
1168automatically when you revisit it, by setting the variable
1169@code{dired-auto-revert-buffer} to a non-@code{nil} value.
1170
8cf51b2c
GM
1171@kindex k @r{(Dired)}
1172@findex dired-do-kill-lines
766376c6
CY
1173 To delete @emph{file lines} from the buffer---without actually
1174deleting the files---type @kbd{k} (@code{dired-do-kill-lines}). Like
8cf51b2c 1175the file-operating commands, this command operates on the next @var{n}
766376c6
CY
1176files, or on the marked files if any. However, it does not operate on
1177the current file, since otherwise mistyping @kbd{k} could be annoying.
1178
1179 If you use @kbd{k} to kill the line for a directory file which you
1180had inserted in the Dired buffer as a subdirectory
1181(@pxref{Subdirectories in Dired}), it removes the subdirectory listing
1182as well. Typing @kbd{C-u k} on the header line for a subdirectory
1183also removes the subdirectory line from the Dired buffer.
8cf51b2c
GM
1184
1185 The @kbd{g} command brings back any individual lines that you have
1186killed in this way, but not subdirectories---you must use @kbd{i} to
1187reinsert a subdirectory.
1188
1189@cindex Dired sorting
1190@cindex sorting Dired buffer
1191@kindex s @r{(Dired)}
1192@findex dired-sort-toggle-or-edit
1193 The files in a Dired buffers are normally listed in alphabetical order
1194by file names. Alternatively Dired can sort them by date/time. The
1195Dired command @kbd{s} (@code{dired-sort-toggle-or-edit}) switches
1196between these two sorting modes. The mode line in a Dired buffer
1197indicates which way it is currently sorted---by name, or by date.
1198
1199 @kbd{C-u s @var{switches} @key{RET}} lets you specify a new value for
1200@code{dired-listing-switches}.
1201
1202@node Dired and Find
1203@section Dired and @code{find}
1204@cindex @code{find} and Dired
1205
1206 You can select a set of files for display in a Dired buffer more
fac6225b 1207flexibly by using the @command{find} utility to choose the files.
8cf51b2c
GM
1208
1209@findex find-name-dired
1210 To search for files with names matching a wildcard pattern use
1211@kbd{M-x find-name-dired}. It reads arguments @var{directory} and
1212@var{pattern}, and chooses all the files in @var{directory} or its
1213subdirectories whose individual names match @var{pattern}.
1214
1215 The files thus chosen are displayed in a Dired buffer, in which the
1216ordinary Dired commands are available.
1217
1218@findex find-grep-dired
1219 If you want to test the contents of files, rather than their names,
1220use @kbd{M-x find-grep-dired}. This command reads two minibuffer
fac6225b
CY
1221arguments, @var{directory} and @var{regexp}; it chooses all the files
1222in @var{directory} or its subdirectories that contain a match for
1223@var{regexp}. It works by running the programs @command{find} and
1224@command{grep}. See also @kbd{M-x grep-find}, in @ref{Grep
1225Searching}. Remember to write the regular expression for
1226@command{grep}, not for Emacs. (An alternative method of showing
1227files whose contents match a given regexp is the @kbd{% g
1228@var{regexp}} command, see @ref{Marks vs Flags}.)
8cf51b2c
GM
1229
1230@findex find-dired
fac6225b
CY
1231 The most general command in this series is @kbd{M-x find-dired},
1232which lets you specify any condition that @command{find} can test. It
1233takes two minibuffer arguments, @var{directory} and @var{find-args};
1234it runs @command{find} in @var{directory}, passing @var{find-args} to
1235tell @command{find} what condition to test. To use this command, you
1236need to know how to use @command{find}.
8cf51b2c
GM
1237
1238@vindex find-ls-option
c40a7de7 1239 The format of listing produced by these commands is controlled by
e517eda4
GM
1240the variable @code{find-ls-option}. This is a pair of options; the
1241first specifying how to call @command{find} to produce the file listing,
1242and the second telling Dired to parse the output.
8cf51b2c
GM
1243
1244@findex locate
1245@findex locate-with-filter
1246@cindex file database (locate)
1247@vindex locate-command
1248 The command @kbd{M-x locate} provides a similar interface to the
fac6225b 1249@command{locate} program. @kbd{M-x locate-with-filter} is similar, but
8cf51b2c
GM
1250keeps only files whose names match a given regular expression.
1251
1252 These buffers don't work entirely like ordinary Dired buffers: file
1253operations work, but do not always automatically update the buffer.
1254Reverting the buffer with @kbd{g} deletes all inserted subdirectories,
1255and erases all flags and marks.
1256
1257@node Wdired
1258@section Editing the Dired Buffer
1259
1260@cindex wdired mode
1261@findex wdired-change-to-wdired-mode
1262 Wdired is a special mode that allows you to perform file operations
1263by editing the Dired buffer directly (the ``W'' in ``Wdired'' stands
16152b76 1264for ``writable''.) To enter Wdired mode, type @kbd{C-x C-q}
fac6225b
CY
1265(@code{dired-toggle-read-only}) while in a Dired buffer.
1266Alternatively, use the @samp{Immediate / Edit File Names} menu item.
8cf51b2c
GM
1267
1268@findex wdired-finish-edit
1269 While in Wdired mode, you can rename files by editing the file names
1270displayed in the Dired buffer. All the ordinary Emacs editing
1271commands, including rectangle operations and @code{query-replace}, are
1272available for this. Once you are done editing, type @kbd{C-c C-c}
1273(@code{wdired-finish-edit}). This applies your changes and switches
1274back to ordinary Dired mode.
1275
1276 Apart from simply renaming files, you can move a file to another
1277directory by typing in the new file name (either absolute or
1278relative). To mark a file for deletion, delete the entire file name.
1279To change the target of a symbolic link, edit the link target name
1280which appears next to the link name.
1281
1282 The rest of the text in the buffer, such as the file sizes and
1283modification dates, is marked read-only, so you can't edit it.
1284However, if you set @code{wdired-allow-to-change-permissions} to
1285@code{t}, you can edit the file permissions. For example, you can
1286change @samp{-rw-r--r--} to @samp{-rw-rw-rw-} to make a file
1287world-writable. These changes also take effect when you type @kbd{C-c
1288C-c}.
1289
1290@node Image-Dired
1291@section Viewing Image Thumbnails in Dired
1292@cindex image-dired mode
1293@cindex image-dired
1294
1295 Image-Dired is a facility for browsing image files. It provides viewing
1296the images either as thumbnails or in full size, either inside Emacs
1297or through an external viewer.
1298
1299@kindex C-t d @r{(Image-Dired)}
1300@findex image-dired-display-thumbs
1301 To enter Image-Dired, mark the image files you want to look at in
1302the Dired buffer, using @kbd{m} as usual. Then type @kbd{C-t d}
1303(@code{image-dired-display-thumbs}). This creates and switches to a
1304buffer containing image-dired, corresponding to the marked files.
1305
1306 You can also enter Image-Dired directly by typing @kbd{M-x
1307image-dired}. This prompts for a directory; specify one that has
1308image files. This creates thumbnails for all the images in that
16152b76 1309directory, and displays them all in the ``thumbnail buffer''. This
8cf51b2c
GM
1310takes a long time if the directory contains many image files, and it
1311asks for confirmation if the number of image files exceeds
1312@code{image-dired-show-all-from-dir-max-files}.
1313
1314 With point in the thumbnail buffer, you can type @kbd{RET}
1315(@code{image-dired-display-thumbnail-original-image}) to display a
1316sized version of it in another window. This sizes the image to fit
1317the window. Use the arrow keys to move around in the buffer. For
1318easy browsing, use @kbd{SPC}
1319(@code{image-dired-display-next-thumbnail-original}) to advance and
1320display the next image. Typing @kbd{DEL}
1321(@code{image-dired-display-previous-thumbnail-original}) backs up to
1322the previous thumbnail and displays that instead.
1323
1324@vindex image-dired-external-viewer
1325 To view and the image in its original size, either provide a prefix
1326argument (@kbd{C-u}) before pressing @kbd{RET}, or type
1327@kbd{C-@key{RET}} (@code{image-dired-thumbnail-display-external}) to
1328display the image in an external viewer. You must first configure
1329@code{image-dired-external-viewer}.
1330
1331 You can delete images through Image-Dired also. Type @kbd{d}
1332(@code{image-dired-flag-thumb-original-file}) to flag the image file
1333for deletion in the Dired buffer. You can also delete the thumbnail
1334image from the thumbnail buffer with @kbd{C-d}
1335(@code{image-dired-delete-char}).
1336
1337 More advanced features include @dfn{image tags}, which are metadata
1338used to categorize image files. The tags are stored in a plain text
1339file configured by @code{image-dired-db-file}.
1340
1341 To tag image files, mark them in the dired buffer (you can also mark
1342files in Dired from the thumbnail buffer by typing @kbd{m}) and type
39e26906
RS
1343@kbd{C-t t} (@code{image-dired-tag-files}). This reads the tag name
1344in the minibuffer. To mark files having a certain tag, type @kbd{C-t f}
8cf51b2c
GM
1345(@code{image-dired-mark-tagged-files}). After marking image files
1346with a certain tag, you can use @kbd{C-t d} to view them.
1347
1348 You can also tag a file directly from the thumbnail buffer by typing
1349@kbd{t t} and you can remove a tag by typing @kbd{t r}. There is also
1350a special ``tag'' called ``comment'' for each file (it is not a tag in
1351the exact same sense as the other tags, it is handled slightly
1352different). That is used to enter a comment or description about the
1353image. You comment a file from the thumbnail buffer by typing
1354@kbd{c}. You will be prompted for a comment. Type @kbd{C-t c} to add
1355a comment from Dired (@code{image-dired-dired-comment-files}).
1356
1357 Image-Dired also provides simple image manipulation. In the
1358thumbnail buffer, type @kbd{L} to rotate the original image 90 degrees
1359anti clockwise, and @kbd{R} to rotate it 90 degrees clockwise. This
1360rotation is lossless, and uses an external utility called JpegTRAN.
1361
1362@node Misc Dired Features
1363@section Other Dired Features
1364
1365@kindex + @r{(Dired)}
1366@findex dired-create-directory
fac6225b 1367 The command @kbd{+} (@code{dired-create-directory}) reads a
c40a7de7
CY
1368directory name, and creates that directory. It signals an error if
1369the directory already exists.
fac6225b
CY
1370
1371@cindex searching multiple files via Dired
c40a7de7
CY
1372@kindex M-s a C-s @r{(Dired)}
1373@kindex M-s a M-C-s @r{(Dired)}
1374@findex dired-do-isearch
1375@findex dired-do-isearch-regexp
fac6225b
CY
1376 The command @kbd{M-s a C-s} (@code{dired-do-isearch}) begins a
1377``multi-file'' incremental search on the marked files. If a search
1378fails at the end of a file, typing @kbd{C-s} advances to the next
1379marked file and repeats the search; at the end of the last marked
1380file, the search wraps around to the first marked file. The command
1381@kbd{M-s a M-C-s} (@code{dired-do-isearch-regexp}) does the same with
1382a regular expression search. @xref{Repeat Isearch}, for information
1383about search repetition.
8cf51b2c
GM
1384
1385@cindex Adding to the kill ring in Dired.
1386@kindex w @r{(Dired)}
1387@findex dired-copy-filename-as-kill
fac6225b 1388 The command @kbd{w} (@code{dired-copy-filename-as-kill}) puts the
8cf51b2c 1389names of the marked (or next @var{n}) files into the kill ring, as if
fac6225b
CY
1390you had killed them with @kbd{C-w}. The names are separated by a
1391space.
8cf51b2c
GM
1392
1393 With a zero prefix argument, this uses the absolute file name of
1394each marked file. With just @kbd{C-u} as the prefix argument, it uses
1395file names relative to the Dired buffer's default directory. (This
1396can still contain slashes if in a subdirectory.) As a special case,
1397if point is on a directory headerline, @kbd{w} gives you the absolute
1398name of that directory. Any prefix argument or marked files are
1399ignored in this case.
1400
1401 The main purpose of this command is so that you can yank the file
1402names into arguments for other Emacs commands. It also displays what
1403it added to the kill ring, so you can use it to display the list of
1404currently marked files in the echo area.
1405
4ebe9902
GM
1406@cindex Dired and version control
1407 If the directory you are visiting is under version control
1408(@pxref{Version Control}), then the normal VC diff and log commands
1409will operate on the selected files.
1410
8cf51b2c
GM
1411@findex dired-compare-directories
1412 The command @kbd{M-x dired-compare-directories} is used to compare
1413the current Dired buffer with another directory. It marks all the files
1414that are ``different'' between the two directories. It puts these marks
1415in all Dired buffers where these files are listed, which of course includes
1416the current buffer.
1417
1418 The default comparison method (used if you type @key{RET} at the
1419prompt) is to compare just the file names---each file name that does
16152b76 1420not appear in the other directory is ``different''. You can specify
8cf51b2c
GM
1421more stringent comparisons by entering a Lisp expression, which can
1422refer to the variables @code{size1} and @code{size2}, the respective
1423file sizes; @code{mtime1} and @code{mtime2}, the last modification
1424times in seconds, as floating point numbers; and @code{fa1} and
1425@code{fa2}, the respective file attribute lists (as returned by the
1426function @code{file-attributes}). This expression is evaluated for
1427each pair of like-named files, and if the expression's value is
16152b76 1428non-@code{nil}, those files are considered ``different''.
8cf51b2c
GM
1429
1430 For instance, the sequence @code{M-x dired-compare-directories
1431@key{RET} (> mtime1 mtime2) @key{RET}} marks files newer in this
1432directory than in the other, and marks files older in the other
1433directory than in this one. It also marks files with no counterpart,
1434in both directories, as always.
1435
1436@cindex drag and drop, Dired
50b063c3 1437 On the X Window System, Emacs supports the ``drag and drop''
8cf51b2c
GM
1438protocol. You can drag a file object from another program, and drop
1439it onto a Dired buffer; this either moves, copies, or creates a link
1440to the file in that directory. Precisely which action is taken is
1441determined by the originating program. Dragging files out of a Dired
1442buffer is currently not supported.