Копирование и вставка с помощью URxvt

27

Я использую URxvt 9.20 на Debian Jessie, и я ищу способ скопировать и вставить текст, как я привык с помощью терминала gnome ( Ctrl+ Insertдля копирования, Shift+ Insertдля вставки).

Он работает в разных консолях urxvt, но не работает, например, между urxvt и iceweasel.

Я попытался в соответствии с руководством по archlinux , но это не сработает (хотя я на самом деле не хочу использовать Shift+ Ctrl+ C/ Vэто стоило попробовать).

.Xresources:

! ******************
! urxvt config
! ******************

! Disable Perl extension
! If you do not use the Perl extension features, you can improve the security
! and speed by disabling Perl extensions completely. 
URxvt.perl-ext:
URxvt.perl-ext-common:

! Font spacing
! By default the distance between characters can feel too wide. It's controlled
! by this entry: 
! URxvt.letterSpace: -1

! -- Fonts -- !
URxvt.font:xft:Monospace:pixelsize=13
URxvt.boldfont:xft:Monospace-Bold:pixelsize=13
!URxvt*font:  -xos4-terminus-medium-*-*-*-14-*-*-*-*-*-iso8859-15,xft:terminus:pixelsize:12
!URxvt*boldFont:  -xos4-terminus-bold-*-*-*-14-*-*-*-*-*-iso8859-15,xft:terminus:bold:pixelsize:12
!URxvt*italicFont:  xft:Bitstream Vera Sans Mono:italic:autohint=true:pixelsize=12
!URxvt*boldItalicFont:  xft:Bitstream Vera Sans Mono:bold:italic:autohint=true:pixelsize=12

! Disable scrollbar
!URxvt*scrollBar: false

! Scrollbar style - rxvt (default), plain (most compact), next, or xterm
URxvt.scrollstyle: plain

! Background color
!URxvt*background: black
URxvt*background: #1B1B1B

! Font color
!URxvt*foreground: white
URxvt*foreground: #00FF00

! Other colors
URxvt*color0: black
!URxvt*color1: red3
URxvt*color1: #CD0000
URxvt*color2: green3
!URxvt*color3: yellow3
URxvt*color3: #C4A000
URxvt*color4: blue2
!URxvt*color4: #3465A4
URxvt*color5: magenta3
URxvt*color6: cyan3
URxvt*color7: gray90
URxvt*color8: grey50
URxvt*color9: red
URxvt*color10: green
URxvt*color11: yellow
!URxvt*color12: blue
URxvt*color12: #3465A4
URxvt*color13: magenta
URxvt*color14: cyan
URxvt*color15: white
! ******************
! /urxvt config
! ******************
Томас Джон
источник
Вы знаете, что вы можете скопировать, выделив текст мышью и вставив, нажав среднюю кнопку мыши, верно? Если нет, этого достаточно?
Тердон
2
Проблема здесь заключается в том, что обе программы используют разные выделения в X-Windows, традиционные программы используют PRIMARYвыделение с помощью Shift + Insert, а новые программы, которые пытаются имитировать привязки клавиш из других систем, вставляют CLIPBOARDвыделение для одной и той же привязки клавиш. В GTK + стало сложнее вставлять PRIMARYбез использования мыши (средний щелчок, как сказал @terdon, или левый + правый щелчок, если включена эмуляция третьей кнопки). Но, хотя это объясняет, почему программы не передают данные между ними, мне интересно, почему предложение arch wiki не сработало.
njsg
Как вы попробовали предложения от ArchWIki? Если вы используете графический экран входа в систему для запуска X, вам нужно будет перезагрузить ресурсы X, используя xrdb(это должно быть xrdb ~.Xresourcesили что-то подобное). В любом случае, вам также нужно перезагрузить компьютер urxvt. В некоторых дистрибутивах вам может понадобиться установить отдельный пакет с расширениями perl, но, похоже, он включен в базовый rxvt-unicodeпакет в Debian (хотя я могу ошибаться).
njsg
1
@terdon спасибо за ваш комментарий. Выбор с помощью мыши и вставка с помощью среднего щелчка действительно работает. Увы, это не то, чего я хотел бы достичь, я хотел бы использовать Ctrl + Insert / Shift + Insert, как я привык (привычки и мантры делают нас эффективными и быстрыми, я не часто использую мышь (Я использую i3wm).)
Томас Джон
@njsg большое спасибо за объяснение различий между основным и буфером обмена. Я попробовал расширение Perl, упомянутое в ArchWiki на «Пользовательские привязки клавиш», оно не имело никакого значения (я прокомментировал часть «Отключить расширение Perl» в моем .Xresources, прежде чем, конечно, использовать его). - Да, я сделал $ xrdb -merge ~/.Xresourceсначала - Да, я перезапустил urxvt или открыл новые окна терминала urxvt, что дает тот же эффект, что я забыл упомянуть наиболее вероятный важный момент: у меня не установлена ​​среда рабочего стола: - Я ' я использую только менеджер окон (i3wm) - я использую графический менеджер входа в систему
Томас Джон

Ответы:

16

К сожалению, система X Window имеет несколько различных механизмов копирования и вставки .

Rxvt, как и большинство старых приложений X, использует первичный выбор. Как правило, когда вы выбираете что-то с помощью мыши, оно автоматически копируется в основной выбор, а когда вы нажимаете средний щелчок для вставки, это вставляет основной выбор.

Ctrl+ Cи Ctrl+ V(или другие привязки клавиш) в приложениях, использующих современные GUI-инструментарии, такие как Gnome-терминал и Firefox, копировать / вставлять из буфера обмена.

