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


83

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

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

Чи є кращий спосіб зробити це?


Відповіді:


93

У деяких налаштуваннях Linux за замовчуванням Shift+ Insertвиконуватиме an 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, ви можете додати спеціальний ярлик у System -> Preferences -> Комбінації клавіш . Якщо ви використовуєте інший DE або WM, цей перемір залишається за читачем.

Останнє зауваження полягає в тому, що при прив’язуванні команд до комбінацій клавіш часто потрібно мати лише одну команду, а не дві команди, з'єднані з трубою, як ми використовуємо вище. Ви можете досягти цього, викликавши вашу команду piped як аргумент командного рядка до нової оболонки на зразок цієї:

sh -c 'xsel | xvkbd -xsendevent -file -'
sh -c 'xdotool type "$(xsel)"'

1
Однозначно кваліфікується як "кращий". Дякую!
інтуїтивно,

У якому додатку? Жоден із застосунків, які я використовую, часто не поводиться так.
Жиль

Я використовую Ubuntu, і мені дуже хотілося Shift-Insertб мати будь-яке практичне використання, але це просто не (в Ubuntu). Єдина "послідовність (+/-)", яку я виявила, - це те, що X- вибір у додатках GTK може бути введений Shift-Inserted в gnome-terminal, але це досить вражає і будь-яке інше поєднання перехресних вставок цих самих додатків ... Кілька додатків KDE, які я використовую (включаючи Konsole), просто не перехресне вставлення взагалі .... і навіть у додатках GTK клацання в центрі може працювати, але Shift + Insert може не працювати (для того ж додатка) ... Тож я використовую мишу :(
Peter.O

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

1
Я вважаю, що простий підхід - прив’язати комбінацію клавіш до надсилання події середнього клацання. Для мене це є xdotool click 2.
Індуктивне завантаження

10

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

Shift-Insert не вставляє основний вибір. Натомість він зобов’язаний вставити буфер обміну (для якого вже використовується Control-V). Отже, не існує лише клавіатурного способу вставки основного вибору. Треба перетягнути мишу туди і середнім клацанням. Це робить взаємодію між терміналами та GTK незручною.

Доступний нещодавній (на момент написання) звіт про помилку та виправлення:

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


8
xdotool click 2

Це імітує безпосередньо натискання кнопки миші та не потребує використання xsel/ xdotool type ....


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

2

Я використовую Ubuntu 12 і у мене виникли проблеми із вставкою тексту з xterm в gedit (та будь-який інший додаток). Крім того, я використовую ноутбук без середньої кнопки миші, як у багатьох людей (насправді немає помилки буфера обміну для користувачів Linux без середніх кнопок, і ні: клацніть правою кнопкою миші + left_click не працює як заміна).

Хоча я думаю, що метод "xsel | xvkbd -xsendevent -file -" досить класний. Я знайшов, що найпростішим рішенням було запустити попередньо встановлений "gnome-terminal" замість "xterminal". "gnome-terminal" підтримує копію правою кнопкою миші на команду clip-board. Потім я міг "Меню редагування-> Вставити" в gedit або використовувати shift-insert. "gnome-terminal" був попередньо встановлений з Ubuntu 12. Інші установки debian / gnome повинні мати можливість встановити його за допомогою:

sudo apt-get install gnome-terminal

В Ubuntu додайте його до лівої панелі запуску, натиснувши кнопку "Dash Home" у верхній частині панелі запуску. У отриманому вікні пошуку введіть термінал. Можна перетягнути значок «Термінал» на панель запуску.


2
Це дуже бідне рішення. Ви не можете реально запропонувати людям перейти на інший термінал, особливо той, який буде втягувати 100MB + gnome-shell як залежність. Це також не змушує його працювати з будь-яким іншим додатком, і найгірше, що все ще вимагає використання миші для роботи.
pfrenssen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.