Jak zapobiec efektowi przełączania caps-lock bez ponownego mapowania lub wyłączania go?


22

Mam program X11, który chwyta Caps-Lock i używa go. Problem polega na tym, że chcę wyłączyć zwykłe przełączanie z wciśniętym klawiszem Caps-Lock, ale wydaje się, że powoduje to wyłączenie klucza.

Więc cokolwiek X11 dostanie za naciśnięcie klawisza Caps-Lock, musi nadal uzyskać (nie wyłączając klawisza ani nie przypisując go do innego klawisza), ale bez niczego, co przekształciłoby naciśnięcie klawisza w klawisz Caps Lock (który może być na poziomie jądra? ).

Próbowałem zmienić scancode, ale po prostu odwzorowałem klucz. Usunąłem również wpis Capslock xmodmap, ale to również wyłączyło Caps.

Jak mogę powiedzieć kernelowi, aby zignorował klawisz Caps (wrt jego normalna funkcjonalność), ale nadal przekazuje komunikat do X?

Aby dodać trochę więcej szczegółów:

„Program”, który próbuję uruchomić, jest humanizowany „enso”. Gdy nie ma klucza, pojawia się błąd „KRYTYCZNY: root: Nie można znaleźć klucza quasimode”. Kiedy nie ma błędu, mogę używać enso z capami, ale sofar nie wymyślił, jak wyłączyć funkcję caps, podczas gdy enso jest w stanie to zrobić.


Podaj szczegóły dotyczące tego, czego próbowałeś, tj. Dokładne wyrażenia xmodmap. Bez szczegółów nie możemy stwierdzić, czy wiedziałeś, co zrobić i zrobiłeś to źle, czy też zrobiłeś to dobrze, ale kod z jakiegoś innego powodu nie zadziałał. Daj nam także system operacyjny, którego używasz, ponieważ niektóre mają przetwarzanie kodu klucza, które odbywa się poniżej poziomu serwera X.
Kyle Jones

@Kyle Próbowałem „usunąć Lock = Caps_Lock”, a następnie „keycode 66 =” (który został zamapowany na CapsLock). Używam Ubuntu 12.10 na komputerze 64-bitowym.
Chris2048

Inną możliwością jest zmiana przypisania do innego klucza. setxkbmap -option ctrl:nocapsremapuje Control_Lna przykład.
Chris Down,

Czy mówisz, że nie miałbyś nic przeciwko, gdybyśmy mogli dać ci sposób na zmianę mapowania klawisza Caps Lock, aby powiedzieć klawisz Ctrl, czy nie tego szukasz? W tej chwili pytanie to jest trochę mylące, naprawdę byłoby bardzo daleko, gdybyś dodał szczegóły w pytaniu o to, czego próbowałeś do tej pory.
slm

Aby to wyjaśnić, w Ubuntu 12.10 dostępna jest funkcja, dzięki której Caps Lock może być dodatkowym klawiszem sterującym. Czy tak myślisz, kiedy mówisz „remapowanie”? Oto zrzut ekranu okna dialogowego: flickr.com/photos/11708996@N00/3010939023
slm

Odpowiedzi:


28

Wydaje mi się, że mam technikę wyłączania przełączania Capslockklawisza, ale nie całkowitego wyłączania klawisza razem lub ponownego przypisywania go do innego klawisza na klawiaturze.

Jeśli użyjesz polecenia:

setxkbmap -option caps:none

Klawiatura nie będzie się już przełączać. Potwierdziłem to na moim laptopie z Fedorą 14, dioda LED już nie świeci, a normalna Capslockfunkcjonalność zniknęła.

Jednak użycie xev nadal pokazuje, że klawisz jest wciśnięty:

