Вставка X выделения (не содержимого буфера обмена) с помощью клавиатуры

84

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

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

Есть лучший способ сделать это?

созерцаемое
источник
2
То
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Ответы:

93

В некоторых установках Linux по умолчанию Shift+ Insertбудет выполнять X-selection-paste. Как вы заметили, это заметно отличается от X-clipboard-pasteкоманды, привязка к которой часто зависит от приложения. Если это не сработает, вот пара других ключей:

  • Ctrl+V

  • Ctrl+ Shift+V

  • Ctrl+ Shift+Insert

Нет идти? Ваша среда рабочего стола или диспетчер окон, вероятно, не настроили их, и это сложно, потому что даже под знаменем одного DE или WM каждый инструментарий (например, GTK, Qt и т. Д.) Может иметь разные привязки по умолчанию. Некоторые программы (например gvim) даже имеют свои собственные внутренние регистры копирования, которые не обязательно синхронизируются с графической средой, в которой они работают. В довершение, даже когда программа действительно использует систему X-буфера обмена, у X есть несколько систем на выбор. Два самых основных - это буфер выбора, который всегда имеет то, что было выбрано последним (кроме, если нет), и буфер копирования, в который обычно нужно специально копировать вещи. Чтобы сделать явное копирование в последнюю систему, вы можете попробовать любой из них для размера:

  • Ctrl+C

  • Shift+ Ctrl+C

  • Ctrl+Insert


Если ничего из этого не работает для вас волшебным образом, вы можете пойти двумя путями.

  1. Для этого есть приложение! ™ Используйте одну из различных программ менеджера буфера обмена, чтобы справиться с этим для вас. Наиболее популярными являются Parcellite и Glippy , но вы можете посмотреть другие варианты здесь . Смотрите также этот вопрос о продвинутых менеджерах буфера обмена

  2. Взломай это сам.

Допустим, вы хотите взломать его.

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

Первый инструмент xsel. Этот маленький работник будет выплевывать то, что находится в буфере выбора X в любой момент времени.

Теперь вам нужно включить это в свою программу. Для этого есть два варианта. Один из xdotoolних позволяет имитировать отправку событий в систему ввода Xorg. Вы можете использовать его метод типа, похожий xdotool type foo_barна имитацию ввода 'foo_bar' в курсоре. В сочетании вы получаете что-то вроде этого:

$ xdotool type $(xsel)

Другой - xvkbdотправка событий клавиатуры из нижней подсистемы. Вы можете направить нажатия клавиш на STDIN. В сочетании с xsel, вы получите что-то вроде этого:

$ xsel | xvkbd -xsendevent -file -

Отлично. Теперь для этого связывания клавиш для запуска этого материала. Если вы запускаете Gnome-2, вы можете добавить пользовательский ярлык в Система -> Настройки -> Сочетания клавиш . Если вы используете другой DE или WM, этот размер оставляется на усмотрение читателя.

Последнее замечание: при привязывании команд к сочетаниям клавиш часто необходимо иметь только одну команду, а не две команды, связанные с конвейером, как мы использовали выше. Это можно сделать, вызвав команду piped в виде командной строки argumetn для новой оболочки, например:

sh -c 'xsel | xvkbd -xsendevent -file -'
sh -c 'xdotool type "$(xsel)"'
Калеб
источник
1
Определенно квалифицируется как «лучше». Спасибо!
интуитивно
В каком приложении? Ни одно из приложений, которые я использую, часто не ведет себя так.
Жиль
Я использую Ubuntu, и я действительно хотел Shift-Insertбы иметь какое-либо практическое применение, но это просто не (в Ubuntu) .. Единственное "постоянство (+/-)", которое я обнаружил, состоит в том, что X- выделение в приложениях GTK может быть вставлено в Shift gnome-terminal, но это совершенно непросто для любой другой комбинации этих самых приложений с перекрестным вставлением ... Несколько приложений KDE, которые я использую (включая Konsole), просто не перекрестная вставка вообще .... и даже в приложениях GTK щелчок по центру может работать, но Shift + Insert может не работать (для того же приложения) ... Поэтому я использую мышь :(
Peter.O
Не существует такого понятия, как «привязка уровня X». Это может быть то, что приложения, которые вы используете, или то, что делает ваш оконный менеджер или окружение рабочего стола. Я сомневаюсь, что это было бы определенным для распределения.
Жиль
1
Я считаю, что простой подход - привязать сочетание клавиш к отправке события среднего щелчка. Для меня это так xdotool click 2.
Индуктивная
10

Очевидно, что Shift+ Insertможет не работать должным образом на некоторых установках GTK 3, по крайней мере на FreeBSD. Проблема описывается как:

Shift-Insert не вставляет первичный выбор. Вместо этого он должен вставить буфер обмена (для которого уже используется Control-V). Следовательно, нет единственного способа ввода первичного выделения с клавиатуры. Нужно перетащить мышью туда и средний щелчок. Это делает взаимодействие между терминалами и GTK неудобным.

Недавний (на момент написания) отчет об ошибке и патч доступны:

http://www.freebsd.org/cgi/query-pr.cgi?pr=188264

Михаил Данилов
источник
8
xdotool click 2

Это имитирует нажатие кнопки мыши напрямую и не требует использования xsel/ xdotool type ....

blueyed
источник
1
Это требует правильного расположения мыши, поэтому вы можете использовать кнопку мыши. Если бы был какой-нибудь способ привязать мышь к курсору, это могло бы быть частью ответа, хотя (я сомневаюсь, что есть)
jberryman
2

Я использую Ubuntu 12 и у меня возникла проблема с вставкой текста из xterm в gedit (и любое другое приложение). Кроме того, я использую ноутбук без средней кнопки мыши, как и многие люди (для пользователей linux без средних кнопок действительно нет жалости к буферу обмена, и нет: замена правой кнопкой мыши + left_click не работает).

Хотя я думаю, что метод "xsel | xvkbd -xsendevent -file -" довольно крутой. Я обнаружил, что самое простое решение - запустить предустановленный «gnome-терминал» вместо «xterminal». «gnome-терминал» поддерживает команду копирования в буфер обмена, щелкнув правой кнопкой мыши. Затем я мог бы "Edit Menu-> Paste" в gedit или использовать shift-insert. "gnome-терминал" был предустановлен с Ubuntu 12. Другие установки Debian / gnome должны быть в состоянии установить его через:

sudo apt-get install gnome-terminal

В Ubuntu добавьте его в левую панель запуска, нажав кнопку «Dash Home» в верхней части панели запуска. В появившемся окне поиска введите терминал. Вы можете перетащить значок «Терминал» на панель запуска.

Райан Вудард
источник
2
Это очень плохое решение. Вы не можете реально предложить людям переключиться на другой терминал, особенно тот, который будет загружать 100 МБ + оболочки gnome в качестве зависимости. Это также не заставляет его работать с любым другим приложением, и хуже всего это все еще требует использования мыши для работы.
pfrenssen