Bagaimana mencegah efek toggle caps-lock, tanpa memetakan atau menonaktifkannya?

22

Saya memiliki program X11 yang mengambil caps-lock, dan menggunakannya. Masalahnya adalah, saya ingin menonaktifkan toggling caps-lock biasa, tetapi melakukannya tampaknya menonaktifkan kunci.

Jadi, apa pun yang diperoleh X11 untuk penekanan tombol caps-lock, ia masih harus mendapatkan (tidak menonaktifkan kunci, atau memetakannya kembali ke beberapa tombol lain), tetapi tanpa apa pun menerjemahkan penekanan tombol menjadi caps-toggle (yang mungkin berada pada level kernel? ).

Saya mencoba mengubah scancode, tetapi ini hanya memetakan kembali kuncinya. Saya juga sudah menghapus entri capslock xmodmap, tetapi ini juga menonaktifkan caps.

Bagaimana saya bisa memberitahu kernel untuk mengabaikan caps-key (wrt fungsionalitas regulernya), tetapi masih meneruskan pesan ke X?

Hanya untuk menambahkan sedikit lebih detail:

'Program' yang saya coba jalankan adalah 'enso' yang dimanusiakan. Ketika tidak ada kunci saya mendapatkan kesalahan "KRITIS: root: Tidak dapat menemukan kunci quasimode". Ketika tidak ada kesalahan, saya bisa menggunakan enso dengan caps, tetapi sofar belum menemukan cara untuk menonaktifkan fungsi caps sementara enso masih bisa mendapatkannya.

Chris2048
sumber
Harap berikan perincian tentang apa yang Anda coba, yaitu ekspresi xmodmap yang tepat. Tanpa perincian, kami tidak dapat memastikan apakah Anda tahu apa yang harus dilakukan dan salah, atau apakah Anda melakukannya dengan benar tetapi kode gagal karena alasan lain. Juga beri kami OS yang Anda gunakan karena beberapa memiliki pemrosesan kode kunci yang terjadi di bawah tingkat X server.
Kyle Jones
@Kyle saya mencoba "hapus Lock = Caps_Lock", dan kemudian "kode kunci 66 =" (yang telah dipetakan ke CapsLock). Saya menjalankan ubuntu 12.10 pada mesin 64bit.
Chris2048
Kemungkinan lain adalah untuk memetakan kembali ke kunci lain. setxkbmap -option ctrl:nocapsmemetakan kembali Control_L, misalnya.
Chris Down
Mengatakan Anda akan baik-baik saja jika kami bisa memberi Anda cara untuk memetakan kembali caps-lock untuk mengatakan kunci kontrol atau bukan itu yang Anda cari? Karena pertanyaan ini agak membingungkan, akan sangat berarti jika Anda menambahkan secara spesifik ke dalam pertanyaan tentang apa yang telah Anda coba sejauh ini.
slm
Agar kami jelas juga, ada fitur di Ubuntu 12.10 di mana Anda dapat membuat caps-lock sebagai kunci kontrol tambahan. Apakah ini yang Anda pikirkan ketika Anda mengatakan "memetakan kembali"? Berikut cuplikan layar dialog: flickr.com/photos/11708996@N00/3010939023
slm

Jawaban:

28

Saya pikir saya memiliki teknik untuk menonaktifkan toggling Capslocktombol tetapi tidak sepenuhnya menonaktifkan kunci bersama-sama, atau memetakannya kembali ke tombol lain pada keyboard.

Jika Anda menggunakan perintah:

setxkbmap -option caps:none

Keyboard tidak akan lagi berganti. Saya sudah mengkonfirmasi ini pada laptop saya yang menjalankan Fedora 14, LED tidak lagi menyala, dan Capslockfungsi normal hilang.

Namun menggunakan xev masih menunjukkan bahwa tombol sedang ditekan:

$ 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
    ...

Jadi tombol yang ditekan acara masih dibiarkan utuh untuk aplikasi lain untuk mengambilnya.

setxkbmap

File tersebut /usr/share/X11/xkb/rules/xorg.lstberisi daftar lengkap opsi apa yang dapat Anda berikan setxkbmap.

Melihat melalui file ini untuk "cap" saya perhatikan baris ini:

caps:none            CapsLock is disabled

Ada nilai-nilai lain dalam file ini jadi jika ini bukan apa yang Anda cari, mungkin salah satu dari nilai-nilai alternatif itu cocok.

$ 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

Referensi

slm
sumber
5
Jika Anda secara tidak sengaja menjalankan perintah dengan capslock Anda aktif, Anda dapat mengatur ulang xkbmap dengan menjalankan setxkbmap -option "".
Nemo
Itu muncul di xev, tetapi tidak benar-benar berfungsi di mesin Valve Source 2.
Velkan
1

Jika Anda tidak ingin Caps Lockkunci memiliki efek seperti biasanya, Anda dapat mematikan Lockpengubah, sambil mempertahankan Caps_Lockkunci.

xmodmap -e 'clear Lock'
Gilles 'SANGAT berhenti menjadi jahat'
sumber
Itu tampaknya tidak menonaktifkan capslock.
Chris2048
@ Chris2048 Bekerja Untuk Saya ™. Mungkin tidak kompatibel dengan beberapa pengaturan XKB, atau dengan beberapa aplikasi (aplikasi melakukan pemrosesan kunci sendiri, kebanyakan dari mereka menggunakan fungsi pustaka yang sama tetapi ada pengecualian).
Gilles 'SO- berhenti menjadi jahat'
0

Ini sangat mirip dengan jawaban yang saya berikan untuk pertanyaan lain . Cuplikan kode xkb ini harus melakukan trik.

partial modifier_keys
xkb_symbols "capsoff" {
    key <CAPS> {
        type[Group1] = "ONE_LEVEL",
        symbols[Group1] = [ Caps_Lock ],
        actions[Group1] = [ NoAction() ]
    };
};
billyjmc
sumber
kemana ini harus pergi? Saya sudah melihat potongan seperti ini selama 10 menit tanpa mencari tahu. Apakah itu harus menjadi bagian dari file yang lebih lengkap atau bisakah berdiri sendiri dan berlaku untuk konfigurasi default?
Nikana Reklawyks