답변:
환경 설정을 변경하고 실행 defaults -currentHost read -g
하면 어떤 변경 내용이 작성되고 있는지 보여줍니다. 자동화하기 위해 짧은 bash 스크립트를 작성하려고했지만 펀치에 맞은 것 같습니다.
#!/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이면 스크립트는 하나의 인수를 취하며, 인수가 기본값이면 다른 인수 인 경우 명령과 제어를 교환합니다.
-g
깃발은 무엇입니까? 에 대한 맨 페이지에서이 내용을 보지 못했습니다 defaults
. 또한 이것은 두 개의 값 세트를 교환하는 것처럼 보입니다. 4는 2로, 10은 12로 바꾸지 만 변경자는 두 개만 있습니다. 정교하게 설명 할 수 있습니까, 아니면 단순히 결과를 보았지만 실제로 무엇을 나타내는 지 모릅니 까? (처음에는 왼쪽에 두 개, 오른쪽에 두 개) 네 개의 키 코드가 의심되었지만 적어도 키보드 드라이버에서보고하지 않은 키 코드는 아닌 것 같습니다.
당신은 사용할 수 있습니다 KeyRemap4MacBook을 와 PCKeyBoardHack . 또한 MS 앱과 같은 Cocoa를 사용하지 않는 키를 포함하여 모든 Mac 앱에서 Emacs 키를 사용할 수 있습니다.
에서 "기본값을 변경 키 매핑을 업데이트 도구를 명령" :
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
로 표시 공급 업체 및 제품 ID를에 ioreg -n IOHIDKeyboard -r
. src 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
몇 가지 답변을 함께 결합하면 작동하는 것처럼 보이는이 스크립트를 만들었습니다 ( Caps-lock을 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;
})'
아무런 영향을 미치지 않는 것만 문제입니다 ... :(
작동하게되면 업데이트하겠습니다.
Right Command 를 Right Option 키로 만 바꾸고 싶었습니다 .
시스템 환경 설정 ...> 키보드> 수정 자 키 ...에서 전역 명령 및 옵션 스왑을 설정하면 시스템에 다음과 같은 구성이 있습니다 (예상대로 작동 함).
$ 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>'
마지막에는 로그 오프했다가 다시 로그인해야합니다.