Це доповнення до відповіді Стівена К. Хоуелла.
У мене новий MacBook Pro зі скандинавською клавіатурою. У цій новій моделі більше немає клавіші Esc, що є для мене значним недоліком.
Я виявив, що наступне перекладе клавішу § (ліворуч зліва від клавіші табуляції 1 та вище) - яку, напевно, я ніколи не використовував ні до чого сьогодні - для створення Esc.
hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000029}]}'
У документації Apple (пов'язаної з відповіддю Стівена) це позначено як "Клавіатура, яка не належить США та |" (0х64).
Деякі "не американські" клавіші важко знайти, оскільки вони, як правило, відносяться до клавіш, які мають іншу мітку на клавіатурі, яку ви використовуєте. (Я також виявив , що «Гравіс і тильда» відносяться до ключу між зрушенням вліво і г, що на моїй клавіатурі виробляє <
. Мені не вдалося встановити , який ключ відповідає «Non-US #
і ~
» і не експериментувати далі , коли я виявив мій ключ.) Якщо ви хочете експериментувати, спробуйте запустити скрипт у терміналі, поки не знайдете потрібний вам ключ:
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
Ця петля над кодами клавіш змінюється по черзі, сподіваючись, що ви зможете через пробну та помилкову помилку знайти ключ, який не є для вас особливо корисним. Спробуйте ввести щось, коли він попросить вас - якщо ви отримаєте g
замість того, що очікували, ви знайшли правильний код ключа. (Перейдіть 0x70000000a
на щось інше, якщо g
це не є зручним для вас вибором. Можливо, ви хочете перезавантажити g
ключ?) Коли ви закінчили набирати текст, просто натисніть клавішу Enter, щоб перейти до наступної клавіші.
Для чого це варто, остання команда всередині циклу полягає в тому, як ви запамповуєте всі UserKeyMapping
налаштування:
hidutil property --set '{"UserKeyMapping":[{}]}'
Коли ви спочатку запускаєте, hidutil property --get UserKeyMapping
вона виробляє
(null)
але, здається, ви не можете повернути це значення, щоб запам'ятати налаштування (вірніше, він приймає, але ігнорує цей ввід).
(Якщо ви не знайомі з Терміналом, просто скопіюйте / вставте річ з for
тих пір, поки done
на ваш bash$
запит чи подібне.)
Відповідно до цього пов'язаного питання щодо переповнення стека, ви можете помістити команду у файл сценарію у вашому домашньому каталозі та додати його до своєї launchd
конфігурації, щоб зробити цю зміну стійкою.
Якщо деяким читачам не зручно робити це самостійно, ось короткий сценарій, який робить це для вас. Знову ж просто скопіюйте та вставте це у вікні терміналу.
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
Очевидно, якщо у вас виникла якась інша кнопка, ніж 0x700000064
вам потрібно змінити це в сценарії, або у файлі, "$HOME"/bin/userkeymapping
він закінчується створенням, якщо ви вже виконали вище.