Существуют ли стандартные или обычные сочетания клавиш для вставки основного выделения?
Я хотел бы выделить какой-нибудь текст и перейти в другое приложение, чтобы вставить без содержимого моего буфера обмена. Я бы предпочел держать пальцы на клавиатуре, а не двигать мышь, найти указатель, расположить его там, где я хочу, и щелкнуть средней кнопкой мыши.
Если нет ничего общепринятого или если оно специфично для конкретного приложения и не поддерживается многими, есть ли обходной путь, чтобы это работало глобально? (Или, по крайней мере, в других приложениях.)
Отправка виртуальных нажатий клавиш не работает для меня (см. комментарии ), но этот ответ вдохновил меня на поиск похожих решений. Отправка «текстового» события с помощью xvkbd
игнорирует текущее состояние вашей физической клавиатуры:
sh -c 'xsel | xvkbd -xsendevent -file - 2>/dev/null'
xvkbd -text
использует несколько последовательностей обратной косой черты, поэтому вместо танца с экранированием -file
работает. xvkbd
также выводит некоторый текст с предупреждением о модификаторах, но он, похоже, не имеет отношения к этому использованию (но я не хотел видеть его в ~/.xsession-errors
).
Я связал это с ярлыком, используя Система> Предпочтения> Сочетания клавиш .
Обратите внимание, что вам нужно установить пакеты xsel и xvkbd:
sudo apt-get install xsel xvkbd
Вы можете получить это при совместном использовании программ xdotool (, чтобы установить ) и xsel (, чтобы установить . ).
xdotool
может имитировать ввод текста в окне; xsel
выводит содержимое ПЕРВИЧНОГО выбора (по умолчанию); следующая оболочка с одним вкладышем сделает свое дело:
xdotool type `xsel`
Чтобы связать это с любой клавишей, используя пункт меню Система-> Настройки-> Сочетания клавиш , необходимо обернуть его вызов оболочки:
sh -c 'xdotool type --clearmodifiers -- "`xsel`"'
Печатание в xdotool
не будет работать с некоторыми программами; см. примечания в xdotool документации .
У меня были проблемы с решениями, которые имитируют вставку выделения PRIMARY
, поэтому вместо этого я добавил ярлык, который копирует выбор PRIMARY
в CLIPBOARD
] . После использования моего ярлыка я вставляю CLIPBOARD
обычным способом, с Ctrl+V
, Ctrl+Shift+V
или Shift+Insert
, в зависимости от приложения.
Команда для копирования выбора PRIMARY
в CLIPBOARD
-
sh -c 'xsel --output --primary | xsel --input --cliboard'
, который я связываю с Ctrl+Insert
(произвольный выбор) в настройках ярлыка Gnome в System Settings -> Devices -> Keyboard
Резюме проблем с другими решениями: Я попробовал решения xsel | xvkbd ...
и xsel | xdotool ...
, но обнаружил, что они не очень хорошо работают, потому что они имитируют типизацию и PRIMARY
] выбор символа за символом, который не совпадает с , вставляя его с помощью среднего щелчка. Проблемы включают: есть большая задержка, в то время как большой выбор вставляется по одному символу за раз; если вы хотите отменить «вставку», вы должны отменить ее посимвольно, что медленно; если вы используете «мертвые ключи», то все портится, например, «склеивание» "e
производит ë
; xvkdb
неправильно обрабатывает символы Юникода.
Предупреждение: Это решение перезаписывает существующее содержимое CLIPBOARD
, но ОП запросил решения, которые сохраняют существующее содержимое CLIPBOARD
.
У меня была та же проблема, и поиск в интернете мне не сильно помог. Проблема, имитирующая щелчок 2, раздражает, как упоминалось выше.
Проблема с предложенными выше xdotool
и xsel заключается в том, что когда xdotool
начинает «печатать», вы все еще нажимаете другую клавишу. Это не всегда приводит к какому-либо результату. Например, если вы связываете его с клавишей «вставить», то xdotool
отправляет клавиши, в то время как ваш палец нажимает клавишу «вставить», которая ничего не вызывает.
Ниже приведен обходной путь, чтобы связать его с нажатием клавиши:
sh -c 'sleep 0.3 && xdotool type --clearmodifiers --delay 0 "`xsel`"'
это не идеально, но работает. Теперь у вас есть 0,3 секунды, чтобы завершить выбор нажатия клавиши (и клавиши вверх).
Вызов xdotool click --clearmodifiers 2
имитирует нажатие средней кнопки мыши. Это работает намного лучше, чем использование xsel (по крайней мере, для меня). Хотя вам нужно расположить мышь перед тем, как печатать ...
Я искал ответ на этот же вопрос и нашел этот ответ , в котором говорится, что Shift kbd> + Insert kbd> работает для вставки первичный отбор. Я работаю на меня. Simpler.
Другое предложение xdotool, работающее в Debian Jessie 8.7 (январь 2017 г.):
xdotool click --delay 0 --clearmodifiers 2
xdotool click
имитирует фактический щелчок, поэтому вам не нужно нажимать на себя, чтобы вставить в положение мыши, как если бы вы использовали xdotool type
или xvkbd. Единственная проблема заключается в том, что --clearmodifiers
будет «нажимать» обратно любой модификатор (Ctrl / Alt / Shift / Meta), который вы используете после имитации щелчка. Даже с --delay 0
(вместо 12 мс) выполнение команды занимает немного времени. Если вы отпустите клавиши до того, как они закончатся, ваши модификаторы будут снова «нажаты» и останутся там до тех пор, пока вы не нажмете и не отпустите актуальную клавишу еще раз.
Так что с этим вы должны быть немного «медленными» (50 мс?), Чтобы освободить ваши модификаторы, если вы их используете.
Вы можете проверить это, настроив сочетание клавиш, используя его в текстовом редакторе, а затем нажав клавишу (например, a
или стрелку). Буква должна появиться в нижнем регистре. Если что-то происходит, вы слишком быстры, и модификатор застрял (например, Shift, если он написан заглавными буквами, Ctrl, если вы выбрали весь текст, Alt, если вы открыли меню). Нажмите и отпустите ваши модификаторы снова, чтобы сбросить их.
Если вы слишком быстры, вы можете воспользоваться предложением ilkerk:
sh -c 'sleep 0.3 && xdotool type --clearmodifiers --delay 0 "`xsel`"'
Затем вы должны выпустить их за меньше , чем 300 мс, и подождать полсекунды для текста появляться.
Кроме того, использование xdotool type
означает, что вы вставляете текст, как если бы вы печатали, в позиции курсора текста, а не в указателе мыши. Вы можете изменить его на click
, если предпочитаете обычное поведение среднего щелчка.
(сделал этот пост, чтобы новичкам не приходилось снова разбирать кусочки головоломки, разбросанные по комментариям)