跳转至内容

sxiv

来自 ArchWiki

sxiv,Simple X Image Viewer 是一个用 C 编写的轻量级、可脚本化的图像查看器。

安装

安装以下软件包之一

  • nsxiv,是已停止维护的 sxiv 的一个分支,旨在作为 sxiv 的(基本)直接替代品,保持其界面并添加简单、合理的功能。
  • sxiv,原始软件包。已停止维护。

用法

分配键盘快捷键

sxiv 支持外部按键事件。首先,您必须按 Ctrl-x 将下一个按键发送到外部按键处理程序。外部按键处理程序需要一个可执行文件 ~/.config/sxiv/exec/key-handler,并通过参数以及当前标记的图像名称(或,如果没有标记,则为当前选定的图像)作为标准输入传递按键组合。安装 sxiv 时会附带一个示例按键处理程序:/usr/share/sxiv/exec/key-handler。该示例是定制快捷键的绝佳起点。

$ mkdir -p ~/.config/sxiv/exec/
$ cp /usr/share/sxiv/exec/key-handler ~/.config/sxiv/exec/key-handler

请务必将脚本标记为 可执行

在下面的示例中,我们将添加绑定 Ctrl+d 来执行 mv filename ~/.trashCtrl+c 来使用 xclip 将当前图像的名称复制到剪贴板,以及 Ctrl+w 来使用 nitrogen 设置当前壁纸。显然,有些命令可能只在只有一个图像作为参数时才有意义,因此您可能需要修改这些命令以处理传递多个参数的情况。

~/.config/sxiv/exec/key-handler
#!/bin/sh
while read file
do
        case "$1" in
        "C-d")
                mv "$file" ~/.trash ;;
        "C-r")
                convert -rotate 90 "$file" "$file" ;;
        "C-c")
                echo -n "$file" | xclip -selection clipboard ;;
        "C-w")
                nitrogen --save --set-zoom-fill "$file" ;;
        esac
done

如果 .trash 文件夹不存在,请创建它

$ mkdir ~/.trash
提示 您可能想使用一个 符合标准的回收站,而不是 mv "$2" ~/.trash

技巧与提示

打开单个文件后在目录中浏览图像

sxiv 的开发者曾被多次要求使其程序能够浏览作为参数传递的文件的目录中的所有图像(参见 [1][2])。有一些分支具有期望的行为:doronbehar'sqsmodo'ssammoth's

或者,您可以使用官方版本的 sxiv,并将 此脚本放在 /usr/local/bin 中,然后这样调用它

$ scriptname a_single_image.jpg

如脚本注释所示,它可用于在从 ranger 中打开图像时实现此行为。

这个 shell 脚本来自 [3],当且仅当传递的文件参数是一个文件夹时,它会以缩略图模式启动 sxiv

~/bin/sxiv.sh
#!/bin/sh

    if command -v sxiv >/dev/null 2>&1; then
      if [ -d "${@: -1}" ] || [ -h "${@: -1}" ]; then
        sxiv -t "$@"
      else
        sxiv    "$@"
      fi
    elif command -v feh >/dev/null 2>&1; then
      feh "$@"
    else
      echo "Please install SXIV or FEH!"
    fi

在状态栏显示图像大小

将以下可执行脚本放在 ~/.config/sxiv/exec/image-info 中,并确保您已安装 exiv2 软件包。

~/.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)

# The '[0]' stands for the first frame of a multi-frame file, e.g. gif.
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}"

参见

  • Arch Linux 论坛帖
  • Sxiv 用于键盘布局 bépo(面向法语用户的 Dvorak 风格键盘布局):Sxiv bépo