Alterando teclas modificadoras na linha de comando


13

Como um usuário pesado do Emacs, gosto de remapear minha tecla Caps Lock para funcionar como a tecla Ctrl. Há uma caixa de diálogo conveniente no Painel de preferências do teclado para fazer isso. Mas o problema é que essa configuração se perde depois que alguém faz login em outra conta que não tem essa preferência definida.

Portanto, existe alguma maneira de fazer o mesmo que a caixa de diálogo do painel de preferências na linha de comando?


2
Possível duplicata de Atualizando mapeamentos de chave do modificador por meio da ferramenta de comando padrão . Embora a outra pergunta seja historicamente mais nova, ela tem uma resposta melhor (realmente funcionando).
— techraf

Respostas:


7

Alterando preferências e executando, defaults -currentHost read -gmostra quais alterações estão sendo gravadas. Eu ia escrever um pequeno script bash para automatizá-lo, mas parece que fui derrotado:

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

O script usa um argumento, se o argumento é emacs, troca de comando e controle; se o argumento for qualquer outra coisa, restaura os padrões.

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


Não parece funcionar de mim aqui com o Snow Leopard, mas é claramente um passo na direção certa.
— pantulis

@ pith ... o que a -gbandeira faz? Eu não vi isso na página de manual para defaults. Além disso, parece que ele está trocando dois conjuntos de valores: 4 com 2 e 10 com 12, mas existem apenas dois modificadores que são alterados. Você pode elaborar ou simplesmente olhou a saída, mas não sabe o que elas realmente representam? (No começo, eu suspeitava de quatro códigos de tecla - dois à esquerda, dois à direita - mas eles não parecem ser códigos de tecla, pelo menos não como relatado pelo driver do teclado.)
— Mark A. Donohoe

Eu faço os mapeamentos como você sugere, mas parece não ter efeito, embora na interface do usuário pareça mapeado. Apenas fazê-lo via interface do usuário parece funcionar ... Alguma idéia?
— precisa saber é o seguinte


2

Em "Atualizando mapeamentos de teclas modificadoras por meio da ferramenta de comando padrão" :

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>

Altere 1133e 50475para os IDs do fornecedor e do produto mostrados por ioreg -n IOHIDKeyboard -r. src 0e dst -1desativaria caps lock.

defaults -currentHost write -g modifica:

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

Você precisa sair e fazer login novamente para aplicar as alterações. Se os valores forem cadeias de caracteres (como na resposta por @pithyless), as alterações serão mostradas nas Preferências do Sistema, mas não terão efeito.

Valores das chaves :

-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

Combinando algumas respostas, criei esse script que parece funcionar ( mapeando Caps-lock para 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;
})'

Único problema que parece não ter nenhum efeito ... :(

Vou atualizar se conseguir que funcione.


0

Eu queria trocar apenas o comando certo com as teclas de opção certa .

Quando eu configuro a troca global de Comando e Opção em Preferências do Sistema ...> Teclado> Teclas Modificadoras ..., há a seguinte configuração no sistema (que funciona conforme o esperado):

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

Mas quando eu modificá-lo, para trocar apenas o lado direito como abaixo - ele não funciona:

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

É porque os valores são escritos como cadeias de caracteres e não inteiros. Você pode ver isso usando:

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

Portanto, a maneira correta de atualizar a configuração é usando o formato 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>'

No final, você precisa fazer logoff e logon novamente.


Você conseguiu que isso funcionasse, eu não posso dizer? Talvez seja necessário reiniciar?
— William

Ah sim. Você precisa fazer logoff e logon novamente.
— Virus_7 19/04/19

Estou tentando responder a esta pergunta apple.stackexchange.com/questions/280855/… Talvez você possa conversar? chat.stackexchange.com/rooms/38/ask-different-chat Tentei executar seu último comando e isso não muda nada para mim.
— William

Antes de tudo, remova o Karabiner-Elements e adapte o código do teclado (1452-591-0) e os códigos de chave (30064771302, 30064771303) ao seu sistema.
— Virus_7 20/04/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.