Как я могу заставить backspace действовать как escape, используя setxkbmap?

8

Кажется, есть несколько вариантов, setxkbmapтаких как то, -option caps:backspaceчто делает заглавными буквами пробел. Тем не менее я не могу найти вариант, который делает Backspace escape-ключ. Как создать одну команду setxkbmap, которая заменяет клавишу возврата на клавишу escape?

Алиса Рил
источник

Ответы:

13

Вы должны будете определить новую опцию.
Сначала создайте новый файл символов, например, /usr/share/X11/xkb/symbols/bkspсо следующим содержимым:

partial alphanumeric_keys
xkb_symbols "bksp_escape" {
    key <BKSP> { [ Escape ] };
};

Затем создайте новую опцию, как это:

bksp:bksp_escape  =   +bksp(bksp_escape)

(где bkspэто имя файла символ и bksp_escapeэто имя группы , которая была определена в этом файле) и добавьте его в список опций в правилах вы используете - если evdev- так поместить его в /usr/share/X11/xkb/rules/evdevсоответствии с ! option = symbols:

! option    =   symbols
  bksp:bksp_escape  =   +bksp(bksp_escape)
  ...........
  grp:shift_toggle  =   +group(shifts_toggle)
  altwin:menu       =   +altwin(menu)

Добавьте его также /usr/share/X11/xkb/rules/evdev.lst(с кратким описанием) в ! option(например, прямо перед ctrl):

! option
  ........
  bksp                 Backspace key behavior
  bksp:bksp_escape     Backspace as Escape
  ctrl                 Ctrl key position
  ctrl:nocaps          Caps Lock as Ctrl

Затем вы можете запустить как обычный пользователь:

setxkbmap -layout us -option bksp:bksp_escape

включить опцию и заставить BKSPсебя вести себя как ESC.
Вы также можете проверить, если:

setxkbmap -query

доклады:

rules:      evdev
model:      pc104
layout:     us
options:    bksp:bksp_escape

и если

setxkbmap -print

выходы:

xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+us+inet(evdev)+bksp(bksp_escape)" };
    xkb_geometry  { include "pc(pc104)" };
};

В Gnome 3 вы можете сделать опцию постоянной через dconf(или gsettingsв терминале), например, добавить 'bksp:bksp_escape'к ключу org> gnome> desktop> input-sources> xkb-options (обратите внимание, что в dconfзначениях они разделяются запятой + пробелом).


Наконец, обратите внимание, что оба evdevи evdev.lstбудут перезаписаны при будущих обновлениях (но не в вашем bkspфайле пользовательских символов), поэтому вам придется редактировать их снова каждый раз, когда обновляется пакет, которому они принадлежат (в archlinux это xkeyboard-config). Проще написать скрипт, который делает это, например

sed '/! option[[:blank:]]*=[[:blank:]]*symbols/a\
  bksp:bksp_escape  =   +bksp(bksp_escape)
' /usr/share/X11/xkb/rules/evdev

sed '/! option/a\
  bksp                 Backspace key behavior\
  bksp:bksp_escape     Backspace as Escape
' /usr/share/X11/xkb/rules/evdev.lst

Если вы довольны результатом, используйте sed -i(или -i.bakесли вы хотите сделать резервные копии) фактическое редактирование этих файлов на месте .

don_crissti
источник