Condividi gli appunti tra bash e X11


11

In questa discussione la risposta in alto mostra come copiare il testo che è stato precedentemente selezionato con il mouse su un terminale gnome, negli appunti in X11.

La mia domanda è: supponiamo che copio un pezzo di testo dal terminale usando bash mark-mark e copia scorciatoie da tastiera (es. set-mark+ M-w). È possibile condividere questi appunti con X11?

EDIT : Nella domanda originale, ho parlato della condivisione degli appunti con GNOME, ma come sottolinea Gilles di seguito, GNOME non ha specificamente un blocco appunti (è generale per X), quindi ho aggiornato la domanda.


In gnome-terminal, puoi anche digitare Ctrl + Maiusc + C e Ctrl + Maiusc + V per copiare e incollare negli appunti di sistema.
Lie Ryan,

2
Vedi questo messaggio stackoverflow.com/questions/994563/… Ma non funziona per me.
ottimo q

Risposte:


9

Gli appunti di Bash sono interni a bash, bash non si collega al server X.

Quello che potresti fare è cambiare il significato di M-wcopiare la selezione negli Appunti X¹ oltre agli Appunti interni di bash. Tuttavia l'integrazione di bash è piuttosto libera e non credo che ci sia un modo per accedere alle informazioni sulla regione o agli appunti dal codice bash. È possibile creare un'associazione chiave per copiare l'intera riga negli Appunti X.²

if [[ -n $DISPLAY ]]; then
  copy_line_to_x_clipboard () {
    printf %s "$READLINE_LINE" | xsel -ib
  }
  bind -x '"\eW": copy_line_to_x_clipboard'
fi

Se vuoi fare cose fantasiose nella shell, passa a zsh, che (tra gli altri vantaggi) ha un'integrazione molto migliore tra l'editor di linee e il linguaggio di scripting.

if [[ -n $DISPLAY ]]; then
  x-copy-region-as-kill () {
    zle copy-region-as-kill
    print -rn -- "$CUTBUFFER" | xsel -ib
  }
  x-kill-region () {
    zle kill-region
    print -rn -- "$CUTBUFFER" | xsel -ib
  }
  zle -N x-copy-region-as-kill
  zle -N x-kill-region
  bindkey '\C-w' x-kill-region
  bindkey '\ew' x-copy-region-as-kill
fi

¹ Gnome non ha specificamente degli Appunti, questo è generale per X.
² A partire da bash 4.1, c'è un bug nel codice di analisi dei tasti: le sequenze di tasti associate con bind -xnon possono contenere più di due caratteri. Penso che bash 4.2 risolva alcuni casi di prefissi più lunghi ma non tutti; Non ho studiato i dettagli.


Grazie per l'idea @Gilles! Penso che sia tempo per me di imparare e passare a zsh.
Amelio Vazquez-Reina,

Finalmente! Grazie mille! Questo copy_line_to_x_clipboardè esattamente ciò che mi mancava da molto tempo: l'equivalente in copia di shift + insert. Ho cambiato in ctrl-x ( bind -x '"\C-x") perché Escè troppo lontano per i miei gusti (e Cc sarebbe la scelta più stupida possibile).
pbarill,

I terminali normalmente hanno una meta-chiave, che per impostazione predefinita è associata alla chiave alt. Digitare un personaggio mentre lo si tiene premuto viene tradotto in escseguito da quel personaggio, quindi è possibile digitarlo come alt-w.
DoMiNeLa10

7

@Gilles ha già dato un'ottima risposta. Vorrei solo menzionare l'esistenza di xclip, che è anche un modo molto utile per copiare l'output del terminale negli Appunti X, semplicemente collegando qualsiasi cosa al suo interno:

$ cat /etc/passwd | xclip

1
Solo una nota che viene xclipcopiata nel buffer primario per impostazione predefinita. Per usare gli appunti, usare xclip -selection clipboard.
Sparhawk,
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.