Wyłącz Caps Lock po naciśnięciu klawisza Escape

10

Czy istnieje sposób na wyłączenie CapsLockza każdym razem, gdy Esczostanie naciśnięty. Tak, używam VIM! Właściwie mam alternatywny układ wszystkich klawiszy, Ctrl-6ale uważam, że jest to uciążliwe i wolałbym po prostu wyłączać CapsLock po każdym Escnaciśnięciu. Ponadto często przesyłam SSH na inne serwery przez kilka godzin, więc mam tam zapasowy VIM.

Zauważ, że zdarzyło mi się już zamienić klawisze CapsLocki Esc. Jednak po Escnaciśnięciu klawisza (który akurat jest oznaczony CapsLockna klawiaturze i znajduje się obok A), muszę go wykonać zarówno, jak Escapei Disable-CapsLock-If-It-Is-Enabled.

To jest na Kubuntu 12.10. Dzięki.

dotancohen
źródło
Musisz dodać tę funkcję tylko dla vimcałego pulpitu?
mtk
Chciałbym, aby była to funkcja pulpitu.
dotancohen

Odpowiedzi:

5

W X11 (na konsoli nie wiem) możesz to zrobić, zmieniając zachowanie klawisza Escape. Przejrzałem definicję „shift (break_caps)”, aby zobaczyć, jak to działa, i dostosowałem ją.

Spójrz na tę odpowiedź na xkb, aby uzyskać więcej informacji o tym, jak / gdzie umieścić lokalnie zmodyfikowane pliki i załadować je.

A do robienia tego, co chcesz, potrzebujesz w lokalnym pliku symboli (np . ~/.xkb/symbols/mysymbols:) takiej sekcji:

partial modifier_keys
xkb_symbols "esc_breaks_caps" {
    key <ESC> {
        type = "ALPHABETIC",
        actions [Group1] = [
            SetMods(modifiers=none),
            SetMods(modifiers=Lock,clearLocks)
        ]
    };
};

oraz w lokalnym pliku mapy klawiszy (np .: ~/.xkb/keymap/mykbd; możesz go utworzyć za pomocą setxkbmap -print > ~/.xkb/keymap/mykbd) zmień xkb_symbolswiersz, aby dodać +mysymbols(esc_breaks_caps).

Możesz teraz załadować go za pomocą: xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY a naciśnięcie Escusunie stan CapsLock (w rzeczywistości efekt pojawia się po wydaniu Esc; myślę, że tylko klawisze modyfikujące mają natychmiastowy efekt; inne efekt następuje po ich zwolnieniu).

Och, jeśli chcesz również zamienić klawisze Escape i CapsLock; użyj tego zamiast tego (i wstaw „+ mysymbols (esc_swap_and_breaks_caps)” w pliku mykbd):

partial modifier_keys
xkb_symbols "esc_swap_and_breaks_caps" {
    replace key <CAPS> {
        type = "ALPHABETIC",
        symbols = [ Escape, Escape ],
        actions [Group1] = [
            SetMods(modifiers=none),
            SetMods(modifiers=Lock,clearLocks)
        ]
    };
    replace key <ESC> { [ CapsLock, CapsLock ] };
};

zwróć uwagę, że klucze fizyczne to <CAPS>i <ESC>; <CAPS>(klucz wygrawerowane CapsLockna klawiaturze) i wyślij Ucieczka <ESC>(klucz grawerowane Esc) wysyła CapsLock pokojowe <CAPS>(wysyłanie escape) także rozbrojenie stan CapsLock

Pablo Saratxaga
źródło
1

Dodaj te linie do ~/.Xmodmap:

clear lock
keycode 0x42 = Escape

Następnie wpisz polecenie:

xmodmap ~/.Xmodmap

Twój Caps Lockklucz jest teraz przypisany do Escklucza.

Url odniesienia .


Przeczytaj także ten fajny artykuł o Mapping CapsLock to Escape w Ubuntu , który wydaje się być użytkownikiem unix.se :)

Mtk
źródło
Dziękuję Ci. Zdarzyło mi się już zamienić CapsLock i Esc. Jednak po naciśnięciu klawisza Esc (który na klawiaturze jest oznaczony CapsLock i znajduje się obok A), potrzebuję go do wykonania zarówno Escape, jak i Disable-CapsLock-If-It-Is-Enabled. Przeredaguję pytanie, aby wyjaśnić. Dzięki.
dotancohen
Myślałem, że potrzebujesz odwrotnej sytuacji. Trochę tu zmieszany. Co dzieje się po naciśnięciu Esci Capslockspo tych zmianach?
mtk
Obecnie: po naciśnięciu ESCklawisza CapsLockfunkcja przełącza się, a po naciśnięciu CapsLockklawisza ESCpolecenie jest wysyłane (tzn. ESCKlawisz jest ponownie mapowany na, CapsLocka CapsLockklawisz jest mapowany na ESC). Moim celem w tej kwestii jest, aby mieć naciskając CapsLockklawisz wykonać zarówno na ESCfunkcję (co obecnie robi) i wyłączyć CapsLockfunkcję wtedy i tylko wtedy, gdy CapsLockfunkcja jest włączona (tzn nie przełączanie CapsLockfunkcji, ale raczej go wyłączyć, jeśli CapsLockjest włączona).
dotancohen
1

Nie jestem pewien, czy to odpowiada na twoje pytanie, ale aby zmapować Escfunkcję na CapsLockklucz, możesz użyć tego:

setxkbmap -option "caps:escape"

źródło