sxiv

From ArchWiki
Jump to navigation Jump to search

sxiv , Simple X Image Viewer is a lightweight and scriptable image viewer written in C.

Installation

Install sxiv, which is available in the official repositories.

Assigning keyboard shortcuts to sxiv

Note: Currently you need to use sxiv-gitAUR from AUR for this feature to work.

sxiv supports external key events. First you have to press Ctrl-x to send the next key to the external key-handler. The external key-handler requires an executable file ~/.config/sxiv/exec/key-handler and passes the key combination pressed as well the name of the current image as arguments.

In this example, we will add the bindings Ctrl+d to execute mv filename ~/.trash, Ctrl+c to copy the current image's name to the clipboard with xclip, and Ctrl+w to set the current wallpaper with nitrogen.

~/.config/sxiv/exec/key-handler
#!/bin/sh

case "$1" in
"C-d")
        mv "$2" ~/.trash ;;
"C-r")
        convert -rotate 90 "$2" "$2" ;;
"C-c")
        echo -n "$2" | xclip -selection clipboard ;;
"C-w")
        nitrogen --save --set-zoom-fill "$2" ;;
esac

Be sure to mark the script as executable

$ chmod +x ~/.config/sxiv/exec/key-handler

Create .trash folder if it does not exist:

$ mkdir ~/.trash
Tip: You may want to use a standards-compliant trashcan (like trash-cliAUR or bashtrashAUR) rather than mv "$2" ~/.trash.

Tips and tricks

Browse through images in directory after opening a single file

Place this script in /usr/local/bin and call it like this:

$ scriptname a_single_image.jpg

Alternatively you can also install the script as a package from the AUR: sxiv-rifleAUR.

As indicated in the comments of the script, it may be used to have this behavior when opening images from within ranger.

Showing the image size in the status bar

Place the following executable script in ~/.config/sxiv/exec/image-info and make sure that you have the exiv2 package installed:

~/.config/sxiv/exec/image-info
#!/bin/sh

# Example for ~/.config/sxiv/exec/image-info
# Called by sxiv(1) whenever an image gets loaded,
# with the name of the image file as its first argument.
# The output is displayed in sxiv's status bar.

s=" | " # field separator

filename=$(basename "$1")
filesize=$(du -Hh "$1" | cut -f 1)

geometry=$(identify -format '%wx%h' "$1[0]")

tags=$(exiv2 -q pr -pi "$1" | awk '$1~"Keywords" { printf("%s,", $4); }')
tags=${tags%,}

echo "${filesize}${s}${geometry}${tags:+$s}${tags}${s}${filename}"

See also