Kiedyś używałem narzędzi wxcopy i wxpaste z Windowmakera, ale ostatnie wersje Linuksa (lub wersje X) wydają się je zepsuć - podejrzewam, że zabezpieczenia zostały zaostrzone i nie zostały zaktualizowane, aby pasowały. Np. Możesz robić rzeczy takie jak:
echo fred | wxcopy | tr "a-z" "A-Z" | wxpaste
aby uzyskać wyjściowy FRED. (To wymyślony przykład, ponieważ uzyskałbyś to samo bez końcowej pasty wx, ale myślę, że daje to smak tego, co możesz osiągnąć.)
Jednak ten sam efekt można osiągnąć za pomocą pakietu „xcb”, który jest niewiarygodnie lekki i zapewnia również niewielki (podsumowany) obraz 8 schowków.
Kilka lat temu napisałem parę skryptów powłoki wcopy / wpaste, aby wxcopy / wxpaste było nieco przyjemniejsze dla mojego smaku. Zaktualizowałem je dzisiaj do pracy z wxcopy / wxpaste lub xcb. To sprawia, że są nieco bardziej skomplikowani, niż muszą, ale wkleję je tutaj - mam nadzieję, że nie będą zbyt długo na tym forum.
Oto wcopy:
#!/bin/sh
#
# Provide some enhancements to the wxcopy command, which copies standard input
# to an X11 clipboard text buffer.
#
# Allow copying from stdin to any of the cutbuffers. Note that they are
# indexed counting from 0.
#
# Author: Luke Kendall
#
if [ `uname -s` = "Darwin" ]
then
WXCOPY=pbcopy
WXPASTE=pbpaste
else
WXCOPY=wxcopy
WXPASTE=wxpaste
BUFSPEC="-cutbuffer"
xcb -p 0 > /tmp/wc$$
if echo "fred$$" | wxcopy -cutbuffer 0 && [ `wxpaste` = "fred$$" ]
then
: # Great, they're actually working. Not common on modern Linuxes.
echo "working" > $HOME/.wcopyok
else
rm -f $HOME/.wcopyok
WXCOPY="xcb -s"
WXPASTE="xcb -p"
BUFSPEC=
fi
xcb -s 0 < /tmp/wc$$
fi
unset WXARGS
if [ $# = 0 ]
then
$WXCOPY ${WXCOPY_DEFS:-0}
else
MYNAME=`basename $0`
USAGE="usage: $MYNAME [ [0-9]... ] [$WXCOPY's args]"
numlist=true
for n
do
if $numlist && expr "x$n" : 'x[0-9][0-9]*$' > /dev/null
then
NUMARGS="$NUMARGS $n"
else
numlist=false
if [ "x$n" = "x-h" ]
then
echo "$USAGE" >&2
exit 0
else
WXARGS="$WXARGS $n"
fi
fi
done
set - $NUMARGS
$WXCOPY $WXCOPY_DEFS $WXARGS $BUFSPEC $1
ORIG="$1"
shift
for n
do
$WXPASTE $BUFSPEC $ORIG | $WXCOPY $WXCOPY_DEFS $WXARGS $BUFSPEC $n
done
fi
A oto wpaste:
#!/bin/sh
#
# Provide some enhancements to the wxpaste command, which pastes from X11
# clipboard text buffers to standard output.
#
# Allow pasting to stdout from any of the cutbuffers. Note that they are
# indexed counting from 0.
#
# Author: Luke Kendall
#
if [ `uname -s` = "Darwin" ]
then
WXCOPY=pbcopy
WXPASTE=pbpaste
else
WXCOPY=wxcopy
WXPASTE=wxpaste
BUFSPEC="-cutbuffer"
if [ -s $HOME/.wcopyok ]
then
: # Great, they're actually working. Not common on modern Linuxes.
else
WXCOPY="xcb -s"
WXPASTE="xcb -p"
BUFSPEC=
fi
fi
if [ $# = 0 ]
then
$WXPASTE ${WXPASTE_DEFS:-0}
else
MYNAME=`basename $0`
USAGE="usage: $MYNAME [ [0-9]... ] [$WXPASTE's args]"
for n
do
if expr "x$n" : 'x[0-9][0-9]*$' > /dev/null
then
NUMARGS="$NUMARGS $n"
elif [ "x$n" = "x-h" ]
then
echo "$USAGE" >&2
exit 0
else
WXARGS="$WXARGS $n"
fi
done
set - $NUMARGS
: echo "Num args: $#"
for n
do
: echo "Doing: $WXPASTE $WXPASTE_DEFS $WXARGS $BUFSPEC $n"
$WXPASTE $WXPASTE_DEFS $WXARGS $BUFSPEC $n
done
fi
Jeśli ktoś jest zainteresowany, napisałem również strony podręcznika dla skryptów - ale prawdopodobnie można je znaleźć (nadal są ważne), przeglądając wcopy.1x i wpaste.1x
xclip -sel clip
. ja osobiście używam tego cały czas