Jak zezwolić akordom klawiszy klawiatury na tymczasową zmianę mapy klawiszy?

9

Mam naprawdę przyzwyczaił się do „Jednoczesne trybie Vi” funkcjonalności KeyRemap4MacBook który pozwala naciśnij i przytrzymaj si dklawiszy jednocześnie, a następnie użyj h, j, koraz lklawiszy jako klawiszy strzałek. Kiedy si dsą wciśnięte razem, nie jest uruchamiane żadne zdarzenie sani dzdarzenie, ale kiedy piszę normalnie, nie zauważam żadnych opóźnień przy trafieniu sani dindywidualnie.

Jak mogę odtworzyć tę funkcjonalność w systemie Linux (w szczególności RHEL 6.4)?

Kilka pomysłów, które miałem:

  1. Jeśli s+ dmoże zostać zmienione na modyfikator, wówczas klucze h, j, k, l+ modyfikator może być odpowiednio odwzorowywane. (Klawiatura, której teraz używam, nie ma dostępnych wolnych klawiszy modyfikujących zamiast s+ d, a celem trybu jednoczesnego Vi jest trzymanie wszystkich palców w głównym rzędzie. CapsLockJest już odwzorowane na Controli Escape).

  2. Idealnie byłoby znaleźć sposób, aby to zrobić za pomocą ustawień systemowych lub czegoś takiego jak klawiatura XKB, której już używam. Jeśli nie jest to możliwe, być może można napisać coś podobnego do programu xcape (którego używam i który pozwala mapować klawisze na różne klawisze i symbole klawiszy modyfikujących). xcapewyzwala jednak zwolnienie klawisza, więc trzeba będzie go dostosować, aby klucze si nie dbyły zbyt wolne.

ws_e_c421
źródło
Na RHEL 6.4? Czy używasz vima z X lub przez terminal?
Otheus
Aha, a jak mapujesz CapsLock do kontroli i ucieczki?
Otheus
Mapuj CapsLock do kontroli, a następnie użyj xcape (link powyżej), aby zamapować krótkie naciśnięcia klawisza kontroli do Escape. W pytaniu odnoszę się do trybu przypominającego Vi KeyRemap4MacBook, a nie do vimowania. Jak dotąd najbardziej obiecującą opcją dla tego, czego szukam, jest użycie modułu Python Xlib w sposób podobny do tego, z którego korzysta Plover. Do tej pory nie miałem dużo czasu, aby nad tym popracować.
ws_e_c421

Odpowiedzi:

2

Nie możesz tego zrobić za pomocą standardowych narzędzi, musiałbyś coś napisać (prawdopodobnie wpłynie to na wiele xserverów, a jeśli chcesz, aby działało to poza X, nastąpią zmiany w jądrze).

Powodem tego jest to, że pomysły, na których opiera się projekt (i dla których jest zoptymalizowany), nie obejmują rejestrowania zwykłych klawiszy ani emitowania znaków z modyfikatorów.

Hildred
źródło
Nadal się nad tym zastanawiam (potrzebuję więcej czasu). Znalazłem projekt Plover, który wydawał się dostarczać szablon dla rozwiązania opartego na X, ale chcę przejść na Wayland, więc przestałem się tym przyglądać. Niedawno odkryłem caps2esc, który używa libevdev i libudev do dynamicznego chwytania i mapowania urządzeń. Wydaje mi się, że takie podejście może być przydatne do nagrywania oprócz mapowania, ale należy je zbadać dalej (wolałbym również rozwiązanie libinput).
ws_e_c421
Mój komentarz do libinput został źle poinformowany. Myślałem, że caps2esc działa ze sterownikiem xf86-input-evdev, który jest alternatywą dla libinput, ale tak naprawdę działa na poziomie libevdev, który jest biblioteką niższego poziomu używaną przez oba projekty. Oprzyrządowanie dla caps2esc zostało przebudowane do projektu narzędzi przechwytujących . Uważam, że dobrze napisana wtyczka do narzędzi przechwytujących może zapewnić opisaną przeze mnie funkcję. To jest na mojej liście do zbadania.
ws_e_c421,
2

Po czterech latach w końcu mam wstępny szkic odpowiedzi na to pytanie. Odpowiedzią jest użycie narzędzi przechwytujących, które używają libevdev do przechwytywania danych z klawiatury i przetwarzania ich przed ponownym wysłaniem. Jeśli chodzi o mapowanie klucza jednoczesnego, zrobiłem szorstką plugin do przechwycenia Narzędzia nazwie Chorded mapy klawiszy , która pozwala h, j, k, ldziałają jak klawisze strzałek kiedy si dsą naciskane jednocześnie.

ws_e_c421
źródło