opn-0.1.0: README.md
```
____ ____ ____
/ __ \/ __ \/ __ \
/ /_/ / /_/ / / / /
\____/ .___/_/ /_/
/_/
```
The `opn` command lets you open files and URLs with associated
programs. It's intended to "just work" and to be trivial to
configure. Its configuration resides in `~/.opnconfig`; here's an
example:
```
[browser]
browser: chromium
[associations]
mupdf: .pdf
emacs: .lhs .hs .py .c
chromium: .png .jpg .html .txt
mpv: .avi .mpg .mp4
djview: .djvu
```
With this configuration, PDFs would open in `mupdf`; Haskell, Python and
C source files in `emacs`, etc. If asked to open a file with no
matching extension, or a file without an extension, `opn` tries to be a
bit smart. If, for example, one runs
```
opn foo.h
```
then the header file `foo.h` would be opened in `emacs`. The reason is
that such files have mime type `text/x-c`, and, as files with the
extension `'.c'` shares this mime type, `opn` "guesses" that `'.h'` files
also should be opened with `emacs`.
Both `[browser]` and `[associations]` sections must be present and
nonempty in `~/.opnconfig`. The `[browser]` section should in fact
always have exactly one key, namely `browser`. So a (close to) minimal
configuration looks something like this:
```
[browser]
browser: chromium
[associations]
chromium: html
```
The `browser` is used for URLs and as a fallback, so with this
configuration all files and URLs would open in `chromium`.
Talking of `chromium`: on Linux `chromium` opens downloads using
`xdg-open`. This works pretty well if you are using a full desktop
environment like GNOME, KDE or Xfce, but less so if you are running a
light window manager such as i3 or xmonad. We can, however, exploit a
behavior of `xdg-open` to effectively replace it with `opn`. As a
fallback, when no supported desktop session is running, `xdg-open` uses
`$BROWSER`. Thus putting
```
export BROWSER=opn
```
in your `.bashrc`, or something similar for your favorite shell, will
"trick" `chromium` and `xdg-open` into using `opn`. This is my own main
use for `opn`.
For further info see the man page:
<https://github.com/akc/opn/blob/master/opn.md>.