$ xev
...
...
KeyPress event, serial 35, synthetic NO, window 0x6800001,
    root 0xb1, subw 0x0, time 261504852, (167,-15), root:(353,268),
    state 0x10, keycode 66 (keysym 0xffffff, VoidSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 35, synthetic NO, window 0x6800001,
    root 0xb1, subw 0x0, time 261504971, (167,-15), root:(353,268),
    state 0x10, keycode 66 (keysym 0xffffff, VoidSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False
    ...

Tak więc naciśnięte klawisze pozostają nienaruszone, aby inne aplikacje mogły je odebrać.

setxkbmap

Plik /usr/share/X11/xkb/rules/xorg.lstzawiera pełną listę opcji, które możesz podać setxkbmap.

Przeglądając ten plik dla „cap” zauważyłem następujący wiersz:

caps:none            CapsLock is disabled

W tym pliku znajdują się inne wartości, więc jeśli nie o to ci chodzi, być może jedna z tych alternatywnych wartości będzie pasować.

$ grep cap /usr/share/X11/xkb/rules/xorg.lst
  grp:caps_switch      CapsLock (while pressed), Alt+CapsLock does the original capslock action
  grp:caps_toggle      CapsLock
  grp:shift_caps_toggle Shift+CapsLock
  grp:shift_caps_switch CapsLock (to first layout), Shift+CapsLock (to last layout)
  grp:alt_caps_toggle  Alt+CapsLock
  lv3:caps_switch      CapsLock
  lv3:caps_switch_latch CapsLock (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)
  ctrl:nocaps          Make CapsLock an additional Ctrl
  ctrl:swapcaps        Swap Ctrl and CapsLock
  grp_led:caps         CapsLock
  caps                 CapsLock key behavior
  caps:internal        CapsLock uses internal capitalization. Shift "pauses" CapsLock
  caps:internal_nocancel CapsLock uses internal capitalization. Shift doesn't affect CapsLock
  caps:shift           CapsLock acts as Shift with locking. Shift "pauses" CapsLock
  caps:shift_nocancel  CapsLock acts as Shift with locking. Shift doesn't affect CapsLock
  caps:capslock        CapsLock toggles normal capitalization of alphabetic characters
  caps:numlock         Make CapsLock an additional NumLock
  caps:swapescape      Swap ESC and CapsLock
  caps:escape          Make CapsLock an additional ESC
  caps:backspace       Make CapsLock an additional Backspace
  caps:super           Make CapsLock an additional Super
  caps:hyper           Make CapsLock an additional Hyper
  caps:shiftlock       CapsLock toggles Shift so all keys are affected
  caps:none            CapsLock is disabled
  compose:caps         CapsLock
  shift:breaks_caps    Shift cancels CapsLock
  shift:both_capslock  Both Shift-Keys together toggle CapsLock
  shift:both_capslock_cancel Both Shift-Keys together activate CapsLock, one Shift-Key deactivates

Referencje


5
Jeśli przypadkowo uruchomisz polecenie z włączoną funkcją capslock, możesz zresetować xkbmap, uruchamiając setxkbmap -option "".
Nemo,

Pokazuje się w xev, ale tak naprawdę nie działa w silniku Valve Source 2.
Velkan

1

Jeśli nie chcesz, aby Caps Lockklawisz miał zwykły efekt, możesz wyłączyć Lockmodyfikator, zachowując jednocześnie klawisz Caps_Lock.

xmodmap -e 'clear Lock'

To nie wydaje się wyłączać Capslocka.
Chris2048,

@ Chris2048 Works For Me ™. Może to być niekompatybilne z niektórymi ustawieniami XKB lub z niektórymi aplikacjami (aplikacje wykonują własne przetwarzanie cap-lock, większość z nich korzysta z tych samych funkcji biblioteki, ale są wyjątki).
Gilles „SO- przestań być zły”

0

Jest to bardzo podobne do odpowiedzi udzielonej na inne pytanie . Ten fragment kodu xkb powinien załatwić sprawę.

partial modifier_keys
xkb_symbols "capsoff" {
    key <CAPS> {
        type[Group1] = "ONE_LEVEL",
        symbols[Group1] = [ Caps_Lock ],
        actions[Group1] = [ NoAction() ]
    };
};

gdzie to powinno iść? Patrzyłem na tego rodzaju fragmenty przez 10 minut, nie rozgryzając go. Czy musi to być część bardziej kompletnego pliku, czy może być samodzielny i zastosować się do domyślnej konfiguracji?
Nikana Reklawyks
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.