DefaultKeyBinding.dict - старий формат NeXT та формат XML-плістів


9

DefaultKeyBinding.dict

Цей ~/Library/KeyBindings/DefaultKeyBinding.dictфайл дозволяє визначити власні прив’язки ключів у Mac OS X. Він може бути в одному з двох форматів: старий стиль NeXT-формат ( приклад ) або сучасний формат XML-плістів ( приклад ).

Rebinding +

Мені хотілося відновити командний простір ( + ) на 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-списку. Мої запитання:

  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. Ви використовуєте ~варіант або $для зміни?
conorgriffin

чи ^для контролю?
conorgriffin

У мене є робочі записи з ~і ^, але жодна з $або @. (Примітка. Я пішов вперед і додав свій оригінальний файл DefaultKeyBindings.dict до ОП, а також у випадку, якщо це виявиться корисним.)
Micah R Ledbetter

Як це не дивно, я також не можу змусити його працювати. Це здається не дуже добре зафіксованим. У вас є лише невелика кількість ярликів, які не є просто мета-клавішею та 1 буквою, тому, можливо, спробуйте перетворити їх на тестування, і якщо вони спрацьовують, то, ймовірно, і ваші інші. Може статися так, що представлення командного ключа як @не прийнято у XML-стилі файлу плістів. Це не має особливого сенсу, але я нічого не можу знайти про це.
conorgriffin

Закінчив подати помилку з Apple щодо цього; подивимось, чи відповідають вони :).
Micah R Ledbetter

Відповіді:


3

Я не думаю, що у вас не виникне проблем із використанням старого формату. Усі знайдені нами приклади використовують старі позначення NeXT. Хоча я не можу пояснити, чому формат XML не працював, існує вирішення цієї комбінації клавіш, яка означатиме, що ви можете залишити існуючий DefaultKeyBinding.dictнедоторканим.

Існує програма під назвою KeyRemap4MacBook, яку можна безкоштовно завантажити, і ви можете побачити на скріншоті нижче, ви можете переробити комбінацію клавіш +, не перетворюючи решту DefaultKeyBinding.dictфайлу, і цей метод не обмежується програмами какао.

KeyRemap4MacBook


3

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


Ви можете перетворити пліст старого стилю в XML за допомогою plutil:

plutil -convert xml1 test.plist

І від XML до старого стилю з pl:

pl -input test.plist

Наразі мій DefaultKeyBinding.dict нараховує 151 рядок, і я не стикався з жодними проблемами, що зберігають його як список властивостей старого стилю. Опубліковані Бретт Терпстра та Джейкоб Рус також у старовинному форматі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.