DefaultKeyBinding.dict - formato NeXT vecchio stile vs formato plist XML


9

DefaultKeyBinding.dict

Il ~/Library/KeyBindings/DefaultKeyBinding.dictfile ti consente di definire le tue combinazioni di tasti in Mac OS X. Può essere in due formati: formato NeXT vecchio stile ( esempio ) o formato plist XML moderno ( esempio ).

Rilegatura +

Volevo ricollegare command-backspace ( + ) a deleteWordBackward:, e ho ottenuto un aiuto in questo thread AskDifferent . Mi è stato suggerito di utilizzare questo come mio DefaultKeyBinding.dictfile:

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

Questo consiglio ha funzionato (grazie, ragazzi!), Ma ho già un lavoro DefaultKeybinding.dictin formato XML, quindi volevo provare a farlo funzionare in quel modo. Ho prima aggiunto solo questo testo nella parte inferiore del mio file esistente:

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

E ho anche provato a creare un nuovissimo file in formato XML con solo la voce + :

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

Ma nessuno dei due file ha funzionato. La situazione apparente, quindi, è che puoi ricollegare + solo nel formato NeXT vecchio stile e non nel formato plist XML. Le mie domande sono:

  1. È accurato o la sintassi dovrebbe cambiare in qualche modo quando sto passando al formato XML?
  2. Mi pentirò di aver spostato il resto del mio DefaultKeyBinding.dictfile nella vecchia sintassi? Non sarebbe molto difficile farlo - sono solo una o due dozzine di voci - ma non sono sicuro che il vecchio stile sia deprecato o sconsigliato per qualche altro motivo.

Modifica: DefaultKeyBinding.dict originale

Qualcuno ha richiesto informazioni sul mio file originale nei commenti, quindi immagino che potrei anche includere tutto qui.

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

Non ho usato il formato XML, ma sono curioso di sapere se stai usando altri meta-tasti nelle scorciatoie da tastiera nel file XML esistente che hai. Stai usando ~per l'opzione o $per il turno?
Conorgriffin,

o ^per controllo?
Conorgriffin,

Ho voci di lavoro con ~e ^, ma nessuna con $o @. (Nota: sono andato avanti e ho aggiunto il mio file DefaultKeyBindings.dict originale all'OP anche nel caso risultasse utile.)
Micah R Ledbetter

È strano, non riesco nemmeno a farlo funzionare. Non sembra essere ben documentato. Hai solo un piccolo numero di scorciatoie che non sono semplicemente 1 meta-chiave e 1 lettera, quindi forse prova a convertirle in test e se funzionano allora è probabile che lo faccia anche le tue altre. Può essere il caso che rappresenti la chiave di comando in quanto @non è accettato nello stile XML del file plist. Non ha molto senso, ma non riesco a trovare altro al riguardo.
Conorgriffin,

Ho finito per archiviare un bug con Apple a riguardo; vediamo se rispondono :).
Micah R Ledbetter,

Risposte:


3

Non credo che avrai problemi con il formato precedente. Tutti gli esempi che ho trovato usano la vecchia notazione NeXT. Anche se non riesco a spiegare perché il formato XML non ha funzionato, esiste una soluzione alternativa per questa particolare scorciatoia da tastiera che significherebbe che puoi lasciare DefaultKeyBinding.dictintatto il tuo esistente .

Esiste un'applicazione chiamata KeyRemap4MacBook che è scaricabile gratuitamente e puoi vedere dallo screenshot qui sotto, puoi rimappare la scorciatoia da tastiera + senza convertire il resto del tuo DefaultKeyBinding.dictfile e questo metodo non è limitato alle applicazioni Cocoa.

KeyRemap4MacBook


3

\U007fnon può essere utilizzato negli elenchi di proprietà XML. Dovresti sostituirlo con &#x007f;o un DELpersonaggio letterale .


Puoi convertire un plist vecchio stile in XML con plutil:

plutil -convert xml1 test.plist

E da XML a vecchio stile con pl:

pl -input test.plist

Il mio DefaultKeyBinding.dict è attualmente di 151 righe e non ho riscontrato alcun problema memorizzandolo come un elenco di proprietà vecchio stile. Quelli pubblicati da Brett Terpstra e Jacob Rus sono anch'essi nel vecchio stile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.