कमांड लाइन से संशोधक कुंजियों को बदलना


13

एक भारी Emacs उपयोगकर्ता के रूप में, मैं 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


यह स्नो लेपर्ड के साथ मेरे यहाँ काम नहीं करता है, लेकिन यह स्पष्ट रूप से सही दिशा में एक कदम है।
पंतुलिस

@pith ... -gझंडा क्या है? मैंने उस आदमी के लिए पेज नहीं देखा defaults। इसके अलावा, ऐसा लगता है कि यह मानों के दो सेटों की अदला-बदली कर रहा है: 4 2 के साथ और 10 12 के साथ, फिर भी केवल दो संशोधक हैं जो बदलते हैं। क्या आप विस्तृत रूप से बता सकते हैं, या आपने केवल आउटपुट को देखा है लेकिन यह नहीं जानते कि वे वास्तव में क्या दर्शाते हैं? (पहले मुझे चार कुंजी कोडों पर संदेह था - दो बाईं ओर, दो दाईं ओर - लेकिन वे कुंजी कोड प्रतीत नहीं होते, कम से कम कीबोर्ड चालक द्वारा रिपोर्ट नहीं किए जाते।)
मार्क ए। डोनोहे

मैं सुझाव के रूप में मैपिंग करता हूं, लेकिन यह प्रभावी नहीं लगता है, हालांकि UI में यह मैप किया हुआ प्रतीत होता है। केवल यूआई के माध्यम से ऐसा करने से काम करने लगता है ... कोई विचार?
साइमनडब्ल्यू

3

आप उपयोग कर सकते हैं KeyRemap4MacBook साथ PCKeyBoardHack । यह आपको किसी भी मैक ऐप में Emacs कीज़ का उपयोग करने की अनुमति देता है, जिसमें कोको जैसे 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 0और dst -1निष्क्रिय कर देगा caps 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

कुछ उत्तरों को एक साथ जोड़कर मैं इस स्क्रिप्ट के साथ आया था जो काम करने के लिए लगती है ( कैप्स-लॉक टू कंट्रोल )।

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

अंत में, आपको लॉग ऑफ करना होगा और फिर से लॉग इन करना होगा।


क्या आपको यह काम करने के लिए मिला है जो मैं नहीं बता सकता हूं? क्या रिबूट की आवश्यकता हो सकती है?
विलियम

आह येस। आपको फिर से लॉग ऑफ और लॉग इन करना होगा।
वायरस_7

मैं इस सवाल का जवाब देने की कोशिश कर रहा हूं Apple.stackexchange.com/questions/280855/… क्या आप शायद चैट कर सकते हैं? chat.stackexchange.com/rooms/38/ask-different-chat मैंने आपका अंतिम आदेश चलाने की कोशिश की और यह मेरे लिए कुछ भी नहीं बदलता है।
विलियम

सबसे पहले Karabiner-Elements को हटाएं और अपने सिस्टम में कीबोर्ड कोड (1452-591-0) और कुंजी कोड (30064771302, 30064771303) अनुकूलित करें।
वायरस_7
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.