Если в ключевых словах, то
RedirectKey(key=..., clearmods)
. А если в правой части (во что транслировать) всегда одна клавиша, а не аккорд, то вообще имеет смысл описать всю вашу схему как
overlay
— это намного чище.
[из комментариев]> а вы не могли бы привести пару примеров
Для overlay’я — да, пожалуйста, вот вам выдержка откуда-то из
~/.xkb.d/
. И хотя я ей фактически не пользуюсь, поскольку:
— Во-первых, у меня нестабильно работала закомментированная часть (
C-w
→
C-backspace
) — причем самым причудливым образом — при первой компиляции она выдавала какую-то ошибку, а после ряда танцев с бубном — таки собиралась и работала.
— А во-вторых, я обнаружил, что не имею во всем этом никакой необходимости, ибо у меня из сколько-нибудь активно используемых программ: ГНУ Емакс да Айсвизел (Файрфокс), иногда ряд программ в эмуляторе терминала. С первым — понятно; Айсвизел — на ГТК, где сочетания клавиш можно настроить гораздо гибче, чем тупой контекстно-независимой трансляцией (а базовые емаксовые сочетания для ГТК поставляются из коробки); большинство же интерактивных программ, запускаемых в эмуляторе терминала, используют (или могут использовать) ГНУ Ридлайн, где все еще лучше, чем в ГТК.
Но, как я помню, в остальном тут все должно работать.
partial modifier_keys
xkb_symbols "lctrl_overlay" {
replace key <LCTL> {
type = "PC_CONTROL_LEVEL2",
symbols = [ Control_L, NoSymbol ],
actions = [ SetMods(modifiers=Control),
SetControls(controls=overlay1) ]
};
};
partial modifier_keys
xkb_symbols "rctrl_overlay" {
replace key <RCTL> {
type = "PC_CONTROL_LEVEL2",
symbols = [ Control_R, NoSymbol ],
actions = [ SetMods(modifiers=Control),
SetControls(controls=overlay1) ]
};
};
default partial modifier_keys
xkb_symbols "ctrl_overlay" {
include "nav(lctrl_overlay)"
include "nav(rctrl_overlay)"
};
partial modifier_keys
xkb_symbols "lctrl_lock_overlay" {
replace key <LCTL> {
type = "PC_CONTROL_LEVEL2",
symbols = [ Control_L, NoSymbol ],
actions = [ SetMods(modifiers=Control),
LockControls(controls=overlay1) ]
};
};
partial modifier_keys
xkb_symbols "rctrl_lock_overlay" {
replace key <RCTL> {
type = "PC_CONTROL_LEVEL2",
symbols = [ Control_R, NoSymbol ],
actions = [ SetMods(modifiers=Control),
LockControls(controls=overlay1) ]
};
};
default partial modifier_keys
xkb_symbols "ctrl_lock_overlay" {
include "nav(lctrl_lock_overlay)"
include "nav(rctrl_lock_overlay)"
};
partial modifier_keys
xkb_symbols "hwdm" {
// key <I250> { symbols = [ NoSymbol ] };
// key <I250> {
// actions = [ RedirectKey(key=<BKSP>, mods=Control) ]
// };
key <LatH> { overlay1 = <BKSP> };
key <LatW> { overlay1 = <I250> };
key <LatD> { overlay1 = <DELE> };
key <LatM> { overlay1 = <LNFD> };
};
partial modifier_keys
xkb_symbols "pbnf" {
key <LatP> { overlay1 = <UP> };
key <LatB> { overlay1 = <LEFT> };
key <LatN> { overlay1 = <DOWN> };
key <LatF> { overlay1 = <RGHT> };
};
partial modifier_keys
xkb_symbols "ijkl" {
key <LatI> { overlay1 = <UP> };
key <LatJ> { overlay1 = <LEFT> };
key <LatK> { overlay1 = <DOWN> };
key <LatL> { overlay1 = <RGHT> };
};
partial modifier_keys
xkb_symbols "khjl" {
key <LatK> { overlay1 = <UP> };
key <LatH> { overlay1 = <LEFT> };
key <LatJ> { overlay1 = <DOWN> };
key <LatL> { overlay1 = <RGHT> };
};
partial modifier_keys
xkb_symbols "zxcv" {
key <LatZ> { overlay1 = <UNDO> };
key <LatX> { overlay1 = <CUT> };
key <LatC> { overlay1 = <COPY> };
key <LatV> { overlay1 = <PAST> };
};