Ponowne mapowanie Caps Lock na Control i Escape (nie jest to zwykły sposób)

27

Wiem, jak używać xmodmap do zmiany mapowania klawisza Caps Lock, aby działał on jak klawisz Control lub klawisz Escape. Chciałbym połączyć obie funkcje w następujący sposób:

Kiedy naciskam, a następnie zwalniam, klawisz Caps Lock, wysyła Escape. Kiedy przytrzymuję Caps Lock i nacisnę inny klawisz (powiedzmy A), wysyła Control-A.

Czy jest jakaś kombinacja xkb, xmodmap i czegoś innego, co może sprawić, że Caps Lock zachowuje się w ten sposób w X?

Używam Ubuntu Precise na Macbooku Air 3,1.

użytkownik372737
źródło

Odpowiedzi:

-2

Możesz zrobić pierwszy (mapowanie Caps Lockdo Esc), ale nie możesz zrobić drugiego.

Proste wyjaśnienie: Caps Lock po prostu nie jest przeznaczony do robienia czegoś po naciśnięciu.

Opracuj objaśnienie: Istnieje wiele rodzajów kluczy. Dwa z nich to klucze modyfikujące i klucze blokujące .

Caps Lockjest Key Lock natomiast klawisze, takie jak Ctrl, Alti ShiftKlawisze modyfikujące .

Z ich nazw wynika, że Klawisze Modyfikujące modyfikują funkcję następnych naciśniętych klawiszy, a Klawisze Blokujące działają jak przełącznik do włączania lub wyłączania niektórych funkcji.

Ponieważ Caps Lock jest to klucz blokujący , nie można sprawić, by zachowywał się jak klucz modyfikujący bez przypisania go do jednego. Caps Locksam w sobie nie może działać jako klucz modyfikujący .

Zielony
źródło
Dziękujemy za potwierdzenie, że X nie jest przeznaczony do robienia tego, co chcę. Jeśli guru X chce zhakować coś, aby to zadziałało, skontaktuj się ze mną.
user372737,
4
Jako nieakceptowaną odpowiedź poniżej, z pewnością możesz zrobić drugą część z wieloma narzędziami, takimi jak xcape lub At-Home-Modifier.
Sparhawk
34

Mam tę konfigurację na komputerze Mac i próbowałem znaleźć sposób na Ubuntu bez powodzenia.

Cóż, teraz działa. Dzięki tungd za wysłanie mnie do Xcape . To, co zrobiłem, jest naprawdę proste.

  1. W obszarze Preferencje systemowe> Układ klawiatury> Opcje ...> Klawisz Ctrl zaznaczyłem „Caps Lock as Ctrl”.

  2. xcape -e 'Control_L = Escape'

Gotowe, Caps Lock działa jak Ctrl, gdy jest używany jako modyfikator, i jako Esc, gdy jest naciśnięty sam (istnieje niewielkie opóźnienie o kilkaset milisekund, jak zaznaczono w pliku README xcape, więc nadal nie jest tak optymalne, jak rozwiązanie Mac, które używa KeyRemap4MacBook.)

Vic Goldfeld
źródło
4
Użyłem gnome-tweak-tooldo mapy Caps Lock, aby Ctrljak tam nie jest Keyboard layoutw System SettingsUbuntu 14.04. Wtedy xcape -e 'Control_L=Escape'nie działa, ale po użyciu xcape -dOdkryłam, że Caps Lockgeneruje kod dostępu 66 i odwzorować je odpowiednio: xcape -e '#66=Escape'.
Sergiy Belozorov
3
Zgodnie z tym postem na blogu , można to zrobić za pomocą samego Xcape: setxkbmap -option 'caps:ctrl_modifier' xcape -e 'Caps_Lock=Escape' setxkbmap -option 'caps:ctrl_modifier' xcape -e 'Caps_Lock=Escape;Control_L=Escape;Control_R=Escape'
Louis Simoneau
To powinna być naprawdę zaakceptowana odpowiedź @ user372737
Assaf Lavie,
@LouisSimoneau to tysiąc razy.
Spencer Boucher
1
Jakieś postępy z problemem opóźnienia?
Toothrot
6

