7

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

Я хотел бы заставить себя остановить это, по крайней мере, в Vim. Есть ли какой-нибудь способ, чтобы не использовать «Right-Shift» с «Q», например?

2 ответа2

4

Xmodmap может делать то, что вы просите, если вы не против взломать ваш ключ CapsLock .

Xmodmap может различать левую и правую клавиши Shift, поэтому мы можем сначала переназначить RightShift на ModeSwitch, чтобы получить наш путь:

xmodmap -e "keysym Shift_R = Mode_switch"

Основной синтаксис для изменения поведения ключа

xmodmap -e "keycode  KEYCODE = KEYSYMBOL1 KEYSYMBOL1 KEYSYMBOL3 KEYSYMBOL4"
xmodmap -e "keysym KEYSYMBOL = KEYSYMBOL1 KEYSYMBOL1 KEYSYMBOL3 KEYSYMBOL4"

где

  • KEYSYMBOL2 срабатывает при нажатии клавиши во время нажатия Shift.
  • KEYSYMBOL3 срабатывает при нажатии клавиши во время нажатия переключателя режимов.
  • KEYSYMBOL4 срабатывает при нажатии клавиши при нажатии Shift + ModeSwitch.
  • KEYSYMBOL1 срабатывает при нажатии клавиши ни с одним из вышеперечисленных.
  • ModeSwitch - это AltGr по умолчанию (работает только на некоторых раскладках клавиатуры).

Так много для теории. На практике эти переназначения могут вести себя немного иначе при изменении комбинации Shift + Letter . Я не могу говорить за Kubuntu, но некоторые приложения Unity будут переопределять поведение, указанное Xmodmap в этих случаях.

Чтобы переконфигурировать каждый ключ, чтобы он принимал только правильный модификатор, я нашел самый надежный способ:

  • Чтобы заставить R принимать только RightShift, выполните следующую команду:

    xmodmap r r R R
    
  • Чтобы заставить L принимать только LeftShift, выполните следующую команду:

    xmodmap l L l l
    

Подсказки:

  • Чтобы сделать переназначения постоянными, создайте / отредактируйте скрипт оболочки в ~/.kde/Autostart/ , сделайте его исполняемым и сохраните в нем соответствующие команды.

  • Чтобы отменить все переназначения, просто выполните следующую команду:

    setxkbmap
    
1

Я написал сценарий для воплощения идеи Денниса (это для британских клавиатур ascii, их легко модифицировать для американских клавиатур)

! A script to rebind all shifted keys to force you to use the correct shift
! button for minimum risk of rsi.

! Buttons not really on either side, make either shift work:
keysym 6 = 6 asciicircum asciicircum asciicircum
keysym y = y Y Y Y
keysym b = b B B B


! Might need to replace 0x3571 with a keysym which is not used elsewhere in
! your key map so that pressing the wrong key generates nothing. This
! keysym should be fine for most people. Note: this may interfere with
! emacs in annoying ways because emacs because it print warnings when
! undefined keys are pressed, the answer is to learn not to press them!


! Set right shift to be a sort of temporary caps lock (only on while button held)
keysym Shift_R = Mode_switch


! Bind lhs of keyboard to only work with this "temporary caps lock
! modifier" as shift and rhs to only work with Shift_L.

! lhs letters
keysym q = q 0x3571 Q Q
keysym w = w 0x3571 W W
keysym e = e 0x3571 E E
keysym r = r 0x3571 R R
keysym t = t 0x3571 T T
keysym a = a 0x3571 A A
keysym s = s 0x3571 S S
keysym d = d 0x3571 D D
keysym f = f 0x3571 F F
keysym g = g 0x3571 G G
keysym z = z 0x3571 Z Z
keysym x = x 0x3571 X X
keysym c = c 0x3571 C C
keysym v = v 0x3571 V V

! lhs symbols
keysym backslash = backslash 0x3571 bar bar
keysym grave = grave 0x3571 notsign notsign
keysym 1 = 1 0x3571 exclam
keysym 2 = 2 0x3571 quotedbl
keysym 3 = 3 0x3571 sterling
keysym 4 = 4 0x3571 dollar
keysym 5 = 5 0x3571 percent

! rhs letters
keysym u = u U 0x3571 U
keysym i = i I 0x3571 I
keysym o = o O 0x3571 O
keysym p = p P 0x3571 P
keysym h = h H 0x3571 H
keysym j = j J 0x3571 J
keysym k = k K 0x3571 K
keysym l = l L 0x3571 L
keysym n = n N 0x3571 N
keysym m = m M 0x3571 M

! rhs symbols
keysym 7 = 7 ampersand 0x3571 ampersand
keysym 8 = 8 asterisk 0x3571 asterisk
keysym 9 = 9 parenleft 0x3571 parenleft
keysym 0 = 0 parenright 0x3571 parenright
keysym minus = minus underscore 0x3571 underscore
keysym equal = equal plus 0x3571 plus
keysym bracketleft = bracketleft braceleft 0x3571 braceleft
keysym bracketright = bracketright braceright 0x3571 braceright
keysym semicolon = semicolon colon 0x3571 colon
keysym apostrophe = apostrophe at 0x3571 at
keysym numbersign = numbersign asciitilde 0x3571 asciitilde
keysym comma = comma less 0x3571 less
keysym period = period greater 0x3571 greater
keysym slash = slash question 0x3571 question

Чтобы использовать его: сохраните в текстовом файле и запустите с:

xmodmap [script_name]

Также может кто-то с большей репутацией изменить ответ Денниса, чтобы заменить

xmodmap r r R R

с

xmodmap -e 'keysym r = r r R R'

и аналогично для L , это фактическая команда, необходимая.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .