GNOME-klavye özelliklerinde “5. seviyeyi seçme anahtarı” ne işe yarar?


18

gnome-keyboard-properties(Sistem ayarlarında Donanım altında "Klavye" bölümünde klavyede 5. seviyeye erişmek için kullanılacak bir tuş belirtme seçeneği vardır :

Söz konusu iletişim kutusunun ekran görüntüsü

Ancak, 5. seviyeyi AltGrüçüncü seviyeye Right Ctrlayarlarsam ve 54 tuşunu aşağıdaki gibi ayarlarsam:

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

Farklı varyasyonlara basarak aşağıdaki sonuçları elde ediyorum:

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. Peki 5. seviye değiştirici ne yapıyor?

  2. Nasıl tek bir tuşu (modifiye üzerinden 5 ya da altı farklı karakteri alabilmeleri için onu kurarım Shift, Alt Grve Right Ctrlörneğin)?

Yanıtlar:


15

“1. Peki 5. seviye değiştirici ne yapıyor? ”

Beşinci seviyeyi seçer. 2. seviye değiştirici (sadece normal vardiya) ikinci seviyeyi seçer ve 3. seviye üçüncü seviyeyi seçer.

5. seviye değiştiricinin dördüncü seviye yerine beşinci seviyeyi seçmesinin nedeni (3. seviye değiştiriciden hemen sonra), bu üç değiştiricinin sekiz farklı seviyeyi seçmek için farklı şekillerde birleştirilebilmesidir (bu, değiştiricilerin hiçbirini kullanmamayı içerir, bu tür herhangi bir değiştirici olmadan bir tuşa basar). 2 ↑ 3 = 8'den beri sekiz kombinasyon vardır. İlk iki değiştirici için dört kombinasyon vardır:

  • Değiştirici yok (düzey 1)
  • 2. seviye değiştirici, diğer bir deyişle kaydırma (2. seviye)
  • 3. seviye değiştirici (seviye 3)
  • 2. + 3. değiştirici (seviye 4)

Üçüncü değiştiricinin (5. seviye) eklenmesi dört seviye daha ekler.

“2. Nasıl tek bir tuş üzerinden 5 ya da altı farklı karakterler olsun (Shift modifiye, böylece kurmak yapmak Alt Grve Right Ctrlörneğin)?”

Her şeyden önce, anahtar başına beş veya daha fazla karakter kullanan bir düzene ihtiyacınız var. Mevcut bir düzeni seçebilirsiniz, ancak şu anda kullanmakta olduğunuz düzene daha fazla seviye eklemek istiyorsanız, bu uygun olmayabilir. Örneğin, Neo klavye düzeni († 1) vardır, ancak bu “Alman Dili için optimize edilmiştir”, bu nedenle çoğu İngilizce konuşmacı için harika değildir.

Yine de, Neo'nun seviye 5 değiştiricisi için hangi tuşları seçtiğine bakmak öğretici olabilir.

Neo düzeni

Neo, görünüşe göre “Mod4” için seviye 5 değiştiricisini çağırıyor. Gördüğünüz gibi sol kaydırma tuşunun ( LSGT) sağındaki tuşu ve sağ alt tuşu / AltGrtuşunu kullanır. Bu, ABD klavyesine (104 tuş) kıyasla dar bir sola kaydırma ve uzun ve ince dönüş tuşuna sahip bir Avrupa klavyesinde (105 tuş). ABD klavyesini temel alan bir klavye düzeni için, başka tuşların seçilmesi veya tercih edilmesi gerekebilir.

Seviye 5 değiştirici tuş seçme

Sup'nin cevabında Xmodmap kullanmayı seçti. Günümüzde Xmodmap üzerinde Setxkbmap gibi araçlar önerilmektedir. Xkb, seviye 5 değiştiriciyi seçmek gibi şeyler için önceden tanımlanmış birçok seçenekle birlikte gelir. Eğer danışın adam xkeyboard-config ve arama için lv5bu seçenekleri bulabilirsiniz:

┌──────────────────────┬───────────────────────────────────────────────────┐
│ 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                                           │
└──────────────────────┴───────────────────────────────────────────────────┘

Bu nedenle belgelenen seçenekler LSGTanahtar, sağ alt anahtar, sağ Windows anahtarı ve sol Windows anahtarıdır. Gördüğümüz gibi Neo ilk iki seçeneği kullanıyor.

lv5:ralt_switch_lockSeçeneği bir düzende kullanmak istediğinizi varsayalım. Bu komut, usdüzeni bu düzey 5 değiştirici tuşuyla ayarlar :

setxkbmap -option "lv5:ralt_switch_lock" us

Belgelendirilmiş seçeneklerden herhangi biri için man xkeyboard-config, -optionSetxkbmap kullanırken bunu bir argüman olarak kullanın.

Bu seçeneklerin yeterli olmaması ve 5. düzey değiştirici olarak başka bir anahtar tanımlamak istemeniz durumunda, bu seçeneklerin bildirimlerine bakmak öğreticidir. İçeride gibi görünüyorlar /usr/share/X11/xkb/symbols/level5. Beyanı lv5:ralt_switch_lockşuna benzer:

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

Sağ taraf, symbols[Group1]anahtarın her seviyesinin hangi anahtar veya karakteri üretmesi gerektiğini belirtir. Bu, olası sekiz seviyenin tümünü kullanır, çünkü başka bir seviye 5 vites tuşuyla birlikte basıldığında seviye 5 değiştiriciyi kilitlemesi gerekir. Bu nedenle, 5-8 ISO_Level5_Lock. Seviyeler, 5. seviyeye kaydırmayı ve diğer shift tuşlarının bir kombinasyonunu (hepsine yok) basılı tutarak erişildiğinden, bu seviyelere erişilir. Yalnızca kaydırma davranışını istiyorsanız, aynı zamanda iki tuşa basıldığında da davranışı istemiyorsanız, daha basit bir bildirim yapabilirsiniz (aynı dosyadan):

// 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)"
};

