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


84

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 di un 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?


Risposte:


93

Su alcune configurazioni linux predefinite, Shift+ Inserteseguirà un X-selection-paste. Come hai notato, questo è nettamente diverso dal X-clipboard-pastecomando, la cui associazione spesso varia 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? L'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 es. GTK, Qt, ecc.) Potrebbe avere diversi binding predefiniti. Alcuni programmi (ad esempio gvim) anche avere i propri registri copia interna che non sono necessariamente sincronizzati per l'ambiente grafico che corrono in. Per finire, anche quando un programma fa utilizzare il sistema X-appunti, 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 andare.

  1. C'è un'app per questo! ™ Usa uno dei vari programmi di gestione degli appunti per gestirlo. Il più popolare sembra essere Parcellite e Glippy , ma è possibile controllare le altre alternative qui . Vedi anche questa 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 è xdotoolche ti consente di imitare l'invio di eventi al sistema di input Xorg. Puoi usare il suo metodo di tipo come xdotool type foo_barimitare digitando 'foo_bar' al cursore. Combinati, ottieni qualcosa del genere:

$ xdotool type $(xsel)

L'altro è xvkbdche invia gli eventi della tastiera da un sottosistema inferiore. È possibile reprimere i tasti in esso su STDIN. In combinazione 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 come questa:

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

1
Sicuramente si qualifica come "migliore". Grazie!
intuito il

In quale applicazione? Nessuna delle applicazioni che utilizzo spesso si comporta in questo modo.
Gilles,

Sto usando Ubuntu, e mi piacerebbe davvero Shift-Insertessere di qualche utilità pratica, ma semplicemente non lo è (in Ubuntu). L'unica "coerenza (+/-)" che ho trovato è che un X- la selezione nelle app GTK può essere inserita in MAIUSC gnome-terminal, ma è piuttosto incostante per qualsiasi altra combinazione di queste stesse app che si incrocino ... Le poche app di KDE che uso (incluso Konsole), semplicemente no cross-paste a tutti .... e anche nelle app GTK, il clic centrale potrebbe funzionare, ma Shift + Insert potrebbe non funzionare (per la stessa app) ... Quindi uso il mouse :(
Peter.O

Non esiste un "legame di livello X". Potrebbe essere qualcosa che fanno le applicazioni che usi o qualcosa che fa il tuo gestore di finestre o l'ambiente desktop. Dubito che sarebbe specifico per una distribuzione.
Gilles,

1
Trovo che un approccio semplice sia quello di associare la scorciatoia da tastiera all'invio di un evento di clic centrale. Per me, quello è xdotool click 2.
Ricarica il

10

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

Maiusc-Inserisci non sta incollando la selezione primaria. Invece, è 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


8
xdotool click 2

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


1
Ciò richiede il posizionamento corretto del mouse, quindi è possibile utilizzare il pulsante del mouse. Se ci fosse un modo per agganciare il mouse al cursore, questo potrebbe essere parte di una risposta (dubito che ci sia)
jberryman

2

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: il tasto destro del mouse + 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 usare 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 all'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
Questa è una soluzione molto scarsa. Non puoi davvero suggerire alle persone di passare a un terminale diverso, in particolare uno che attirerà 100 MB + di gnome-shell come dipendenza. Anche questo non lo fa funzionare con nessun'altra applicazione, e il peggio di tutto ciò richiede ancora l'uso di un mouse per funzionare.
pfrenssen,
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.