【问题标题】:Programatically get/set Mac OSX default system keyboard shortcut以编程方式获取/设置 Macos 默认系统键盘快捷键
【发布时间】:2010-10-23 20:21:43
【问题描述】:

我正在尝试找到一种方法来以编程方式获取/设置系统偏好设置 -> 键盘和鼠标 -> 键盘快捷键选项卡中的默认 OSX 系统键盘快捷键(热键)。我需要能够在后台执行此操作,因此 GUI 脚本不是解决方案。

我找不到 plist 或任何可能存储此信息的东西。我在使用系统偏好设置时尝试使用仪器“文件活动”跟踪,但再次空手而归。

感谢任何帮助。

【问题讨论】:

    标签: macos keyboard shortcut hotkeys


    【解决方案1】:

    糟糕,我重新运行了 Instruments,但这次一定要关闭系统偏好设置,直到那时快捷方式才被写出来。

    原来文件位于 ~/Library/Preferences/com.apple.symbolichotkeys.plist 但它非常神秘。尽管如此,这就是我所追求的。

    【讨论】:

      【解决方案2】:

      实际上有一个 Plist,信息存储在 com.apple.symbolichotkeys AppleSymbolicHotKeys 这是一个复杂的嵌套字典和列表:

      $ defaults read com.apple.symbolichotkeys AppleSymbolicHotKeys
      {
          10 =     {
              enabled = 1;
              value =         {
                  parameters =             (
                      65535,
                      96,
                      8650752
                  );
                  type = standard;
              };
          };
          11 =     {
              enabled = 1;
              value =         {
                  parameters =             (
                      65535,
                      97,
                      8650752
                  );
                  type = standard;
              };
          };
      [...]
      }
      

      假设您想以编程方式修改系统偏好设置 -> 键盘 -> 快捷方式选项卡 -> 应用程序快捷方式 -> 所有应用程序中的“显示帮助菜单”快捷方式。要找到正确的条目,打印文本文件中的所有 Plist,修改系统偏好设置中的快捷方式,在第二个文件中再次打印 Plist 并区分它们:

      $ defaults read com.apple.symbolichotkeys AppleSymbolicHotKeys > 1
      $ # modify System Preferences
      $ defaults read com.apple.symbolichotkeys AppleSymbolicHotKeys > 2
      $ diff -U 5 1 2
      --- 1   2019-05-27 23:37:58.000000000 -0300
      +++ 2   2019-05-27 23:38:24.000000000 -0300
      @@ -5063,13 +5063,13 @@
                   };
                   98 =             {
                       enabled = 1;
                       value =                 {
                           parameters =                     (
      -                        32,
      -                        49,
      -                        524288
      +                        105,
      +                        34,
      +                        655360
                           );
                           type = standard;
                       };
                   };
               };
      

      所以要修改的条目是98,因为它是一个复杂的结构,你必须使用/usr/libexec/PlistBuddy 来做:

      # Set "alt + Space" as shortcut for "Help menu"
      /usr/libexec/PlistBuddy -c "Delete :AppleSymbolicHotKeys:98:value:parameters" ~/Library/Preferences/com.apple.symbolichotkeys.plist
      /usr/libexec/PlistBuddy -c "Add :AppleSymbolicHotKeys:98:value:parameters array" ~/Library/Preferences/com.apple.symbolichotkeys.plist
      /usr/libexec/PlistBuddy -c "Add :AppleSymbolicHotKeys:98:value:parameters: integer 32" ~/Library/Preferences/com.apple.symbolichotkeys.plist
      /usr/libexec/PlistBuddy -c "Add :AppleSymbolicHotKeys:98:value:parameters: integer 49" ~/Library/Preferences/com.apple.symbolichotkeys.plist
      /usr/libexec/PlistBuddy -c "Add :AppleSymbolicHotKeys:98:value:parameters: integer 524288" ~/Library/Preferences/com.apple.symbolichotkeys.plist
      /usr/libexec/PlistBuddy -c "Delete :AppleSymbolicHotKeys:98:enabled" ~/Library/Preferences/com.apple.symbolichotkeys.plist
      /usr/libexec/PlistBuddy -c "Add :AppleSymbolicHotKeys:98:enabled bool true" ~/Library/Preferences/com.apple.symbolichotkeys.plist
      

      注意

      • 我必须删除 bool 参数才能修改它
      • 必须重新启动计算机才能应用更改

      【讨论】:

      • 如果你使用Set关键字,你应该可以设置bool值而不删除它; /usr/libexec/PlistBuddy -c "Set :AppleSymbolicHotKeys:98:enabled bool true"
      【解决方案3】:

      an API for this(获取,而不是设置)。

      【讨论】:

      • 完美,这就是我正在寻找的,因为我真的只想获得这些信息。总是很难找到使用与 UI 中的名称完全不同名称的 API(符号热键与系统快捷方式)...
      猜你喜欢
      • 2014-12-30
      • 2018-01-17
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 2015-03-28
      相关资源
      最近更新 更多