<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: nisidabay</title>
    <description>The latest articles on DEV Community by nisidabay (@nisidabay).</description>
    <link>https://dev.to/nisidabay</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F771857%2Fee19d410-7773-4227-8f28-1c7dd4eff2dd.png</url>
      <title>DEV Community: nisidabay</title>
      <link>https://dev.to/nisidabay</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nisidabay"/>
    <language>en</language>
    <item>
      <title>Preview images, videos, fonts, PDFs ... in Vifm.</title>
      <dc:creator>nisidabay</dc:creator>
      <pubDate>Wed, 20 Nov 2024 11:10:30 +0000</pubDate>
      <link>https://dev.to/nisidabay/preview-images-videos-fonts-pdfs-in-vifm-3f0i</link>
      <guid>https://dev.to/nisidabay/preview-images-videos-fonts-pdfs-in-vifm-3f0i</guid>
      <description>&lt;h1&gt;
  
  
  Enhanced Image Preview in Vifm with Ueberzug
&lt;/h1&gt;

&lt;p&gt;A Guide to Implementing Robust Image and Media Previews in Vifm with Proper Cache Handling and Preview Cleanup&lt;/p&gt;

&lt;p&gt;This enhancement improves the original vifmimg script by adding cache management and fixing preview persistence issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rationale Behind All This
&lt;/h2&gt;

&lt;p&gt;As a Vim enthusiast, I always wanted to replicate my daily workflow based on keymappings and completely avoid using the mouse. I missed the functionality offered by tools like &lt;a href="https://github.com/ranger/ranger" rel="noopener noreferrer"&gt;ranger&lt;/a&gt; or &lt;a href="https://github.com/gokcehan/lf" rel="noopener noreferrer"&gt;lf&lt;/a&gt; in Vifm, but I didn't want to learn a whole new set of keyboard shortcuts. I watched several YouTube videos trying to recreate this setup, but none quite hit the mark. The project that inspired this work didn't fully meet its intended functionality.&lt;/p&gt;

&lt;p&gt;After spending many sleepless nights struggling with it, I have finally achieved something that feels rewarding, at least to me, and I want to share it with you.&lt;/p&gt;

&lt;p&gt;I have currently verified these configurations only on Arch Linux"&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Ensure you have these packages installed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;vifm&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ueberzug&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ffmpegthumbnailer&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pdftoppm&lt;/strong&gt; (from poppler-utils)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;epub-thumbnailer&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;djview&lt;/strong&gt; (for DJVU documents)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ffmpeg&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fontpreview&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;imagemagick&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Packages Installation for Arch Linux
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install required packages&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; vifm ueberzug ffmpegthumbnailer poppler djvulibre imagemagick

&lt;span class="c"&gt;# Install fontpreview using AUR helper&lt;/span&gt;
yay &lt;span class="nt"&gt;-S&lt;/span&gt; fontpreview
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Follow the instructions in &lt;a href="https://github.com/marianosimone/epub-thumbnailer" rel="noopener noreferrer"&gt;epub-thumbnailer&lt;/a&gt; for additional installation steps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Original Idea and Code
&lt;/h2&gt;

&lt;p&gt;The original scripts can be found in the &lt;a href="https://github.com/thimc/vifmimg" rel="noopener noreferrer"&gt;thimc/vifmimg repository&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation Steps
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Get Original Scripts
&lt;/h3&gt;

&lt;p&gt;Create the scripts directory and download the original scripts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create scripts directory&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.config/vifm/scripts

&lt;span class="c"&gt;# Download original scripts&lt;/span&gt;
wget &lt;span class="nt"&gt;-P&lt;/span&gt; ~/.config/vifm/scripts/ https://raw.githubusercontent.com/thimc/vifmimg/master/vifmimg
wget &lt;span class="nt"&gt;-P&lt;/span&gt; ~/.config/vifm/scripts/ https://raw.githubusercontent.com/thimc/vifmimg/master/vifmrun
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Implement Enhanced vifmimg Script
&lt;/h3&gt;

&lt;p&gt;Replace the content of &lt;code&gt;~/.config/vifm/scripts/vifmimg&lt;/code&gt; with the improved version below. This version includes proper cache handling and fixes preview persistence issues:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/usr/bin/bash&lt;/span&gt;

