Memetakan kembali Caps Lock dan Shift + Caps Lock di xkb

13

Saya mencoba mengkonfigurasi xkb sehingga Caps Lock dipetakan ke tombol Compose dan Shift + Caps Lock berfungsi sebagai Caps Lock tradisional. Saya menaruh yang berikut ini di file baru bernama /usr/share/X11/xkb/symbols/gdwatson:

partial modifier keys
xkb_symbols "compose" {
    key <CAPS> {
        type[Group1] = "TWO_LEVEL",
        symbols[Group1] = [ Multi_key, Caps_Lock ]
    };
};

Kemudian saya berlari setxkbmap -symbols 'pc+us+gdwatson(compose)', yang selesai dengan sukses. Caps Lock berfungsi sebagai Tulis, tetapi Shift + Caps Lock berfungsi sebagai Tulis bukan Caps Lock. xkbcomp :0.0mengungkapkan yang berikut:

key <CAPS> {
    type= "TWO_LEVEL",
    symbols[Group1]= [       Multi_key,       Multi_key ]
};

Pemetaan simbol level kedua menduplikasi yang pertama karena suatu alasan, alih-alih nilai terpisah yang saya coba berikan. Adakah yang punya xkb-fu yang cukup kuat untuk memberi tahu saya apa yang telah saya lakukan salah atau bagaimana cara memperbaikinya?

Grant Watson
sumber
1
Saya dapat membantu Anda melakukan ini di Xmodmap, tetapi tidak xkb. Jika Anda menginginkan ini, tanggapi secara positif (jangan lupa untuk menulis @mirabilosdi respons Anda, jadi saya perhatikan) dalam komentar, maka saya akan menghapus komentar ini dan menuliskannya sebagai jawaban (Anda juga harus menghapus respons komentar Anda).
mirabilos
1
Pada baris pertama Anda, harus partial modifier keysbenar-benar menjadi partial modifier_keys? Tanpa perubahan ini, setxkbmap -symbols 'pc+us+gdwatson(compose)'sebenarnya keluar dengan kesalahan, tetapi dengan perubahan itu, saya mendapatkan output yang diinginkan xkbcomp :0.0. Namun saya mendapatkan efek samping yang tidak diinginkan yang menekan Capslock secara bersamaan membuat saya dalam mode Capslock dan membuat mode tombol.
billyjmc

Jawaban:

11

Ini sepertinya mencapai apa yang Anda cari.

partial modifier_keys
xkb_symbols "compose" {
    key <CAPS> {
        type[Group1] = "TWO_LEVEL",
        symbols[Group1] = [ Multi_key, Caps_Lock ],
        actions[Group1] = [ NoAction(), LockMods(modifiers=Lock) ]
    };
};

Sumber daya berikut ini sangat berharga ketika berhadapan dengan XKB (Saya telah menautkan ke cermin-mesin WayBack dari halaman-halaman ini untuk pemeriksaan kedepan):

billyjmc
sumber
Juga, jika Anda membuat baris pertama default partial modifier_keys, maka Anda tidak perlu menentukan secara eksplisit setxkbmap -symbols 'pc+us+gdwatson(compose)', Anda cukup melakukannyasetxkbmap -symbols 'pc+us+gdwatson'
billyjmc