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


40

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

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

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



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содержимое.


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

@ Xen2050 да, это уничтожает блокнот. Я добавлю примечание к ответу.
— ntc2

0

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

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.