Pintasan keyboard untuk menempelkan pemilihan utama

40

Apakah ada pintasan keyboard standar atau konvensional untuk menempelkan pilihan utama?

Saya ingin memilih beberapa teks dan pergi ke aplikasi lain untuk menempel tanpa merusak isi clipboard saya. Saya lebih suka menjaga jari-jari saya pada keyboard daripada pindah ke mouse, temukan pointer, posisikan di tempat yang saya inginkan, dan klik tengah.

Jika tidak ada yang konvensional, atau jika spesifik aplikasi dan tidak didukung oleh banyak orang, adakah solusi untuk membuatnya berfungsi secara global? (Atau setidaknya dalam lebih banyak aplikasi.)

Stefano Palazzo
sumber
2
Kemungkinan sama distro apa pun: unix.stackexchange.com/questions/11889/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
FWIW, Anda dapat menempelkan seleksi utama dari keyboard (mis. Tanpa menggunakan tombol mouse) menggunakan shift-insert, dan salin / tempel pilihan clipboard menggunakan ctrl-insert / ctrl-shift-insert
Jonathan Hartley
@JonathanHartley untuk saya menggeser-memasukkan pasta dari clipboard bukan pilihan utama
jberryman

Jawaban:

32

Mengirim penekanan tombol virtual tidak berfungsi untuk saya (lihat komentar ), tetapi jawaban itu mengilhami saya untuk mencari solusi serupa. Mengirim acara "teks" dengan xvkbdmengabaikan kondisi keyboard fisik Anda saat ini:

sh -c 'xsel | xvkbd -xsendevent -file - 2>/dev/null'

xvkbd -textmenggunakan beberapa urutan backslash, jadi daripada menari dengan melarikan diri, -filebekerja. xvkbdjuga menampilkan beberapa teks peringatan tentang pengubah, tetapi tampaknya tidak relevan dengan penggunaan ini (tapi saya tidak ingin melihatnya ~/.xsession-errors).

Saya mengikat ini ke pintasan menggunakan System> Preferences> Keyboard Shortcuts .

Perhatikan bahwa Anda perlu menginstal paket xsel dan xvkbd:

sudo apt-get install xsel xvkbd
Komunitas
sumber
3
Pisang suci! Berhasil! Itu luar biasa. Ubuntu harus mengatur ini secara default.
Eric Johnson
8
Bagi saya, sh -c 'xsel | xvkbd -file - 2>/dev/null'bekerja, -xsendevent harus keluar untuk membuatnya berfungsi.
sup
Ngomong-ngomong sekali lagi, saya harus menetapkan perintah ini ke satu pintasan kunci (untungnya saya punya tombol ThinkVantage yang tidak melakukan apa pun di Thinkpad saya - ctrl + alt + v bertingkah aneh dan hanya menempel sebagian yang ada di dalamnya xsel).
sup
2
Ini bekerja sangat baik kecuali untuk dua masalah. (1) Saya menggunakan terminal drop-down (Guake) yang telah saya atur untuk bersembunyi saat kehilangan fokus. Menjalankan skrip ini menghilangkan fokus sementara dari terminal, menyebabkannya bersembunyi. (2) Ini tidak cocok dengan karakter karakter byte ganda karakter UTF-8. misalnya jika saya memilih "éòü", menggunakan skrip mencetak "à © òü".
Sparhawk
2
Sepertinya ada bug kedua di xvkbd. xselberfungsi baik dengan "éòü" di pilihan utama, tetapi xvkbdgagal seperti skrip di atas. (Dan juga gagal dengan xvkbd -text "éòü", meskipun di sini tidak mencetak apa pun.)
Sparhawk
7

Anda bisa mendapatkan ini dengan penggunaan gabungan dari program xdotool ( klik untuk menginstal ) dan xsel ( klik untuk menginstal ).

xdotooldapat mensimulasikan mengetik ke jendela; xselmengeluarkan konten dari pilihan PRIMARY (secara default); shell one liner berikut akan melakukan trik:

 xdotool type `xsel`

