Как я могу сопоставить левую и правую клавиши Shift по отдельности?


10

Прежде всего, извините за мое незнание X и XKB; Я пытался собрать решение в надежде на то, что смогу достичь того, чего хочу, не требуя его детального понимания.

Я пытаюсь создать карту клавиатуры XKB в Ubuntu 12.04, которая позволяет мне определить, какая из двух клавиш Shift является модификатором Level2. В частности, 4клавиша должна выдавать только $тогда, когда удерживается правое смещение, а не левое.

Мое чтение до сих пор:

Я попытался определить пользовательский тип, а затем явно обратиться к нему в карте символов:

/usr/share/X11/xkb/types/mbfisher:

default xkb_types "mbfisher" {
  type "RIGHT_SHIFT" {
    modifiers = None+Shift_R;
    map[None] = Level1;
    map[Shift_R] = Level2;
  };
}

/usr/share/X11/xkb/symbols/mbfisher:

default
partial alphanumeric_keys
xkb_symbols "basic" {

  name[Group1]= "mbfisher";

  key <AE04> {
    type= "RIGHT_SHIFT",
    symbols[Group1]= [ 4,  dollar ]
  };

};

Затем я выбираю карту с помощью графического интерфейса пользователя Ubuntu.

Это, очевидно, отключает буквенно-цифровую клавиатуру отдельно от 4клавиши, но знак доллара все еще можно набрать любой клавишей Shift.

Я собираюсь написать огромный вопрос с большим количеством бесполезной информации, поэтому я остановлюсь здесь; пожалуйста, спросите обо всем, что я пропустил.

Есть идеи?

Ответы:


2

Я не знаю, если это решение, которое вы хотите, но одна возможность отключить левую клавишу Shift будет использовать xmodmap. Создать файл ~/.Xmodmapс содержимым

clear shift
add shift = Shift_R

и беги xmodmap ~/.Xmodmap.


Смотрите комментарии / чат:

Вы можете столкнуться с проблемами, если в xkbmap внесены другие изменения, внесенные другой программой, поэтому setxkbmap usможет потребоваться сброс на xkbmap по умолчанию с чем-то подобным .

Если вы хотите, чтобы некоторые клавиши реагировали только на одну клавишу Shift, вы можете получить текущую раскладку клавиатуры, с помощью которой xmodmap -pke > .Xmodmapвы получите .Xmodmapсписок всех ваших клавиш в форме keycode XX = functions. В этом назначении каждый код клавиши может иметь несколько функций с правой стороны. Каждому соответствует свой модификатор + этот ключ. Вы можете затем вставить clear + add сверху и добавить что-то подобное add mod5 = Shift_L. Правая клавиша Shift будет соответствовать mod2, а левая - mod5. Вы можете затем перейти и переместить функции mod2 клавиш, которые вы хотите вызвать, с помощью левой клавиши Shift в mod5, просто вставив NoSymbolи пробелы, пока не достигнете правого столбца ( keycode 57 = n N-> keycode 57 = n NoSymbol NoSymbol NoSymbol N).


Рад помочь. Это сработало?
Трудберт

Извините, занятой день. У меня все еще есть обе клавиши Shift после запуска xmodmap, нужно ли мне что-то еще делать, чтобы получить изменения?
mbfisher

Попробуйте xmodmap -e "clear shift", после этого у вас не должно быть доступных клавиш Shift, если это работает, остальные тоже должны работать
Trudbert

Нет, все еще есть клавиши переключения. # xmodmap -verbose -e "clear shift" ! 1: clear shift clear shift ! ! executing work queue ! clear shift
mbfisher

странный. Нет сообщения об ошибке? clear должен удалить все, что связано с модификатором, чтобы ничего не осталось. Через час или около того я получу в свое распоряжение систему linux и снова посмотрю на это.
Трудберт

2

Вот что наконец сработало! Я использовал xmodmapи ~/.Xmodmapфайл, а не конфигурацию xkb.

~/.Xmodmap:

clear Shift

! Key Shift+Key mode_switch+Key mode_switch+Shift+Key AltGr+Key AltGr+Shift+Key
! Key Shift_L+Key Shift_R+Key Shift_R+Shift_L+Key AltGr+Key AltGr+Shift_L+Key

keycode 10 = 1 1 exclam 1
keycode 11 = 2 2 at 2
keycode 12 = 3 3 numbersign 3
keycode 13 = 4 4 dollar 4
keycode 14 = 5 5 percent 5

keysym Shift_R = Mode_switch
add Shift = Shift_L

2 закомментированные строки (начиная с !) показывают заголовки столбцов до и после моих изменений. Это позволило мне указать столбец 2 как Shift_L и столбец 3 как Shift_R, поскольку я сопоставил shift_R как Mode_switch.

Изменения вносятся путем запуска:

 # setxkbmap us
 # xmodmap ~/.Xmodmap

setxkbmap usустанавливает карту США по умолчанию, чтобы вы работали с чистого листа, и xmodmapдобавляет к ней пользовательские изменения.

Когда реализовано !, @, #, $и %символы могут быть напечатаны только с правой клавишей сдвиг, и ^, &, *, (и )может быть введено только с левой кнопкой переключения.

Теперь я могу продолжить, сопоставив все клавиши на левой стороне клавиатуры, которые будут изменены только правой клавишей Shift (т. Е. Буквенные символы и их модификации в верхнем регистре), и наоборот; это решение означает, что мне нужно только переназначить левую сторону.

Другие полезные ссылки, найденные по пути:

Большое спасибо @Trudbert за то, что он дал мне большую часть пути к ответу!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.