Mengubah kunci pengubah dari baris perintah

13

Sebagai pengguna Emacs yang berat, saya ingin memetakan ulang tombol Caps Lock agar berfungsi sebagai tombol Ctrl. Ada dialog yang nyaman di Panel Preferensi Keyboard untuk melakukan itu. Tetapi masalahnya adalah bahwa pengaturan ini hilang setelah seseorang masuk ke akun lain yang belum menetapkan preferensi ini.

Jadi apakah ada cara melakukan hal yang sama dengan dialog panel preferensi dari baris perintah?

pantulis
sumber
2
Kemungkinan duplikat dari Memetakan pemetaan kunci pengubah melalui alat perintah default . Meskipun pertanyaan lain secara historis lebih baru, ia memiliki jawaban yang lebih baik (sebenarnya berfungsi).
techraf

Jawaban:

7

Mengubah preferensi dan menjalankan, defaults -currentHost read -gmenunjukkan kepada Anda perubahan apa yang sedang ditulis. Saya akan menulis skrip bash pendek untuk mengotomatiskannya, tetapi sepertinya saya dipukuli sampai habis:

#!/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

Script mengambil satu argumen, jika argumennya adalah emacs, maka ia menukar perintah dan kontrol, jika argumen itu adalah hal lain, ia mengembalikan default.

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

tanpa dasar
sumber
Tampaknya tidak berhasil dari saya di sini dengan Snow Leopard, tetapi jelas ini adalah langkah ke arah yang benar.
pantulis
@pith ... apa -gbenderanya? Saya tidak melihat itu di halaman manual untuk defaults. Juga, ini sepertinya bertukar dua set nilai: 4 dengan 2 dan 10 dengan 12, namun hanya ada dua pengubah yang berubah. Bisakah Anda menguraikan, atau apakah Anda hanya melihat output tetapi tidak tahu apa yang sebenarnya mereka wakili? (Awalnya saya menduga empat kode kunci - dua di sebelah kiri, dua di sebelah kanan - tetapi tampaknya bukan kode-kode kunci, setidaknya tidak seperti yang dilaporkan oleh driver keyboard.)
Mark A. Donohoe
Saya melakukan pemetaan seperti yang Anda sarankan tetapi tampaknya tidak berpengaruh meskipun di UI tampaknya dipetakan. Hanya melakukannya melalui UI tampaknya berhasil ... Ada ide?
SimonW
3

Anda dapat menggunakan KeyRemap4MacBook dengan PCKeyBoardHack . Ini juga memungkinkan Anda untuk menggunakan kunci Emacs di aplikasi Mac apa pun, termasuk yang tidak menggunakan Kakao seperti aplikasi MS.

Matti Pastell
sumber
2

Dari "Memperbarui pemetaan kunci pengubah melalui alat perintah default" :

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>

Ubah 1133dan 50475ke vendor dan ID produk yang ditunjukkan oleh ioreg -n IOHIDKeyboard -r. src 0dan dst -1akan menonaktifkan caps lock.

defaults -currentHost write -g memodifikasi:

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

Anda harus keluar dan kembali untuk menerapkan perubahan. Jika nilainya adalah string (seperti dalam jawaban oleh @pithyless), perubahan ditampilkan di System Preferences tetapi tidak memiliki efek apa pun.

Nilai kunci :

-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
Lri
sumber
0

Menggabungkan beberapa jawaban bersama-sama saya membuat skrip ini yang sepertinya berfungsi ( pemetaan Caps-lock to Control ).

$ 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;
})'

Satu-satunya masalah yang tampaknya tidak berpengaruh ... :(

Saya akan memperbarui jika saya membuatnya berfungsi.

SimonW
sumber
0

Saya ingin menukar Perintah Kanan dengan Opsi Kanan tombol saja.

Ketika saya setup global yang Command dan Option Swap di System Preferences ...> Keyboard> Modifier Keys ..., ada mengikuti konfigurasi dalam sistem (yang bekerja seperti yang diharapkan):

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

Tetapi ketika saya memodifikasinya, untuk menukar hanya sisi kanan seperti di bawah ini - tidak berfungsi:

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

Itu karena nilai ditulis sebagai string bukan bilangan bulat. Anda dapat melihatnya menggunakan:

$ 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>

Jadi cara yang tepat untuk memperbarui pengaturan menggunakan format XML:

$ 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>'

Pada akhirnya, Anda harus keluar dan masuk lagi.

Virus_7
sumber
Apakah Anda berhasil ini saya tidak tahu? Apakah perlu reboot?
William
Ah iya. Anda harus keluar & masuk lagi.
Virus_7
Saya mencoba menjawab pertanyaan ini apple.stackexchange.com/questions/280855/... Bisakah Anda mengobrol? chat.stackexchange.com/rooms/38/ask-different-chat Saya mencoba menjalankan perintah terakhir Anda dan itu tidak mengubah apa pun untuk saya.
William
Pertama-tama hapus Karabiner-Elements dan sesuaikan kode keyboard (1452-591-0) dan kode kunci (30064771302, 30064771303) ke sistem Anda.
Virus_7