Untuk mengikat ini ke tombol apa saja menggunakan item menu System-> Preferences-> Keyboard pintas perlu untuk membungkusnya dalam doa shell:

 sh -c 'xdotool type --clearmodifiers -- "`xsel`"'

Mengetik xdotooltidak akan berfungsi dengan beberapa program; lihat catatan dalam dokumentasi xdotool .

Riccardo Murri
sumber
Itu tidak akan berfungsi kecuali jika kotak teks aktif dan posisi kursor berada pada posisi yang tepat, dan tentu saja tidak. Bahkan, jika ini menghitung batas manajer jendela, itu akan melakukan tindakan "klik tengah pada judul jendela" saya, yang sama sekali berbeda.
@Roger Terima kasih, koreksi teksnya. Saya ingin tahu apakah ada cara yang lebih baik untuk melakukan ini: Saya sendiri telah mencari "tempel" -kunci selama beberapa waktu ...
Riccardo Murri
Yah, saya menghargai upaya ini, tetapi ini masih tidak berhasil. Jika saya ingin khawatir tentang posisi mouse, saya hanya akan menggunakan mouse di tempat pertama. :)
@Roger: Sudah benar putaran kedua: xdotool + xsel melakukannya. (Yah, setidaknya bekerja untuk saya.)
Riccardo Murri
2
Membutuhkan opsi --clearmodifiers, jika tidak ada kondisi perlombaan antara melepaskan pintasan keyboard dan eksekusi xdotool. Xdotool di repositori 10,04 tidak diperbarui untuk opsi ini, saya harus mengunduh dan membangunnya sendiri. Namun, --clearmodifiers tampaknya secara aneh memengaruhi pengubah, dan saya tidak melihat bagaimana, pada akhirnya, membuat xdotool berfungsi untuk pintasan keyboard saya (meskipun ini bekerja dengan baik untuk hampir mengetik teks).
5

Saya mencari jawaban untuk pertanyaan yang sama ini, dan saya menemukan jawaban ini yang mengatakan bahwa Shift+ Insertberfungsi untuk menempelkan pemilihan utama. Saya bekerja untuk saya. Lebih sederhana.

Anne
sumber
Di Ubuntu secara default Shift + Insert paste clipboard biasa seperti Ctrl + v , bukan pilihan utama. Distro mana yang Anda gunakan?
Pablo A
2

Memanggil xdotool click --clearmodifiers 2mensimulasikan mengklik tombol tengah mouse. Ini berfungsi lebih baik daripada menggunakan xsel (setidaknya untuk saya). Meskipun Anda harus memposisikan mouse Anda sebelum mengetik ...

Robert Jakob
sumber
2

Saran xdotool lain, bekerja di Debian Jessie 8.7 (Jan 2017):

xdotool click --delay 0 --clearmodifiers 2
  • xdotool menangani string multi-byte (pe UTF-8), tidak seperti xvkbd.
  • xdotool clickmensimulasikan klik yang sebenarnya, jadi Anda tidak perlu mengklik diri sendiri untuk menempel di posisi mouse, seperti yang akan Anda lakukan jika Anda menggunakannya xdotool type, atau xvkbd.

Satu-satunya masalah adalah bahwa --clearmodifiersakan "tekan" kembali pengubah (Ctrl / Alt / Shift / Meta) yang Anda gunakan setelah mensimulasikan klik. Bahkan dengan --delay 0(bukannya 12ms), perintah ini membutuhkan sedikit untuk dieksekusi. Jika Anda melepaskan tombol sebelum berakhir, pengubah Anda akan "ditekan" lagi, dan terjebak di sana sampai Anda menekan dan melepaskan tombol yang sebenarnya sekali lagi.

Jadi dengan ini Anda harus sedikit "lambat" (50 ms?) Untuk melepaskan pengubah Anda, jika Anda menggunakan.

Anda dapat menguji ini dengan mengatur pintasan keyboard Anda, menggunakannya ke dalam editor teks, dan kemudian menekan tombol (seperti a, atau panah). Surat itu harus muncul dalam huruf kecil. Jika sesuatu terjadi, Anda terlalu cepat dan pengubah macet (pe Bergeser jika hurufnya kecil, Ctrl jika Anda memilih semua teks, Alt jika Anda membuka menu). Tekan dan lepaskan pengubah Anda lagi untuk meresetnya.