Есть инструменты для облегчения работы с выборами. В частности, если вы просто хотите иметь один выбор, который копируется в то, что вы выбираете с помощью мыши или нажатия Ctrl+ C, вы можете запустить autocutsel (запустить его из ваших .xinitrcили из программ запуска вашей среды рабочего стола), который обнаруживает, когда что-то копируется в один из выборов и автоматически копирует его в другой.

Жиль "ТАК - перестань быть злым"
источник
20

Для вставки текста в urxvt / rxvt-unicode вы можете использовать middle buttonдля вставки ПЕРВИЧНЫЙ выбор и Alt/Meta+ middle buttonдля вставки CLIPBOARD.

Для копирования, просто маркировка текста в терминале копирует его в ПЕРВИЧНЫЙ выбор. Тем не менее, некоторая работа необходима для копирования в выборку CLIPBOARD. Я соединил информацию со страницы Archlinux, которую вы связали, с помощью сценариев, включенных в rxvt-unicode-9.19, и получил скрипт, подобный следующему: https://gist.github.com/xkr47/98224ed6b0860cb55ec0 . Это позволяет использовать Ctrl+ Insertили Ctrl+ Shift+ c`, чтобы скопировать выбранный в данный момент текст в CLIPBOARD.

Надеюсь это поможет.

Кстати, я также не запускаю рабочую среду; используя Sawfish в качестве оконного менеджера.

Совет : Вы можете контролировать буфер обмена в терминале, используя программу "xclip":

while :; do echo -ne '\033[31;1mCLIPBOARD: ' ; xclip -o -sel c ; echo ; echo -ne '\033[32;1mPRIMARY:   ' ; xclip -o -sel p ; echo ; echo -e '\033[m--------' ; sleep 1 ; done

или используя программу "xsel":

while :; do echo -ne '\033[31;1mCLIPBOARD: ' ; xsel -b -o ; echo ; echo -ne '\033[32;1mPRIMARY:   ' ; xclip -p -o ; echo ; echo -e '\033[m--------' ; sleep 1 ; done
Йонас Берлин
источник
Дополнительная тема: Информация о том, как работают выборки PRIMARY и CLIPBOARD в Emacs: emacswiki.org/emacs/CopyAndPaste
Jonas Berlin,
Alt / Meta + средняя кнопка работает для меня в Debian
Jing
Это правильный ответ.
Винни
15

Существуют встроенные механизмы для копирования / вставки в / из PRIMARY(используется, когда пользователь выбирает некоторые данные) и CLIPBOARD(используется, когда пользователь выбирает некоторые данные и явно запрашивает их «копирование» в буфер обмена, например, путем вызова «Копировать» в меню «Редактировать» приложения). Подробнее о различных блокнотах в X .

Для CLIPBOARDбуфера это CTRL+META+C( CTRL+ALT+Cдля стандартной клавиатуры ПК) для копирования и CTRL+META+V( CTRL+ALT+V) для вставки.

Цитата из urxvt man :

ВЫБОР: ВЫБОР И ВСТАВКА ТЕКСТА

Поведение механизма выделения и вставки / вставки текста аналогично xterm (1).

Выбор :

Щелкните левой кнопкой мыши в начале области, перетащите в конец области и отпустите; Щелкните правой кнопкой мыши, чтобы расширить отмеченную область; Дважды щелкните левой кнопкой мыши, чтобы выбрать слово; Трижды щелкните левой кнопкой мыши, чтобы выбрать всю логическую строку (которая может занимать несколько строк экрана), если только это не было изменено с помощью тройных кликов ресурсов.

Запуск выделения при нажатии клавиши Meta (или клавиш Meta + Ctrl) (Compile: frills) создаст прямоугольное выделение вместо обычного. В этом режиме каждая выбранная строка становится отдельной строкой в ​​выделении, а завершающие пробелы визуально подчеркиваются и удаляются из выделения.

Приклеивание :

Нажатие и отпускание средней кнопки мыши в окне urxvt приводит к тому, что значение основного элемента (или КЛИПОВОЙ ПЛАТЫ с модификатором Meta) вставляется так, как если бы оно было напечатано на клавиатуре.

Нажатие Shift-Insert также приводит к вставке значения ПЕРВИЧНОГО выбора.

rxvt-unicode также предоставляет привязки Ctrl-Meta-c и для взаимодействия с выбором CLIPBOARD. Первая привязка вызывает копирование значения внутреннего выбора в выборку CLIPBOARD, в то время как вторая привязка вызывает вставку значения выбора CLIPBOARD.

Петрушка
источник
Почему я никогда не думаю, что решения находятся на странице руководства? Теперь мне все ясно! Спасибо!
Энрико Мария Де Анжелис
1
Между прочим, я постоянно забывал, в какую область между основным выбором и буфером обмена вставляется, когда я выбираю что-то перед щелчком правой кнопки мыши и вставкой. Теперь понятно: доПЕРВИЧНЫЙ .
Энрико Мария Де Анжелис
12

Вы можете сделать urxvt-копию как в основной, так и в буфер обмена с расширением perl для выделения в буфер обмена. Это поддерживает их синхронизацию, поэтому вы просто копируете один раз в urxvt, и это должно работать в приложениях, которые также используют.

URxvt.perl-ext-common: selection-to-clipboard
degenerateJoe
источник
2
Могу ли я изменить ярлык для этого расширения? Я не люблю по умолчанию Ctrl-Alt-C / V. Я хотел бы иметь ctrl-shift-c / v.
Трисмегистос
3
@Trismegistos, посмотри сюда
кодер