【问题标题】:Defining an anchor name within my preference pane在我的首选项窗格中定义锚名称
【发布时间】:2016-02-05 03:25:49
【问题描述】:

我想让 AppleScript 在我正在开发的自定义首选项窗格中显示特定选项卡,这样就可以了:

tell application "System Preferences" 
  reveal anchor "Foo" of pane id "com.example.preferences.Bar"
end tell

我在任何地方都找不到我的首选项窗格如何声明或指定 "Foo" 锚点或将其与任何特定的选项卡视图项相关联。

【问题讨论】:

  • Google GPGPreferences.searchTerms 字典revealElementForKey 寻找一些线索……(AFAIK 这没有在任何地方记录……)
  • 同时在 developer.apple.com 中搜索 NSPrefPaneHelpAnchors...(希望这会有所帮助... ;-)
  • 如果您没有得到满意的答案,请联系 Apple 的开发者技术支持 (developer.apple.com/membercenter/index.action#techSupport>) 以获得“官方”答案。

标签: macos cocoa applescript system-preferences nspreferencepane


【解决方案1】:

对于任何因我的挫败感而来到这个问题的人,我在这里记录了能够为您的自定义 NSPreferencePane 获取锚点的步骤。

最大的暗示来自@geowar:

谷歌 GPGPreferences.searchTerms 字典revealElementForKey 寻找一些线索……(AFAIK 这在任何地方都没有记录……)

我第一次来这个问题时忽略了这条评论,第二次我查看了GPGPreferences.m 文件,更具体地说是revealElementForKey 方法,但无法弄清楚该函数实际上是如何被调用的。

关键字是searchTerms

当我终于找到这篇文章SearchablePreferencePanes时才意识到这一点。

步骤:

  1. NSPrefPaneSearchParameters 键添加到您的首选项窗格捆绑包的Info.plist,其值类似于MyPreferencePane
  2. 在您的 Xcode 项目中创建一个名为 MyPreferencePane.searchTerms 的文件。该文件的内容应该是一个属性列表,其中包含一个类似于下面的字典(取自Sound 首选项窗格)。这不仅允许用户在搜索指定术语时获得您的首选项窗格的点击,而且它还将为首选项窗格生成锚点
  3. 在继承自NSPreferencePane 的类中实现revealElementForKey(key: String) 方法。当用户在搜索术语后打开窗格时以及在调用 ScriptingBridge 锚类的 reveal() 方法时都会调用此方法。
  4. 轰隆隆!

享受生活。

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

【讨论】:

    【解决方案2】:

    首先,您必须确保您搜索的是锚点,而不是其他类型的对象。 然后使用下面的脚本获取每个锚点名称:(在此示例中,获取声音首选项的锚点将给出“输出”、“输入”、..)

    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
    

    【讨论】:

    • 我想在我自己的首选项窗格项目中添加一个锚点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多