LINUX.ORG.RU

XKB. Как создать своё сочетание клавиш

 ,


2

1

Не могу разобраться, как создать своё сочетание клавиш для выполнения какого-либо действия?
Насколько понимаю, делается это средствами секции Compat, в которой прописываются нужные свойства для комбинаций клавиш. Не могу понять как это работает. Как например сделать, чтобы Alt+Shift активировали третий ряд клавиш?



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

Ответ на: комментарий от Vsevolod-linuxoid

Или включить третий ряд клавиш, или переключиться на третий ряд клавиш. Не важно, с удержанием нажатия клавиш или в режиме тумблера (свитчера/переключателя). Если всё равно не понятно, то не важно, можно взять для примера клавишу Compose (назначить её на Ctrl+Shift или другое сочетание). Мне не важно, хочу принцип понять.

Dreamdrawer
() автор топика
Ответ на: комментарий от Vsevolod-linuxoid

Нет, не раскладку. В раскладке как правило два ряда клавиш — прописные буквы и строчные, а может быть ещё один уровень закреплён за каждой клавишей. И таких уровней может быть много.

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

Т.е. на одной клавише может висеть не только два символа строчный (открытая клавиша) и ПРОПИСНОЙ (Shift+клавиша), а может быть четыре, шесть, сколько надо.

Dreamdrawer
() автор топика
Ответ на: комментарий от Vsevolod-linuxoid

В контексте темы про XKB этот термин («уровень») специфичный для программы XKB. Возможно не корректно называть «рядом», хотя именно так это именуется в GUI настройках переключения раскладок.

Dreamdrawer
() автор топика
Ответ на: комментарий от Vsevolod-linuxoid

Как бы да, но смысл в том, что бы создать эту самую «определённую комбинацию» клавиш. Кастомный слой создан. Задача в том, что бы научить комбинации выполнять действия, которых они ранее не выполняли.

Dreamdrawer
() автор топика
Ответ на: комментарий от Vsevolod-linuxoid

Т.е. мне нужно создать виртуальный можификатор в Xkb Compability Map, который потом повесить на сочетание реальных клавиш. Вроде корректно изъяснился?

Dreamdrawer
() автор топика

Как например сделать, чтобы Alt+Shift активировали третий ряд клавиш?

Весьма странное желание, учитывая, что обычно это четвертый.

Однако, если так хочется, то втупую, не?

partial modifier_keys
xkb_symbols "ralt_shift_lvl3" {
  key <RALT> {
    type = "TWO_LEVEL",
    symbols = [ Alt_R, ISO_Level3_Shift ]
  };
};

Не проверял.

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от Vsevolod-linuxoid

черт ногу сломит

Если вы не можете вспомнить, как это называется по-русски, то это называется «регистром». :-)

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

Точно, регистр. Мдя, не корректно сформулировал задачу. Alt+Shift — оно да, понятно как делается. Но вот как сделать то же самое, например, для Ctrl+Alt?

Или конкретнее. У меня сейчас раскладку переключает на английский — Caps, на русский — Shift+Caps.
Это понятно:

	replace key <CAPS> {
		type[Group1] = "FOUR_LEVEL",
		[ ISO_First_Group, ISO_Last_Group ]
	};
Но теперь, как сделать, что бы третий уровень активировался комбинацией LALT+CAPS, а Compose включался по LCTL+CAPS, и при этом, сохранялся функционал левых альта и контрол?
Для этого, я так понимаю, требуется в xkb/types/extra
    type "FOUR_LEVEL_ALPHABETIC" {

	modifiers = Shift+Lock+LevelThree+Alt;

	map[None] = Level1;
	map[Shift] = Level2;
	map[Lock] = Level2;
	map[Alt+Lock] = Level3;
	map[LevelThree] = Level3;
	map[Shift+LevelThree] = Level4;
	map[Lock+LevelThree] = Level4;
	map[Lock+Shift+LevelThree] = Level3;

	preserve[Alt+Lock] = Lock;

	level_name[Level1] = "Base";
	level_name[Level2] = "Shift";
	level_name[Level3] = "Alt Base";
	level_name[Level4] = "Shift Alt";

    };
(здесь контрол не задействуется, в данном примере рассматриваю просто альт+капс)
но оно так не работает.

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

Т.е. видимо, требуется создать виртуальный модификатор (Альт+Капс), который бы включал третий уровень персонально для клавиши Капс, которая бы в свою очередь включала бы третий уровень для всех остальных клавиш.

Dreamdrawer
() автор топика

Не могу разобраться, как создать своё сочетание клавиш для выполнения какого-либо действия?

В Windows есть Autohotkey. А в Linux?

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

Но вот как сделать то же самое, например, для Ctrl+Alt?

Точно так же?

partial modifier_keys
xkb_symbols "ralt_ctl_lvl3" {
  key <RALT> {
    type = "PC_CONTROL_LEVEL2",
    symbols = [ Alt_R, ISO_Level3_Shift ]
  };
};

Опять же, не проверял.

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

В Windows есть Autohotkey. А в Linux?

А Линукс — это слишком низкоуровневая штука, чтобы под него так подрезаться.

Zmicier ★★★★★
()

[УСЛОВИЕ]

Две раскладки, три-четыре ряда (уровня/регистра) клавиш, Compose keys

[ЗАДАЧА]

1. Реализовать раздельное переключение раскладки на латиницу посредством Caps Lock;
2. Реализовать раздельное переключение раскладки на кириллицу посредством Shift+Caps Lock;
3. Реализовать переключение регистра клавиш на третий уровень посредством Alt+Caps Lock;
4. Реализовать клавишу Compose посредством комбинации Control+Caps Lock.
5. Сохранить штатную функциональность Shift, Control, Alt

[РЕШЕНИЕ]

В файле типа xkb_types должен быть объявлен виртуальный модификатор:

virtual_modifiers Alt;

После чего создаём новый тип «MOD»:
    type "MOD" {

// указываем используемые модификаторы
		modifiers = Shift+Alt+Control;

// уазываем модификатор, который активирует уровень
		map[None]		= Level1;
		map[Shift]	= Level2;
		map[Alt]		= Level3;
		map[Control]	= Level4;

// даём имена уровням
		level_name[Level1] = "Base";
		level_name[Level2] = "Shift";
		level_name[Level3] = "3 Level";
		level_name[Level4] = "Compose";
    };

Далее, в файле типа xkb_symbols указываем значения на каждом из уровней
// переключение раскладки по Caps_Lock / 3 ряд клавиш / Compose
//
// переопределяем значение клавиши Caps Lock
	replace key <CAPS> {
// указываем наш тип
		type[Group1] = "MOD",
// наделяем значением каждый уровень
		[ ISO_First_Group, ISO_Last_Group, ISO_Level3_Latch, Multi_key ]
	};
	

[РЕЗУЛЬТАТ]

Caps Lock = английский;
Shift+Caps Lock = русский;
Alt+Caps Lock = 3-й ряд клавиш;
Control+Caps Lock = Compose.

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

[ЗАДАЧА]

О! Ну вот что вам мешало столь же ясно сразу написать? Сами еще не знали, чего хотели? :-)

[РЕШЕНИЕ] [РЕЗУЛЬТАТ]

Ну и славненько.

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