Alternar teclas de função no OS X via linha de comando?

1

Para um jogo (WoW), quero trocar as teclas cmd e alt, porque quero vinculá-las como um modificador de teclas de atalho. O problema é que você não pode vincular a tecla de comando, então eu tenho que trocar as chaves nas configurações toda vez que quiser reproduzir e trocar depois.

Existe uma maneira de fazer isso na linha de comando para que eu possa criar um script?

Alexander Theißen
fonte

Respostas:

0

Você pode usar o KeyRemap4MacBook :

k=/Applications/KeyRemap4MacBook.app/Contents/Applications/KeyRemap4MacBook_cli.app/Contents/MacOS/KeyRemap4MacBook_cli
$k changed | grep -q ^remap.commandL2optionL= && mode=disable || mode=enable
$k $mode remap.commandL2optionL
$k $mode remap.commandR2optionR
$k $mode remap.optionL2commandL
$k $mode remap.optionrcommandr

Você pode pressionar o comando shift-F1 swap e a opção usando um private.xml como este:

<?xml version="1.0"?>
<root>
  <item>
    <name>toggleoptcmd</name>
    <identifier>toggleoptcmd</identifier>
    <autogen>__KeyToKey__ KeyCode::F1, VK_SHIFT | ModifierFlag::NONE,
    KeyCode::VK_CONFIG_TOGGLE_swapoptcmd</autogen>
  </item>
  <item>
    <name>swapoptcmd</name>
    <identifier vk_config="true">swapoptcmd</identifier>
    <autogen>__KeyToKey__ KeyCode::OPTION_L, KeyCode::COMMAND_L</autogen>
    <autogen>__KeyToKey__ KeyCode::OPTION_R, KeyCode::COMMAND_R</autogen>
    <autogen>__KeyToKey__ KeyCode::COMMAND_L, KeyCode::OPTION_L</autogen>
    <autogen>__KeyToKey__ KeyCode::COMMAND_R, KeyCode::OPTION_R</autogen>
  </item>
</root>    

Isso trocaria a opção e o comando apenas quando o TextEdit estiver na frente:

<?xml version="1.0"?>
<root>
<appdef>
  <appname>TEXTEDIT</appname>
  <equal>com.apple.TextEdit</equal>
</appdef>
  <item>
    <name>swapoptcmdtextedit</name>
    <identifier>swapoptcmdtextedit</identifier>
    <only>TEXTEDIT</only>
    <autogen>__KeyToKey__ KeyCode::OPTION_L, KeyCode::COMMAND_L</autogen>
    <autogen>__KeyToKey__ KeyCode::OPTION_R, KeyCode::COMMAND_R</autogen>
    <autogen>__KeyToKey__ KeyCode::COMMAND_L, KeyCode::OPTION_L</autogen>
    <autogen>__KeyToKey__ KeyCode::COMMAND_R, KeyCode::OPTION_R</autogen>
  </item>
</root>    

Outra opção é usar AppleScript:

tell application "System Preferences"
    reveal anchor "keyboardTab" of pane "com.apple.preference.keyboard"
end tell    
tell application "System Events" to tell window 1 of process "System Preferences"
    click button "Modifier Keys…" of tab group 1
    tell sheet 1
        --tell pop up button 5
        --click
        --click menu item "Apple Wireless Keyboard" of menu 1
        --end tell
        if value of pop up button 1 is "⌘ Command" then
            tell pop up button 1
                click
                click menu item "⌥ Option" of menu 1
            end tell
            tell pop up button 2
                click
                click menu item "⌘ Command" of menu 1
            end tell
        else
            tell pop up button 1
                click
                click menu item "⌘ Command" of menu 1
            end tell
            tell pop up button 2
                click
                click menu item "⌥ Option" of menu 1
            end tell
        end if
        click button "OK"
    end tell
end tell    
quit application "System Preferences"
Lri
fonte
3

Na verdade, você pode fazer isso no terminal. É basicamente insano, no entanto.

#!/bin/bash
# Remap capslock to control. Really.
#
# list of keyboards plugged in to this computer
keyboard_ids=$(ioreg -n IOHIDKeyboard -r | grep -E 'VendorID"|ProductID' | awk '{ print $4 }' | paste -s -d'-\n' -)
# check if the keyboards are already remapped
echo $keyboard_ids | xargs -I{} sh -c 'defaults -currentHost read -g "com.apple.keyboard.modifiermapping.{}-0" | grep "Dst = 2" > /dev/null'
if [[ $? -ne 0 ]]; then
  # remap the keyboards
  echo $keyboard_ids | xargs -I{} defaults -currentHost write -g "com.apple.keyboard.modifiermapping.{}-0" -array "<dict><key>HIDKeyboardModifierMappingDst</key><integer>2</integer><key>HIDKeyboardModifierMappingSrc</key><integer>0</integer></dict>"
fi

Isso muda ~/Library/Preferences/ByHost/.GlobalPreferences.<machine_identifier>.pliste, em seguida, você pode efetuar logoff e logon novamente ou abrir a prefação do teclado para aplicar a configuração.

indireto
fonte
Isso é incrível, mas você precisa especificar -n1 para xargs para fazer com que seja necessário apenas 1 palavra por vez.
Jack Casey
1

Não tenho certeza se você pode fazê-lo via Terminal, mas uma boa solução seria criar um script do Automator para fazer isso rapidamente. A maneira mais simples seria um bloqueio 'me veja fazer', embora eles não pareçam nada polidos.

Uma maneira mais complicada seria usar um AppleScript, por si só ou com um script Automator. No entanto, não sei exatamente como você usaria o AppleScript, mas tenho certeza de que você poderia descobrir.

Matt Reynolds
fonte
Eu fiz isso com o automator. Eu nunca usei o script da apple. Acho que vou analisar isso quando tiver tempo para isso.
Alexander Theißen