= 24 file managers: dired

In 2009, I was working hard at a startup in Pittsburgh, and in the late evenings of coding, I developed a GNU Emacs habit.
The thing about Emacs is that it's just too versatile to close.
Whether you're writing code, writing articles about open source, jotting down a task list, or even playing music, you can do it all from within Emacs.
And every time you think you've found a task outside of Emacs, you discover an Emacs mode to prove you wrong.
One of my favorite reasons to not close Emacs is its file manager, called _directory editor_ or just `dired`.

== Install GNU Emacs

Dired is included with Emacs, so there's no install process aside from installing Emacs itself.

On Linux, you can find GNU Emacs in your distribution's software repository.
On Fedora, CentOS, Mageia, and similar:

[source,bash]
----
$ sudo dnf install emacs
----

On Debian, Linux Mint, Elementary, and similar:

[source,bash]
----
$ sudo apt install emacs
----

On macOS, use https://opensource.com/article/20/6/homebrew-mac[Homebrew] or https://opensource.com/article/20/11/macports[MacPort].

For Windows, use https://opensource.com/article/20/3/chocolatey[Chocolatey].

== File management with Dired

Dired mode is a text-based file management system.
It can run in the graphical version of Emacs or in the terminal version of Emacs, making it a flexible, lightweight, and approved for use during a https://opensource.com/zombie[zombie apocalypse].

To launch it, press *Ctrl+X* and then *d*.
You're prompted in the mini buffer (the field at the bottom of the Emacs window) for the directory you want to open.
It defaults to your home directory (`~`).

[source,bash]
----
/home/tux:
total used in directory 40 available 88.1 GiB
drwx------. 17 tux  tux  4096 Sep 20 15:15 .
drwxr-xr-x.  5 root root   42 Sep 14 05:29 ..
-rw-------.  1 tux  tux   938 Sep 20 15:28 .bash_history
-rw-r--r--.  1 tux  tux    18 Nov  6  2021 .bash_logout
-rw-r--r--.  1 tux  tux   141 Nov  6  2021 .bash_profile
-rw-r--r--.  1 tux  tux   492 Nov  6  2021 .bashrc
drwxr-xr-x. 16 tux  tux  4096 Sep 20 14:23 .cache
drwx------. 16 tux  tux  4096 Sep 20 14:51 .config
drwxr-xr-x.  2 tux  tux    59 Sep 20 15:01 Desktop
drwxr-xr-x.  2 tux  tux     6 Sep 15 15:54 Documents
drwxr-xr-x.  3 tux  tux   166 Sep 20 15:12 Downloads
-rw-r--r--.  1 tux  tux   334 Oct  5  2021 .emacs
drwx------.  2 tux  tux     6 Sep 20 14:25 .emacs.d
-rw-------.  1 tux  tux    33 Sep 20 15:15 .lesshst
drwx------.  4 tux  tux    32 Sep 15 15:54 .local
drwxr-xr-x.  6 tux  tux    81 Sep 15 16:03 .mozilla
drwxr-xr-x.  2 tux  tux     6 Sep 15 15:54 Music
drwxr-xr-x.  2 tux  tux    59 Sep 20 14:52 Pictures
[...]
----

The file listing provided looks familiar to anyone accustomed to `ls -l` in a terminal.
From left to right:

* Identifies the entry as a directory, if applicable, and then lists the https://www.redhat.com/sysadmin/suid-sgid-sticky-bit[file permissions]
* The number of hard links to the entry (for example, the `Desktop` entry has 1 hard link representing itself, and 1 file in it)
* User
* Group
* Disk space used, in bytes
* Time last modified
* File name

== Navigation

To navigate Dired, you can use either the arrow keys or https://opensource.com/article/20/1/emacs-cheat-sheet[standard Emacs key bindings].
For this article, I use Emacs notation: *C-* for *Ctrl* and *M-* for *Alt* or *Meta*.

* *C-p* or *Up* arrow: Previous entry in list
* *C-n* or *Down* arrow: Next entry in list
* *Enter* or *v*: Descend into the selected directory
* *^*: Move "up" the directory tree to the current directory's parent

== Refreshing the view

Dired doesn't redraw the screen for every action, so sometimes you may need to prompt it to refresh.
Press *g* to redraw a Dired listing.

== Open a file

