Pertanyaan Apa artinya “Kunci untuk memilih level 5” pada properti gnome-keyboard?


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

Screenshot of said dialog

Tetapi jika saya mengatur level ke-5 AltGr dan tingkat ketiga Ctrl Kanan dan jika saya menetapkan 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 oleh pengubah level ke-5?

  2. Bagaimana cara mengaturnya sehingga saya bisa mendapatkan 5 atau enam karakter berbeda dari satu kunci (dimodifikasi oleh Bergeser, Alt Gr dan Ctrl Kanan sebagai contoh)?


15
2018-05-08 09:41


asal




Jawaban:


"1. Jadi apa yang dilakukan oleh pengubah level ke-5? ”

Ini memilih level kelima. Pengubah level 2 (hanya shift reguler) memilih level kedua, dan level 3 memilih level ketiga.

Alasan pengubah level ke-5 memilih level kelima sebagai gantinya dari tingkat keempat (tepat setelah pengubah level ke-3) adalah ini tiga pengubah dapat dikombinasikan dengan berbagai cara untuk memilih delapan tingkat yang berbeda (ini termasuk tidak menggunakan salah satu pengubah, yang mana hanya menekan kunci tanpa pengubah seperti itu). Ada delapan kombinasi sejak 2 ↑ 3 = 8. Untuk dua pengubah pertama ada empat kombinasi:

  • Tidak ada pengubah (level 1)
  • Pengubah tingkat 2, pergeseran a.k.a (level 2)
  • Pengubah level 3 (level 3)
  • Pengubah kedua + 3 (level 4)

Menambahkan pengubah ketiga (level ke-5) menambahkan empat level lagi.

"2. Bagaimana cara mengaturnya sehingga saya bisa mendapatkan 5 atau enam karakter yang berbeda keluar dari kunci tunggal (dimodifikasi oleh Shift, Alt Gr dan Kanan Ctrl sebagai contoh)?"

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

Namun, ini mungkin instruktif untuk melihat kunci apa saja yang dimiliki Neo dipilih untuk pengubah level 5.

Neo layout

Neo rupanya menyebut pengubah level 5 untuk "Mod4". Jadi seperti yang Anda lihat ia menggunakan kunci di sebelah kanan tombol shift kiri (LSGT) dan tombol alt tepat /AltGr kunci. Ini ada di keyboard Eropa (105 tombol) yang dibandingkan dengan keyboard AS (104 tombol) memiliki pergeseran kiri yang sempit dan kunci kembali tinggi dan tipis. Untuk layout keyboard yang didasarkan pada Keyboard AS yang mungkin harus — atau lebih suka — memilih kunci lain.

Memilih kunci pengubah level 5

Dalam jawaban sup, dia memilih untuk menggunakan Xmodmap. Saat ini alat seperti Setxkbmap direkomendasikan di atas Xmodmap. Xkb hadir dengan banyak yang telah ditentukan pilihan untuk hal-hal seperti memilih pengubah level 5. Jika Anda berkonsultasi manusia xkeyboard-config dan cari lv5 Anda 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, alt tepat kunci, tombol Windows yang tepat, dan tombol Windows kiri. Seperti yang telah kita lihat, Neo menggunakan dua opsi pertama.

Katakanlah Anda ingin menggunakan lv5:ralt_switch_lock pilihan dengan beberapa tata letak. Perintah ini mengatur us tata letak dengan kunci pengubah level 5 ini:

setxkbmap -option "lv5:ralt_switch_lock" us

Jadi untuk setiap opsi yang didokumentasikan dalam man xkeyboard-config, gunakan itu sebagai argumen untuk -option saat menggunakan Setxkbmap.

