DefaultKeyBinding.dict - stary format NeXT vs format plist XML

9

DefaultKeyBinding.dict

~/Library/KeyBindings/DefaultKeyBinding.dictPlik pozwala zdefiniować własne skróty klawiszowe w systemie Mac OS X. To może być w jednym z dwóch formatów: w starym stylu formacie next ( przykład ) lub nowoczesny styl formacie XML plist ( przykład ).

Ponowne wiązanie +

Chciałem ponownie przypisać komendę backspace ( + ) deleteWordBackward:i uzyskałem pomoc w tym wątku AskDifferent . Zasugerowano, żebym użył tego jako mojego DefaultKeyBinding.dictpliku:

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

Ta rada zadziałała (dzięki, chłopaki!), Ale mam już pracę DefaultKeybinding.dictw formacie XML, więc chciałem spróbować, aby działała w ten sposób. Najpierw dodałem tylko ten tekst u dołu mojego istniejącego pliku:

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

Próbowałem też utworzyć nowy plik w formacie XML z samym wpisem + :

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

Ale żadne pliki nie działały. Widoczna sytuacja polega zatem na tym, że można ponownie powiązać + tylko w starym formacie NeXT, a nie w formacie XML plist. Moje pytania to:

  1. Czy to jest dokładne, czy też powinna zmienić się jakoś składnia, kiedy przechodzę do formatu XML?
  2. Czy będę żałować przeniesienia reszty mojego DefaultKeyBinding.dictpliku do starej składni? Nie byłoby to dużo pracy - to tylko jeden lub dwa tuziny wpisów - ale nie jestem pewien, czy stary styl jest przestarzały lub źle doradzany z innego powodu.

Edycja: Oryginalny DefaultKeyBinding.dict

Ktoś poprosił o informacje na temat mojego oryginalnego pliku w komentarzach, więc sądzę, że równie dobrze mogę tutaj zamieścić całość.

<?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
źródło
Nie korzystałem z formatu XML, ale jestem ciekawy, czy używasz innych meta-klawiszy w skrótach klawiaturowych w istniejącym pliku XML, który masz. Używasz ~opcji lub $zmiany?
conorgriffin
czy ^do kontroli?
conorgriffin
Mam działające wpisy z ~i ^, ale żadnych z $lub @. (Uwaga: poszedłem naprzód i dodałem mój oryginalny plik DefaultKeyBindings.dict również do OP, na wypadek, gdyby okazało się to przydatne.)
Micah R Ledbetter,
To dziwne, ja też nie mogę go uruchomić. Nie wydaje się, aby było to dobrze udokumentowane. Masz tylko niewielką liczbę skrótów, które nie są po prostu 1 meta-klawiszem i 1 literą, więc może spróbuj przekonwertować je na test, a jeśli działają, to prawdopodobnie również inne. Może być tak, że reprezentowanie klawisza polecenia @jest niedopuszczalne w stylu pliku plist w formacie XML. To nie ma większego sensu, ale nie mogę nic więcej na ten temat znaleźć.
conorgriffin
Skończyło się na tym, że Apple zgłosił błąd w tej sprawie; zobaczmy, czy odpowiedzą :).
Micah R Ledbetter,

Odpowiedzi:

3

Nie sądzę, abyś miał problemy z używaniem starszego formatu. Wszystkie znalezione przykłady używają starej notacji NeXT. Chociaż nie potrafię wyjaśnić, dlaczego format XML nie działał, istnieje sposób obejścia tego konkretnego skrótu klawiaturowego, co oznacza, że ​​możesz pozostawić swój istniejący DefaultKeyBinding.dictnietknięty.

Istnieje aplikacja o nazwie KeyRemap4MacBook, którą można pobrać bezpłatnie i na poniższym zrzucie ekranu możesz mapować skrót klawiaturowy + bez konwertowania pozostałej części DefaultKeyBinding.dictpliku, a ta metoda nie ogranicza się do aplikacji Cocoa.

KeyRemap4MacBook

conorgriffin
źródło
3

\U007fnie można go używać na listach właściwości XML. Trzeba go zastąpić literą &#x007f;lub dosłownie DEL.


Możesz przekonwertować plist w starym stylu na XML za pomocą plutil:

plutil -convert xml1 test.plist

I od XML do starego stylu dzięki pl:

pl -input test.plist

Mój plik DefaultKeyBinding.dict ma obecnie 151 linii i nie napotkałem żadnych problemów z przechowywaniem go jako listy właściwości w starym stylu. Te opublikowane przez Bretta Terpstrę i Jacoba Rusa są również w starym stylu.

Lri
źródło