Değiştirme tuşlarını komut satırından değiştirme


13

Ağır bir Emacs kullanıcısı olarak, Ctrl tuşu olarak işlev görmek için Caps Lock tuşumu yeniden eşleştirmeyi seviyorum. Bunu yapmak için Klavye Tercihleri ​​Bölmesinde uygun bir iletişim kutusu vardır. Ancak sorun şu ki, bu tercih ayarlanmamış bir başka hesaba giriş yaptıktan sonra bu ayar kayboluyor.

Öyleyse, tercih bölmesi iletişim kutusuyla aynı işlemi komut satırından yapmanın bir yolu var mı?


2
Olası yinelenen varsayılan aracılığıyla değiştirici tuş eşleştirmeleri Güncellenmesi aracı komuta . Diğer soru tarihsel olarak daha yeni olsa da, daha iyi (aslında çalışan) bir cevabı var.
Techraf,

Yanıtlar:


6

Tercihleri ​​değiştirme ve çalıştırma, defaults -currentHost read -gsize hangi değişikliklerin yazıldığını gösterir. Otomatikleştirmek için kısa bir bash betiği yazacaktım, ama görünüşe göre yenilmiş gibi geldi:

#!/bin/bash                                                                      

mappingplist=com.apple.keyboard.modifiermapping

if [ $1 == "emacs" ]; then
    echo "Switching to emacs modifiers"
    defaults -currentHost write -g $mappingplist '(                              
                {                                                                
            HIDKeyboardModifierMappingDst = 4;                                   
            HIDKeyboardModifierMappingSrc = 2; },                                
                {                                                                
            HIDKeyboardModifierMappingDst = 12;                                  
            HIDKeyboardModifierMappingSrc = 10;                                  
        },                                                                       
                {                                                                
            HIDKeyboardModifierMappingDst = 2;                                   
            HIDKeyboardModifierMappingSrc = 4;                                   
        },                                                                       
                {                                                                
            HIDKeyboardModifierMappingDst = 10;                                  
            HIDKeyboardModifierMappingSrc = 12;                                  
        })'


else
    echo "Switching to default modifiers"
    defaults -currentHost delete -g $mappingplist
fi

Komut bir argüman alır, eğer argüman emacs ise, o zaman komut ve kontrolü değiştirir, argüman başka bir şeyse varsayılanları geri yükler.

http://forums.macrumors.com/showthread.php?t=949280


Burada benden Snow Leopard ile çalışmıyor gibi görünüyor, ama açıkça doğru yönde bir adım.
pantulis

