it-swarm-ru.tech

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

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

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

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

86
intuited

В некоторых настройках 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)"'
95
Caleb

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

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

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

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

10
Michael Danilov
xdotool click 2

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

7
blueyed

Я использую 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
Ryan Woodard