J'avais l'habitude d'utiliser les utilitaires wxcopy et wxpaste de windowmaker, mais les versions récentes de Linux (ou les versions X) semblent les avoir cassées - je soupçonne que la sécurité a été renforcée et qu'elles n'ont pas été mises à jour pour correspondre. Par exemple, vous pourriez faire des choses comme:
echo fred | wxcopy | tr "a-z" "A-Z" | wxpaste
pour obtenir la sortie FRED. (C'est un exemple artificiel, car vous obtiendriez la même chose sans le wxpaste final, mais je pense que cela donne la saveur de ce que vous pouvez réaliser.)
Cependant, vous pouvez obtenir le même effet en utilisant le package "xcb", qui est incroyablement léger et fournit également un affichage visuel minuscule (résumé) de 8 presse-papiers.
J'ai écrit une paire de scripts shell wcopy / wpaste il y a des années, pour rendre wxcopy / wxpaste un peu plus agréable à mon goût. Je les ai mis à jour ce soir pour fonctionner avec wxcopy / wxpaste ou xcb. Cela les rend un peu plus complexes qu'ils ne devraient l'être, mais je vais les coller ici - j'espère qu'ils ne sont pas trop longs pour ce forum.
Voici 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
Et voici 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
Si quelqu'un est intéressé, j'ai également écrit des pages de manuel pour les scripts - mais vous pouvez probablement les trouver (elles sont toujours valides) en recherchant sur wcopy.1x et wpaste.1x
xclip -sel clip
. personnellement, je l'utilise tout le temps