Scorciatoia da tastiera per incollare la selezione principale


40

Esiste una scorciatoia da tastiera standard o convenzionale per incollare la selezione principale?

Vorrei selezionare del testo e andare su un'altra app per incollare senza eliminare i contenuti degli appunti. Preferirei tenere le dita sulla tastiera piuttosto che passare al mouse, trovare il puntatore, posizionarlo dove voglio e fare clic con il tasto centrale.

Se non c'è nulla di convenzionale, o se è specifico dell'applicazione e non supportato da molti, c'è una soluzione alternativa per farlo funzionare a livello globale? (O almeno in più applicazioni.)



FWIW, puoi incollare la selezione principale dalla tastiera (cioè senza usare i pulsanti del mouse) usando shift-insert, e copiare / incollare la selezione degli appunti usando ctrl-insert / ctrl-shift-insert
Jonathan Hartley

@JonathanHartley for me inserisce maiuscole negli appunti non selezione primaria
jberryman

Risposte:


32

L'invio di tasti virtuali non funziona per me (vedi commenti ), ma quella risposta mi ha ispirato a cercare soluzioni simili. L'invio di un evento "text" con xvkbdignora lo stato corrente della tastiera fisica:

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

xvkbd -textusa alcune sequenze di barre rovesciate, quindi piuttosto che ballare con la fuga, -filefunziona. xvkbdgenera anche un testo di avvertimento sui modificatori, ma sembra essere irrilevante per questo uso (ma non volevo vederlo in ~/.xsession-errors).

Ho associato questo a una scorciatoia usando Sistema> Preferenze> Scorciatoie da tastiera .

Si noti che è necessario disporre dei pacchetti xsel e xvkbd installati:

sudo apt-get install xsel xvkbd

3
Banane sante! Funziona! È fantastico. Ubuntu dovrebbe configurarlo per impostazione predefinita.
Eric Johnson,

8
Per me sh -c 'xsel | xvkbd -file - 2>/dev/null'funziona, -xsendevent ha dovuto uscire per farlo funzionare.
sup

A proposito, ancora una volta, ho dovuto assegnare questo comando a una scorciatoia da tastiera singola (fortunatamente ho il pulsante ThinkVantage che non fa nulla sul mio Thinkpad - ctrl + alt + v si è comportato in modo strano e ha incollato solo una parte di ciò che era in xsel).
sup

2
Funziona molto bene, tranne per due problemi. (1) Uso un terminale a discesa (Guake) che ho impostato per nascondere la perdita di messa a fuoco. L'esecuzione di questo script rimuove temporaneamente lo stato attivo dal terminale, facendolo nascondere. (2) Non funziona bene con caratteri UTF-8 caratteri a doppio byte. ad es. se seleziono "éòü", usando la sceneggiatura "à © ò¼".
Sparhawk,

2
Sembra che il secondo bug sia presente xvkbd. xselfunziona bene con "éòü" nella selezione principale, ma xvkbdfallisce come lo script sopra. (E fallisce anche xvkbd -text "éòü", anche se qui non stampa nulla.)
Sparhawk,

7

Puoi ottenerlo con l'uso combinato dei programmi xdotool ( fai clic per installare ) e xsel ( fai clic per installare ).

xdotoolpuò simulare la digitazione in una finestra; xselgenera il contenuto della selezione PRIMARY (per impostazione predefinita); la seguente shell one liner farà il trucco:

 xdotool type `xsel`

Per associare questo a qualsiasi tasto usando la voce di menu Sistema-> Preferenze-> Scorciatoie da tastiera è necessario avvolgerlo in una chiamata shell:

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

La digitazione xdotoolnon funzionerà con alcuni programmi; vedere le note nella documentazione di xdotool .


Ciò non funzionerà a meno che la casella di testo attiva e la posizione del cursore non si trovino in quella posizione esatta, e certamente non lo è. In effetti, se questo conta il bordo del gestore delle finestre, ciò farà la mia azione "clic con il tasto centrale sul titolo della finestra", che è completamente diversa.

@Roger Grazie, corretto il testo. Sono curioso di sapere se esiste un modo migliore per farlo: io stesso ho cercato un tasto "incolla" per un bel po 'di tempo ...
Riccardo Murri,

Bene, apprezzo lo sforzo, ma ancora non funzionerà. Se volessi preoccuparmi della posizione del mouse, in primo luogo userei il mouse. :)

@Roger: Ho ottenuto il secondo round corretto: xdotool + xsel lo fa. (Beh, almeno funziona per me.)
Riccardo Murri,

2
Richiede l'opzione --clearmodifiers, altrimenti c'è una condizione di competizione tra il rilascio della scorciatoia da tastiera e l'esecuzione di xdotool. Il xdotool nei repository di 10.04 non è aggiornato per questa opzione, ho dovuto scaricarlo e costruirlo da solo. Tuttavia, --clearmodifiers sembra influenzare in modo strano i modificatori, e non vedo come, alla fine, far funzionare xdotool per la mia scorciatoia da tastiera (anche se funziona alla grande per digitare virtualmente il testo).


