While Emacs already has the `auto-mode-alist', this is often
insufficient.  Many times, you want to open media files, pdfs or
other documents with an external application.  There's remedy for
that too, namely `dired-guess-shell-alist-user', but that is still
not as convenient as just hitting enter.

This package adds a mechanism to add "hooks" to `dired-find-file'
that will run before Emacs tries its own mechanisms to open the
file, thus enabling you to launch other application or code and
suspend the default behaviour.

By default, two additional methods are enabled,
`dired-open-by-extension' and `dired-open-subdir'.

This package also provides other convenient hooks:

* `dired-open-xdg' - try to open the file using `xdg-open'
* `dired-open-guess-shell-alist' - try to open the file by
  launching applications from `dired-guess-shell-alist-user'
* `dired-open-call-function-by-extension' - call an elisp function
  based on extension.

These are not used by default.

You can customize the list of functions to try by customizing
`dired-open-functions'.

To fall back to the default `dired-find-file', you can provide the
prefix argument (usually C-u) to the `dired-open-file' function.
This is useful for example when you configure html files to be
opened in browser and you want to edit the file instead of view it.

Note also that this package can handle calls when point is not on a
line representing a file---an example hook is provided to open a
subdirectory under point if point is on the subdir line, see
`dired-open-subdir'.

If you write your own handler, make sure they do *not* throw errors
but instead return nil if they can't proceed.

See https://github.com/Fuco1/dired-hacks for the entire collection.