检查盖帽是否在终端上锁定


8

有没有一种方法可以查询系统,以判断terminal.app中的大写锁定是打开还是关闭?


3
输入一个字母不会立即显示大写锁定的状态吗?此信息的实际用途是什么。也许您是在询问XY问题
bmike

您到底想完成什么?有第三方实用程序可以告诉您修饰键的状态,但是我所知道的没有任何本机(默认情况下已安装),但这并不意味着没有。
user3439894

2
我正在使用LED来指示输入源是希腊语。我希望仅在输入源为英语且大写锁定为关闭的情况下将其关闭。
Toothrot,2015年

1
@Lawrence现在,这是一个很棒的设置。如果您想将其添加到问题中,那就太好了。我敢打赌,很多人都希望知道您是如何完成该修改的。
bmike

1
我使用了来自Github的Karabiner和busyloop / maclight。
Toothrot

Answers:


9

Stefenk在Macscripter上编写了很棒的命令行代码

Stefen的代码可让您检测cmd,选项,控制,移位和大写锁定。

在他的文章中,他提供了代码和下载zip。

您可以下载它,也可以使用基础项目在Xcode中构建自己的文件。

我只是在El Capitan中测试了这两种方式,它们都可以工作。

如果要在Xcode.app中构建自己的代码,则代码为:

#import <Carbon/Carbon.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        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;
}

----------(更新->

如果要从Terminal.app进行编译

将代码放入纯文本文件。我只使用了TextEdit.app和纯文本文档。

cd到文件所在的目录。确保扩展名为.m(.c也可以)

然后运行。

gcc  -framework Carbon CheckModKeys.m -o CheckModKeys

CheckModKeys.m是您的文件。

CheckModKeys是要输出的应用程序的名称。

<-)


要检测大写锁定,您的命令应类似于:

/Users/UserName/MyFolder/CheckModKeys  capslock

将返回1或0。

1个

0代表


一切归功于Stefen。我只是记得他在2009年以这种方式发布。直到今天仍然有效。


谢谢!我该如何编译?我尝试过gcc -o getmod getmod.c但返回了 getmod.c:4:5: error: expected expression @autoreleasepool { ^ 1 error generated.
Toothrot

@劳伦斯(Lawrence)查看最新答案
markhunte

我仍然得到:``体系结构x86_64的未定义符号:“ _objc_autoreleasePoolPop”,引用自:main-93f6a5.o中的_main“ _objc_autoreleasePoolPush”,引用自:main-93f6a5.o中的_main ld:找不到体系结构的符号x86_64 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
Toothrot 2015年

您在什么操作系统上执行此操作
markhunte 2015年

1
聊天不见了,我也无法编译。在哪里可以编译@Toothrot?
LarsNyström17年

2

如果您已安装XQuartz并正在运行或不介意启动,则可以运行:xset -q

Keyboard Control:
  auto repeat:  on    key click percent:  0    LED mask:  00000000
  XKB indicators:
    00: Caps Lock:   off    01: Num Lock:    off    02: Shift Lock:  off
    03: Group 2:     off    04: Mouse Keys:  off    05: Scroll Lock: off

我没有xset在bash中使用默认用户帐户登录El Capitan。这是特定外壳程序的一部分,还是必须安装才能使命令起作用?
bmike

@bmike xsetX11默认情况下未安装的一部分。您可以在这里获得它:XQuartz
user3439894

3
@Mikey TK,IMO使用的问题xset是它导致XQuartz.app打开以使其在终端中运行(xset)。对我来说,这是不希望的行为,因为我只想像其他任何BSD命令一样运行的CLI实用程序。
2015年
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.