Как повесить разные команды на левый и правый Ctrl?

Knoppix

Модераторы: Warderer, Модераторы разделов

Аватара пользователя
жучара
Сообщения: 523
ОС: астралинукс

Как повесить разные команды на левый и правый Ctrl?

Сообщение жучара »

Друзья! Собственно. Интернет пестрит, конечно советами, как ВООБЩЕ повесить команду на какую-либо клавишу, это нужно использовать какие-нибудь приложения. Есть такое встроенное приложение и у меня, называется "fly-admin-hotkeys" и там можно разным клавишам назначить разные команды. Да вот беда,

1) оно не различает левого и правого Ctrl
2) в довесок к клавише Ctrl требует ещё какую-нибудь клавишу.
Кошмар, короче.

Я залез в файлы настроек этого приложения и на свой страх и риск прописал там команды для Ctrl_L и Ctrl_R (хотя не знаю, такие обозначения есть или нет), ничё не получилось.

В общем, спасибо, кто откликнется. Астралинукс, Орёл 2.12.29

Вот, вроде пакет xbindkeys делает то, что нужно и нужные команды работают. Так опять, штатное поведение исчезло, Ctrl+F не работает (ничего не найти в документе) и так далее.
Я просто читаю маны.
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3009
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Как повесить разные команды на левый и правый Ctrl?

Сообщение Hephaestus »

жучара писал(а):
23.05.2020 20:11
Есть такое встроенное приложение и у меня, называется "fly-admin-hotkeys" и там можно разным клавишам назначить разные команды.
Интересно, что это зверь такой.
Беглый поиск в гугле показывает, что это редактор горячих клавиш для терминала fly, который, в свою очередь,
есть оболочка для bash.
жучара писал(а):
23.05.2020 20:11
1) оно не различает левого и правого Ctrl
2) в довесок к клавише Ctrl требует ещё какую-нибудь клавишу.
Обычное дело. Ctrl - клавиша-модификатор (такая же как Shift или Alt).
Поэтому сама по себе не используется, а используется в сочетании с другими клавишами.
Соответственно, левый и правый Ctrl равнозначны.
Такова наиболее известная схема использования этих клавиш.
И в большинстве случаев (а тем более во всяких оболочках) подразумевается именно это.

Да, можно, например, сделать нециклическое переключение раскладок, повесив латиницу на левый Alt,
а кириллицу на правый Alt. Или левый Ctrl и правый Ctrl. И клавиши будут различимы.
Но это делается не средствами оболочки, а на более низком уровне.
жучара писал(а):
23.05.2020 20:11
Я залез в файлы настроек этого приложения и на свой страх и риск прописал там команды для Ctrl_L и Ctrl_R (хотя не знаю, такие обозначения есть или нет), ничё не получилось.
Подозреваю, что здесь нужен патч, а не просто настройки. Клавиши-то эта штука внутри себя, скорее всего, различать может (у них и keycode разный, и keysym разный), но дальше эти клавиши смешиваются, поскольку Ctrl рассматривается только как модификатор.
Но если посмотреть вывод xev, то названия для Ctrl выглядят как Control_R и Control_L.
Попробуйте их прописать, чем чёрт не шутит, может и сработает. Хотя вряд ли.
Добавлено (22:20):
жучара писал(а):
23.05.2020 20:11
Вот, вроде пакет xbindkeys делает то, что нужно и нужные команды работают. Так опять, штатное поведение исчезло, Ctrl+F не работает (ничего не найти в документе) и так далее.
Ну, разумеется. Вы же переназначили Ctrl.
Вам нужно, чтобы по нажатию Ctrl выполнялось действие, в этом случае клавиша Ctrl не является модификатором.
Одновременно с этим, Вам нужно, чтобы работало сочетание Ctrl+F, в этом случае клавиша Ctrl является модификатором.
Иными словами, Вы хотите одну и ту же клавишу использовать в двух режимах сразу.
А Вы это как себе представляете?
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
жучара
Сообщения: 523
ОС: астралинукс

Re: Как повесить разные команды на левый и правый Ctrl?

Сообщение жучара »

