Apa yang dilakukan “Kunci untuk memilih level 5” di properti gnome-keyboard-property?

17

Ada opsi untuk menentukan kunci yang akan digunakan untuk mengakses level 5 pada keyboard di gnome-keyboard-properties("Keyboard" di bawah Perangkat Keras dalam pengaturan Sistem):

Cuplikan layar dialog tersebut

Tetapi jika saya mengatur level 5 ke AltGrdan level ketiga ke Right Ctrldan jika saya mengatur kunci 54 sebagai berikut:

xmodmap -e "keycode 54 = 1 2 3 4 5 6 7 8"

Saya mendapatkan hasil berikut dari menekan variasi yang berbeda:

keycode 54 = 1
keycode 54 + right ctrl = 5
keycode 54 + right ctrl + shift = 6
keycode 54 + shift = 2
keycode 54 + AltGr = 1
keycode 54 + AltGr + shift = 2
  1. Jadi apa yang dilakukan pengubah level 5?

  2. Bagaimana cara mengaturnya sehingga saya bisa mendapatkan 5 atau enam karakter berbeda dari satu kunci (dimodifikasi oleh Shift, Alt Grdan Right Ctrlmisalnya)?

sup
sumber

Jawaban:

14

“1. Jadi, apa yang dilakukan pengubah level 5? ”

Ia memilih level kelima. Pengubah level 2 (hanya shift biasa) memilih level kedua, dan level 3 memilih level ketiga.

Alasan bahwa pengubah tingkat 5 memilih tingkat kelima alih-alih tingkat keempat (tepat setelah pengubah tingkat 3) adalah bahwa ketiga pengubah ini dapat digabungkan dengan berbagai cara untuk memilih delapan tingkat yang berbeda (ini termasuk tidak menggunakan pengubah mana pun, yang hanya menekan tombol tanpa pengubah seperti itu). Ada delapan kombinasi sejak 2 ↑ 3 = 8. Untuk dua pengubah pertama ada empat kombinasi:

  • Tidak ada pengubah (level 1)
  • Pengubah level 2, alias shift (level 2)
  • Pengubah level 3 (level 3)
  • 2nd + 3rd modifier (level 4)

Menambahkan pengubah ketiga (level 5) menambah empat level lagi.

"2. Bagaimana cara mengaturnya sehingga saya bisa mendapatkan 5 atau enam karakter yang berbeda dari satu kunci (dimodifikasi oleh Shift, Alt Grdan Right Ctrlmisalnya)? "

Pertama-tama Anda membutuhkan tata letak yang menggunakan lima karakter atau lebih per kunci. Anda dapat memilih tata letak yang ada, tetapi jika Anda hanya ingin menambahkan lebih banyak tingkat ke tata letak yang sedang Anda gunakan, itu mungkin tidak optimal. Misalnya, ada tata letak keyboard Neo († 1), tapi itu "dioptimalkan untuk Bahasa Jerman" jadi tidak terlalu bagus untuk sebagian besar penutur bahasa Inggris.

Meski begitu, mungkin instruktif untuk melihat kunci apa yang telah dipilih Neo untuk pengubah level 5.

Tata letak neo

Neo rupanya memanggil pengubah level 5 untuk "Mod4". Jadi seperti yang Anda lihat, gunakan tombol di sebelah kanan tombol shift kiri ( LSGT) dan tombol alt kanan / AltGrkunci. Ini pada keyboard Eropa (105 tombol) yang dibandingkan dengan keyboard AS (104 tombol) memiliki shift kiri yang sempit dan tinggi dan kembali tipis. Untuk tata letak keyboard yang didasarkan pada keyboard AS, orang mungkin harus — atau lebih suka — memilih tombol lain.

Memilih kunci pengubah level 5

Dalam jawaban sup ia memilih untuk menggunakan Xmodmap. Saat ini alat seperti Setxkbmap direkomendasikan daripada Xmodmap. Xkb hadir dengan banyak pilihan standar untuk hal-hal seperti memilih pengubah level 5. Jika Anda berkonsultasi dengan man xkeyboard-config dan mencari lv5Anda akan menemukan opsi ini:

┌──────────────────────┬───────────────────────────────────────────────────┐
│ Option               │ Description                                       │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:lsgt_switch_lock │ <Less/Greater> chooses 5th level; acts as onetime │
│                      │ lock when pressed together with another 5th level │
│                      │ chooser                                           │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:ralt_switch_lock │ Right Alt chooses 5th level; acts as onetime lock │
│                      │ when pressed together with another 5th level      │
│                      │ chooser                                           │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:lwin_switch_lock │ Left Win chooses 5th level; acts as onetime lock  │
│                      │ when pressed together with another 5th level      │
│                      │ chooser                                           │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:rwin_switch_lock │ Right Win chooses 5th level; acts as onetime lock │
│                      │ when pressed together with another 5th level      │
│                      │ chooser                                           │
└──────────────────────┴───────────────────────────────────────────────────┘