Też tego szukam. Jeszcze tydzień temu znalazłem częściowe rozwiązanie, używając xmodmap:

add Control = Caps_Lock
remove Lock = Caps_Lock
keysym Caps_Lock = Escape

To oczywiście nie działa idealnie, skutecznie wysyła zarówno Escape, jak i Ctrl w tym samym czasie, gdy naciskam CapsLock, ale przez pewien czas byłem z tego zadowolony.

Wreszcie znalazłem to małe narzędzie https://github.com/alols/xcape . Teraz mogę po prostu ponownie przypisać CapsLock do Ctrl i pozwolić Xcape wykonać swoją pracę.

wolfram
źródło
Inną opcją jest modyfikator At-Home. Nie jest aktywnie rozwijany i różni się nieco od Xcape instalując na root. Jednak uruchamia się przez xorg.conf, a zatem może działać tylko na określonych klawiaturach, jednocześnie wykorzystując inne klawiatury.
Sparhawk
4

EDYCJA: Naprawiono to dla większości inteligentnych (nowszych) menedżerów wyświetlania.

Według komentarzy Louisa i Sergiya wymyśliłem to rozwiązanie, które działa dla mnie na Ubuntu 16.04 (Xenial) z LightDM i Unity.

Umieszczam następujący wiersz kodu w moim .xprofilepliku w katalogu domowym.

setxkbmap -option 'caps:ctrl_modifier' && xcape -e 'Caps_Lock=Escape' &

Polecenie końcowe i umieszcza polecenie xcape w tle, aby nie blokowało sesji. Setxkbmap dokonuje natychmiastowej zmiany.

Sergij:

Użyłem gnome-tweak-tool do mapowania Caps Lock na Ctrl, ponieważ w Ustawieniach systemu na Ubuntu 14.04 nie ma układu klawiatury. Wtedy xcape -e „Control_L = Escape” nie działał, ale po użyciu xcape -d odkryłem, że Caps Lock generuje kod klucza 66 i odpowiednio go odwzorowałem: xcape -e '# 66 = Escape'. - Sergiy Byelozyorov 4 września 14 o 10:08

Louis:

Zgodnie z tym postem na blogu można to zrobić z samym Xcape: setxkbmap -option 'caps: ctrl_modifier' xcape -e 'Caps_Lock = Escape' setxkbmap -option 'caps: ctrl_modifier' xcape -e 'Caps_Lock = Escape; Control_L = Escape; Control_R = Escape '- Louis Simoneau 4 sierpnia 2015 o 10:06

dragon788
źródło
3

zainstalować xcape

sudo apt-get install xcape

Dodaj dwie linie w swoim ~/.bashrc

/usr/bin/setxkbmap -option 'caps:ctrl_modifier'⏎
/usr/bin/xcape -e 'Caps_Lock=Escape' -t 100

Zwróć uwagę na część -t 100, jeśli jej nie ustawisz, możesz zauważyć opóźnienie w Esc, jeśli używasz vima.

Searene
źródło
sudo apt-get install xcape(literówka)
David Shaked
1

W tym celu zbudowałem narzędzie w C, które rozwiązuje wiele problemów związanych z rozwiązaniem xcape / xmodmap :

pepper_chico
źródło
Czy jest jakiś sposób, aby wyłączyć „zamianę” Esc na Caps, wolę w ogóle nie mieć Caps i zachować stare i nowe Esc, zachowując się jak Escape.
dragon788
Dzięki, będę musiał umieścić link do automatycznej kompilacji tego w moich plikach dot. Mogę również PR README.md, ponieważ na Ubuntu 16.04 wymagało libudev-dev i libevdev-dev w celu skompilowania.
dragon788
@ dragon788 przyszedł do Arch (możesz nawet wypróbować Antergos). Wyprowadziłem się z Ubuntu wiele lat temu i nigdy nie wrócę, jest po prostu znacznie lepiej.
pepper_chico