Jika opsi ini tidak cukup dan Anda ingin menentukan kunci lain untuk menjadi pengubah level 5, adalah instruktif untuk melihat deklarasi untuk opsi ini. Mereka sepertinya berada /usr/share/X11/xkb/symbols/level5. Deklarasi untuk lv5:ralt_switch_lock terlihat 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 apa kunci atau karakter masing-masing tingkat kunci harus menghasilkan. Ini menggunakan semua delapan kemungkinan tingkat karena seharusnya mengunci pengubah level 5 saat ditekan bersama dengan tombol shift level 5 lainnya. Jadi level 5-8 memancarkan ISO_Level5_Lock karena semua level ini diakses dengan menekan pergeseran level 5 dan beberapa kombinasi tombol shift lainnya (tidak ada mereka semua). Jika Anda hanya menginginkan perilaku pergeseran dan tidak 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 tingkat ekstra ke tata letak

Tata letak Xkb cukup modular. Kamu bisa termasuk tata letak yang ada dan ubah mereka. Jadi kita bisa memilih tata letak yang ada dengan kurang dari 5 level dan tambahkan beberapa level untuk itu.

Anda dapat membuat tata letak baru dengan menyalin file dengan tata letak Anda /usr/share/X11/xkb/symbols/, atau di mana pun perangkat Xkb Anda terlihat untuk layout. Tetapi ini membutuhkan hak istimewa sudo jadi ini bukan yang terbaik larutan. Atau Anda dapat menyalin struktur direktori xkb/ dan letakkan layout Anda di direktori yang sesuai di bawah 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 dari setxkbmap dan kemudian menyalurkan output ke xkbcomp. Ini script wrapper mengambil layout sebagai input:

#!/bin/sh

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

Sejauh file dengan tata letak yang bersangkutan, katakanlah yang kita inginkan untuk memperluas tata letak "internasional AS", yang menggunakan empat level. Pertama dari semua kita mengatur tombol shift level 3 dan level 5 dengan cara yang sama Neo tidak:

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 gunakan saja empat yang pertama kunci tata letak Qwerty sebagai contoh. Kunci-kunci ini Q untuk R, yang mana sesuai dengan <AD01> untuk <AD04>. Pertama kita perlu membuat kunci mampu menggunakan hingga delapan level:

key.type[Group1] = "EIGHT_LEVEL";

Untuk empat level pertama, agar tidak mendefinisikan ulang mereka, kami memetakan mereka NoSymbol. Lalu kita tambahkan dua level. Pada level 5 kita tambahkan panahnya ←↓↑→ († 2). Pada level 6 kami menambahkan tombol arah. Kami tata letak akhirnya terlihat 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, kami dapat menggunakan skrip pembungkus yang kami buat:

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

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

† 2: Untuk menemukan nama simbolik yang digunakan Xkb, cari file bernama keysymdef.h. Itu harus di bawah direktori bernama X11/. Kamu bisa juga menggunakan nama Unicode, misalnya U2192 untuk U + 2192.


8
2017-11-05 18:41



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. Silakan nikmati tambahan 50 poin ini! (Saya harus dapat menetapkan karunia besok.) - Glutanimate
Yah, terima kasih, ini adalah asnwer yang hebat bahkan jika itu datang agak terlambat tapi itulah yang saya cari kembali daripada (tapi sekarang GNOME sebenarnya tidak mendukung pengaturan pengubah - tetapi selama berfungsi dengan menggunakan file konfigurasi, semua baik). - sup


Nah, setelah sedikit menggali:

(1) Kunci untuk memilih level 5 melakukan beberapa hal aneh (mengenai beberapa layout Perancis) 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 diberikan google saat mencari "ISO_Level5_Shift" dan pada ini  tautan.

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

Pertama, perintah

xmodmap -pm

memberikan apa yang keysymbols bertindak sebagai berbagai modifikator. Pada 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 kunci. 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)

Dimana keycode 94 adalah kunci yang saya pilih untuk bertindak sebagai mod3. Kode kunci dari berbagai kunci fisik dapat ditemukan dengan piranti baris perintah xev (jalankan saja dan tekan berbagai kunci, kode kunci akan muncul).

Kemudian, 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 keycode 94 (itu adalah kunci yang tidak berguna di sebelah kiri bergeser pada tata letak fisik saya).

PERBARUI: jika Anda hanya membutuhkan lima simbol, akan sangat berguna untuk mengaturnya seperti ini:

keycode 54 = 1 2 3 3 5 6

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


8
2018-05-09 19:18