Matikan Caps lock saat Escape ditekan

10

Apakah ada cara untuk menonaktifkan CapsLockkapan saja Escditekan. Ya, saya menggunakan VIM! Saya sebenarnya memiliki layout keyboard all-caps alternatif Ctrl-6tetapi saya merasa rumit dan lebih memilih untuk hanya menonaktifkan OS CapsLock setiap kali Escditekan. Juga, saya sering SSH ke server lain selama beberapa jam jadi saya punya stok VIM di sana.

Perhatikan bahwa kebetulan saya telah menukar tombol CapsLockdan Esc. Namun, ketika Esctombol ditekan (yang kebetulan diberi label CapsLockpada keyboard dan di sebelah A), saya membutuhkannya untuk melakukan keduanya Escapedan Disable-CapsLock-If-It-Is-Enabled.

Ini ada di Kubuntu 12.10. Terima kasih.

dotancohen
sumber
Anda perlu menambahkan fungsi itu hanya untuk vim, atau desktop lengkap?
mtk
Saya ingin ini menjadi fitur desktop.
dotancohen

Jawaban:

5

Di X11 (pada konsol saya tidak tahu) Anda bisa melakukannya dengan mendefinisikan kembali perilaku tombol Escape. Saya melihat definisi "shift (break_caps)" untuk melihat cara kerjanya, dan mengadaptasinya.

Lihatlah jawaban ini di xkb untuk perincian lebih lanjut tentang bagaimana / di mana menempatkan file yang dimodifikasi secara lokal dan memuatnya.

Dan untuk melakukan apa yang Anda inginkan, Anda perlu di file simbol lokal (misalnya:) ~/.xkb/symbols/mysymbolsbagian seperti ini:

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

dan dalam file keymap lokal (misalnya:; ~/.xkb/keymap/mykbdAnda dapat membuatnya dengan setxkbmap -print > ~/.xkb/keymap/mykbd) ubah xkb_symbolsbaris untuk ditambahkan +mysymbols(esc_breaks_caps).

Anda sekarang dapat memuatnya dengan: xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY dan menekan Escakan menghapus keadaan CapsLock (sebenarnya, efeknya terjadi pada rilis Esc; Saya pikir hanya kunci pengubah yang memiliki efek langsung; yang lain efeknya adalah setelah rilis mereka.)

Oh, jika Anda ingin juga menukar tombol Escape dan CapsLock; kemudian gunakan ini sebagai gantinya (dan Anda meletakkan "+ mysymbols (esc_swap_and_breaks_caps)" di file mykbd Anda:

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 ] };
};

perhatikan kunci fisiknya adalah <CAPS>dan <ESC>; <CAPS>(Kunci terukir CapsLockdi keyboard Anda) mengirim Escape dan <ESC>(kunci terukir Esc) mengirim CapsLock, dengan <CAPS>(mengirim Escape) juga tidak mengatur keadaan capslock

Pablo Saratxaga
sumber
1

Tambahkan baris ini ke ~/.Xmodmap:

clear lock
keycode 0x42 = Escape

Kemudian, ketikkan perintah:

xmodmap ~/.Xmodmap

Caps LockKunci Anda sekarang dipetakan kembali ke Esckunci.

Url referensi .


Baca juga artikel bagus ini tentang Memetakan CapsLock ke Escape di Ubuntu , yang tampaknya merupakan pengguna unix.se :)

mtk
sumber
Terima kasih. Kebetulan saya sudah menukar CapsLock dan Esc. Namun, ketika tombol Esc ditekan (yang kebetulan diberi label CapsLock pada keyboard dan sebelah A), saya perlu untuk melakukan keduanya melarikan diri dan Disable-CapsLock-Jika-It-Apakah-Diaktifkan. Saya akan mengedit pertanyaan untuk menjelaskan. Terima kasih.
dotancohen
Saya pikir Anda membutuhkan putaran sebaliknya. Agak bingung di sini. Apa yang terjadi dengan menekan Escdan Capslockssetelah perubahan ini?
mtk
Saat ini: ketika menekan ESCtombol, CapsLockfungsi akan berganti, dan ketika menekan CapsLocktombol, ESCperintah dikirim (yaitu, ESCkunci dipetakan kembali ke CapsLockdan CapsLockkunci dipetakan kembali ke ESC). Tujuan saya dengan pertanyaan ini adalah memiliki menekan CapsLocktombol melakukan kedua yang ESCfungsi (yang saat ini tidak) dan mematikan CapsLockfungsi jika dan hanya jika CapsLockfungsi diaktifkan (yaitu tidak beralih pada CapsLockfungsi, melainkan menonaktifkan itu jika CapsLockdiaktifkan).
dotancohen
1

Saya tidak yakin apakah ini menjawab pertanyaan Anda, tetapi untuk memetakan Escfungsi ke CapsLocktombol, Anda dapat menggunakan ini:

setxkbmap -option "caps:escape"

sumber