DefaultKeyBinding.dict - формат NeXT старого стиля против формата XML plist

9

DefaultKeyBinding.dict

~/Library/KeyBindings/DefaultKeyBinding.dictФайл позволяет определить свои собственные сочетания клавиш в Mac OS X. Это может быть в одном из двух форматов: старый стиль формат NeXT ( пример ) или в современном стиле в формат XML PLIST ( пример ).

Переплет +

Я хотел перепривязать команду backspace ( + ) deleteWordBackward:и получил некоторую помощь в этом потоке AskDifferent . Было предложено использовать это как мой DefaultKeyBinding.dictфайл:

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

Этот совет сработал (спасибо, ребята!), Но у меня уже есть работа DefaultKeybinding.dictв формате XML, поэтому я хотел попытаться заставить его работать таким образом. Сначала я добавил только этот текст в нижней части моего существующего файла:

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

И я также попытался создать совершенно новый файл в формате XML с помощью только + записи:

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

Но ни один из файлов не работал. Таким образом, очевидная ситуация заключается в том, что вы можете выполнить повторную привязку + только в старом формате NeXT, а не в формате XML plist. Мои вопросы:

  1. Это точно, или синтаксис должен измениться, когда я переключаюсь на формат XML?
  2. Буду ли я сожалеть о переносе остальной части моего DefaultKeyBinding.dictфайла на старый синтаксис? Это не будет большой работой, это всего лишь одна или две дюжины записей, но я не уверен, что старый стиль устарел или опрометчив по какой-то другой причине.

Изменить: Оригинал DefaultKeyBinding.dict

Кто-то запросил информацию в моем исходном файле в комментариях, поэтому я думаю, что я мог бы также включить все это сюда.

<?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>
Мика Р Ледбеттер
источник
Я не использовал формат XML, но мне интересно, используете ли вы какие-либо другие мета-клавиши в сочетаниях клавиш в имеющемся у вас XML-файле. Вы используете ~для варианта или $для смены?
коноргрифин
или ^для контроля?
коноргрифин
У меня есть рабочие записи с ~и ^, но нет с $или @. (Примечание: я пошел дальше и добавил свой оригинальный файл DefaultKeyBindings.dict в ОП, а также на тот случай, если это окажется полезным.)
Мика Р. Ледбеттер,
Странно, я не могу заставить его работать. Это не очень хорошо задокументировано. У вас есть только небольшое количество ярлыков, которые не являются просто 1 мета-ключом и 1 буквой, так что, возможно, попробуйте преобразовать их в тест, и если они сработают, то, скорее всего, и другие. Это может быть тот случай, когда представление командного ключа @неприемлемо в стиле XML файла plist. Это не имеет особого смысла, но я не могу найти больше ничего об этом.
коноргрифин
Закончилась подача сообщения об ошибке в Apple по этому поводу; посмотрим, ответят ли они :).
Мика Р Ледбеттер

Ответы:

3

Я не думаю, что у вас возникнут проблемы с использованием старого формата. Все примеры, которые я нашел, используют старые обозначения NeXT. Хотя я не могу объяснить, почему формат XML не работает, для этого конкретного сочетания клавиш есть обходной путь, который может означать, что вы можете оставить свой существующий без изменений DefaultKeyBinding.dict.

Существует приложение под названием KeyRemap4MacBook, которое можно бесплатно загрузить, и вы можете видеть на скриншоте ниже, вы можете переназначить сочетание клавиш + без преобразования остальной части вашего DefaultKeyBinding.dictфайла, и этот метод не ограничивается приложениями Какао.

KeyRemap4MacBook

conorgriffin
источник
3

\U007fне может использоваться в списках свойств XML. Вам нужно заменить его &#x007f;или буквальный DELсимвол.


Вы можете преобразовать plist старого стиля в XML с помощью plutil:

plutil -convert xml1 test.plist

И от XML до старого стиля с pl:

pl -input test.plist

Мой DefaultKeyBinding.dict в настоящее время состоит из 151 строки, и я не сталкивался с какими-либо проблемами, хранящими его как список свойств старого стиля. Те, что были опубликованы Бреттом Терпстрой и Якобом Русом, также представлены в старом стиле.

LRI
источник