Getting-started guide to a basic lf
setup for previews of images, documents
and video thumbnails aswell as shell integration to change the working
directory with lf
.
UPDATE Recent additions to lf
's shell interface allow to set up image previews and shell integration in a much cleaner fashion than the method shown below. See https://github.com/slavistan/lf-gadgets/tree/master/lf-ueberzug for the updated instructions. Note that the setup below remains fully functional, albeit unnecessarily complex.
Prerequesites:
- golang (to install from source)
- ueberzug
- imagemagick (for .svg previews)
- ffmpeg (for video file thumbnails)
- gs (for pdf previews)
Get the source code, build and install.
git clone "https://github.com/gokcehan/lf" .
go install
Make sure lf
can be run. Copy $GOPATH/bin/lf to usr/local/bin/ if your
$GOPATH is not in your $PATH.
Install the 3 scripts lf-run, lf-cleaner and lf-previewer from this repository. Make sure they're executable and in your $PATH.
Add this function to your .zshrc (or .bashrc etc.) to set up ueberzug
previews and to give you the option of changing your working directory upon
exiting lf
.
# zshrc or bashrc
lf () {
LF_TEMPDIR="$(mktemp -d -t lf-tempdir-XXXXXX)"
LF_TEMPDIR="$LF_TEMPDIR" lf-run -last-dir-path="$LF_TEMPDIR/lastdir" "$@"
if [ "$(cat "$LF_TEMPDIR/cdtolastdir" 2>/dev/null)" = "1" ]; then
cd "$(cat "$LF_TEMPDIR/lastdir")"
fi
rm -r "$LF_TEMPDIR"
unset LF_TEMPDIR
}
In your lfrc configure your previewer and cleaner settings and choose a
hotkey to quit lf
and change your working directory.
set previewer lf-previewer
set cleaner lf-cleaner
map x quitcd
cmd quitcd ${{
echo "1" > "$LF_TEMPDIR"/cdtolastdir
lf -remote "send $id quit"
}}
Using the above, pressing x will change your working directory after you quit
lf
while q won't (lf
's default behavior). If you prefer to always change
your working directory upon closing lf
map quitcd to q instead.
Done!
Note that if you want to start lf
from a different shell or a script you must
run lf-run
instead of lf
. Failing to do so will skip the proper set up of
ueberzug
and its temporary directory and lf
's attempts to generate previews
will produce error messages.
The proper way to configure lf
to work with and without the setup in lf-run
is to separate configurations for when lf
was launched through lf-run
vs.
when lf
was launched directly. This can be done using shell blocks inside
your lfrc. Here's a template to get you started which will print a message
and exit immediately if lf
is started without lf-run
.
# lfrc
%{{
if [ -z "$LF_TEMPDIR" ] || [ -z "$LF_FIFO_UEBERZUG" ]; then
# lf was launched directly without lf-run
lf -remote "send $id \$echo 'Did you run lf instead of lf-run?'"
lf -remote "send $id quit"
else
# lf was launched through lf-run
fi
}}