การเปลี่ยนคีย์ตัวดัดแปลงจากบรรทัดคำสั่ง


13

ในฐานะผู้ใช้ Emac ที่หนักหน่วงฉันชอบทำการตั้งค่าปุ่ม Caps Lock ของฉันใหม่ให้ทำงานเป็นปุ่ม Ctrl มีกล่องโต้ตอบที่สะดวกในบานหน้าต่างการตั้งค่าแป้นพิมพ์เพื่อทำสิ่งนั้น แต่ปัญหาคือการตั้งค่านี้หายไปหลังจากมีคนลงชื่อเข้าใช้บัญชีอื่นที่ไม่มีการตั้งค่านี้

ดังนั้นมีวิธีการทำเช่นเดียวกับการโต้ตอบการตั้งค่าจากบรรทัดคำสั่งหรือไม่


2
ซ้ำเป็นไปได้ของการอัปเดตแมปที่สำคัญปรับปรุงผ่านค่าเริ่มต้นของคำสั่งเครื่องมือ แม้ว่าคำถามอื่น ๆ จะใหม่กว่าในอดีต แต่ก็มีคำตอบที่ดีกว่า (ใช้งานได้จริง)
techraf

คำตอบ:


7

การเปลี่ยนการกำหนดค่าและการใช้งานdefaults -currentHost read -gแสดงให้คุณเห็นว่ามีการเปลี่ยนแปลงอะไรบ้าง ฉันจะเขียนสคริปต์ทุบตีสั้น ๆ เพื่อทำให้มันเป็นไปโดยอัตโนมัติ แต่ดูเหมือนว่าฉันถูกตีจนชก:

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

สคริปต์รับอาร์กิวเมนต์หนึ่งตัวหากอาร์กิวเมนต์เป็น emacs มันจะสลับคำสั่งและการควบคุมหากอาร์กิวเมนต์นั้นเป็นอย่างอื่นก็จะคืนค่าเริ่มต้น

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


ดูเหมือนจะไม่ได้ผลจากฉันที่นี่กับ Snow Leopard แต่เห็นได้ชัดว่าเป็นการก้าวไปในทิศทางที่ถูกต้อง
pantulis

@ พิ ธ ... -gธงทำอะไร defaultsฉันไม่เห็นว่าในหน้าคนสำหรับ นอกจากนี้ดูเหมือนว่าจะมีการแลกเปลี่ยนค่าสองชุด: 4 กับ 2 และ 10 กับ 12 แต่มีเพียงตัวดัดแปลงสองตัวที่เปลี่ยนไป คุณสามารถทำอย่างละเอียดหรือคุณเพียงแค่ดูที่ผลลัพธ์ แต่ไม่ทราบว่าสิ่งที่พวกเขาเป็นตัวแทนจริงหรือไม่? (ตอนแรกฉันสงสัยรหัสสี่รหัส - สองทางด้านซ้ายสองทางด้านขวา - แต่รหัสเหล่านั้นดูเหมือนจะไม่เป็นรหัสสำคัญอย่างน้อยไม่รายงานโดยไดรเวอร์แป้นพิมพ์)
Mark A. Donohoe

ฉันทำการแมปตามที่คุณแนะนำ แต่ดูเหมือนว่าจะไม่มีผลแม้ว่าใน UI จะมีการแมป ดูเหมือนว่าจะทำผ่าน UI เท่านั้นที่ทำงานได้ ... ความคิดใด ๆ
SimonW

3

คุณสามารถใช้KeyRemap4MacBookกับPCKeyBoardHack นอกจากนี้ยังช่วยให้คุณใช้ปุ่ม Emacs ในแอพ Mac รวมถึงปุ่มที่ไม่ได้ใช้ Cocoa เช่นแอป MS


2

จาก"การอัพเดตการแม็พคีย์ตัวแก้ไขผ่านเครื่องมือคำสั่งค่าดีฟอลต์" :

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>

เปลี่ยน1133และให้ผู้ขายและสินค้ารหัสที่แสดงโดย50475 และจะปิดการใช้งานioreg -n IOHIDKeyboard -rsrc 0dst -1caps lock

defaults -currentHost write -g ปรับเปลี่ยน:

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

คุณต้องออกจากระบบและย้อนกลับเพื่อใช้การเปลี่ยนแปลง หากค่าเป็นสตริง (เช่นในคำตอบโดย @pithyless) การเปลี่ยนแปลงจะแสดงในการตั้งค่าระบบ แต่ไม่มีผลใด ๆ

ค่าของคีย์ :

-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

เมื่อรวมคำตอบสองสามข้อเข้าด้วยกันฉันได้พบกับสคริปต์ที่ดูเหมือนว่าจะใช้งานได้ ( การจับคู่ Caps-lock กับการควบคุม )

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

ปัญหาเดียวที่ดูเหมือนว่าจะไม่มีผลใด ๆ ... :(

ฉันจะอัปเดตถ้าฉันใช้งานได้


0

ฉันต้องการสลับคำสั่งที่ถูกต้องด้วยตัวเลือกที่เหมาะสมปุ่มเท่านั้น

เมื่อติดตั้งผมระดับโลกคำสั่งและตัวเลือกการแลกเปลี่ยนในการตั้งค่าระบบ ... > คีย์บอร์ด> ปรับเปลี่ยนคีย์ ... , มีดังต่อไปนี้การตั้งค่าในระบบ (ซึ่งทำงานตามที่คาด):

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

แต่เมื่อฉันแก้ไขมันเพื่อสลับเฉพาะด้านขวาดังนี้ - มันไม่ทำงาน:

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

เป็นเพราะค่าถูกเขียนเป็นสตริงไม่ใช่จำนวนเต็ม คุณจะเห็นว่าการใช้:

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

ดังนั้นวิธีที่ถูกต้องในการอัปเดตการตั้งค่าก็คือการใช้รูปแบบ 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>'

ในตอนท้ายคุณต้องออกจากระบบและลงชื่อเข้าใช้อีกครั้ง


คุณได้รับสิ่งนี้ในการทำงานที่ฉันไม่สามารถบอกได้หรือไม่? จำเป็นต้องรีบูตหรือไม่
วิลเลียม

อ่า ... ใช่ คุณต้องออกจากระบบและเข้าสู่ระบบอีกครั้ง
Virus_7

ฉันพยายามตอบคำถามนี้apple.stackexchange.com/questions/280855/… คุณสามารถแชทได้หรือไม่? chat.stackexchange.com/rooms/38/ask-different-chat ฉันลองใช้คำสั่งสุดท้ายของคุณแล้วและมันก็ไม่เปลี่ยนแปลงอะไรเลยสำหรับฉัน
วิลเลียม

ก่อนอื่นให้ลบ Karabiner-Elements และปรับแต่งรหัสแป้นพิมพ์ (1452-591-0) และรหัสสำคัญ (30064771302, 30064771303) ให้กับระบบของคุณ
Virus_7
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.