Como remapear uma chave no macOS Sierra, por exemplo, Alt Alt a Right Control?


45

Eu costumava usar o Karabiner para remapear o Alt Alt para o Right Control (como usuário do Emacs eu uso o Control MUITO mais que o Alt), mas a atualização para o Sierra quebrou isso. O downgrade não é uma opção.

Como remapear manualmente as chaves no Sierra? Eu gostaria especificamente de remapear Alt Alt a Right Control.

Respostas:


40

A Nota técnica da Apple TN2450 descreve como remapear as chaves. A execução do comando a seguir remapeará Alt Direito para Controle Certo.

hidutil property --set '{"UserKeyMapping":
    [{"HIDKeyboardModifierMappingSrc":0x7000000e6,
      "HIDKeyboardModifierMappingDst":0x7000000e4}]
}'

Observe que o comando acima não está alternando o Alt direito e o controle direito. Ambos serão o Controle Certo. Se você possui um MacBook, não notará isso até conectar um teclado externo. Se você deseja alternar Alt Alt e Right Control, é necessário adicionar um segundo comando de alternância, como o seguinte.

hidutil property --set '{"UserKeyMapping":
    [{"HIDKeyboardModifierMappingSrc":0x7000000e4,
      "HIDKeyboardModifierMappingDst":0x7000000e6},
     {"HIDKeyboardModifierMappingSrc":0x7000000e6,
      "HIDKeyboardModifierMappingDst":0x7000000e4}]
}'

A tabela na parte inferior da Nota técnica possui uma lista de valores hexadecimais para cada chave. Para generalizar a resposta acima para alternar qualquer tecla, você deve orusar o valor hexadecimal dessa lista 0x700000000. O código Python a seguir demonstra uma maneira de fazer isso.

In [1]: def convert(val):
   ...:     int_val = int(val, 16)
   ...:     int_ref = 0x700000000
   ...:
   ...:     return hex(int_ref | int_val)
   ...:

In [2]: r_alt = '0xE6'

In [3]: print(convert(r_alt))
0x7000000e6

Nice - obrigado! Existe alguma maneira de restaurar os mapeamentos para os padrões com este comando?
— Aᴄʜᴇʀᴏɴғᴀɪʟ

1
@ Cᴀʟʟᴏᴅᴀᴄɪᴛʏ para redefinir qualquer chave, basta executar o comando novamente com o valor dessa chave em ambos Srce Dst.
— 9138 Steven C. Howell #

Isso reverte na reinicialização. Eu posso executar novamente este comando em cada inicialização, mas prefiro não fazer isso. Existe uma maneira de tornar isso permanente?
— Firebush #

2
@firebush Este post sugere o uso de um gancho de login para fazer comandos como este persistente: stackoverflow.com/a/46460200/629530
— firebush

1
@ StevenC.Howell Que tal combinações de modificadores de função? Por exemplo, a barra invertida \ no teclado é Shift+Option+7que eu gostaria de substituir por algo mais simples, como o Option+.que eu quase não uso. Como faço isso? Obrigado pela ajuda.
— Nanashi No Gombe

15

Uma abordagem mais geral e fácil de usar é usar o Karabiner-Elements , que é uma versão do Karabiner que funciona no Sierra.


2
Atualização rápida no Karabiner-Elements . Funciona no macOS High Sierra 10.13.3 (17D102). Troquei com sucesso as teclas Command e Option corretas.
— 21818 Steve Clement

Aplicativos de terceiros nunca são "mais gerais". Por que alguém iria sobrecarregar seu sistema com aplicativos fazendo coisas que são incorporadas diretamente no sistema operacional?
— Bachsau 23/06

1
O @Bachsau é mais geral, pois permite que você faça muitas outras coisas, por exemplo, definir combinações de teclas, macros e perfis ou usar configurações de mapeamento compartilhado e / ou dividido para qualquer teclado interno e externo.
— Janosch

@Bachsau Eu mantenho perfis diferentes para cada um dos meus teclados, para que funcionem da mesma forma. Muito bom app
— AlexG 25/11

9

Este é um adendo à resposta de Steven C. Howell.

