Установка имени привязки панели настроек
Я хотел бы включить в своей панели настроек отображение конкретной вкладки из Apple Script, например:
tell application "System Preferences"
reveal anchor "Foo" of pane id "com.example.preferences.Bar"
end tell
Я нигде не могу найти, как моя панель предпочтений объявила бы или указала привязку "Foo" или связала бы это с любым конкретным элементом представления вкладки.
2 ответа
Для любого, кто приходит к этому вопросу с таким количеством разочарований, я документирую здесь шаги, чтобы иметь возможность получить якоря для вашего обычая NSPreferencePane
,
Самая большая подсказка была от @geowar:
Google GPGPreferences.searchTerms словарь раскрывает ElementForKey для некоторых подсказок... (AFAIK, это нигде не задокументировано...)
Я пропустил этот комментарий в первый раз, когда я пришел к этому вопросу, во второй раз я посмотрел на GPGPreferences.m
файл, более конкретно revealElementForKey
метод, но не мог понять, как на самом деле вызывается функция.
Ключевое слово было searchTerms
,
Я понял это только когда наконец нашел эту статью http://cocoadev.com/SearchablePreferencePanes.
шаги:
- Добавить
NSPrefPaneSearchParameters
ключ кInfo.plist
вашей панели предпочтений со значением что-то вродеMyPreferencePane
, - Создайте файл с именем
MyPreferencePane.searchTerms
в вашем проекте XCode. Содержимое этого файла должно быть списком свойств, содержащим словарь, похожий на приведенный ниже (взят изSound
панель настроек). Это не только позволит пользователям получить доступ к вашей панели предпочтений при поиске указанных терминов, но также сгенерирует привязки для панели предпочтений. - Реализовать
revealElementForKey(key: String)
метод в вашем классе, который наследует отNSPreferencePane
, Этот метод будет вызываться как при открытии пользователем панели после поиска термина, так и при вызовеreveal()
метод для якорного класса ScriptingBridge. - Boom!
Наслаждайся жизнью.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>effects</key>
<dict>
<key>localizableStrings</key>
<array>
<dict>
<key>comments</key>
<string>Localizable index words</string>
<key>index</key>
<string>noises, audio, hear, level, volume, louder, softer, quieter, increase, decrease, raise, lower, speaker, beep, warning, bell, ding, ring, hearing, beeping, dinging, ringing</string>
<key>title</key>
<string>Alerts and sound effects</string>
</dict>
<dict>
<key>comments</key>
<string>Localizable index words</string>
<key>index</key>
<string>audio, hear, level, volume, louder, softer, quieter, increase, decrease, raise, lower, music, speakers, hearing</string>
<key>title</key>
<string>Sound volume</string>
</dict>
<dict>
<key>comments</key>
<string>Localizable index words</string>
<key>index</key>
<string>audio, hear, level, volume, louder, softer, quieter, increase, decrease, raise, lower, quiet, silent, silence, turn off, hearing, muting</string>
<key>title</key>
<string>Mute the sound</string>
</dict>
<dict>
<key>comments</key>
<string>Localizable index words</string>
<key>index</key>
<string>menubar</string>
<key>title</key>
<string>Show volume in menu bar</string>
</dict>
</array>
</dict>
<key>input</key>
<dict>
<key>localizableStrings</key>
<array>
<dict>
<key>comments</key>
<string>Localizable index words</string>
<key>index</key>
<string>audio, hear, level, volume, louder, softer, quieter, increase, decrease, raise, lower, devices, sources, microphones, instruments, MIDI, record, line in, hearing, recording</string>
<key>title</key>
<string>Sound input</string>
</dict>
</array>
</dict>
<key>output</key>
<dict>
<key>localizableStrings</key>
<array>
<dict>
<key>comments</key>
<string>Localizable index words</string>
<key>index</key>
<string>devices, headphones, headsets, speakers, hear, balance, hearing, head phones, head sets</string>
<key>title</key>
<string>Sound output</string>
</dict>
<dict>
<key>comments</key>
<string>Localizable index words</string>
<key>index</key>
<string>airplay, speakers</string>
<key>title</key>
<string>AirPlay audio streaming</string>
</dict>
</array>
</dict>
</dict>
</plist>
Сначала вы должны убедиться, что то, что вы ищете, является привязкой, а не объектом другого типа. Затем используйте скрипт, приведенный ниже, чтобы получить все имена якорей: (в этом примере get anchor со звуковыми настройками выдаст "output", "input",..)
tell application "System Preferences"
activate
set current pane to pane id "com.apple.preference.sound"
get the name of every anchor of current pane
end tell