Getting xterm and modern X applications to do cut and paste together
I was all set to write a somewhat grumpy blog entry about getting
xterm and Chrome to play nice with each other for cut and paste
when I decided to re-test this systematically. Let me tell you,
systematic testing and investigation changes quite a lot of blog
entries around here, and this one appears to be no exception.
The basic background on this is that X basically has two levels of cut and paste, which I'll call a casual level and a serious level. The casual level is making ordinary selections and pasting them with the middle mouse button (in most X applications), while the serious level is done through explicit Copy and Paste actions, generally found in menu entries. In X jargon, the 'casual level' is the PRIMARY selection and the 'serious level' is the CLIPBOARD selection.
Xterm works fine at the ordinary selection level. Selections you
make in xterm can be pasted into modern X applications like Firefox
and Chrome, and selections that you sweep out in Chrome or Firefox
can be pasted into xterm. But if you look at xterm, you will search
in relative vain for a Copy or a Paste menu item. Modern terminal
programs like gnome-terminal have entries right there and they do
what you expect, but
xterm does not.
There are two ways to get Copy in xterm. The first is the confusingly named 'Select to Clipboard' entry on the xterm menu you get with Control-middle mouse button; this makes all of your ordinary xterm selections be Copy-level selections instead of ordinary selections (ie, CLIPBOARD instead of PRIMARY, hence the name of the menu item). You can no longer paste them into most other things with the middle mouse button, but you can Paste them. The second is to add a keyboard binding for Copy in your X resources:
XTerm*VT100.Translations: #override \ Ctrl Shift <KeyPress> C: copy-selection(CLIPBOARD)
The advantage of a keyboard binding is that regular selection stuff continues to work as it normally does; you just explicitly invoke the Copy operation whenever you need it. Among other things, this means you don't have to remember the 'Select to ...' mode that any particular xterm is in (or forget and be puzzled about why you may not be able to middle mouse button paste a selection in one xterm into something else).
Getting Paste in xterm is much more confusing, so I will give you the conclusion; if you want a real Paste, you need to add another keyboard override:
XTerm*VT100.Translations: #override \ Ctrl Shift <KeyPress> C: copy-selection(CLIPBOARD) \n\ Ctrl Shift <KeyPress> V: insert-selection(CLIPBOARD)
Xterm tries very hard to do something smart when you use the middle mouse button to paste things. As part of this smartness, it normally pastes the basic selection from whatever program has one; however, if there is no basic selection at the moment and there is a Copy-level selection, it will paste that instead. The time when you need an explicit Paste operation (as provided here with Shift-Control-V) is when the basic selection is different from what got Copy'd and you specifically want to paste the Copy'd stuff.
(In the jargon, xterm normally tries to paste the PRIMARY selection but if that doesn't exist, it's willing to try the CLIPBOARD. Our new key binding does an explicit insert from CLIPBOARD.)