Зміна клавіш модифікатора з командного рядка


13

Як важкий користувач Emacs, я люблю перезавантажувати клавішу 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


Здається, у мене тут не працює Сніговий Леопард, але це явно крок у правильному напрямку.
pantulis

@pith ... що -gпрапор роблять? Я не бачив цього на сторінці man для defaults. Крім того, це виглядає так, що це замінити два набори значень: 4 на 2 і 10 на 12, але є лише два модифікатори, які змінюються. Чи можете ви детальніше розглянути, чи ви просто подивилися на вихід, але не знаєте, що вони насправді представляють? (Спочатку я підозрював чотири клавішні коди - два зліва, два праворуч, - але вони, здається, не є ключовими кодами, принаймні, не так, як повідомляв драйвер клавіатури.)
Марк А. Донохое,

Я роблю відображення так, як ви пропонуєте, але це, здається, не вступає в силу, хоча в інтерфейсі воно відображається відображеним. Тільки робити це через інтерфейс, здається, працює ... Будь-які ідеї?
SimonW

3

Ви можете використовувати KeyRemap4MacBook з PCKeyBoardHack . Він також дозволяє використовувати клавіші Emacs у будь-якому додатку Mac, включаючи ті, що не використовують какао, такі як програми 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 -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

0

Комбінуючи кілька відповідей разом, я придумав цей сценарій, який, здається, працює ( відображення 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;
})'

Єдина проблема, яка, здається, не має жодного ефекту ... :(

Я оновлю, якщо він змусить його працювати.


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.