如何在Mac Bash应用程序启动时检查Option键是否按下

3

我有一个相对简单的问题。

我有几个Mac应用程序,其中启动器是用bash编写的。我想在启动器中添加一个小功能,让其他人在按下应用程序启动时的“option/alt”键时可以访问位于/Contents/Resources中的config.app或其他文件。类似于iTunes或iPhoto,您可以访问一些小选项菜单。

我不知道纯粹使用bash时代码应该是什么样子的;我找到了一些示例,这些示例使用applescript和/或cocoa钩子,但没有纯粹使用bash的示例。

像这样:if 'optionKeyDown'; then open "$WORKDIR/../Resources/config.app"

或者纯粹的bash根本不可能实现这一点吗?

1个回答

3
这里有一个不错的解决方案:http://lists.apple.com/archives/applescript-users/2009/Sep/msg00374.html 使用以下代码:
#import <Carbon/Carbon.h>

int main (int argc, const char * argv[]) {
    unsigned int modifiers = GetCurrentKeyModifiers();

    if (argc == 1)
        printf("%d\n", modifiers);

    else {

        int i, result = 1;
        for (i = 1; i < argc; ++i) {

            if (0 == strcmp(argv[i], "shift"))
                result = result && (modifiers & shiftKey);

            else if (0 == strcmp(argv[i], "option"))
                result = result && (modifiers & optionKey);

            else if (0 == strcmp(argv[i], "cmd"))
                result = result && (modifiers & cmdKey);

            else if (0 == strcmp(argv[i], "control"))
                result = result && (modifiers & controlKey);

            else if (0 == strcmp(argv[i], "capslock"))
                result = result && (modifiers & alphaLock);

        }
        printf("%d\n", result);
    }
    return 0;
}

把它粘贴到一个名为keys.m的文件中。然后按照以下方式构建命令行实用程序:
$ gcc keys.m -framework Carbon -o keys

将可执行文件keys放在您的路径中,例如/usr/local/bin,甚至只需与您的bash脚本放在同一目录中,然后您可以像这样调用它:keys option并检查返回的字符串是否为“0”或“1”。


可执行文件本身似乎会输出按下的键的特定数字,例如选项是2048。我该如何使用if语句直接在bash中实现这一点?我尝试了这个,但似乎有些不对:keys="$WORKDIR/keys"if [[ 'keys option' == '1' ]] - devilhunter
@devilhunter:如果你不传递option参数,即只是调用keys而不是keys option,它只会返回2048。尝试在终端中从命令行调用它,看看它是如何工作的。 - Paul R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接