pith ... -gbayrak ne iş yapıyor? Bunu man sayfasında görmedim defaults. Ayrıca, bu iki değer kümesini değiştiriyor gibi gözüküyor: 4'te 2 ve 10'da 12, ancak yine de değişen sadece iki değiştirici var. Çalışabilir misiniz, veya çıktıya baktınız ancak gerçekte neyi temsil ettiğini bilmiyor musunuz? (İlk başta dört anahtar koddan şüphelendim - ikisi solda, ikisi sağda - ama bunlar en azından klavye sürücüsü tarafından bildirildiği gibi, tuş kodları gibi
gözükmüyor

Eşlemeleri önerdiğiniz gibi yapıyorum ama UI'da haritalanmış gibi görünmesine rağmen etkili görünmüyor. Sadece UI ile yapmak iş gibi görünüyor ... Herhangi bir fikir?
SimonW


1

Gönderen "varsayılan komut aracı vasıtasıyla değiştirici tuş eşleştirmeleri Güncellenmesi" :

defaults -currentHost write -g com.apple.keyboard.modifiermapping.1133-50475-0 -array '<dict><key>HIDKeyboardModifierMappingSrc</key><integer>0</integer><key>HIDKeyboardModifierMappingDst</key><integer>2</integer></dict>

Değişim 1133ve 50475gösterdiği satıcı ve ürün kimliklerine ioreg -n IOHIDKeyboard -r. src 0ve dst -1devre dışı bırakır caps lock.

defaults -currentHost write -g değiştirir:

~/Library/Preferences/ByHost/.GlobalPreferences.*.plist

Değişiklikleri uygulamak için oturumu kapatıp tekrar açmanız gerekir. Değerler dizgiler ise (cevapta pithyless tarafından olduğu gibi), değişiklikler Sistem Tercihleri'nde gösterilir, ancak herhangi bir etkisi olmaz.

Anahtarların değerleri :

-1 none
0 caps lock
1 left shift
2 left control
3 left option
4 left command
5 keypad 0
6 help
9 right shift
10 right control
11 right option
12 right command

0

Birkaç cevabı bir araya getirince işe yaramış görünen bu senaryo ile karşılaştım ( Caps-Lock'u Control ile eşleştirmek ).

$ keyboard_id = "$(ioreg -n IOHIDKeyboard -r | grep -e VendorID\" -e ProductID | tr -d \"\|[:blank:] | cut -d\= -f2 | tr '\n' -)"
$ defaults -currentHost write -g "com.apple.keyboard.modifiermapping.${keyboard_id}0" '(
{
  HIDKeyboardModifierMappingDst = 2;
  HIDKeyboardModifierMappingSrc = 0;
})'

Herhangi bir etkisi görünmüyor tek sorun ... :(

Çalışmasını sağlarsam güncelleme yapacağım.


0

Sadece Sağ Seçenek tuşlarını kullanarak Sağ Komutu değiştirmek istedim .

Global Komutu ve Opsiyonu Sistem Tercihleri ​​...> Klavye> Değiştirici Tuşlar ... 'da değiştirdiğimde, sistemde aşağıdaki gibi bir işlem vardır (beklendiği gibi çalışır):

$ defaults -currentHost read -g com.apple.keyboard.modifiermapping.1452-591-0
(
        {
        HIDKeyboardModifierMappingDst = 30064771299;
        HIDKeyboardModifierMappingSrc = 30064771298;
    },
        {
        HIDKeyboardModifierMappingDst = 30064771303;
        HIDKeyboardModifierMappingSrc = 30064771302;
    },
        {
        HIDKeyboardModifierMappingDst = 30064771298;
        HIDKeyboardModifierMappingSrc = 30064771299;
    },
        {
        HIDKeyboardModifierMappingDst = 30064771302;
        HIDKeyboardModifierMappingSrc = 30064771303;
    }
)

Ama değiştirdiğimde, sadece aşağıdaki şekilde Sadece sağ tarafını değiştirmek için - işe yaramaz:

$ defaults -currentHost write -g com.apple.keyboard.modifiermapping.1452-591-0 '(
        {
        HIDKeyboardModifierMappingDst = 30064771303;
        HIDKeyboardModifierMappingSrc = 30064771302;
    },
        {
        HIDKeyboardModifierMappingDst = 30064771302;
        HIDKeyboardModifierMappingSrc = 30064771303;
    }
)'

Çünkü değerler tamsayı değil, dize olarak yazılır. Bunu kullanarak görebilirsiniz:

$ plutil -convert xml1 -o - ~/Library/Preferences/ByHost/.GlobalPreferences.*.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.keyboard.modifiermapping.1452-591-0</key>
    <array>
        <dict>
            <key>HIDKeyboardModifierMappingDst</key>
            <string>30064771303</string>
            <key>HIDKeyboardModifierMappingSrc</key>
            <string>30064771302</string>
        </dict>
        <dict>
            <key>HIDKeyboardModifierMappingDst</key>
            <string>30064771302</string>
            <key>HIDKeyboardModifierMappingSrc</key>
            <string>30064771303</string>
        </dict>
    </array>
</dict>
</plist>

Yani ayarı güncellemenin doğru yolu XML formatı kullanmak:

$ defaults -currentHost write -g com.apple.keyboard.modifiermapping.1452-591-0 -array \
'<dict>
    <key>HIDKeyboardModifierMappingDst</key>
    <integer>30064771303</integer>
    <key>HIDKeyboardModifierMappingSrc</key>
    <integer>30064771302</integer>
</dict>' \
'<dict>
    <key>HIDKeyboardModifierMappingDst</key>
    <integer>30064771302</integer>
    <key>HIDKeyboardModifierMappingSrc</key>
    <integer>30064771303</integer>
</dict>'

Sonunda oturumu kapatıp tekrar giriş yapmalısınız.


Bunu işe aldın mı söyleyemem? Yeniden başlatma gerekli olabilir mi?
William

Ah evet. Oturumu kapatıp tekrar açmanız gerekir.
Virus_7

Bu soruya cevap vermeye çalışıyorum apple.stackexchange.com/questions/280855/… Belki sohbet edebilir misiniz? chat.stackexchange.com/rooms/38/ask-different-chat Son komutunuzu çalıştırmayı denedim ve bu benim için hiçbir şeyi değiştirmiyor.
William

Öncelikle Karabiner-Elements'i kaldırın ve klavye kodunu (1452-591-0) ve anahtar kodlarını (30064771302, 30064771303) sisteminize uyarlayın.
Virus_7
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.