it-swarm.it

Incollare la selezione X (non il contenuto degli appunti) con la tastiera

Mi piacerebbe poter incollare la selezione X usando la tastiera. Attualmente devo usare il pulsante centrale del mouse per fare questo.

Mi risulta che falsificare la pressione del pulsante centrale del mouse sia abbastanza facile da fare, ma una soluzione del genere richiederebbe anche di spostare il puntatore del mouse nella posizione del cursore di testo.

C'è un modo migliore per farlo?

86
intuited

In alcune configurazioni linux predefinite, Shift+Insert eseguirà un X-selection-paste. Come hai notato, questo è nettamente diverso dal X-clipboard-paste comando, il cui binding varia spesso in base all'applicazione. Se non funziona qui ci sono un paio di altri tasti da provare:

  • Ctrl+V

  • Ctrl+Shift+V

  • Ctrl+Shift+Insert

Non andare? Il tuo ambiente desktop o Window Manager probabilmente non li ha configurati, ed è complicato perché —anche sotto il banner di un DE o WM— ogni toolkit (ad esempio GTK, Qt, ecc.) Potrebbe avere diversi binding predefiniti. Alcuni programmi (ad esempio gvim) hanno persino i propri registri di copia interni che non sono necessariamente sincronizzati con l'ambiente grafico in cui sono in esecuzione. Per finire, anche quando un programma utilizza il sistema X-clipboard, X ha più sistemi tra cui scegliere. I due più basilari sono il buffer di selezione - che ha sempre qualunque cosa sia stata selezionata l'ultima cosa (eseguita quando non lo fa) - e il buffer di copia - in cui di solito le cose devono essere specificamente copiate. Per eseguire una copia esplicita in quest'ultimo sistema è possibile provare uno di questi per dimensioni:

  • Ctrl+C

  • Shift+Ctrl+C

  • Ctrl+Insert


Se nulla di tutto ciò funziona magicamente per te, ci sono due modi in cui puoi procedere.

  1. Esiste un'app per questo! ™ Usa uno dei vari programmi di gestione degli appunti per gestirlo. I più popolari sembrano essere Parcellite e Glippy , ma puoi dare un'occhiata altre alternative qui . Vedi anche questo domanda sui gestori di appunti avanzati

  2. Hack te stesso.

Quindi diciamo che vuoi hackerarlo.

A meno di scrivere il tuo codice e toccare l'API X, gli strumenti di hacker per il lavoro sono un paio di piccole utility da riga di comando che ti danno una finestra nella mente di X. Solo una piccola finestra, attenzione, l'intera vista è troppo spaventosa .

Il primo strumento è xsel. Questo piccolo jobber sputerà tutto ciò che è nel buffer di selezione di X in qualsiasi momento.

Ora devi inserirlo nel tuo programma. Ci sono due opzioni per questo. Uno è xdotool che consente di imitare l'invio di eventi al sistema di input Xorg. Puoi usare il metodo tipo come xdotool type foo_bar per imitare digitando 'foo_bar' sul cursore. Combinati, ottieni qualcosa del genere:

$ xdotool type $(xsel)

L'altro è xvkbd che invia eventi da tastiera da un sottosistema inferiore. È possibile reindirizzare le sequenze di tasti su STDIN. Combinato con xsel, ottieni qualcosa del genere:

$ xsel | xvkbd -xsendevent -file -

Grande. Ora per quel keybinding per eseguire questa roba. Se esegui Gnome-2, puoi aggiungere una scorciatoia personalizzata in Sistema -> Preferenze -> Scorciatoie da tastiera . Se si utilizza un DE o WM diverso, questo excersize viene lasciato al lettore.

L'ultima nota è che quando si associano i comandi alle scorciatoie da tastiera è spesso necessario disporre di un solo comando, non di due comandi collegati a una pipe, come si usa sopra. È possibile ottenere ciò invocando il comando piped come stringa di comando argumetn in una nuova shell in questo modo:

sh -c 'xsel | xvkbd -xsendevent -file -'
sh -c 'xdotool type "$(xsel)"'
95
Caleb

Apparentemente Shift+Insert potrebbe non funzionare correttamente su alcune installazioni di GTK 3, almeno su FreeBSD. Il problema è descritto come:

Maiusc-Inserisci non sta incollando la selezione primaria. Al contrario, è destinato a incollare gli Appunti (per i quali Control-V è già utilizzato). Quindi, non esiste un modo solo per tastiera per inserire la selezione primaria. Bisogna trascinare il mouse lì e fare clic con il tasto centrale. Ciò rende scomoda l'interazione tra terminali e GTK.

Sono disponibili una segnalazione e una patch recenti (al momento della stesura di questo documento):

http://www.freebsd.org/cgi/query-pr.cgi?pr=188264

10
Michael Danilov
xdotool click 2

Questo simula direttamente il clic del pulsante del mouse e non richiede l'uso di xsel/xdotool type ....

7
blueyed

Sto usando Ubuntu 12 e ho avuto problemi a incollare il testo da xterm in gedit (e qualsiasi altra app). Inoltre, uso un laptop senza pulsante centrale del mouse come molte persone (in realtà non esiste misericordia negli Appunti per gli utenti di Linux senza pulsanti centrali, e no: tasto destro + tasto sinistro non funziona come sostituto).

Mentre penso che il metodo "xsel | xvkbd -xsendevent -file -" sia piuttosto interessante. Ho scoperto che la soluzione più semplice era eseguire "gnome-terminal" preinstallato anziché "xterminal". "gnome-terminal" supporta una copia del tasto destro del mouse sul comando della lavagna per appunti. Potrei quindi "Modifica menu-> Incolla" in gedit o utilizzare shift-insert. "gnome-terminal" è stato preinstallato con Ubuntu 12. Altre installazioni debian/gnome dovrebbero essere in grado di installarlo tramite:

Sudo apt-get install gnome-terminal

In Ubuntu, aggiungilo al programma di avvio sinistro facendo clic sul pulsante "Dash Home" nella parte superiore della barra di avvio. Nella casella di ricerca risultante, digitare terminal. È possibile trascinare l'icona "Terminale" sulla barra di avvio.

2
Ryan Woodard