跳转到内容

sxiv

来自 Arch Linux 中文维基

sxiv,Simple X Image Viewer(简单的 X 图像查看器)是一个用 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 的分支qsmodo 的分支 以及 sammoth 的分支

除此之外,您可以使用官方版的 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}"

另请参阅