Hephaestus писал:
23.05.2020 22:12
Одновременно с этим, Вам нужно, чтобы работало сочетание Ctrl+F, в этом случае клавиша Ctrl является модификатором.
Иными словами, Вы хотите одну и ту же клавишу использовать в двух режимах сразу.
А Вы это как себе представляете?
как в старой доброй XP. Показать или на слово поверите?
Я просто читаю маны.
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3009
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Как повесить разные команды на левый и правый Ctrl?

Сообщение Hephaestus »

жучара писал(а):
23.05.2020 22:26
как в старой доброй XP.
В старой доброй XP можно было использовать Ctrl как самостоятельную клавишу?
И одновременно с этим как "несамостоятельную"?
Не помню я там такого.

Вообще, такая схема (чтобы клавиша-модификатор работала и так, и эдак) возможна только в одном случае: когда сочетания клавиш назначаются внутри каждой программы, а не на уровне всей оболочки/системы.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
жучара
Сообщения: 523
ОС: астралинукс

Re: Как повесить разные команды на левый и правый Ctrl?

Сообщение жучара »

Hephaestus писал:
23.05.2020 22:43
жучара писал(а):
23.05.2020 22:26
как в старой доброй XP.
В старой доброй XP можно было использовать Ctrl как самостоятельную клавишу?
И одновременно с этим как "несамостоятельную"?
Не помню я там такого.
отдельную программу мне не удалось запустить. А что удалось:
1) Задействовать легендарный PuntoSwither, левый Ctrl- русская раскладка, правый Ctrl- английская
2) Оба Ctrl показывают, где находится курсор (от него исходят круги)
3) Штатное поведение Ctrl, без изменений
Такая связка работала годами. Непосредственно сейчас я повесил на правый Ctrl ещё одну функцию разблокировки клавиатуры, пробы ради
block.zip

++++++++++++++++++++++++++++++++++++++++++++++++

Ну коль скоро мне нельзя повесить на клавишу команду A без потери штатных функций, тогда, быть может такой вариант. Пишу код, допустим на Си (псевдокод):
команда A
эмуляция нажатия нажатой клавиши
Команду на запуск такого файла повесить на требуемую клавишу, например Ctrl_L

Саму эмуляцию (в винде) я бы сделал так я бы сделал:
keybd_event(VK_LCONTROL, MapVirtualKey(VK_LCONTROL, 0), 0, 0);
(сейчас не помню уже параметры)
или
SendInput()
(тут про активно окно можно забыть, эмулируем нажатие и всё, что нам и надо)

Ну в крайнем прекрайнем случае нашёл бы активное окно и послал ему сообщение (PostMessage, наример)

Но как подобную эмуляцию провернуть в линуксе? Толком не искал.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Я просто читаю маны.
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3009
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Как повесить разные команды на левый и правый Ctrl?

Сообщение Hephaestus »

жучара писал(а):
24.05.2020 10:06
1) Задействовать легендарный PuntoSwither, левый Ctrl- русская раскладка, правый Ctrl- английская
2) Оба Ctrl показывают, где находится курсор (от него исходят круги)
3) Штатное поведение Ctrl, без изменений
И как, интересно, PuntoSwitcher определяет, штатное поведение нужно в данный момент или нештатное?
Я вижу только две возможности:
1. Отслеживать последовательность нескольких нажатий, а не просто сочетание клавиш.
2. Реагировать не на нажатие клавиши, а на отпускание клавиши (я, правда, не уверен, что такое возможно).
Но вообще, это задача не совсем тривиальная, и непонятно, зачем это надо.
Неоднозначность в значениях клавиш создаст путаницу.

Я PuntoSwitcher не использовал, но видел со стороны. Там довольно много ложных срабатываний в его автоматике. Как, например, и в keyla, которая у меня на рабочей машине переключает раскладки по CapsLook,
сохраняя при этом возможность "штатного поведения". Ну и они с системой порой начинают бодаться за клавишу. В результате клавиша не работает вообще.
жучара писал(а):
24.05.2020 10:06
Но как подобную эмуляцию провернуть в линуксе?
Зачем такие сложности?

Вам нужно конкретную команду повесить на конкретную клавишу,
или Ваш вопрос более общий, о назначениях клавиш в целом?
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
жучара
Сообщения: 523
ОС: астралинукс

