Проверьте, не заблокированы ли заглушки в терминале

8

Есть ли способ запросить систему, чтобы узнать, включена ли блокировка заглавных букв или отключена из командной строки в Terminal.app?

Toothrot
источник
3
Разве ввод одной буквы сразу не покажет вам статус блокировки прописных букв? Каково реальное использование этой информации. Возможно, вы спрашиваете о проблеме XY ?
Bmike
Что именно вы пытаетесь достичь? Существуют сторонние утилиты, которые могут сообщать вам о состоянии клавиш-модификаторов, однако ничего из того, что я знаю (установлено по умолчанию), о котором я знаю, но это не значит, что нет.
user3439894
2
Я использую светодиод, чтобы указать, что источником ввода является греческий. Я хочу, чтобы он был выключен только в том случае, если входной источник на английском языке, а заглавные буквы отключены
Toothrot
1
@Lawrence Теперь это крутая установка. Если вы хотите добавить это к вопросу - круто. Бьюсь об заклад, многие люди хотели бы знать, как вы сделали эту модификацию.
Bmike
1
Я использовал Karabiner и busyloop / maclight от Github.
зубочистка

Ответы:

9

Существует отличный код командной строки, написанный Стефенком на Macscripter.

Код Стефена позволяет вам определять cmd, option, control, shift и caps lock.

В своем посте он предоставляет код и почтовый индекс его загрузки.

Вы можете скачать его или создать свой собственный в XCode, используя Foundation Project.

Я только что проверил оба пути в 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 и простой текстовый документ.

перейдите в тот же каталог, что и ваш файл. Убедитесь, что расширение .m (.c также будет в порядке)

Тогда беги.

gcc  -framework Carbon CheckModKeys.m -o CheckModKeys

CheckModKeys.m это ваш файл.

CheckModKeys - это имя приложения для вывода.

<-)


Чтобы обнаружить блокировку заглавных букв, ваша команда будет выглядеть примерно так:

/Users/UserName/MyFolder/CheckModKeys  capslock

1 или 0 будут возвращены.

1 для на

0 для выкл


Все заслуги достаются Стефену. Я только что вспомнил, что он опубликовал этот путь еще в 2009 году. И это все еще работает сегодня ..

markhunte
источник
Спасибо! Как мне скомпилировать это? Я пытался, gcc -o getmod getmod.cно это вернулось getmod.c:4:5: error: expected expression @autoreleasepool { ^ 1 error generated.
Toothrot
@Lawrence см обновленный ответ
markhunte
Я по-прежнему получаю: `` Неопределенные символы для архитектуры x86_64: "_objc_autoreleasePoolPop", ссылка из: _main в main-93f6a5.o "_objc_autoreleasePoolPush", ссылка из: _main в main-93f6a5.o ld: символ (-ы) не найден для архитектуры x86_64 clang: error: сбой команды компоновщика с кодом выхода 1 (используйте -v для просмотра вызова) ``
Toothrot
на какой ОС ты это делаешь
markhunte
1
Чата больше нет, и я не могу его скомпилировать. Где вы можете скомпилировать это, @ Tootrot?
Ларс Нистрем
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на El Capitan использования учетной записи пользователя по умолчанию в bash. Это часть определенной оболочки или что-то, что вам нужно установить, чтобы команда работала?
Bmike
@bmike, xsetчасть X11которого не установлена ​​по умолчанию. Вы можете получить его здесь: XQuartz
user3439894
3
@Mikey TK, проблема IMO с использованием xsetзаключается в том, что он заставляет XQuartz.app открываться для его запуска (`xset) в терминале. Для меня это нежелательное поведение, так как я бы просто хотел утилиту CLI, которая запускается как любая другая команда BSD.
user3439894