10

In this thread the top answer shows how to copy text that has been previously selected with the mouse on a gnome-terminal, to the clipboard in X11.

My question is: Say I copy a piece of text from the terminal using bash set-mark and copy keyboard shortcuts (i.e. set-mark + M-w). Is it possible to share this clipboard with X11?

EDIT: In the original question, I talked about sharing the clipboard with GNOME, but as Gilles points out below, GNOME doesn't specifically have a clipboard (it's general to X), so I have updated the question.

9

Bash's clipboard is internal to bash, bash doesn't connect to the X server.

What you could do is change the meaning of M-w to copy the selection to the X clipboard¹ in addition to bash's internal clipboard. However bash's integration is pretty loose, and I don't think there's a way to access the region information or the clipboard from bash code. You can make a key binding to copy the whole line to the X clipboard.²

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

If you want to do fancy things in the shell, switch to zsh, which (amongst other advantages) has far better integration between the line editor and the scripting language.

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 doesn't specifically have a clipboard, this is general to X.
² As of bash 4.1, there is a bug in the key parsing code: key sequences bound with bind -x may not be more than two characters long. I think bash 4.2 fixes some cases of longer prefixes but not all of them; I haven't researched the details.

  • Thanks for the idea @Gilles! I think it's time for me to learn and switch to zsh. – Amelio Vazquez-Reina Aug 14 '11 at 18:02
  • Finally! Thanks a bunch! This copy_line_to_x_clipboard is exactly what I was missing for a very long time: the copy equivalent of shift+insert. I changed to ctrl-x (bind -x '"\C-x") because Esc is too far to my taste (and C-c would be the dumbest possible choice). – p_barill Jul 15 '18 at 17:26
  • Terminals normally have a meta key, which is bound to the alt key by default. Typing a character while holding it down is translated to esc followed by that character, so you can type it as alt-w. – DoMiNeLa10 Oct 18 '18 at 19:16
7

@Gilles already gave an excellent answer. I would just like to mention the existence of xclip, which is also a very useful way to copy terminal output to the X clipboard, by just piping anything into it:

$ cat /etc/passwd | xclip
  • 1
    Just a note that xclip copies into the primary buffer by default. To use the clipboard, use xclip -selection clipboard. – Sparhawk May 30 '14 at 6:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.