Acesso à área de transferência da linha de comando

7

Estou criando uma ferramenta de linha de comando para tornar algumas das minhas tarefas mais eficientes. Eu preciso ser capaz de escrever conteúdo para a área de transferência, mas por algum motivo não está funcionando para mim.

Eu tentei instalar o xclip e o xsel, mas ambos têm o mesmo comportamento: eles podem ler / escrever na área de transferência, mas não consigo acessá-lo a partir da GUI principal do Ubuntu.

Eu também tentei no terminal ...

echo "hello" | xclip

Então, se Ctrl + Desloc + V , recebo minha entrada original da área de transferência, não "olá". Mas, se eu tentar pegar o conteúdo do xclip, tudo funciona bem.

O principal objetivo é colocar o conteúdo no Firefox ou qualquer outro programa baseado em GUI que eu esteja usando.

Qualquer ajuda seria apreciada!

Obrigado

    
por Adrian Schneider 06.03.2012 / 00:39

3 respostas

15

Bem, existem algumas pranchetas diferentes no X :) O xclip copia o texto para o padrão é "buffer de seleção" - normalmente basta selecionar algum texto com o mouse e depois colá-lo com o botão do meio do mouse. Esse buffer é separado daquele que você pode colar com Ctrl-Shift-V.

Tente

echo "hello" | xclip -selection clipboard

veja também

man xclip

para mais detalhes sobre o xclip

    
por Sergey 06.03.2012 / 00:52
2

Eu costumava usar os utilitários wxcopy e wxpaste do windowmaker, mas versões recentes do Linux (ou versões do X) parecem tê-las quebrado - eu suspeito que a segurança foi reforçada e eles não foram atualizados para corresponder. Por exemplo. você poderia fazer coisas como:

echo fred | wxcopy | tr "a-z" "A-Z" | wxpaste

para obter o resultado FRED. (É um exemplo artificial, já que você teria a mesma coisa sem o wxpaste final, mas acho que dá o sabor do que você pode conseguir.)

No entanto, você pode obter o mesmo efeito usando o pacote "xcb", que é incrivelmente leve e também fornece uma pequena exibição (resumida) de 8 pranchetas.

Eu escrevi um par de scripts de shell wcopy / wpaste anos atrás, para tornar o wxcopy / wxpaste um pouco mais agradável ao meu gosto. Eu os atualizei hoje à noite para trabalhar com wxcopy / wxpaste ou xcb. Isso os torna um pouco mais complexos do que precisam, mas vou colá-los aqui - espero que eles não sejam muito longos para esse fórum.

Aqui está o 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

E aqui está o 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

Se alguém estiver interessado, também escrevi man pages para os scripts - mas provavelmente você pode encontrá-los (eles ainda são válidos) pesquisando wcopy.1x e wpaste.1x

    
por LukeJKendall 07.07.2012 / 15:06
0

Para facilitar, criei um alias para xclip para imitar as funcionalidades de pbcopy e pbpaste no macosx.

sudo apt-get install xclip -y

edite seu ~/.bashrc para adicionar aliases

nano ~/.bashrc

adicione estas linhas

alias pbcopy='xclip -selection clipboard'
alias pbpaste='xclip -selection clipboard -o'

Salve e saia, abra um novo shell ou execute source ~/.bashrc para usar os aliases

Minha postagem no blog contém mais detalhes.

    
por Gary Woodfine 31.12.2016 / 11:25