Re: Как повесить разные команды на левый и правый Ctrl?

Сообщение жучара »

Hephaestus писал:
24.05.2020 10:38
жучара писал(а):
24.05.2020 10:06
1) Задействовать легендарный PuntoSwither, левый Ctrl- русская раскладка, правый Ctrl- английская
2) Оба Ctrl показывают, где находится курсор (от него исходят круги)
3) Штатное поведение Ctrl, без изменений
И как, интересно, PuntoSwitcher определяет, штатное поведение нужно в данный момент или нештатное?
Штатное поведение (мне) нужно было ВСЕГДА. PuntoSwitcher лишь добавлял к нему заказанное. Годами, безошибочно. Впрочем, я повторяюсь.
Hephaestus писал:
24.05.2020 10:38
жучара писал(а):
24.05.2020 10:06
Но как подобную эмуляцию провернуть в линуксе?
Зачем такие сложности?
потому, что без сложностей не получилось. Я попытался без сложностей просто повесить команду на клавишу- исчезло штатное поведение. Придётся со сложностями.
Hephaestus писал:
24.05.2020 10:38
жучара писал(а):
24.05.2020 10:06
Но как подобную эмуляцию провернуть в линуксе?
Вам нужно конкретную команду повесить на конкретную клавишу,
Да. Но оно невозможно, я так понял, без того, чтобы не исчезло штатное поведение клавиши. Именно поэтому
Hephaestus писал:
24.05.2020 10:38
или Ваш вопрос более общий, о назначениях клавиш в целом?
совет "читай всё" не принимается.
Я просто читаю маны.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 16829
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Как повесить разные команды на левый и правый Ctrl?

Сообщение Bizdelnick »

жучара, тут есть большая проблема. Я с ней знаком сугугбо в аспекте переключения раскладок, с назначением произвольного действия средствами WM может обстоять иначе. Дело в том, что в иксах переключение раскладки срабатывает по событию нажатия клавиши, а не отпускания, как в винде. То есть, если назначить его на клавишу-модификатор, при каждом её нажатии будет переключаться раскладка, не дожидаясь, нажмёте ли Вы какую-то ещё клавишу. Соответственно, и все сочетания с этим модификатором работать перестанут. Это в своё время пытались лечить каким-то патчем, он даже использовался в Ubuntu по умолчанию, но до апстрима, вроде бы, так и не дошёл. Это создавало трудности и с более традиционными способами переключения: если использовать для этого Alt+Shift, то не работают сочетания Alt+Shift+что-то, если Ctrl+Shift — не работают Ctrl+Shift+что-то.
Я для себя обошёл эту проблему, задействовав для переключения имеющиеся на клавиатуре лишние клавиши: левая форточка — на первую раскладку, правая — на вторую, меню — compose. Многие используют с этой целью такой же бесполезный CapsLock: CapsLock — на первую раскладку, Shift+CapsLock — на вторую.
В принципе, средствами WM, наверное, можно было бы сделать обработку события нажатия-отпускания любого из Ctrl, ведь xev их фиксирует:

Shell

KeyPress event, serial 34, synthetic NO, window 0x4200001,
root 0x264, subw 0x0, time 232891926, (66,115), root:(937,639),
state 0x10, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x4200001,
root 0x264, subw 0x0, time 232892054, (66,115), root:(937,639),
state 0x14, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False

KeyPress event, serial 37, synthetic NO, window 0x4200001,
root 0x264, subw 0x0, time 232896310, (66,115), root:(937,639),
state 0x10, keycode 105 (keysym 0xffe4, Control_R), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x4200001,
root 0x264, subw 0x0, time 232896422, (66,115), root:(937,639),
state 0x14, keycode 105 (keysym 0xffe4, Control_R), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
Но сомневаюсь, что разработчики Fly стали этим заморачиваться. И, в любом случе, никто кроме них об этом рассказать не может, исходники-то закрыты.
Добавлено (11:24):
Кстати, Qt не различает левый и правый Control, так что для этого разработчикам Fly пришлось бы заморочиться ещё сильнее.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали: