Cambiar las teclas modificadoras desde la línea de comando

13

Como usuario pesado de Emacs, me gusta volver a asignar mi tecla Bloq Mayús para que funcione como la tecla Ctrl. Hay un diálogo conveniente en el Panel de Preferencias de Teclado para hacer eso. Pero el problema es que esta configuración se pierde después de que alguien inicie sesión en otra cuenta que no tenga esta preferencia establecida.

Entonces, ¿hay alguna forma de hacer lo mismo que el cuadro de diálogo del panel de preferencias desde la línea de comandos?

    
pregunta pantulis 10.12.2010 - 18:30

5 respuestas

6

Cambiando las preferencias y ejecutando, defaults -currentHost read -g te muestra qué cambios se están escribiendo. Iba a escribir un breve script de bash para automatizarlo, pero parece que me dieron una paliza:

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

El script toma un argumento, si el   El argumento es emacs, entonces se intercambia.   comando y control, si el argumento   es cualquier otra cosa que restaura el   valores predeterminados.

     

enlace

    
respondido por el pithyless 10.12.2010 - 19:42
3

Puede usar KeyRemap4MacBook con PCKeyBoardHack . También le permite usar las teclas de Emacs en cualquier aplicación de Mac, incluidas las que no usan Cocoa, como las aplicaciones de MS.

    
respondido por el Matti Pastell 15.12.2010 - 08:41
1

De "Actualización de asignaciones de clave modificadora a través de la herramienta de comando de valores predeterminados" :

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>

Cambie 1133 y 50475 a las ID del proveedor y del producto mostradas por ioreg -n IOHIDKeyboard -r . src 0 y dst -1 deshabilitarían mayúsculas .

defaults -currentHost write -g modifica:

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

Tienes que cerrar sesión y volver a iniciarla para aplicar los cambios. Si los valores son cadenas (como en la respuesta de @pithyless), los cambios se muestran en las Preferencias del sistema pero no tienen ningún efecto.

Valores de las claves :

-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
    
respondido por el user495470 08.04.2013 - 10:02
0

Combinando algunas respuestas, se me ocurrió esta secuencia de comandos que parece funcionar ( asignación de mayúsculas a 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;
})'

El único problema es que no parece tener ningún efecto ... :(

Lo actualizaré si lo hago funcionar.

    
respondido por el SimonW 05.08.2014 - 00:01
0

Quería intercambiar Comando de la derecha con las teclas Opción de la derecha solamente.

Cuando configuro el comando global y la opción intercambiamos en las Preferencias del sistema ... > Teclado > Teclas modificadoras ..., hay una configuración siguiente en el sistema (que funciona como se espera):

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

Pero cuando lo modifico, para cambiar solo el lado derecho como se muestra a continuación, no funciona:

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

Se debe a que los valores se escriben como cadenas no enteros. Puedes ver eso 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>

Por lo tanto, la forma correcta de actualizar la configuración es mediante el 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>'

Al final, debes cerrar sesión y volver a iniciar sesión.

    
respondido por el Virus_7 27.03.2017 - 00:39

Lea otras preguntas en las etiquetas