Сочетание клавиш для вставки основного выделения

40

Существуют ли стандартные или обычные сочетания клавиш для вставки основного выделения?

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

Если нет ничего обычного, или если оно специфично для приложения и не поддерживается многими, есть ли обходной путь, чтобы это работало глобально? (Или, по крайней мере, в других приложениях.)

Стефано Палаццо
источник
2
Возможен так же любой дистрибутив: unix.stackexchange.com/questions/11889/…
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件
FWIW, вы можете вставить первичный выбор с клавиатуры (т.е. без использования кнопок мыши), используя shift-insert, и скопировать / вставить выделение буфера обмена, используя ctrl-insert / ctrl-shift-insert
Джонатан Хартли,
@JonathanHartley для меня - вставка из сменной вставки из буфера обмена, а не первичный отбор
jberryman

Ответы:

32

Отправка виртуальных нажатий клавиш не работает для меня (см. Комментарии ), но этот ответ вдохновил меня на поиск аналогичных решений. Отправка «текстового» события с xvkbdигнорированием текущего состояния вашей физической клавиатуры:

sh -c 'xsel | xvkbd -xsendevent -file - 2>/dev/null'

xvkbd -textиспользует несколько последовательностей обратной косой черты, так что вместо того, чтобы танцевать с побегом, -fileработает. xvkbdтакже выводит некоторый текст с предупреждением о модификаторах, но он, похоже, не имеет отношения к этому использованию (но я не хотел его видеть ~/.xsession-errors).

Я связал это с ярлыком, используя Систему> Настройки> Сочетания клавиш .

Обратите внимание, что вам нужно установить пакеты xsel и xvkbd:

sudo apt-get install xsel xvkbd
Сообщество
источник
3
Святые бананы! Оно работает! Это потрясающе. Ubuntu должен установить это по умолчанию.
Эрик Джонсон
8
Для меня sh -c 'xsel | xvkbd -file - 2>/dev/null'работает, -xsendevent должен был выйти, чтобы заставить его работать.
вс
Кстати, мне еще раз пришлось назначить эту команду на одну комбинацию клавиш (к счастью, кнопка ThinkVantage на моем Thinkpad ничего не делала - ctrl + alt + v вел себя странно и вставлял только часть того, что было внутри xsel).
вир
2
Это работает очень хорошо, за исключением двух проблем. (1) Я использую раскрывающийся терминал (Guake), который я установил, чтобы скрывать при потере фокуса. Запуск этого скрипта временно удаляет фокус с терминала, заставляя его скрываться. (2) Он плохо работает с двухбайтовыми символами UTF-8. например, если я выберу «éòü», используя скрипт выводит «Ã © òü».
Sparhawk
2
Похоже, вторая ошибка в xvkbd. xselотлично работает с "éòü" в первичном выборе, но xvkbdне работает, как показано выше. (И тоже не справляется xvkbd -text "éòü", хотя здесь ничего не печатается.)
Sparhawk
7

Вы можете получить это при совместном использовании программ xdotool ( нажмите, чтобы установить ) и xsel ( нажмите, чтобы установить ).

xdotoolможет имитировать набор текста в окне; xselвыводит содержимое ПЕРВИЧНОГО выбора (по умолчанию); следующая оболочка один лайнер сделает свое дело:

 xdotool type `xsel`

Чтобы связать это с любой клавишей, используя пункт меню System-> Preferences-> Keyboard shortcuts, необходимо заключить ее в вызов оболочки:

 sh -c 'xdotool type --clearmodifiers -- "`xsel`"'

Набор xdotoolне будет работать с некоторыми программами; см. примечания в документации по xdotool .

Риккардо Мурри
источник
Это не сработает, если активное текстовое поле и позиция курсора не будут в этой точной позиции, и, конечно, это не так. Фактически, если это посчитает границу оконного менеджера, это будет выполнять мое действие «щелчок средней кнопкой мыши по заголовку окна», которое совершенно другое.
@ Роджер Спасибо, исправил текст. Мне любопытно, есть ли лучший способ сделать это: я сам довольно долго искал ключ для вставки ...
Риккардо Мурри,
Ну, я ценю усилия, но это все равно не сработает. Если бы я хотел беспокоиться о положении мыши, я бы просто использовал мышь в первую очередь. :)
@ Роджер: Получил это правильно во второй раз: xdotool + xsel делает это. (Ну, по крайней мере, у меня работает.)
Риккардо Мурри
2
Требуется опция --clearmodifiers, в противном случае существует условие гонки между выпуском сочетания клавиш и выполнением xdotool. Xdotool в репозиториях 10.04 не обновляется для этой опции, мне пришлось загрузить и собрать его самостоятельно. Тем не менее, --clearmodifiers, кажется, странным образом влияют на модификаторы, и я не вижу, как, в конце концов, заставить xdotool работать для моего сочетания клавиш (хотя он отлично работает для виртуального ввода текста).
5

Я искал ответ на этот же вопрос и нашел ответ, который говорит, что Shift+ Insertработает для вставки основного выбора. Я работаю на меня. Simpler.

Энн
источник
В Ubuntu по умолчанию Shift + Insert вставьте обычный буфер обмена, как Ctrl + v , а не основной выбор. Какой дистрибутив вы используете?
Пабло А
2

Вызов xdotool click --clearmodifiers 2имитирует нажатие средней кнопки мыши. Это работает намного лучше, чем использование xsel (по крайней мере, для меня). Хотя вам нужно расположить мышь, прежде чем печатать ...

Роберт Якоб
источник
2

Еще одно предложение по xdotool, работающее в Debian Jessie 8.7 (январь 2017):

xdotool click --delay 0 --clearmodifiers 2
  • xdotool обрабатывает многобайтовые строки (pe UTF-8), в отличие от xvkbd.
  • 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если вы предпочитаете обычное поведение среднего щелчка.

(сделал этот пост, чтобы новичкам больше не приходилось разбирать кусочки головоломки, разложенные в комментариях)

Чема
источник
у меня сейчас работает в Arch Linux
MountainX
1

У меня были проблемы с решениями , которые имитируют наклеивать на 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содержимое.

NTC2
источник
Сохраняет ли это оригинальное содержимое буфера обмена и затем устанавливает его снова? Или он удаляет исходное содержимое буфера обмена, таким образом, не отвечая на вопрос « вставить без удаления содержимого буфера обмена »?
Xen2050
@ Xen2050 да, это уничтожает блокнот. Я добавлю примечание к ответу.
ntc2
0

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

Проблема с предложенным выше xdotoolи xsel заключается в том, что, когда xdotoolначинает «печатать», вы все еще нажимаете другую клавишу. Это не всегда приводит к какому-либо результату. Например, если вы привязываете его к клавише «вставить», то xdotoolотправляет ключи, в то время как ваш палец нажимает клавишу «вставить», которая ничего не вызывает.

Ниже представлен обходной путь, чтобы привязать его к нажатию клавиши:

sh -c 'sleep 0.3 && xdotool type --clearmodifiers --delay 0  "`xsel`"'

это не идеально, но работает. Теперь у вас есть 0,3 секунды, чтобы завершить выбор нажатия клавиши (и клавиши вверх).

ilkerk
источник