Установка имени привязки панели настроек

Я хотел бы включить в своей панели настроек отображение конкретной вкладки из 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.

шаги:

  1. Добавить NSPrefPaneSearchParameters ключ к Info.plist вашей панели предпочтений со значением что-то вроде MyPreferencePane,
  2. Создайте файл с именем MyPreferencePane.searchTerms в вашем проекте XCode. Содержимое этого файла должно быть списком свойств, содержащим словарь, похожий на приведенный ниже (взят из Sound панель настроек). Это не только позволит пользователям получить доступ к вашей панели предпочтений при поиске указанных терминов, но также сгенерирует привязки для панели предпочтений.
  3. Реализовать revealElementForKey(key: String) метод в вашем классе, который наследует от NSPreferencePane, Этот метод будет вызываться как при открытии пользователем панели после поиска термина, так и при вызове reveal() метод для якорного класса ScriptingBridge.
  4. 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
Другие вопросы по тегам