Jump to content

sxiv (Русский)

From ArchWiki

Состояние перевода: На этой странице представлен перевод статьи sxiv. Дата последней синхронизации: 7 августа 2025. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

sxiv (Simple X Image Viewer) — это обозреватель изображений, написанный на языке C. Он нетребователен к ресурсам, а также поддерживает скрипты.

Установка

Установите один из следующих пакетов:

  • nsxiv, форк ныне неразвиваемого sxiv, стремящийся быть (почти) прозрачной заменой sxiv, поддерживать его интерфейс и добавлять простые, разумные возможности. Разрабатываемая версия доступа в пакете nsxiv-gitAUR.
  • sxiv, исходный пакет.

Использование

Назначение горячих клавиш

Вы можете использовать сторонний скрипт для обработки сочетаний клавиш в sxiv. Для этого нажмите Ctrl-x и еще одну клавишу. Она будет передана в сторонний скрипт. Этот скрипт должен находиться в файле ~/.config/sxiv/exec/key-handler. Он принимает комбинацию нажатых клавиш в качестве аргумента, а имена выделенных изображений — через stdin. Если ни одно изображение не выбрано, то скрипт получит то изображение, что сейчас на экране. Пример такого скрипта-обработчика можно найти в /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 имя_файла ~/.trash, Ctrl+c будет копировать имена выбранных изображений в буфер обмена, а 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 этот скрипт и вызвать его:

$ название_скрипта изображение.jpg

Как сказано в комментарии ко скрипту, его можно использовать внутри файлового обозревателя ranger.

А этот скрипт с [3] запускает sxiv в режиме предпросмотра (thumbnail mode) только в том случае, если переданный аргумент — имя каталога:

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

Отображение размера изображения на нижней панели

Установите пакет exiv2, создайте приведённый ниже скрипт и сделайте его исполняемым:

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

# Это пример скрипта ~/.config/sxiv/exec/image-info
# sxiv(1) вызывает его каждый раз, когда загружает какое-либо изображение,
# а его название передаёт как первый аргумент.
# Вывод скрипта отображается на панели статуса.

s=" | " # разделитель между полями

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

# «[0]» обозначает первый кадр мультикадрового файла, например, 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}"

Смотрите также