DefaultKeyBinding.dict - formato NeXT à moda antiga vs formato XML plist


9

DefaultKeyBinding.dict

O ~/Library/KeyBindings/DefaultKeyBinding.dictarquivo permite definir suas próprias associações de teclas no Mac OS X. Ele pode estar em um de dois formatos: formato NeXT à moda antiga ( exemplo ) ou formato XML plist à moda moderna ( exemplo ).

Rebinding +

Eu queria religar o comando backspace ( + ) para deleteWordBackward:e obtive alguma ajuda nesse segmento do AskDifferent . Foi sugerido que eu use isso como meu DefaultKeyBinding.dictarquivo:

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

Esse conselho funcionou (obrigado, pessoal!), Mas eu já tenho um trabalho DefaultKeybinding.dictno formato XML, então eu queria tentar fazê-lo funcionar dessa maneira. Adicionei apenas este texto próximo à parte inferior do meu arquivo existente:

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

E também tentei criar um novo arquivo formatado em XML com apenas a 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>

Mas nenhum dos arquivos funcionou. A situação aparente, então, é que você pode religar + apenas no formato NeXT à moda antiga, e não no formato XML plist. Minhas perguntas são:

  1. Isso é preciso ou a sintaxe deve mudar de alguma forma quando eu estou mudando para o formato XML?
  2. Vou me arrepender de mudar o restante do meu DefaultKeyBinding.dictarquivo para a sintaxe antiga? Não seria muito trabalhoso fazê-lo - são apenas uma ou duas dúzias de entradas - mas não tenho certeza se o estilo antigo foi descontinuado ou desaconselhado por algum outro motivo.

Editar: Original DefaultKeyBinding.dict

Alguém solicitou informações no meu arquivo original nos comentários, então acho que é melhor incluir a coisa toda aqui.

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

Não usei o formato XML, mas estou curioso para saber se você está usando outras meta-chaves nos atalhos do teclado no arquivo XML existente. Você está usando ~para opção ou $para turno?
conorgriffin

ou ^pelo controle?
conorgriffin

Tenho entradas de trabalho com ~e ^, mas nenhuma com $ou @. (Nota: eu fui em frente e acrescentou meu arquivo DefaultKeyBindings.dict original para o OP, bem como no caso em que acaba por ser útil.)
Micah R Ledbetter

É estranho, também não consigo fazer funcionar. Não parece estar muito bem documentado. Você tem apenas um pequeno número de atalhos que não são simplesmente 1 meta-chave e 1 letra; portanto, tente convertê-los para teste e, se funcionarem, é provável que os outros também o façam. Pode ser o caso de representar a chave de comando como @não é aceita no estilo XML do arquivo plist. Não faz muito sentido, mas não consigo encontrar mais nada sobre isso.
conorgriffin

Acabamos registrando um bug na Apple com relação a isso; vamos ver se eles respondem :).
Micah R Ledbetter

Respostas:


3

Acho que você não terá problemas ao usar o formato mais antigo. Todos os exemplos que encontrei usam a antiga notação NeXT. Embora eu não possa explicar por que o formato XML não funcionou, há uma solução alternativa para esse atalho de teclado específico, o que significa que você pode deixar o seu existente DefaultKeyBinding.dictintocado.

Existe um aplicativo chamado KeyRemap4MacBook, que pode ser baixado gratuitamente e, na captura de tela abaixo, você pode remapear o atalho do teclado + sem converter o restante do DefaultKeyBinding.dictarquivo e esse método não se limita aos aplicativos Cocoa.

KeyRemap4MacBook


3

\U007fnão pode ser usado em listas de propriedades XML. Você precisaria substituí-lo por &#x007f;um DELcaractere literal .


Você pode converter um plist antigo em XML com plutil:

plutil -convert xml1 test.plist

E do XML ao estilo antigo com pl:

pl -input test.plist

No momento, meu DefaultKeyBinding.dict tem 151 linhas e não tive problemas para armazená-lo como uma lista de propriedades no estilo antigo. Os postados por Brett Terpstra e Jacob Rus também estão no formato antigo.

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.