2

La chiamata xdotool click --clearmodifiers 2simula il clic del pulsante centrale del mouse. Funziona molto meglio dell'uso di xsel (almeno per me). Anche se devi posizionare il mouse prima di digitare ...


2

Un altro suggerimento di xdotool, che lavora in Debian Jessie 8.7 (gennaio 2017):

xdotool click --delay 0 --clearmodifiers 2
  • xdotool gestisce stringhe multi-byte (pe UTF-8), a differenza di xvkbd.
  • xdotool clicksimula un clic effettivo, quindi non è necessario fare clic su di te per incollarlo alla posizione del mouse, come si farebbe se si usasse xdotool typeo xvkbd.

L'unico problema è che --clearmodifiers"premi" indietro qualsiasi modificatore (Ctrl / Alt / Maiusc / Meta) che usi dopo aver simulato il clic. Anche con --delay 0(invece di 12ms), l'esecuzione del comando richiede un po 'di tempo. Se si rilasciano i tasti prima che finisca, i modificatori verranno nuovamente "premuti" e bloccati lì fino a quando non si preme e si rilascia nuovamente il tasto effettivo.

Quindi con questo devi essere un po '"lento" (50ms?) Per rilasciare i tuoi modificatori, se ne usi uno.

Puoi testarlo impostando la scorciatoia da tastiera, utilizzandola in un editor di testo e quindi premendo un tasto (come a o una freccia). La lettera dovrebbe apparire in minuscolo. Se succede qualcos'altro, sei troppo veloce e un modificatore è bloccato (pe Maiusc se è in maiuscolo, Ctrl se hai selezionato tutto il testo, Alt se hai aperto un menu). Premi e rilascia nuovamente i modificatori per ripristinarli.

Se sei troppo veloce, puoi usare il suggerimento di ilkerk:

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

Quindi devi rilasciarli in meno di 300 ms e attendere mezzo secondo affinché appaia il testo.

Inoltre, usare xdotool typesignifica inserire il testo come se si stesse digitando, nella posizione del cursore del testo e non con il puntatore del mouse. Puoi cambiarlo inclick se preferisci il solito comportamento del clic centrale.

(reso questo post in modo che i nuovi arrivati ​​non debbano ricoprire nuovamente i pezzi del puzzle sparsi nei commenti)


funziona per me in Arch Linux ora
MountainX

1

Ho avuto problemi con le soluzioni che simulano incollare la PRIMARYselezione, quindi ho aggiunto un collegamento che copia la PRIMARYselezione inCLIPBOARD . Dopo aver usato il mio collegamento incollo l' CLIPBOARDnel solito modo, con Ctrl+V, Ctrl+Shift+Vo Shift+Insert, a seconda dell'applicazione.

Il comando per copiare la PRIMARYselezione in CLIPBOARDè

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

a cui mi associo Ctrl+Insert(scelta arbitraria) nelle impostazioni del collegamento di Gnome inSystem Settings -> Devices -> Keyboard

Riepilogo dei problemi con altre soluzioni: ho provato le soluzioni xsel | xvkbd ...e xsel | xdotool ..., ma ho scoperto che non funzionavano molto bene perché simulavano di digitare il PRIMARYcarattere di selezione per carattere, il che non equivale a incollarlo con un clic centrale. I problemi includono: c'è un lungo ritardo mentre una grande selezione viene inserita un carattere alla volta; se vuoi annullare la "incolla", devi annullarla carattere per carattere, che è lento; se stai usando "chiavi morte" allora tutto viene incasinato, per esempio "eproduce "incolla" ë; il xvkdbnon gestisce correttamente i caratteri Unicode.

Avvertenza: questa soluzione sovrascrive i CLIPBOARDcontenuti esistenti , ma l'OP ha chiesto soluzioni che preservino i CLIPBOARDcontenuti esistenti .


Questo salva il contenuto degli Appunti originali e lo reimposta in seguito? O cestinano il contenuto originale degli appunti, non riuscendo così a " incollare senza distruggere il contenuto dei miei appunti " della domanda?
Xen2050

@ Xen2050 sì, questo elimina l'APPARTAMENTO. Aggiungerò una nota alla risposta.
ntc2

0

Ho avuto lo stesso problema e la ricerca su Internet non mi ha aiutato molto. Il problema che simula il clic 2 è fastidioso come indicato da OP.

Il problema con quanto sopra proposto xdotoole xsel è quando xdotoolinizia a "digitare" stai ancora premendo un altro tasto. Ciò non risulta sempre con alcun output. Ad esempio, se lo si lega al tasto "Inserisci", allora xdotoolsi inviano le chiavi mentre il dito preme il tasto "Inserisci" che non provoca nulla.

Di seguito è una soluzione alternativa, per associarlo alla pressione di un tasto:

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

non è perfetto ma funziona. ora hai 0,3 secondi per terminare la selezione del tasto premi (e tasto su).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.