&lt;span class="c"&gt;# Cache directory&lt;/span&gt;
&lt;span class="nv"&gt;CACHE_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.cache/vifm"&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$CACHE_DIR&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Get a unique cache filename for the current file&lt;/span&gt;
&lt;span class="nv"&gt;PCACHE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$CACHE_DIR&lt;/span&gt;&lt;span class="s2"&gt;/thumbnail.&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;stat&lt;/span&gt; &lt;span class="nt"&gt;--printf&lt;/span&gt; &lt;span class="s1"&gt;'%n\0%i\0%F\0%s\0%W\0%Y'&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;readlink&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PWD&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;$6&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; | &lt;span class="nb"&gt;sha256sum&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PCACHE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PCACHE&lt;/span&gt;&lt;span class="p"&gt;%% *&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Clear ueberzug preview and optionally remove cache&lt;/span&gt;
pclear&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'{"action": "remove", "identifier": "vifm-preview"}\n'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$FIFO_UEBERZUG&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    &lt;span class="c"&gt;# Only remove cache if explicitly requested&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"cache"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
        &lt;/span&gt;&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PCACHE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;
    &lt;span class="k"&gt;fi&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;# Display image using ueberzug&lt;/span&gt;
image&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="c"&gt;# Always clear the previous preview first&lt;/span&gt;
    pclear
    &lt;span class="c"&gt;# Small delay to ensure previous preview is cleared&lt;/span&gt;
    &lt;span class="nb"&gt;sleep &lt;/span&gt;0.1
    &lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'{"action": "add", "identifier": "vifm-preview", "x": "%s", "y": "%s", "width": "%s", "height": "%s", "scaler": "contain", "path": "%s"}\n'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$2&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$3&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$4&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$5&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$6&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$FIFO_UEBERZUG&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

main&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
        &lt;span class="s2"&gt;"clear"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            pclear &lt;span class="s2"&gt;"cache"&lt;/span&gt;
            &lt;span class="p"&gt;;;&lt;/span&gt;
        &lt;span class="s2"&gt;"draw"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nv"&gt;FILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PWD&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;$6&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
            &lt;span class="c"&gt;# For direct image viewing, we don't cache&lt;/span&gt;
            image &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$2&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$3&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$4&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$5&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$FILE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;;;&lt;/span&gt;
        &lt;span class="s2"&gt;"video"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nv"&gt;FILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PWD&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;$6&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
            pclear
            &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PCACHE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.jpg"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
                ffmpegthumbnailer &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$FILE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PCACHE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.jpg"&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; 0 &lt;span class="nt"&gt;-q&lt;/span&gt; 5
            image &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$2&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$3&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$4&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$5&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PCACHE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.jpg"&lt;/span&gt;
            &lt;span class="p"&gt;;;&lt;/span&gt;
        &lt;span class="s2"&gt;"epub"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nv"&gt;FILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PWD&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;$6&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
            pclear
            &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PCACHE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
                epub-thumbnailer &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$FILE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PCACHE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; 1024
            image &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$2&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$3&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$4&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$5&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PCACHE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;;;&lt;/span&gt;
        &lt;span class="s2"&gt;"pdf"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nv"&gt;FILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PWD&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;$6&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
            pclear
            &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PCACHE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.jpg"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
                pdftoppm &lt;span class="nt"&gt;-jpeg&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; 1 &lt;span class="nt"&gt;-singlefile&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$FILE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PCACHE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
            image &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$2&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$3&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$4&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$5&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PCACHE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.jpg"&lt;/span&gt;
            &lt;span class="p"&gt;;;&lt;/span&gt;
        &lt;span class="s2"&gt;"djvu"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nv"&gt;FILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PWD&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;$6&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
            pclear
            &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PCACHE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.jpg"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
                ddjvu &lt;span class="nt"&gt;-format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;tiff &lt;span class="nt"&gt;-quality&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;90 &lt;span class="nt"&gt;-page&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$FILE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PCACHE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.jpg"&lt;/span&gt;
            image &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$2&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$3&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$4&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$5&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PCACHE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.jpg"&lt;/span&gt;
            &lt;span class="p"&gt;;;&lt;/span&gt;
        &lt;span class="s2"&gt;"audio"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nv"&gt;FILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PWD&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;$6&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
            pclear
            &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PCACHE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.jpg"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
                ffmpeg &lt;span class="nt"&gt;-hide_banner&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$FILE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PCACHE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.jpg"&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;/dev/null
            image &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$2&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$3&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$4&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$5&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PCACHE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.jpg"&lt;/span&gt;
            &lt;span class="p"&gt;;;&lt;/span&gt;
        &lt;span class="s2"&gt;"font"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nv"&gt;FILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PWD&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;$6&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
            pclear
            &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PCACHE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.jpg"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
                fontpreview &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$FILE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PCACHE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.jpg"&lt;/span&gt;
            image &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$2&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$3&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$4&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$5&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PCACHE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.jpg"&lt;/span&gt;
            &lt;span class="p"&gt;;;&lt;/span&gt;
        &lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="c"&gt;# Clear preview for any unhandled file types&lt;/span&gt;
            pclear &lt;span class="s2"&gt;"cache"&lt;/span&gt;
            &lt;span class="p"&gt;;;&lt;/span&gt;
    &lt;span class="k"&gt;esac&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