Jadi opsi yang didokumentasikan adalah LSGTkunci, tombol alt kanan, tombol Windows kanan, dan tombol Windows kiri. Seperti yang telah kita lihat, Neo menggunakan dua opsi pertama.

Katakanlah Anda ingin menggunakan lv5:ralt_switch_lockopsi dengan beberapa tata letak. Perintah ini mengatur ustata letak dengan kunci pengubah level 5 ini:

setxkbmap -option "lv5:ralt_switch_lock" us

Jadi untuk semua opsi yang didokumentasikan man xkeyboard-config, gunakan itu sebagai argumen -optionketika menggunakan Setxkbmap.

Jika opsi-opsi ini tidak cukup dan Anda ingin mendefinisikan kunci lain untuk menjadi pengubah level 5, penting untuk melihat deklarasi opsi-opsi ini. Mereka tampaknya berada di /usr/share/X11/xkb/symbols/level5. Pernyataan untuk lv5:ralt_switch_lockterlihat seperti ini:

partial modifier_keys
xkb_symbols "ralt_switch_lock" {
  include "level5(lock)"
  key <RALT> {
    type[Group1] = "EIGHT_LEVEL",
    symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift,
                        ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
  };
};

Sisi kanan symbols[Group1]menyatakan kunci atau karakter apa yang harus dihasilkan setiap tingkat kunci. Ini menggunakan semua delapan level yang mungkin karena seharusnya mengunci pengubah level 5 ketika ditekan bersama dengan tombol shift level 5 lainnya. Jadi level 5–8 memancarkan ISO_Level5_Lockkarena semua level ini diakses dengan menahan shift level 5 dan beberapa kombinasi tombol shift lainnya (tidak ada semuanya). Jika Anda hanya menginginkan perilaku shift dan bukan juga perilaku mengunci-jika-dua-ditekan, Anda dapat membuat deklarasi yang lebih sederhana (dari file yang sama):

// The right Alt key (while pressed) chooses the fifth shift level.
partial modifier_keys
xkb_symbols "ralt_switch" {
  key <RALT> {
    type[Group1]="ONE_LEVEL",
    symbols[Group1] = [ ISO_Level5_Shift ]
  };
  include "level5(modifier_mapping)"
};

Menambahkan level tambahan ke tata letak

Layout Xkb cukup modular. Anda dapat memasukkan tata letak yang ada dan mengubahnya. Jadi kita dapat memilih tata letak yang ada dengan kurang dari 5 level dan menambahkan beberapa level ke dalamnya.

Anda dapat membuat tata letak baru dengan menyalin file dengan tata letak Anda /usr/share/X11/xkb/symbols/, atau ke mana pun alat Xkb Anda mencari tata letak. Tapi ini membutuhkan hak istimewa sudo jadi itu bukan solusi terbaik. Atau Anda dapat menyalin struktur direktori xkb/ dan meletakkan layout Anda di direktori yang sesuai xkb/, yaitu symbols/. Jadi katakan Anda telah membuat file xkb-tree/symbols/my-layouts. Untuk menggunakan tata letak yang ditentukan dalam file ini, Anda dapat menggunakan -print opsi setxkbmapdan kemudian mengirimkan hasilnya xkbcomp. Skrip pembungkus ini menggunakan tata letak sebagai input:

#!/bin/sh

# `-option ""` resets all options.
setxkbmap -option "" -layout "$1" \
    -print |
    xkbcomp -I"<path-to-project>/xkb-tree" - "$DISPLAY"

Sejauh menyangkut file tata letak, katakanlah kita ingin memperluas tata letak “AS internasional”, yang menggunakan empat level. Pertama-tama kita mengatur tombol shift level 3 dan level 5 dengan cara yang sama seperti yang dilakukan Neo:

partial alphanumeric_keys
xkb_symbols "mine" {
    // US international
    include "us(intl)"
    // Set up level 3 modifiers.
    include "level3(modifier_mapping)"
    include "level3(bksl_switch)"
    include "level3(caps_switch)"
    // Set up level 5 modifiers.
    include "level5(modifier_mapping)"
    include "level5(lsgt_switch)"
    include "level5(ralt_switch)"
};

Sekarang kami ingin menambahkan beberapa karakter tambahan. Mari kita gunakan empat tombol pertama dari tata letak Qwerty sebagai contoh. Kunci-kunci ini Quntuk R, yang sesuai <AD01>dengan <AD04>. Pertama, kita perlu membuat kunci yang mampu menggunakan hingga delapan level:

key.type[Group1] = "EIGHT_LEVEL";

