LINUX.ORG.RU

DE/wm-независимый способ назначения Copy & Paste (кнопок буфер обмена) на любые клавиши клавиатуры/мыши/etc. Мой и ваши варианты.

 , , , ,


0

2

Бывает, что некоторым не повезло с клавиатурой ноутбука. Например, архитектор клавиатуры решил, что кнопка Insert редко используемая и реализовал её в виде нажатия Fn+Delete.

Это плохо для тех, кто работает с менеджером буфера обмена (копипаст) юниксово-линуксовой комбинацией Ctrl+Ins для копирования и Shift+Ins для вставки из буфера обмена. Плохо тем, что вместо нажатия 2х кнопок нужно нажимать сразу одновременно три: Fn+Ctrl+Delete и Fn+Shift+Delete соотв.

Надеюсь не нужно объяснять, почему не подходит для работы в терминале виндовые Ctrl+C/V.

Погуглив стэковерфловы, юникс.стекиксчендж и прочие линуксквешонс, я пришел к тому, что «мультимедийные» доп. кнопки XF86Copy / XF86Paste, которые как-бы должны служить для этой цели - просто не работают.
Т.е. вы можете перебиндить их на любые другие, например с помощью xmodmap:

keycode 71 = XF86Copy F5 XF86Copy F5
keycode 72 = XF86Paste F6 XF86Paste F6
После, проверяя xev'ом вы действительно получите XF86Copy на F5 - но эта кнопка не будет ничего копировать. Возможно даже и не должна, хе-хе, каким-то образом работая по более сложному алгоритму, т.к. изначально предназначена для кнопки мыши.

На данный момент поиска решения проблемы, есть такой вариант: используется xbindkeys и xvkbd - виртуальная клавиатура, который позволяет повесить Copy&Paste на любую клавишу или сочетание клавиш клавиатуры:

~/.xbindkeysrc
"/usr/bin/xvkbd -xsendevent -text "\[Control_L]\[Insert]" &"
F5
"/usr/bin/xvkbd -xsendevent -text "\[Shift_L]\[Insert]" &"
F6
т.е. xbindkeys вешает на указанную вами кнопку или сочетание (например Shift+Menu) команду xvkbd с эмуляцией нажатия Ctrl+Ins в окне, на котором текущий фокус.

Работает везде: терминалы, редакторы и даже большинство браузеров - кроме, падло, Firefox'а... (и dwb), например хромиум, опера и все остальные - работает ок. Firefox глючит по давней проблеме неопределенности какой именно буфер обмена ему использовать, кому интересно тот может нагуглить этот issue.

--> Скажите, пожалуйста, что это можно настроить проще! Неужели всё так сложно с настройкой копипаста на произвольные кнопки? (без привязки с менеджерам буфера обмена и DE/WM) <--

★★☆

Работает везде: терминалы, редакторы и даже большинство браузеров - кроме, падло, Firefox'а

На F5 и F6 биндил? Конфликтует же. Странно, что в хромиуме работает.

dadd ★★★ ()

/usr/bin/xvkbd -xsendevent

Опцию xsendevent в данном случае не нужно использовать.

dadd ★★★ ()
Ответ на: комментарий от dadd

На F5 и F6 биндил? Конфликтует же. Странно, что в хромиуме работает.

f5/f6 просто как пример, я конкретно забиндил на Menu/Shift+Menu

а не конфликтует потому, что действует поверх, т.е. хоткеи чего-угодно становятся недействительны.

А если не использовать -xsendevent - ничего не работает.

science ★★☆ ()
Последнее исправление: science (всего исправлений: 1)
Ответ на: комментарий от science

f5/f6 просто как пример, я конкретно забиндил на Menu/Shift+Menu

Попробуй так:

#my  ctrl + insert on menu key
"sleep 0.5; xvkbd -text "\[Control_L]\[Insert]""
m:0x0 + c:135

#my  shift + insert on shift+menu key
"sleep 0.5; xvkbd -text "\[Shift_L]\[Insert]""
m:0x1 + c:135
У меня всё работает в Firefox'e.

dadd ★★★ ()

xdotool, правда это тоже изврат

lazyklimm ★★★★★ ()
Ответ на: комментарий от dadd

Да, спасибо, работает. Но немного раздражает пауза полсекунды :) А без неё не работает вообще.
В целом мне больше подходит вариант без паузы, но с нерабочим фирефоксом, где в принципе можно обойтись ctrl+C/V :D

science ★★☆ ()

Может кому пригодится: самый удобный и работающий везде вариант это юзать утилиту xcape (есть в Portage для генты, а также в AUR'е для старшеклассников - или же дистронезависимо собрать прямо с гитхаба) - можно быстро зарепамить любой кнопку/модифаер-кей (но не сочетание - хотя я подробно не разбирался, возможно и можно, нет нужды - не смотрел) на любое сочетание - без возни с .Xmodmap / .xbindkeysrc, например:

xcape -e 'Alt_R=Escape;Pause=Control_L|Insert;Print=Shift_L|Insert'
прога - димон, запустил и забыл - конкретно выше пример вешает на правый альт - Esc; на кнопку Pause - копировать, на PrtSrc - вставлять. Работает везде - в терминалах, редакторах, браузерах и прочее.

Названия кнопок можно смотреть здесь: /usr/include/X11/keysymdef.h

science ★★☆ ()
Последнее исправление: science (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.