LINUX.ORG.RU

XKB. Выделение без Shift

 


0

1

Как реализовать способ выделения без необходимости удерживать клавишу Shift средствами XKB?

Теоретически, это даже реализовано посредством зажатия двух шифтов:
key <LFSH> {[ Shift_L, Shift_Lock ]};

Но хотелось бы переназначить на привычный ModX+SPC.
Казалось бы, следуя логике, делаю по аналогии:
key <SPCE> {[ space, Shift_Lock ]};
Перечитываю XKB, ошибок не показывает. Но не работает. Т. е. попросту никак на реагирует на заданное сочетание ModX+SPC. А вдобавок, начинает вести себя чертовски непредсказуемым образом — часть клавиш начинает пропечатываться заглавными буквами, смена регистра начинает происходить после нажатия практически любого модификатора. Логику в поведении можно проследить, но не вижу смысла описывать, поскольку вести себя так не должно. Лечится возвратом к стандартному определению key <SPCE> {[ space ]};.

  1. Прошу подтвердить на собственном опыте, — у вас это будет работать так же (с такими же «артефактами»)?

  2. Существуют ли альтернативные способы реализации поставленной задачи средствами XKB?

Зажать можно только модификаторы (Control, Shift, Alt, AltGraph (который Alt в US) и Super). Остальные не могут быть "зажаты": нельзя удерживая a нажать b, не прервав тем самым a.

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

Но ведь если на физической «А» мы имеем виртуальный модификатор, например на втором слое Shift_Lock, то это уже полноценный «зажатый» шифт по идее. Или я неверно понимаю?
Т. е. я не вижу в твоём ответе связи со своим вопросом.

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

если на физической «А» мы имеем виртуальный модификатор, например на втором слое Shift_Lock, то это уже полноценный «зажатый» шифт по идее

Попробуй.

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

Интересно получается, Shift_Lock работает только для

key <LFSH> {[ Shift_L, Shift_Lock ]};
key <RTSH> {[ Shift_R, Shift_Lock ]};

В остальных случаях отказывается. Пробовал для:

key <LALT> {[ Alt_L, Shift_Lock ]};
key <CAPS> {[ Control_L, Shift_Lock ]};
key <LCTL> {[ Control_L, Shift_Lock ]};

не работает.
Можно разве что кейкоды местами поменять Shift—Space.
Нет больше вариантов? Shift_Lock работает только для шифта?

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

Shift_Lock работает только для шифта?

Для чего он ещё должен работать, если это Shift_Lock? Это было закономерно. Тем более USB не умеет половины магии PS/2.

Нет больше вариантов?

Собрать кастомную клавиатуру с кастомной прошивкой и немного поплясать с бубном поколдовать:

местами поменять Shift—Space

при зажатом Super_L.

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

Не мучаться с костылями, которым все равно скоро на помойку, и решить задачу на уровне evdev-remapper-uinput.

t184256 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.