main &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$@&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Make Scripts Executable and Accessible
&lt;/h3&gt;

&lt;p&gt;Choose one of these methods:&lt;/p&gt;

&lt;h4&gt;
  
  
  Option A: Link to &lt;code&gt;/usr/local/bin&lt;/code&gt; (Recommended)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Make scripts executable&lt;/span&gt;
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x ~/.config/vifm/scripts/vifmrun
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x ~/.config/vifm/scripts/vifmimg

&lt;span class="c"&gt;# Create symbolic links&lt;/span&gt;
&lt;span class="nb"&gt;sudo ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; ~/.config/vifm/scripts/vifmrun /usr/local/bin/
&lt;span class="nb"&gt;sudo ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; ~/.config/vifm/scripts/vifmimg /usr/local/bin/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Option B: Add to PATH
&lt;/h4&gt;

&lt;p&gt;Add the following line to your &lt;code&gt;~/.bashrc&lt;/code&gt; or &lt;code&gt;~/.zshrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;:&lt;span class="nv"&gt;$HOME&lt;/span&gt;/.config/vifm/scripts

&lt;span class="c"&gt;# Reload shell configuration&lt;/span&gt;
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc  &lt;span class="c"&gt;# or source ~/.zshrc for zsh users&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Configure Vifm
&lt;/h3&gt;

&lt;p&gt;Add these lines to your &lt;code&gt;~/.config/vifm/vifmrc&lt;/code&gt; to enable file previews:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight viml"&gt;&lt;code&gt;&lt;span class="c"&gt;" ------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class="c"&gt;" File preview settings with vifmimg&lt;/span&gt;
&lt;span class="c"&gt;" ------------------------------------------------------------------------------&lt;/span&gt;

&lt;span class="c"&gt;" Image, video, pdf, and similar formats&lt;/span&gt;
fileviewer *&lt;span class="p"&gt;.&lt;/span&gt;pdf
&lt;span class="se"&gt;        \&lt;/span&gt; vifmimg pdf %px %&lt;span class="k"&gt;py&lt;/span&gt; %&lt;span class="k"&gt;pw&lt;/span&gt; %&lt;span class="nb"&gt;ph&lt;/span&gt; %&lt;span class="k"&gt;c&lt;/span&gt; %&lt;span class="k"&gt;pc&lt;/span&gt;

fileviewer *&lt;span class="p"&gt;.&lt;/span&gt;epub
&lt;span class="se"&gt;        \&lt;/span&gt; vifmimg epub %px %&lt;span class="k"&gt;py&lt;/span&gt; %&lt;span class="k"&gt;pw&lt;/span&gt; %&lt;span class="nb"&gt;ph&lt;/span&gt; %&lt;span class="k"&gt;c&lt;/span&gt; %&lt;span class="k"&gt;pc&lt;/span&gt;

fileviewer *&lt;span class="p"&gt;.&lt;/span&gt;djvu
&lt;span class="se"&gt;        \&lt;/span&gt; vifmimg djvu %px %&lt;span class="k"&gt;py&lt;/span&gt; %&lt;span class="k"&gt;pw&lt;/span&gt; %&lt;span class="nb"&gt;ph&lt;/span&gt; %&lt;span class="k"&gt;c&lt;/span&gt; %&lt;span class="k"&gt;pc&lt;/span&gt;

fileviewer *&lt;span class="p"&gt;.&lt;/span&gt;avi&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;mp4&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;wmv&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;dat&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="nb"&gt;gp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;ogv&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;mkv&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;mpg&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;mpeg&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;vob&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="se"&gt;        \&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;fl&lt;span class="p"&gt;[&lt;/span&gt;icv&lt;span class="p"&gt;],&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;m2v&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;mov&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;webm&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;ts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;mts&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;m4v&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;r&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;am&lt;span class="p"&gt;],&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;qt&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;divx&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="se"&gt;        \&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;fx&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="se"&gt;        \&lt;/span&gt; vifmimg video %px %&lt;span class="k"&gt;py&lt;/span&gt; %&lt;span class="k"&gt;pw&lt;/span&gt; %&lt;span class="nb"&gt;ph&lt;/span&gt; %&lt;span class="k"&gt;c&lt;/span&gt; %&lt;span class="k"&gt;pc&lt;/span&gt;

fileviewer *&lt;span class="p"&gt;.&lt;/span&gt;bmp&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;jpg&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;jpeg&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;png&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;xpm&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;webp&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;gif&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;jfif
&lt;span class="se"&gt;        \&lt;/span&gt; vifmimg draw %px %&lt;span class="k"&gt;py&lt;/span&gt; %&lt;span class="k"&gt;pw&lt;/span&gt; %&lt;span class="nb"&gt;ph&lt;/span&gt; %&lt;span class="k"&gt;c&lt;/span&gt; %&lt;span class="k"&gt;pc&lt;/span&gt;

fileviewer *&lt;span class="p"&gt;.&lt;/span&gt;otf&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;ttf
&lt;span class="se"&gt;        \&lt;/span&gt; vifmimg font %px %&lt;span class="k"&gt;py&lt;/span&gt; %&lt;span class="k"&gt;pw&lt;/span&gt; %&lt;span class="nb"&gt;ph&lt;/span&gt; %&lt;span class="k"&gt;c&lt;/span&gt; %&lt;span class="k"&gt;pc&lt;/span&gt;

fileviewer *&lt;span class="p"&gt;.&lt;/span&gt;wav&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;mp3&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;flac&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;m4a&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;wma&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;ape&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;ac3&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;og&lt;span class="p"&gt;[&lt;/span&gt;agx&lt;span class="p"&gt;],&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;spx&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;opus&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;aac
&lt;span class="se"&gt;        \&lt;/span&gt; vifmimg audio %px %&lt;span class="k"&gt;py&lt;/span&gt; %&lt;span class="k"&gt;pw&lt;/span&gt; %&lt;span class="nb"&gt;ph&lt;/span&gt; %&lt;span class="k"&gt;c&lt;/span&gt; %&lt;span class="k"&gt;pc&lt;/span&gt;

&lt;span class="c"&gt;" ------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class="c"&gt;" Text-based file previews&lt;/span&gt;
&lt;span class="c"&gt;" ------------------------------------------------------------------------------&lt;/span&gt;
fileviewer *&lt;span class="p"&gt;.&lt;/span&gt;txt
&lt;span class="se"&gt;        \&lt;/span&gt; vifmimg clear %px %&lt;span class="k"&gt;py&lt;/span&gt; %&lt;span class="k"&gt;pw&lt;/span&gt; %&lt;span class="nb"&gt;ph&lt;/span&gt; %&lt;span class="k"&gt;c&lt;/span&gt; &amp;amp;&amp;amp; bat &lt;span class="p"&gt;--&lt;/span&gt;style&lt;span class="p"&gt;=&lt;/span&gt;numbers &lt;span class="p"&gt;--&lt;/span&gt;color&lt;span class="p"&gt;=&lt;/span&gt;always %&lt;span class="k"&gt;c&lt;/span&gt;

fileviewer *&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;log&lt;/span&gt;
&lt;span class="se"&gt;        \&lt;/span&gt; vifmimg clear %px %&lt;span class="k"&gt;py&lt;/span&gt; %&lt;span class="k"&gt;pw&lt;/span&gt; %&lt;span class="nb"&gt;ph&lt;/span&gt; %&lt;span class="k"&gt;c&lt;/span&gt; &amp;amp;&amp;amp; bat &lt;span class="p"&gt;--&lt;/span&gt;style&lt;span class="p"&gt;=&lt;/span&gt;numbers &lt;span class="p"&gt;--&lt;/span&gt;color&lt;span class="p"&gt;=&lt;/span&gt;always %&lt;span class="k"&gt;c&lt;/span&gt;

fileviewer *&lt;span class="p"&gt;.&lt;/span&gt;md&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;markdown
&lt;span class="se"&gt;        \&lt;/span&gt; vifmimg clear %px %&lt;span class="k"&gt;py&lt;/span&gt; %&lt;span class="k"&gt;pw&lt;/span&gt; %&lt;span class="nb"&gt;ph&lt;/span&gt; %&lt;span class="k"&gt;c&lt;/span&gt; &amp;amp;&amp;amp; bat &lt;span class="p"&gt;--&lt;/span&gt;style&lt;span class="p"&gt;=&lt;/span&gt;numbers &lt;span class="p"&gt;--&lt;/span&gt;color&lt;span class="p"&gt;=&lt;/span&gt;always %&lt;span class="k"&gt;c&lt;/span&gt;

fileviewer *&lt;span class="p"&gt;.&lt;/span&gt;json
&lt;span class="se"&gt;        \&lt;/span&gt; vifmimg clear %px %&lt;span class="k"&gt;py&lt;/span&gt; %&lt;span class="k"&gt;pw&lt;/span&gt; %&lt;span class="nb"&gt;ph&lt;/span&gt; %&lt;span class="k"&gt;c&lt;/span&gt; &amp;amp;&amp;amp; bat &lt;span class="p"&gt;--&lt;/span&gt;style&lt;span class="p"&gt;=&lt;/span&gt;numbers &lt;span class="p"&gt;--&lt;/span&gt;color&lt;span class="p"&gt;=&lt;/span&gt;always %&lt;span class="k"&gt;c&lt;/span&gt;

fileviewer *&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;py&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;js&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;jsx&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;ts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;tsx&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;css&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;html&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;php&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;cpp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;rb&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;sh&lt;/span&gt;
&lt;span class="se"&gt;        \&lt;/span&gt; vifmimg clear %px %&lt;span class="k"&gt;py&lt;/span&gt; %&lt;span class="k"&gt;pw&lt;/span&gt; %&lt;span class="nb"&gt;ph&lt;/span&gt; %&lt;span class="k"&gt;c&lt;/span&gt; &amp;amp;&amp;amp; bat &lt;span class="p"&gt;--&lt;/span&gt;style&lt;span class="p"&gt;=&lt;/span&gt;numbers &lt;span class="p"&gt;--&lt;/span&gt;color&lt;span class="p"&gt;=&lt;/span&gt;always %&lt;span class="k"&gt;c&lt;/span&gt;

&lt;span class="c"&gt;" Archive formats&lt;/span&gt;
fileviewer *&lt;span class="p"&gt;.&lt;/span&gt;zip&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;jar&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;war&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;ear&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;oxt
&lt;span class="se"&gt;        \&lt;/span&gt; vifmimg clear %px %&lt;span class="k"&gt;py&lt;/span&gt; %&lt;span class="k"&gt;pw&lt;/span&gt; %&lt;span class="nb"&gt;ph&lt;/span&gt; %&lt;span class="k"&gt;c&lt;/span&gt; &amp;amp;&amp;amp; unzip &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="k"&gt;l&lt;/span&gt; %&lt;span class="k"&gt;c&lt;/span&gt;

fileviewer *&lt;span class="p"&gt;.&lt;/span&gt;tgz&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;tar&lt;span class="p"&gt;.&lt;/span&gt;gz
&lt;span class="se"&gt;        \&lt;/span&gt; vifmimg clear %px %&lt;span class="k"&gt;py&lt;/span&gt; %&lt;span class="k"&gt;pw&lt;/span&gt; %&lt;span class="nb"&gt;ph&lt;/span&gt; %&lt;span class="k"&gt;c&lt;/span&gt; &amp;amp;&amp;amp; tar &lt;span class="p"&gt;-&lt;/span&gt;tzf %&lt;span class="k"&gt;c&lt;/span&gt;

fileviewer *&lt;span class="p"&gt;.&lt;/span&gt;tar&lt;span class="p"&gt;.&lt;/span&gt;bz2&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;tbz2
&lt;span class="se"&gt;        \&lt;/span&gt; vifmimg clear %px %&lt;span class="k"&gt;py&lt;/span&gt; %&lt;span class="k"&gt;pw&lt;/span&gt; %&lt;span class="nb"&gt;ph&lt;/span&gt; %&lt;span class="k"&gt;c&lt;/span&gt; &amp;amp;&amp;amp; tar &lt;span class="p"&gt;-&lt;/span&gt;tjf %&lt;span class="k"&gt;c&lt;/span&gt;

fileviewer *&lt;span class="p"&gt;.&lt;/span&gt;tar&lt;span class="p"&gt;.&lt;/span&gt;xz&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;txz
&lt;span class="se"&gt;        \&lt;/span&gt; vifmimg clear %px %&lt;span class="k"&gt;py&lt;/span&gt; %&lt;span class="k"&gt;pw&lt;/span&gt; %&lt;span class="nb"&gt;ph&lt;/span&gt; %&lt;span class="k"&gt;c&lt;/span&gt; &amp;amp;&amp;amp; tar &lt;span class="p"&gt;-&lt;/span&gt;tJf %&lt;span class="k"&gt;c&lt;/span&gt;

&lt;span class="c"&gt;" Default file viewer for other formats&lt;/span&gt;
fileviewer *
&lt;span class="se"&gt;        \&lt;/span&gt; vifmimg clear %px %&lt;span class="k"&gt;py&lt;/span&gt; %&lt;span class="k"&gt;pw&lt;/span&gt; %&lt;span class="nb"&gt;ph&lt;/span&gt; %&lt;span class="k"&gt;c&lt;/span&gt; &amp;amp;&amp;amp; bat &lt;span class="p"&gt;--&lt;/span&gt;style&lt;span class="p"&gt;=&lt;/span&gt;numbers &lt;span class="p"&gt;--&lt;/span&gt;color&lt;span class="p"&gt;=&lt;/span&gt;always %&lt;span class="k"&gt;c&lt;/span&gt; &lt;span class="p"&gt;||&lt;/span&gt; echo &lt;span class="s2"&gt;"No preview available"&lt;/span&gt;

&lt;span class="c"&gt;"fileviewer *&lt;/span&gt;
&lt;span class="c"&gt;"        \ vifmimg clear %px %py %pw %ph %c &amp;amp;&amp;amp; bat --style=numbers --color=always %c 2&amp;gt;/dev/null || echo "No preview available"&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is only the configuration for previewing images, you also need to add these configurations down below to open them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;" Pdf
filextype {*.pdf},&amp;lt;application/pdf&amp;gt; zathura %c  &amp;amp;, mupdf %c, xpdf %c

"csv
filextype {*.csv},&amp;lt;application/csv&amp;gt; libreoffice %c  &amp;amp;

" Markdown files
filetype {*.md},&amp;lt;text/markdown&amp;gt; vim

" Text files
filetype {*.txt},&amp;lt;text/plain&amp;gt; vim

" PostScript
filextype {*.ps,*.eps,*.ps.gz},&amp;lt;application/postscript&amp;gt;
        \ {View in zathura}
        \ zathura %f &amp;amp;,
        \ {View in gv}
        \ gv %c %i &amp;amp;,

" Djvu
filextype {*.djvu},&amp;lt;image/vnd.djvu&amp;gt;
        \ {View in zathura} \ zathura %f &amp;amp;,
        \ {View in apvlv}
        \ apvlv %f,