One of the reasons you use a file manager is to find a file and then open it.
Emacs can't open every file type, but you might be surprised at just how much it can handle.
Then again, not everything it can handle is necessarily useful to you.
For instance, it's nice that Emacs _can_ open a JPEG but I rarely view a JPEG in Emacs, and I certainly don't use it to edit a JPEG.

Assuming you're considering the types of files you find Emacs useful for, you can open them directly from Dired.
That includes text files (Asciidoc, Markdown, HTML, CSS, Lua, Python, and so on) as well as compressed TAR archives.

To close a file that you've opened, use *C-x* *C-k* Emacs binding to invoke the `kill-buffer` function.

== Copy a file

To copy a file from one directory to another, press *C* (that's the capital letter `C`, not the *Ctrl* key).
You're prompted to provide a destination directory and file name in the mini buffer at the bottom of the Emacs window.

== Move a file

Moving a file is, confusingly, _renaming_ a file (the exact opposite terminology used in Linux, where renaming a file is actually _moving_ a file.)
I've used Dired for years and I still fail to remember this linguistic quirk.

To rename a file, whether you're renaming it back into its current directory or renaming it to some other directory, press *R* (capital `R`.)
You're prompted to provide a destination directory and a new file name in the mini buffer at the bottom of the Emacs window.

== Selecting files

There are a few ways to mark selections in Dired.
The first is to have your cursor on the same line as a file or directory entry.
If you cursor is on the same line as an entry, then that entry is considered the implicit selection.
Any action you take in Dired that targets a file targets that one.
This includes, incidentally, "marking" a file as selected.

To mark a file as selected, press *m* while your cursor is on its line.
You can mark as many files as you want, and each one is considered selected.
To deselect (unmark) a file, press the *u* key.

Yet another way to select multiple lines at once is to use a specialized selection function.
Dired has several, including `dired-mark-directories` to mark all directories in a list, `dired-mark-executables` to select all binary executables in a list, `dired-mark-files-regexp` to mark files containing a regex pattern, and more.
If you're not a regular Emacs user, this is a considered advanced because it requires you to invoke Emacs functions, but here's how to do it and what to look for.

Suppose you want to select all directories in a list:

1. Press *M-x* to activate the mini buffer prompt.
2. Type `dired-mark-directories` and press *Return* on your keyboard.
3. Look at the mini buffer. It tells you how many directories have been marked, and then it tells you that you can invoke this function again in the future with *&#42;* *&#47;* key combination.

Any function in GNU Emacs that has a key binding associated with it reveals the keys to you after you've invoked it in its long form.

== Creating an archive

To create an archive of a file or a selection of files, press `c` (that's a lower-case `c`, not *Ctrl*).
If you have nothing selected (or "marked" in Emacs terminology), then the current line is compressed.
If you have files marked, then they're compressed into a single archive.
In the mini buffer at the bottom of the Emacs window, you're prompted for a file name and path.
Luckily, Emacs is a smart application and derives the target file type from the name you provide.
If you name your archive `example.tar.xz`, then Emacs creates a TAR archive with lzma compression, but if you name it `example.zip` then it creates a ZIP file.

== Cancel an action

Should you accidentally invoke a function you don't want to finish, press *C-g* (that's Emacs notation for *Ctrl+G*.)
Depending on where you are in the course of the function, you may have to press *C-g* in the mini buffer specifically to stop it from prompting you to continue.
This is true for Emacs as a whole, so learn this valuable trick for Dired and carry it over to every mode you use.

== Emacs is always open

To quit Dired, you press *C-x* *C-k* to kill the Dired buffer, just as you kill any Emacs buffer.

To quit Emacs altogether, press *C-x* *C-c*.

Dired is a very capable file manager, and I've only covered the basics here.
For a full list of what Dired can do, press they `h` key.

I think Dired is probably most useful to those using or intending to use Emacs.
I probably wouldn't choose it as a general purpose file manager on a graphical system, because there are so many great alternatives already configured to work with the rest of the system when opening files.
Of course, Emacs is infinitely configurable, so if you really enjoy Dired you can set it to do whatever you want it to do.

For a headless system, though, I find that Dired makes a great file manager.
Emacs is such a robust operating environment as it is, and Dired only adds to its versatility.
With Emacs open, you have a built in file manager, shell, multiplexer, text editor and file previewer.
You could very nearly use Emacs essentially as your login shell.

Dired is a good text-based file manager, and well worth a look.