Untuk empat level pertama, agar tidak mendefinisikan ulang, kami memetakannya NoSymbol. Lalu kami menambahkan dua level. Pada level 5 kami menambahkan panah ←↓↑→(† 2). Pada level 6 kita menambahkan tombol arah. Tata letak kami akhirnya tampak seperti ini:

partial alphanumeric_keys
xkb_symbols "mine" {
    // US international
    include "us(intl)"
    // Set up level 3 modifiers.
    include "level3(modifier_mapping)"
    include "level3(bksl_switch)"
    include "level3(caps_switch)"
    // Set up level 5 modifiers.
    include "level5(modifier_mapping)"
    include "level5(lsgt_switch)"
    include "level5(ralt_switch)"

    // Make the following keys capable of using eight levels.
    key.type[Group1] = "EIGHT_LEVEL";

    key <AD01> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        leftarrow, Left
    ] };
    key <AD02> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        downarrow, Down
    ] };
    key <AD03> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        uparrow, Up
    ] };
    key <AD04> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        rightarrow, Right
    ] };

};

Untuk menggunakannya, kita dapat menggunakan skrip wrapper yang kita buat:

./setxkbmap-wrapper "my-layouts(mine)"

† 1: Neo ada de(neo)di Xkb; setxkbmap "de(neo)".

† 2: Untuk menemukan nama simbolis yang digunakan Xkb, cari file dengan nama keysymdef.h. Itu harus di bawah direktori bernama X11/. Anda juga dapat menggunakan nama Unicode, misalnya U2192untuk U + 2192.

Guildenstern
sumber
1
Terima kasih telah meluangkan waktu untuk menulis jawaban ini. Saya sedang mencari cara untuk menggunakan kunci JKLI saya sebagai tombol panah untuk sementara waktu sekarang, jadi ini sangat berguna. Selamat menikmati 50 poin tambahan ini! (Aku seharusnya bisa menetapkan hadiah besok.)
Glutanimate
1
Yah, terima kasih, ini adalah asnwer yang hebat walaupun datang sedikit terlambat tapi itulah tepatnya yang saya cari kembali daripada (tapi sekarang GNOME sebenarnya tidak mendukung pengaturan pengubah - tetapi selama ia bekerja menggunakan file konfigurasi, semua baik).
sup
8

Nah, setelah sedikit menggali:

(1) Kunci untuk memilih level ke-5 melakukan hal-hal aneh (mengenai tata letak bahasa Prancis) yang tidak relevan dengan apa yang ingin saya lakukan. Pada dasarnya ini menetapkan kunci mana yang akan bertindak sebagai ISO_Level5_Shift. ISO_Level5_Shift digunakan dalam beberapa tata letak yang tidak jelas. Jawaban ini didasarkan pada jumlah hasil yang Google berikan saat mencari "ISO_Level5_Shift" dan pada tautan ini .

(2) Itu tidak dapat digunakan untuk mendapatkan 6 simbol dari satu kunci fisik. Salah satu cara untuk mencapai ini adalah dengan menggunakan file .xmodmap yang ditempatkan di direktori $ HOME.

Pertama, perintah

xmodmap -pm

memberikan simbol apa yang bertindak sebagai berbagai modifier. Di sistem saya itu seperti berikut:

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x9)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3        
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c)

mod3 perlu diatur untuk menggunakan 6 simbol dengan satu tombol. Ini perlu ditempatkan ke dalam file .xmodmap:

clear mod3
clear mod5
keycode 94 = Mode_switch
add mod3 = Mode_switch
add mod5 = ISO_Level3_Shift

Kemudian xmodmap -pm memberi saya:

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x9)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3        Mode_switch (0x5e),  Mode_switch (0xcb)
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  ISO_Level3_Shift (0x6c)

Di mana kode kunci 94 adalah kunci yang saya pilih untuk bertindak sebagai mod3. Kode kunci berbagai kunci fisik dapat ditemukan dengan alat baris perintah xev (jalankan saja dan tekan berbagai tombol, kode kunci akan muncul).

Lalu, jika saya menempatkan file .xmodmap

keycode 54 = 1 2 3 4 5 6

atau lari

xmodmap -e "keycode 54 = 1 2 3 4 5 6"

Saya mendapatkan enam simbol berbeda dari satu kunci dengan menggunakan altgr, shift, dan kode kunci 94 (itu adalah kunci yang tidak berguna di sebelah shift kiri pada tata letak fisik saya).

PEMBARUAN: jika Anda hanya membutuhkan lima simbol, mudah untuk mengaturnya seperti ini:

keycode 54 = 1 2 3 3 5 6

Kadang-kadang terjadi pada saya bahwa saya mendapatkan 4 bukannya 3 sebaliknya.

sup
sumber