MacOS Sierra'daki bir anahtarı nasıl yeniden eşlerim, örneğin, Sağ Alttan Sağa Kontrol?


44

Sağ alttan sağa doğru kontrol etmek için Karabiner'i kullanırdım (Emacs kullanıcısı olarak çok daha fazla AltCH'yi kullanırım) ama Sierra'ya güncelleme bunu kırdı. Düşürme bir seçenek değildir.

Sierra'da anahtarları manuel olarak nasıl yeniden eşlerim? Özel olarak, Sağ Alttan Sağa Kontrol olarak remap etmek istiyorum.

Yanıtlar:


38

Apple'ın Teknik Notu TN2450 , tuşların nasıl yeniden eşleştirileceğini açıklar. Aşağıdaki komutu çalıştırmak, Sağ Alt, Sağ Kontrol olmak üzere yeniden eşleşecektir.

hidutil property --set '{"UserKeyMapping":
    [{"HIDKeyboardModifierMappingSrc":0x7000000e6,
      "HIDKeyboardModifierMappingDst":0x7000000e4}]
}'

Yukarıdaki komutun Sağ Alt ve Sağ Kontrolü değiştirmeyeceğini unutmayın. İkisi de Doğru Kontrol olacak. Bir MacBook'unuz varsa, harici bir klavyeye bağlanana kadar bunu fark etmezsiniz. İsterseniz geçiş Sağ Alt ve Sağ Kontrolü, aşağıdakilerden gibi ikinci bir anahtar komut eklemek gerekir.

hidutil property --set '{"UserKeyMapping":
    [{"HIDKeyboardModifierMappingSrc":0x7000000e4,
      "HIDKeyboardModifierMappingDst":0x7000000e6},
     {"HIDKeyboardModifierMappingSrc":0x7000000e6,
      "HIDKeyboardModifierMappingDst":0x7000000e4}]
}'

Teknik Notun altındaki tablo, her bir anahtar için onaltılık değerlerin bir listesine sahiptir. Herhangi bir tuşa geçmek için yukarıdaki cevabı genelleştirmek için or, bu listeden onaltılık değeri ile birlikte almalısınız 0x700000000. Aşağıdaki Python kodu, bunu yapmanın bir yolunu gösterir.

In [1]: def convert(val):
   ...:     int_val = int(val, 16)
   ...:     int_ref = 0x700000000
   ...:
   ...:     return hex(int_ref | int_val)
   ...:

In [2]: r_alt = '0xE6'

In [3]: print(convert(r_alt))
0x7000000e6

Güzel, teşekkürler! Bu komutla eşlemeleri varsayılan ayarlarına döndürmenin bir yolu var mı?
Aᴄʜᴇʀᴏɴғᴀɪʟ

1
Cᴀʟʟᴏᴅᴀᴄɪᴛʏ herhangi bir tuşa sıfırlamak için @, sadece ikisinde de o anahtarın değeri ile tekrar komutunu çalıştırın Srcve Dst.
Steven C. Howell

Bu, yeniden başlatmaya geri döner. Bu komutu her önyüklemede tekrar çalıştırabilirim, fakat bunu yapmamayı tercih ederim. Bunu kalıcı kılmanın bir yolu var mı?
firebush

2
: @firebush Bu yayın, bu kalıcı gibi komutları yapmak için bir giriş kanca kullanarak önerir stackoverflow.com/a/46460200/629530
firebush

1
@ StevenC.Howell Fonksiyon değiştiricilerin kombinasyonlarına ne dersiniz? Örneğin, klavyemdeki geriye doğru eğik çizgi \ , zor kullandığım Shift+Option+7gibi daha basit bir şeyle değiştirmek istediğim şey Option+.. Bunu nasıl yaparım? Yardımın için teşekkürler.
Nanashi No Gombe

15

Daha genel ve kullanıcı dostu bir yaklaşım, Sierra üzerinde çalışan Karabiner'in bir sürümü olan Karabiner-Elements'i kullanmaktır .


2
Karabiner-Elements ile ilgili hızlı güncelleme . MacOS High Sierra 10.13.3 (17D102) ile çalışır. Sağ Komut ve Seçenek tuşlarımı başarıyla değiştirdim.
Steve Clement

Üçüncü parti uygulamalar asla "daha genel" değildir. Neden birileri sistemlerini uygulamalar ile karıştırsa da, işletim sistemi içine yerleştirilen işleri yapar?
Bachsau

1
@Bachsau, tuş kombinasyonları, makrolar ve profiller ayarlamak veya herhangi bir dahili ve harici klavyeler için paylaşılan ve / veya bölünmüş haritalama konfigürasyonları kullanmak gibi birçok başka şey yapmanıza izin vermesi bakımından daha geneldir.
Janosch

@Bachsau Klavyelerimin her biri için farklı profiller tutuyorum, bu yüzden aynı şekilde çalışıyorlar. Çok güzel bir uygulama
AlexG

9

Bu Steven C. için bir zeyilname. Howell'in cevabı.

İskandinav klavyesine sahip yeni bir MacBook Pro'm var. Bu yeni model artık benim için önemli bir engel olan bir Esc anahtarına sahip değil.

Esc'yi üretmek için aşağıdakilerin § tuşunu (sol üst, sol ve 1 sekme tuşlarının) - bugün daha önce bir şey için hiç kullanmadığımı sandığım - çevireceğini keşfettim.

hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000029}]}'

Apple'ın belgelerinde (Steven'ın cevabına bağlı olarak) bu, "ABD Dışında Klavye \ 've |" şeklinde etiketlenmiştir. (0x64).

