DefaultKeyBinding.dict: formato NeXT de estilo antiguo frente a formato de plist XML

9

DefaultKeyBinding.dict

El ~/Library/KeyBindings/DefaultKeyBinding.dictarchivo le permite definir sus propias asociaciones de teclas en Mac OS X. Puede estar en uno de dos formatos: formato NeXT de estilo antiguo ( ejemplo ) o formato de plist XML de estilo moderno ( ejemplo ).

Rebinding +

Quería volver a vincular el comando-retroceso ( + ) a deleteWordBackward:, y obtuve algo de ayuda en este hilo AskDifferent . Se sugirió que use esto como mi DefaultKeyBinding.dictarchivo:

/* my keybindings */
{
"@\U007F" = "deleteWordBackward:"; /* delete backwards one word */
}  

Este consejo funcionó (¡gracias, muchachos!), Pero ya estoy trabajando DefaultKeybinding.dicten el formato XML, así que quería intentar que funcionara de esa manera. Primero agregué solo este texto cerca del final de mi archivo existente:

<key>@\U007F</key>
<string>deleteWordBackward:</string>

Y también intenté crear un nuevo archivo con formato XML con solo la entrada + :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>@\U007F</key>
    <string>deleteWordBackward:</string>
</dict>
</plist>

Pero ninguno de los archivos funcionó. La situación aparente, entonces, es que puede volver a vincular + solo en el formato NeXT de estilo antiguo, y no en el formato de plist XML. Mis preguntas son:

  1. ¿Es correcto o la sintaxis debería cambiar de alguna manera cuando cambio al formato XML?
  2. ¿Me arrepentiré de mover el resto de mi DefaultKeyBinding.dictarchivo a la sintaxis anterior? No sería mucho trabajo hacerlo, es solo una o dos docenas de entradas, pero no estoy seguro de si el estilo antiguo está en desuso o mal aconsejado por alguna otra razón.

Editar: Original DefaultKeyBinding.dict

Alguien solicitó información sobre mi archivo original en los comentarios, por lo que creo que también podría incluir todo aquí.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key></key>
    <string>complete:</string>
    <key>^ </key>
    <string>setMark:</string>
    <key>^a</key>
    <string>moveToBeginningOfLine:</string>
    <key>^e</key>
    <string>moveToEndOfLine:</string>
    <key>^j</key>
    <string>setMark:</string>
    <key>^v</key>
    <string>pageDown:</string>
    <key>^w</key>
    <string>deleteToMark:</string>
    <key>^x</key>
    <dict>
        <key>^m</key>
        <string>selectToMark:</string>
        <key>^x</key>
        <string>swapWithMark:</string>
    </dict>
    <key>~</key>
    <string>deleteWordBackward:</string>
    <key>~&lt;</key>
    <string>moveToBeginningOfDocument:</string>
    <key>~&gt;</key>
    <string>moveToEndOfDocument:</string>
    <key>~^h</key>
    <string>deleteWordBackward:</string>
    <key>~b</key>
    <string>moveWordBackward:</string>
    <key>~d</key>
    <string>deleteWordForward:</string>
    <key>~f</key>
    <string>moveWordForward:</string>
    <key>~n</key>
    <string>scrollLineDown:</string>
    <key>~p</key>
    <string>scrollLineUp:</string>
    <key>~v</key>
    <string>pageUp:</string>
    <key>~</key>
    <string>deleteWordBackward:</string>
</dict>
</plist>
Micah R Ledbetter
fuente
No he usado el formato XML, pero tengo curiosidad por saber si está utilizando otras meta-teclas en los atajos de teclado en el archivo XML existente que tiene. ¿Estás usando ~para la opción o $para el turno?
conorgriffin
o ^para el control?
conorgriffin
Tengo entradas de trabajo con ~y ^, pero ninguna con $o @. (Nota: seguí adelante y agregué mi archivo original DefaultKeyBindings.dict al OP también en caso de que resulte útil).
Micah R Ledbetter
Es extraño, tampoco puedo hacer que funcione. No parece estar muy bien documentado. Solo tiene una pequeña cantidad de accesos directos que no son simplemente 1 metaclave y 1 letra, así que tal vez intente convertirlos para probar y si funcionan, es probable que sus otros también lo hagan. Es posible que representar la tecla de comando como @no se acepte en el estilo XML del archivo plist. No tiene mucho sentido, pero no puedo encontrar nada más al respecto.
conorgriffin
Terminé presentando un error con Apple con respecto a esto; A ver si responden :).
Micah R Ledbetter

Respuestas:

3

No creo que tenga ningún problema al usar el formato anterior. Todos los ejemplos que he encontrado usan la antigua notación NeXT. Aunque no puedo explicar por qué el formato XML no funcionó, existe una solución alternativa para este método abreviado de teclado en particular, lo que significaría que puede dejar DefaultKeyBinding.dictintacto el existente .

Hay una aplicación llamada KeyRemap4MacBook que se puede descargar gratis y puede ver en la captura de pantalla a continuación, puede reasignar el atajo de teclado + sin convertir el resto de su DefaultKeyBinding.dictarchivo y este método no se limita a las aplicaciones de Cocoa.

KeyRemap4MacBook

conorgriffin
fuente
3

\U007fno se puede usar en listas de propiedades XML. Tendría que reemplazarlo con &#x007f;o con un DELcarácter literal .


Puede convertir un plist de estilo antiguo a XML con plutil:

plutil -convert xml1 test.plist

Y de XML a estilo antiguo con pl:

pl -input test.plist

Mi DefaultKeyBinding.dict es actualmente 151 líneas, y no he tenido ningún problema al almacenarlo como una lista de propiedades de estilo antiguo. Los publicados por Brett Terpstra y Jacob Rus también están en el formato antiguo.

Lri
fuente