" Audio
filetype {*.wav,*.mp3,*.flac,*.m4a,*.wma,*.ape,*.ac3,*.og[agx],*.spx,*.opus},
        \&amp;lt;audio/*&amp;gt;
       \ {Play using ffplay}
       \ ffplay -nodisp -hide_banner -autoexit %c,
       \ {Play using MPlayer}
       \ mplayer %c,
       \ {Play using mpv}
       \ mpv --no-video %c %s,


" Video
filextype {*.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.mpeg,*.vob,
          \*.fl[icv],*.m2v,*.mov,*.webm,*.ts,*.mts,*.m4v,*.r[am],*.qt,*.divx,
          \*.as[fx]},
         \&amp;lt;video/*&amp;gt;
        \ mpv --no-terminal --no-osd-bar %f

" Web
filextype {*.xhtml,*.html,*.htm},&amp;lt;text/html&amp;gt;
        \ {Open with qutebrowser}
        \ qutebrowser %f %i &amp;amp;,
        \ {Open with firefox}
        \ firefox %f &amp;amp;,
filetype {*.xhtml,*.html,*.htm},&amp;lt;text/html&amp;gt; links, lynx


" Man page
filetype {*.[1-8]},&amp;lt;text/troff&amp;gt; man ./%c

" Images
filextype {*.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm},&amp;lt;image/*&amp;gt;
        \ {View in sxiv}
        \ sxiv %c,

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These are examples of my file associations, which you can modify to open files according to your preferences by installing the applications of your liking. There is a subtle difference between filetype and filextype:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;filetype is used for console-based applications&lt;/li&gt;
&lt;li&gt;filextype is used for graphical applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Depending on the file type, you'll need to download the required binaries if they aren't already present.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cached Thumbnails&lt;/strong&gt;: Faster performance due to cached image thumbnails.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proper Preview Cleanup&lt;/strong&gt;: Ensures that previews are cleared when switching files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support for Multiple File Formats&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Images&lt;/strong&gt;: PNG, JPG, BMP, XPM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documents&lt;/strong&gt;: PDF, EPUB, DJVU&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Videos&lt;/strong&gt;: Thumbnails for AVI, MP4, MKV, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audio&lt;/strong&gt;: Album art previews&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fonts&lt;/strong&gt;: Preview support for OTF, TTF&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Screenshots
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbcvsqu03m709r37xxspg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbcvsqu03m709r37xxspg.png" alt="Image description" width="800" height="307"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdnvdzriwv9qcqwiv9oz9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdnvdzriwv9qcqwiv9oz9.png" alt="Image description" width="800" height="292"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7dte2ht30ikmjwhheaye.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7dte2ht30ikmjwhheaye.png" alt="Image description" width="800" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff8zca184i9yvikyw10rn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff8zca184i9yvikyw10rn.png" alt="Image description" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmol58udlgrkw80d6ubox.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmol58udlgrkw80d6ubox.png" alt="Image description" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Known Behavior
&lt;/h2&gt;

&lt;p&gt;When toggling preview mode with &lt;code&gt;w&lt;/code&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;If a preview persists, navigate to another directory to clear the preview or press &lt;code&gt;h&lt;/code&gt; &lt;code&gt;l&lt;/code&gt; to refresh the preview.&lt;/li&gt;
&lt;li&gt;Then press &lt;code&gt;w&lt;/code&gt; again to exit preview mode.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Terminal
&lt;/h2&gt;

&lt;p&gt;The terminal I am currently using is &lt;a href="https://st.suckless.org/" rel="noopener noreferrer"&gt;st&lt;/a&gt; but I have also tested this "Vifm" enhancement in &lt;a href="https://sw.kovidgoyal.net/kitty/" rel="noopener noreferrer"&gt;kitty&lt;/a&gt; and &lt;a href="https://alacritty.org/" rel="noopener noreferrer"&gt;alacritty&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Credits
&lt;/h2&gt;

&lt;p&gt;Original vifmimg scripts by &lt;a href="https://github.com/thimc/vifmimg" rel="noopener noreferrer"&gt;thimc&lt;/a&gt;, FOSS and GNU community for their incredible job. &lt;br&gt;
How easy everything is when standing on the shoulders of giants.&lt;/p&gt;

&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;This enhancement is provided under the same license as the original vifmimg project which is GPL-3.0 license.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclaimer
&lt;/h2&gt;

&lt;p&gt;Please make a backup copy of your .vifmrc configuration file before applying these changes.&lt;br&gt;
This guide serves as a starting point to configure Vifm to your preferences, and I continue to refine these configurations daily.&lt;br&gt;
I'm a programming enthusiast sharing my experience. Please don't contact me for support, as I am not an expert.&lt;/p&gt;

</description>
      <category>vifm</category>
      <category>bash</category>
      <category>linux</category>
    </item>
  </channel>
</rss>
