Комбінація клавіш для вставки основного вибору


40

Чи є стандартна або звичайна комбінація клавіш для вставки основного вибору?

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

Якщо немає нічого звичайного, або якщо це багато програмного забезпечення, яке підтримується багатьма, чи є спосіб вирішити цю проблему в усьому світі? (Або принаймні у кількох додатках.)


2
Можливий той самий будь-який дистрибутив: unix.stackexchange.com/questions/11889/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

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 довелося вийти, щоб він працював.
sup

До речі, мені довелося призначити цю команду одній клавіші швидкого доступу (на щастя, у мене кнопка ThinkVantage нічого не робить на моєму Thinkpad - ctrl + alt + v поводився дивно і вставляв лише частину того, що було xsel).
sup

2
Це працює дуже добре, за винятком двох проблем. (1) Я використовую випадаючий термінал (Guake), який я встановив, щоб приховати втрачений фокус. Запуск цього сценарію тимчасово видаляє фокус з терміналу, внаслідок чого він приховується. (2) Це не дуже добре справляється з двобайтовими символами UTF-8. наприклад, якщо я вибираю "éòü", використовуючи сценарії друку "à © òü".
Sparhawk

2
Схоже, є другий помилка xvkbd. xselпрекрасно працює з "éòü" у первинному виділенні, але xvkbdне вдається як сценарій вище. (І також не вдається xvkbd -text "éòü", хоча тут нічого не друкується.)
Sparhawk

7

Ви можете отримати це за допомогою комбінованого використання програм xdotool ( натисніть для встановлення ) та xsel ( натисніть, щоб встановити ).

xdotoolможе імітувати набір тексту у вікно; xselвиводить вміст PRIMARY selection (за замовчуванням); наступна оболонка одного вкладиша зробить трюк:

 xdotool type `xsel`

Щоб прив’язати це до будь-якої клавіші за допомогою пункту меню System-> Preferences-> Keyboard ярликів , необхідно загорнути його у виклик оболонки:

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

Введення xdotoolдеяких програм не працюватиме; див. примітки в документації xdotool .


Це не спрацює, якщо активне текстове поле та позиція курсора не є в такому точному положенні, і, звичайно, це не так. Насправді, якщо це враховує межу менеджера вікон, це зробить мою дію "середнього клацання по заголовку вікна", яка зовсім інша.

@Roger Спасибі, виправили текст. Мені цікаво, чи є кращий спосіб зробити це: я сам досить довго шукав «пасту» -квітка ...
Ріккардо Муррі

Ну, я ціную зусилля, але це все одно не вийде. Якби я хотів турбуватися про положення миші, я б просто в першу чергу скористався мишею. :)

@Roger: Зробив це правильно другий раз: xdotool + xsel робить це. (Ну, принаймні, працює для мене.)
Ріккардо Муррі

2
Потреби - параметр ядерних модифікаторів, інакше існує умова перегону між випуском комбінації клавіш та виконанням xdotool. Xdotool у репортах 10,04 не оновлюється для цієї опції, мені довелося самостійно завантажити та створити. Однак, ядерні модифікатори, здається, дивно впливають на модифікатори, і я не бачу, як врешті-решт змусити xdotool працювати для клавіатурного ярлика (хоча він чудово підходить для фактичного набору тексту).

5

Я шукав відповідь на це саме те питання, і знайшов цю відповідь, яка говорить про те, що Shift+ Insertпрацює над вставкою основного вибору. Я працюю на мене. Простіше.


У 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, або стрілку). Лист має з’являтись малими літерами. Якщо щось інше трапляється, ви занадто швидкий і модифікатор застряг (pe 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 так, це руйнує CLIPBOARD. Я додам відповідь до відповіді.
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.