Jika Anda terlalu cepat, Anda dapat menggunakan saran ilkerk:

sh -c 'sleep 0.3 && xdotool type --clearmodifiers --delay 0  "`xsel`"'

Maka Anda harus melepaskannya dalam waktu kurang dari 300 ms, dan tunggu setengah detik hingga teks muncul.

Juga, menggunakan xdotool typeberarti Anda memasukkan teks seolah-olah Anda mengetik, pada posisi kursor teks, dan bukan penunjuk tetikus. Anda dapat mengubahnya menjadi clickjika Anda lebih suka perilaku klik tengah yang biasa.

(membuat posting ini sehingga pendatang baru tidak perlu lagi membuat potongan puzzle menyebar di komentar lagi)

Chema
sumber
bekerja untuk saya di Arch Linux sekarang
MountainX
1

Aku punya masalah dengan solusi yang mensimulasikan menyisipkan satu PRIMARYseleksi, jadi bukannya saya menambahkan cara pintas yang salinan yang PRIMARYseleksi keCLIPBOARD . Setelah menggunakan shortcut saya paste CLIPBOARDdengan cara yang biasa, dengan Ctrl+V, Ctrl+Shift+Vatau Shift+Insert, tergantung pada aplikasi.

Perintah untuk menyalin PRIMARYseleksi ke CLIPBOARDis

sh -c 'xsel --output --primary | xsel --input --cliboard'

yang saya ikat Ctrl+Insert(pilihan sewenang-wenang) di pengaturan pintasan Gnome di bawahSystem Settings -> Devices -> Keyboard

Ringkasan masalah dengan solusi lain: Aku mencoba xsel | xvkbd ...dan xsel | xdotool ...solusi, tetapi menemukan mereka tidak bekerja dengan baik karena mereka mensimulasikan mengetik dengan PRIMARYkarakter seleksi dengan karakter, yang tidak sama dengan menyisipkan dengan klik tengah. Masalahnya termasuk: ada penundaan lama sementara banyak pilihan disisipkan satu karakter pada satu waktu; jika Anda ingin membatalkan "tempel", Anda harus membatalkannya karakter demi karakter, yang lambat; jika Anda menggunakan "kunci mati" maka semuanya menjadi kacau, misalnya "menempel" "emenghasilkan ë; yang xvkdbtidak menangani karakter unicode dengan benar.

Peringatan: Solusi ini menimpa konten yang ada CLIPBOARD, tetapi OP meminta solusi yang menjaga konten yang ada CLIPBOARD.

ntc2
sumber
Apakah ini menyimpan konten clipboard asli & mengaturnya lagi setelah itu? Atau apakah itu membuang konten clipboard asli, sehingga gagal bagian " untuk menyisipkan tanpa menghancurkan konten clipboard saya " bagian dari pertanyaan?
Xen2050
@ Xen2050 ya, ini menghancurkan CLIPBOARD. Saya akan menambahkan catatan pada jawabannya.
ntc2
0

Saya memiliki masalah yang sama dan pencarian internet tidak banyak membantu saya. Masalahnya mensimulasikan klik 2 menjengkelkan seperti yang disebutkan OP.

Masalah dengan yang diusulkan di atas xdotooldan xsel adalah ketika xdotoolmulai "mengetik" Anda masih menekan tombol lain. Itu tidak selalu menghasilkan output apa pun. Misalnya jika Anda mengikatnya ke tombol "masukkan" maka xdotoolmengirim kunci saat jari Anda menekan tombol "masukkan" yang tidak menyebabkan apa-apa.

Di bawah ini adalah solusinya, untuk mengikatnya ke tombol tekan:

sh -c 'sleep 0.3 && xdotool type --clearmodifiers --delay 0  "`xsel`"'

itu tidak sempurna tetapi berfungsi. sekarang Anda memiliki 0,3 detik untuk menyelesaikan pilihan Anda dari tombol tekan (dan tombol atas).

ilkerk
sumber