urxvt и копипаст в другие приложения
Всем, кто хоть раз пробовал в работе эмулятор терминала urxvt (rxvt), известно о проблеме с копипастом выделенного текста между терминалом и гуевым софтом. Вернее сказать не проблеме, а особенности в работе терминала и буферов обмена. Дело в том, что в графической оболочке X.org буферов обмена аж целых два. И они никак не связаны между собой!
Буфер обмена, который называется CLIPBOARD, работает точно также как и буфер обмена Windows: выделяем текст, нажимаем Ctrl+C или Ctrl+Insert и текст помещается в буфер обмена. Для вставки из буфера используем комбинацию Ctrl+V или Shift+Insert.
Другой буфер обмена, называемый PRIMARY, работает иначе. Стоит только выделить мышью фрагмент текста, как он сразу же помещается в этот буфер. А для вставки из этого буфера нужно лишь нажать среднюю кнопку мыши (колёсико мыши) или одновременно левую и правую кнопки мыши.
Так вот urxvt с буфером PRIMARY работает полноценно: выделяет и вставляет замечательно. А с буфером CLIPBORD работает наполовину: только вставляет из буфера по комбинации Shift+Insert. Копировать текст в буфер программа не желает.
Решение для копирования в буфер CLIPBOARD нашлось быстро. Для этого пришлось установить программку autocutsel и добавить её в автозапуск. Для этого в ~/.xinitrc были добавлены следующие строчки:
/usr/bin/autocutsel -fork &
/usr/bin/autocutsel -selection PRIMARY -fork &
После запуска программа висела в памяти и синхронизировала данные в буферах PRIMARY и CLIPBOARD.
Собственно говоря после этого копирование заработало. В терминалке текст достаточно было просто выделить мышью, а вставлять можно было при помощи Shift+Insert.
Но оказалось, что это решение не совсем удачное. Стоило где-нибудь выделить мышью, как в CLIPBOARD тут же попадал выделенный текст. Например, выделяешь блок кода, который нужно скопировать, выделяешь блок кода, который нужно заменить и все: в буфере последнее выделение. Можно, конечно, сначала вставить, потом выделить и удалить, или удалить, а потом скопировать и вставить, но это головняк и мне так работать не удобно.
Поэтому от синхронизации буферов пришлось отказаться.
Но замечательное решение нашлось на форуме арчеводов https://bbs.archlinux.org/viewtopic.php?pid=750951 и находится по этой ссылке https://github.com/muennich/urxvt-perls/blob/master/clipboard.
Все что нужно сделать — это создать один файлик и добавить несколько строк в ваш .Xdefaults. В результате urxvt научится копировать в буфер CLIPBOARD!
По ссылке на гитхабе вся последовательность действий по установке и настройке подробно описана, я лишь прокомментирую.
В первую очередь нужно проверить наличие в системе программ xsel
или xclip
— утилит командной строки для работы с буферами обмена.
Затем скачать файлик отсюда и сохранить его в /usr/lib/urxvt/perl/clipboard (/usr/lib/urxvt/perl/ — это каталог для перловых расширений urxvt). Но если у вас в настройках терминала определён свой каталог для расширений (в ~/.Xdefaults это определяется следующим параметром: URxvt.perl-lib: /your/folder/
), можно сохранить этот файл в ваш /your/folder/ с именем clipboard.
Теперь настройка urxvt. Нужно открыть ~/.Xdefaults и найти в нем параметр URxvt.perl-ext-common
. Если этот параметр отсутствует, добавить в файл строку:
URxvt.perl-ext-common: default,clipboard
Если URxvt.perl-ext-common
присутствует, добавить в значения параметра clipboard
. Получится что-то типа:
URxvt.perl-ext-common: default,/какие-то ваши расширения/,clipboard
И добавить следующие строки:
URxvt.keysym.Control-Insert: perl:clipboard:copy
URxvt.keysym.Shift-Insert: perl:clipboard:paste
если установлена программа xsel
:
URxvt.copyCommand: xsel -ib
URxvt.pasteCommand: xsel -ob
если установлена программа xclip
:
URxvt.copyCommand: xclip -i -selection clipboard
URxvt.pasteCommand: xclip -o -selection clipboard
Все. Запускайте urxvt и проверяйте работу копирования и вставки в буфер обмена при помощи Ctrl+Insert и Shift+Insert.