Eu tenho um novo MacBook Pro com um teclado escandinavo. Este novo modelo não tem mais uma tecla Esc, o que é uma desvantagem significativa para mim.

Descobri que o seguinte traduzirá a tecla § (canto superior esquerdo, esquerdo de 1 e acima da tecla tab) - que eu acho que nunca usei para nada antes de hoje - para produzir Esc.

hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000029}]}'

Na documentação da Apple (vinculada à resposta de Steven), isso é rotulado como "Teclado fora dos EUA \ e |" (0x64).

Várias das teclas "fora dos EUA" são difíceis de descobrir porque geralmente se referem a teclas com um rótulo diferente no teclado que você está usando. (I também descoberto que "acento e til Grave" refere-se a chave entre desvio para a esquerda e z, que no meu teclado produz <. I não foi capaz de estabelecer que corresponde chave para "não-US #e ~" e não experimentar mais uma vez I encontrado minha chave.) Se você quiser experimentar, tente executar o script no terminal até encontrar a chave que precisa:

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

Isso percorre os códigos de chave e muda um de cada vez, na esperança de que você possa encontrar, por tentativa e erro, uma chave que não é particularmente útil para você. Tente digitar algo quando solicitado - se você receber um em gvez do que esperava, encontrou o código da chave certo. (Mude 0x70000000apara outra coisa se gnão for uma opção conveniente para você. Talvez você queira remapear a gtecla?) Quando terminar de digitar, basta pressionar Enter para prosseguir para a próxima tecla.

Pelo que vale, o último comando dentro do loop é como você zap todas as UserKeyMappingconfigurações:

hidutil property --set '{"UserKeyMapping":[{}]}'

Quando você executa inicialmente hidutil property --get UserKeyMapping, produz

(null)

mas parece que você não pode alimentar esse valor para zap a configuração (ou melhor, ele aceita, mas ignora essa entrada).

(Se você não estiver familiarizado com o Terminal, basta copiar / colar o item foraté o doneseu bash$prompt ou similar.)

De acordo com a pergunta Stack Overflow relacionada, você pode colocar o comando em um arquivo de script no diretório inicial e adicioná-lo à sua launchdconfiguração para tornar essa alteração persistente.

Caso alguns leitores não se sintam à vontade para fazer isso sozinhos, aqui está um script rápido que faz isso por você. Novamente, basta copiar / colar isso no prompt do Terminal.

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

Obviamente, se você acabou com outra chave que 0x700000064não a alterada no script ou no arquivo, "$HOME"/bin/userkeymappingela será criada se você já executou o procedimento acima.


Uma versão anterior desta resposta defendia o uso, LoginHookmas não estava funcionando para mim, e com base no stackoverflow.com/a/22872222/874188 , mudei para uma launchdabordagem.
— tripleee 27/02

Como um fervoroso fã do vi / vim, é exatamente isso que eu estava procurando. Obrigado.
— Philip Kearns

7

Se tudo o que você deseja fazer é remapear uma única chave

Exemplo: Como mapear novamente a tecla Escape no Mac

  1. Vá para o menu Apple e escolha “Preferências do sistema” e, em seguida, vá para o painel de preferências “Teclado” e escolha a guia “Teclado”.

  2. Clique no botão "Modifier Keys" no canto inferior direito

  3. Escolha a tecla que deseja remapear e modificar para executar a função Escape: Caps Lock (nossa recomendação), Controle, Opção ou Comando
  4. Selecione "Escape" na lista suspensa correspondente à chave que você deseja remapear como uma tecla Escape de hardware e clique em "OK" para definir a alteração

referência


2
Isso apenas lhe dá controle sobre as quatro chaves que são enumeradas nesta resposta.
— tripleee

Correto e muito útil. Se alguém quiser remapear chaves adicionais, considere karabiner
— jasonleonhard

Parece que também não há como especificar uma chave específica, como "right ⌥". O mais específico que você pode obter é o sinal, como em "qualquer ⌥".
— Merchako

Correto, mas a parte boa é que você não precisa instalar nada, apenas funciona.
— jasonleonhard

0

Caso você queira restaurar os padrões:

# setting it to 'null' does not work on my MBP High Sierra
hidutil property --set '{"UserKeyMapping":[]}'
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.