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.

Поделиться в FacebookДобавить в TwitterДобавить в Telegram

Комментарии

Оставить комментарий

Ответ на urxvt и копипаст в другие приложения