Bir düzene ekstra düzeyler ekleme

Xkb düzenleri oldukça modülerdir. Şunları yapabilirsiniz dahil mevcut düzenleri ve bunları değiştirir. Böylece 5 seviyeden az mevcut bir düzen seçebilir ve buna bazı seviyeler ekleyebiliriz.

Dosyayı mizanpajlarınızla /usr/share/X11/xkb/symbols/veya Xkb araçlarınızın mizanpaj aradığı herhangi bir yere kopyalayarak yeni mizanpajlar yapabilirsiniz . Ancak bu sudo ayrıcalığı gerektirir, bu yüzden en iyi çözüm değildir. Alternatif bir dizin yapısını kopyalamak xkb/ ve uygun dizin altındakiler içinde düzenleri koymak xkb/yani symbols/. Diyelim ki bir dosya yaptınız xkb-tree/symbols/my-layouts. Bu dosyada tanımlanan mizanpajları kullanmak için , çıktıyı kullanma -print seçeneğini kullanabilir setxkbmapve ardından çıktıyı buna ekleyebilirsiniz xkbcomp. Bu sarmalayıcı betiği düzenleri girdi olarak alır:

#!/bin/sh

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

Düzeni olan dosya söz konusu olduğunda, diyelim ki dört düzey kullanan "ABD uluslararası" düzenini genişletmek istiyoruz. Her şeyden önce, seviye 3 ve seviye 5 vites tuşlarını Neo'nun yaptığı gibi ayarladık:

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)"
};

Şimdi bazı ekstra karakterler eklemek istiyoruz. Örnek olarak sadece Qwerty mizanpajlarının ilk dört anahtarını kullanalım. Bu tuşlar vardır Qiçin Ruygun olan <AD01>için <AD04>. Öncelikle anahtarları sekiz seviyeye kadar kullanabilmemiz gerekiyor:

key.type[Group1] = "EIGHT_LEVEL";

İlk dört seviye için, onları yeniden tanımlamamak için onları eşleriz NoSymbol. Sonra iki seviye ekliyoruz. 5. seviyeye okları ekleriz ←↓↑→(† 2). 6. seviyeye yön tuşlarını ekliyoruz. Düzenimiz şöyle görünür:

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

};

Kullanmak için yaptığımız sarmalayıcı komut dosyasını kullanabiliriz:

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

† 1: Neo, de(neo)Xkb'dir; setxkbmap "de(neo)".

† 2: Xkb'nin kullandığı sembolik adları bulmak için adlı bir dosyayı arayın keysymdef.h. Adında bir dizinin altında olmalıdır X11/. Unicode adlarını da kullanabilirsiniz, örneğin U2192U + 2192 için.


1
Bu yanıtı oluşturmaya zaman ayırdığınız için teşekkür ederiz. Bir süredir JKLI anahtarlarımı ok tuşları olarak kullanmanın bir yolunu arıyordum, bu yüzden bu inanılmaz derecede kullanışlı oldu. Lütfen bu ekstra 50 puanın tadını çıkarın! (Yarını ödül olarak atayabilmeliyim.)
Glutanimate

1
Peki, teşekkürler, bu biraz geç gelse bile harika bir asnwer ama tam olarak geri aradığım şey (ama şimdi GNOME aslında değiştiricinin ayarını desteklemiyor - ancak yapılandırma dosyalarını kullanarak çalıştığı sürece, hepsi iyi).
sup

8

Biraz kazdıktan sonra:

(1) 5. seviyeyi seçmek için anahtar yapmak istediğim şeyle ilgili olmayan bazı garip şeyler (bazı Fransız düzenleri ile ilgili) yapar. Temel olarak hangi anahtarın ISO_Level5_Shift olarak kullanılacağını ayarlar. ISO_Level5_Shift, bazı belirsiz düzenlerde kullanılır. Bu yanıt, Google'ın "ISO_Level5_Shift" araması sırasında verdiği sonuçların sayısına ve bu bağlantılara dayanmaktadır .

(2) Bir fiziksel anahtardan 6 sembol almak için kullanılamaz. Bunu başarmanın bir yolu $ HOME dizinine yerleştirilmiş .xmodmap dosyası kullanmaktır.

İlk olarak, komut

xmodmap -pm

hangi anahtar simgelerin çeşitli değiştiriciler olarak hareket ettiğini verir. Sistemimde şöyle oldu:

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)

Bir tuşla 6 sembol kullanmak için mod3'ün ayarlanması gerekir. Bunun .xmodmap dosyasına yerleştirilmesi gerekir:

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

Sonra xmodmap -pm bana şunu verdi:

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)

94 nolu anahtar kodu mod3 olarak hareket etmeyi seçtim. Çeşitli fiziksel tuşların anahtar kodları xev komut satırı aracıyla bulunabilir (sadece çalıştırın ve çeşitli tuşlara basın, anahtar kodları görünecektir).

Sonra .xmodmap dosyasına yerleştirirsem

keycode 54 = 1 2 3 4 5 6

veya koş

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

Altgr, shift ve keycode 94 kullanarak bir tuştan altı farklı sembol alıyorum (fiziksel yerleşimimde sola kaydırmanın yanında işe yaramaz bir anahtar).

GÜNCELLEME: Yalnızca beş simgeye ihtiyacınız varsa, bunu şu şekilde ayarlamak yararlıdır:

keycode 54 = 1 2 3 3 5 6

Bazen bana 3 yerine 4 alıyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.