Akses Clipboard Baris Perintah

10

Saya sedang membangun alat baris perintah untuk membuat beberapa tugas saya lebih efisien. Saya harus bisa menulis konten ke clipboard, tetapi untuk beberapa alasan itu tidak berfungsi untuk saya.

Saya sudah mencoba menginstal keduanya xclipdan xsel, tetapi keduanya memiliki perilaku yang sama: mereka dapat membaca / menulis ke clipboard dengan baik, tetapi saya tidak dapat mengaksesnya dari GUI Ubuntu utama.

Saya juga sudah mencobanya di terminal ...

echo "hello" | xclip

Maka jika Ctrl+ Shift+ V, saya mendapatkan entri clipboard asli saya, bukan "halo". Tetapi, jika saya mencoba mengambil konten dari xclip, itu berfungsi dengan baik.

Tujuan utamanya adalah membuat konten dapat disambungkan ke Firefox atau program berbasis GUI apa pun yang saya gunakan.

Adrian Schneider
sumber

Jawaban:

16

Ya, ada beberapa clipboard yang berbeda di X :) xclipTeks yang disalin ke dalam secara default adalah "buffer seleksi" - biasanya Anda hanya memilih beberapa teks dengan mouse Anda dan kemudian dapat menempelkannya dengan tombol tengah mouse. Buffer ini terpisah dari yang dapat Anda tempel dengan Ctrl-Shift-V.

Mencoba

echo "hello" | xclip -selection clipboard

juga, lihat

man xclip

untuk detail lebih lanjut tentang xclip

Sergey
sumber
2
FYI, juga bisa disingkat menjadi xclip -sel clip. Saya pribadi menggunakannya sepanjang waktu
Sergiy Kolodyazhnyy
Ya Tuhan, mengapa ini sangat membingungkan, mengapa tidak cukup satu papan klip, lihatman xclip -selection specify which X selection to use, options are "primary" to use XA_PRIMARY (default), "secondary" for XA_SECONDARY or "clipboard" for XA_CLIPBOARD
mxmlnkn
Tampaknya tindakan yang sering dilakukan adalah "memilih beberapa teks dengan mouse Anda". Apakah mungkin untuk tindakan yang sama dengan keyboard?
nilon
3

Untuk membuatnya lebih mudah bagi diri saya, saya membuat alias untuk xclipmeniru fungsi pbcopydan dan pbpastedi Mac OS X.

sudo apt-get install xclip -y

Kemudian edit Anda ~/.bashrcuntuk menambahkan alias:

nano ~/.bashrc

Tambahkan baris baru ini (Anda bisa meletakkannya di akhir file):

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

Simpan dan keluar, lalu buka shell baru atau jalankan source ~/.bashrcuntuk menggunakan alias.

Posting blog saya berisi perincian lebih lanjut.

Gary Woodfine
sumber
2

Saya dulu menggunakan utilitas wxcopy dan wxpaste dari pembuat jendela, tetapi versi Linux baru-baru ini (atau versi X) tampaknya telah merusaknya - Saya menduga keamanan telah diperketat dan mereka belum diperbarui agar sesuai. Misalnya Anda dapat melakukan hal-hal seperti:

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

untuk mendapatkan output FRED. (Ini adalah contoh yang dibuat-buat, karena Anda akan mendapatkan hal yang sama tanpa pasta akhir, tapi saya pikir itu memberikan rasa apa yang dapat Anda capai.)

Namun, Anda dapat mencapai efek yang sama menggunakan paket "xcb", yang sangat ringan dan juga menyediakan tampilan visual kecil 8 clipboard.

Saya menulis sepasang skrip shell wcopy / wpaste tahun lalu, untuk membuat wxcopy / wxpaste sedikit lebih menyenangkan untuk seleraku. Saya memperbarui mereka malam ini untuk bekerja dengan wxcopy / wxpaste atau xcb. Itu membuat mereka sedikit lebih kompleks dari yang seharusnya, tetapi saya akan menempelkannya di sini - semoga mereka tidak terlalu lama untuk forum ini.

Inilah 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

Dan inilah 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

Jika ada yang tertarik, saya juga menulis halaman manual untuk skrip - tetapi Anda mungkin dapat menemukannya (masih valid) dengan googling wcopy.1x dan wpaste.1x

LukeJKendall
sumber
Anda dapat mengedit jawaban Anda untuk menambahkan hyperlink ke halaman manual. (Anda harus dapat menambahkan hingga 2 tautan, meskipun Anda adalah pengguna AU baru.)
Eliah Kagan