"ABD dışı" tuşların birçoğunu bulmak zor, çünkü genellikle kullandığınız klavyede farklı bir etiketi olan tuşlara atıfta bulunuyorlar. (Ben de "Aksan işareti ve tilde" benim klavyede üreten sola kayma ve z arasındaki anahtarı atıfta keşfetti <hangi anahtar karşılık gelir "Non-US kuramadı. #Ve ~" ben buldum bir kez daha fazla deneme etmedi anahtarım.) Denemek istiyorsanız, ihtiyacınız olan anahtarı bulana kadar betiği terminalde çalıştırmayı deneyin:

for ((i=1;i<=128;++i)); do
    printf '0x7000000%0x\n' "$i"
    printf '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x7000000%0x,"HIDKeyboardModifierMappingDst":0x70000000a}]}' "$i" |
    xargs -0 hidutil property --set >/dev/null
    read -p "Type some stuff: "
    hidutil property --set '{"UserKeyMapping":[{}]}' >/dev/null
done

Bu, anahtar kodlar üzerinde dolaşır ve sizin için özellikle yararlı olmayan bir anahtarın deneme ve yanılma yoluyla bulabileceğiniz umuduyla her seferinde bir tane değiştirir. Sizden istediğinde bir şeyler yazmayı deneyin - gbeklediğiniz yerine bir alırsanız, doğru anahtar kodunu buldunuz. ( Sizin için uygun bir seçenek değilse 0x70000000abaşka bir şeyle değiştirin g. Belki ganahtarı yeniden eşleştirmek mi istiyorsunuz ?) Yazma işlemini tamamladığınızda, bir sonraki tuşa geçmek için Enter tuşuna basmanız yeterlidir.

Buna değecek olursa, döngünün içindeki son komut tüm UserKeyMappingayarları nasıl değiştirdiğinizdir :

hidutil property --set '{"UserKeyMapping":[{}]}'

Başlangıçta çalıştırdığınızda hidutil property --get UserKeyMappingo üretir

(null)

ancak, ayarı değiştirmek için bu değeri geri besleyemezsiniz (veya daha doğrusu bu girişi kabul etmiyor, yok sayar).

(Eğer Terminal haberiniz yoksa, sadece yapıştırma / şeyi kopyalayıp forkadar donesizin de bash$istemi veya benzeri.)

Gereğince bu ilgili yığın taşması soruya evinizdeki dizininde bir komut dosyasındaki komutu koyabilirsiniz ve eklemek launchdbu değişiklik kalıcı kılmak için yapılandırma.

Bazı okuyucular bunu kendi başlarına yapmakta rahat olmazlarsa, işte sizin için bunu yapan hızlı bir senaryo. Yine, bunu Terminal isteminde kopyala / yapıştır.

mkdir -p "$HOME"/bin
printf '%s\n' '#!/bin/sh' \
    'hidutil property --set '"'"'{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000029}]}'"'" \
    >"$HOME"/bin/userkeymapping
chmod 755 "$HOME"/bin/userkeymapping
cat<<: >"$HOME"/Library/LaunchAgents/userkeymapping.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>Label</key>
    <string>userkeymapping</string>
    <key>ProgramArguments</key>
    <array>
        <string>$HOME/bin/userkeymapping</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>
:
launchctl load "$HOME"/Library/LaunchAgents/userkeymapping.plist

Açıkçası 0x700000064, komut dosyasında değiştirmeniz gerekenden başka bir anahtarla sona erdiyseniz ya da dosyada "$HOME"/bin/userkeymappingzaten yukarıdakileri koştuysanız, yaratma işlemi biter.


Bu cevabın daha önceki bir sürümü kullanılarak savunulmuştu LoginHookancak benim için çalışmıyordu ve stackoverflow.com/a/22872222/874188 e dayanarak launchdbunun yerine bir yaklaşıma geçtim .
üçlü

Ateşli bir vi / vim hayranı olarak bu tam da benim aradığım şeydi. Teşekkür ederim.
Philip Kearns

7

Tek yapmak istediğin tek bir anahtarı tekrarlamaksa

Örnek: Mac'teki Escape Key'i nasıl eşleştirebilirim?

  1.  Apple menüsüne gidip "Sistem Tercihleri" seçeneğini seçin ve sonra "Klavye" tercih paneline gidin ve "Klavye" sekmesini seçin

  2. Sağ alt köşedeki "Değiştirme Tuşları" düğmesine tıklayın

  3. Escape işlevini gerçekleştirmek için yeniden eşlemek ve değiştirmek istediğiniz tuşu seçin: Büyük Harf Kilidi (önerimiz), Kontrol, Seçenek veya Komut
  4. Donanım Escape tuşu olarak yeniden eşlemek istediğiniz tuşa karşılık gelen açılır listeden “Escape” seçeneğini seçin, ardından değişikliği ayarlamak için “Tamam” ı tıklayın.

referans


2
Bu, yalnızca bu cevapta belirtilen dört anahtar üzerinde kontrol sağlar.
üçlü,

Doğru ve çok faydalı. Birisi ek anahtarlar remap istiyorsa karabiner düşünün
jasonleonhard

Belirli bir anahtarı "sağ ⌥" gibi belirtmenin de bir yolu yok gibi görünüyor. Alabileceğiniz en belirgin "herhangi bir any" de olduğu gibi sinyaldir.
Merchako

Doğru, ama iyi yanı, sadece çalıştığı bir şeyi kurmak zorunda olmamanız.
jasonleonhard

0

Varsayılanları geri yüklemek isteyebilirsiniz:

# setting it to 'null' does not work on my MBP High Sierra
hidutil property --set '{"UserKeyMapping":[]}'
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.