如何从命令行更改任务控制快捷键?


11

我一直在努力弄清楚这一点。我有一个非常典型的Mac OS设置脚本:

https://gist.github.com/ryanpcmcquen/b2e608311f286a4ab3e1

我想将任务控制快捷键全部更改为Ctrl+ Alt+ ...而不是Ctrl+ ...。例如,默认值为:Ctrl+ Up以激活任务控制。我想将其更改为Ctrl+ Alt+ Up,因为当前的快捷方式与我使用的其他程序冲突。

请注意,我已经知道如何通过来完成此操作System Preferences > Keyboard > Shortcuts,我正在寻找可编写脚本的命令行解决方案。

编辑:感谢@ user3439894,我经历了一个脚本,将所有plist键更改为我想要的键。唯一的问题是,它不起作用。:-(

这是我到目前为止的内容:

#!/bin/bash
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 32 "{enabled = 1; value = { parameters = (65535, 126, 2883584); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 33 "{enabled = 1; value = { parameters = (65535, 125, 2883584); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 34 "{enabled = 1; value = { parameters = (65535, 126, 3014656); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 35 "{enabled = 1; value = { parameters = (65535, 125, 3014656); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 79 "{enabled = 1; value = { parameters = (65535, 123, 2883584); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 80 "{enabled = 1; value = { parameters = (65535, 123, 3014656); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 81 "{enabled = 1; value = { parameters = (65535, 124, 2883584); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 82 "{enabled = 1; value = { parameters = (65535, 124, 3014656); type = standard; }; }"
chown -Rf `whoami` ~/Library/Preferences/com.apple.symbolichotkeys.plist;
defaults read com.apple.symbolichotkeys

您是否曾经为此找到解决方案?
弥敦道'18

@内森,不。我现在使用默认值。
ryanpcmcquen

我有一个类似的问题。也许您可以尝试我的解决方案:apple.stackexchange.com/questions/344494/…–
Nathan,

@Nathan,看来您的解决方案需要手动干预。我刚刚学习了如何更改其他具有不同热键的程序。Hammerspoon FTW。
ryanpcmcquen

该命令的这一部分type = standard;实际上应type = 'standard';注意周围的引号'standard'。即便如此,有时即使使用正确格式的命令行,更改也不会生效,即使; killall -u $USER cfprefsd添加到defaults 命令末尾也是如此。同样,.plist在这种用例中,文件的完整路径不是必需的,例如defaults write com.apple.symbolichotkeys AppleSymbolicHotKeys ...,命令的其余部分就足够了。
user3439894 '19

Answers:


5

尽管我希望此处提供的信息可以帮助您获得直接答案,但这不是直接答案。

当您将Mission Control的默认键盘快捷键从“控制向上箭头”更改为“控制选项向上箭头”时,我可以告诉您哪个文件发生了什么变化。它是文件中“ 32”字典的“ value”字典和“ AppleSymbolicHotKeys”字典的“ 34”字典中“ parameters”数组的“ Item 2 Number” /Users/$USER/Library/Preferences/com.apple.symbolichotkeys.plist

这是文件结构的defaults read表示形式,与com.apple.symbolichotkeys.plist在上述定义的情况下所做的更改有关。

任务控制,默认为上移箭头

{
    AppleSymbolicHotKeys =     {
        32 =         {
            enabled = 1;
            value =             {
                parameters =                 (
                    65535,
                    126,
                    2359296
                );
                type = standard;
            };
        };
        34 =         {
            enabled = 1;
            value =             {
                parameters =                 (
                    65535,
                    126,
                    2490368
                );
                type = standard;
            };
        };
    };
}

任务控制已更改为“控制选项向上箭头”

{
    AppleSymbolicHotKeys =     {
        32 =         {
            enabled = 1;
            value =             {
                parameters =                 (
                    65535,
                    126,
                    2883584
                );
                type = standard;
            };
        };
        34 =         {
            enabled = 1;
            value =             {
                parameters =                 (
                    65535,
                    126,
                    3014656
                );
                type = standard;
            };
        };
    };
}

手册页的BUGS部分defaults显示:

可以通过非常复杂的方式来构造默认值,这使用户很难使用此命令输入默认值。

这是一个完美的示例,因为defaults如果可行,它将是一个非常复杂的命令行,用于将目标值写入目标数组元素。仅供参考...如果要尝试执行defaults write com.apple.symbolichotkeys ...命令,请确保已先备份目标文件。

另一个选项是使用AppleScript通过导航系统偏好设置GUI来更改设置,与设置顶级对象(这里不是目标)相比,这也有些复杂。我什至不确定它是否可行,但是如果我需要一种自动化的方法,那么我会找出来的,但是对不起,我没有时间找出这两种方法。

至少您现在知道在哪里和从哪里发生了什么变化,您也许可以自己解决这个问题,也可以在了解这一点后获得更多帮助。

这是com.apple.symbolichotkeys.plist文件Xcode中的剪辑图像。

在此处输入图片说明

顺便说一句,我使用第三方实用程序捕获了更改,该实用程序记录了文件系统更改,然后将该信息转换为更易理解的输出以提供此信息。


看来确实可以更改适当的plist文件,唯一的问题是,快捷方式实际上并没有更改,也没有在重新启动,重新读取文件或进行任何操作之后更改。
ryanpcmcquen

“记录文件系统更改然后将信息转换为更易读的输出的第三方实用程序”的名称是什么?
艾伦·巴吉

1
@Allen Bargi,IIRC这可能filemon源代码 形式的“ Mac OS X Internals-To the Apple's Core”一书中Extras的一部分,该源代码filemon.c已编译为系统上的可执行文件。然后,我将其当前状态的更改文件与更改之前的Time Machine备份文件进行了比较。您也可以使用本机fs_usage命令。
user3439894 '16

@ryanpcmcquen您的链接已断开
charlesreid1

@ charlesreid1,哦,很好,它没有用。
ryanpcmcquen

0

这是我的建议:使用诸如Karabiner之类的实用程序来完成这种定制。

作为开发人员,我个人想说这是一个引人入胜的诱人问题,它确实展示了macOS幕后阴暗,阴暗的一面,只有软件开发人员和黑客才能真正欣赏...

问题很简单:我只想将默认的按键组合重新映射到我自己的绑定中。

到底为什么这么困难/复杂?我打算找出并发布解决方案……敬请期待。


谢谢,我期待看到您的发现。但是下载外部程序只需要通过Mac的标准界面进行设置,我仍然希望有一个内置的命令行解决方案。
ryanpcmcquen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.