LINUX.ORG.RU

sxiv. Скопировать отмеченные файлы

 , ,


0

2

Задача — скопировать в буфер обмена все отмеченные изображения в режиме просмотра миниатюр.

Делаю так:

cat ~/.config/sxiv/exec/key-handler

#!/bin/sh

case "$1" in
"C-c")      while read file; do xclip -selection clipboard -target image/png "$file"; done ;;
esac

Но копируется лишь одно, последнее из отмеченных изображений.

Что я делаю не так и как сделать, чтобы работало?



Последнее исправление: Dreamdrawer (всего исправлений: 1)

Так каждый следующий файл затирает предыдущий. Их надо передавать все вместе (не проверял):

#!/bin/sh

case "$1" in
"C-c")      xargs xclip -selection clipboard -target image/png ;;
esac
xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Как только ни пробовал, не работает.

Даже так

#!/bin/bash

case "$1" in
    # Copy image(s) to clipboard as files
    "c")
        tr '\n' '\0' | xargs -0 xclip-copyfile
        notify-send "sxiv: Selected file(s) copied to clipboard."
        ;;
esac

Не работает

Dreamdrawer
() автор топика
Ответ на: комментарий от Dreamdrawer

Это

"c")      xargs -n 1 realpath | xclip -selection clipboard -target image/png ;;

копирует мне все пути к файлам. Но я не знаю как оно должно работать с -target. А после xargs xclip Vim мне бинарные данные вставил.

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Не пойму, так у тебя это работает именно в sxiv? У меня не хочет.
Никак не получается заставить скопировать выделенные файлы (для последующей вставки в Браузер/Телеграм). Копируются только по одному. А нужно скопировать все выделенные файлы.

Четыре варианта, которые копируют только один файл (и вставка потом работает):

#!/bin/sh

while read -r file
do
    case "$1" in
	a) xclip -selection clipboard "$file" -t image/png
	    ;;
	b) xclip -selection clipboard -target image/png "$file"
	    ;;
	c) xclip -t "$(xdg-mime query filetype "$file")" -selection clipboard <"$file"
	    ;;
	d) convert "$file" png:- | xclip -selection clipboard -target image/png
	    ;;
    esac
done

Ещё четыре варианта, которые, по идее, должны работать, но не работают:

#!/bin/sh

while read -r file
do
    case "$1" in
	a) xclip -selection clipboard -t image/png "$(readlink -f "$file")"
	    ;;
	b) tr '\n' '\0' | xargs -0 xclip-copyfile
	    ;;
	c) xclip -selection clipboard -t image/png "$(readlink -f "$file")"
	    ;;
	d) while read file; do
            last_file=$file
        done
        extension="${last_file##*.}"
        if [ "$extension" = "png" ]; then
            xclip -selection clipboard -target image/png "$last_file"
        fi
        # This does not work yet - reason unknown
        if [ "$extension" = "jpg" ]; then
            xclip -selection clipboard -target image/jpeg "$last_file"
        fi
        notify-send "sxiv: Image '$last_file' copied to clipboard."
	    ;;
    esac
done

Dreamdrawer
() автор топика
Последнее исправление: Dreamdrawer (всего исправлений: 1)
Ответ на: комментарий от Dreamdrawer

Я пробовал вставлять только как текст. Но твой второй вариант не должен работать, так как ты вторым файлов затираешь первый, третьим второй и т.д. Надо копировать за один вызов xclip.

xaizek ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.