Перевірте, чи не зафіксовано заглушки в терміналі


8

Чи є спосіб запиту системи, щоб дізнатись, чи блокується функція Caps, чи вимкнено командний рядок у terminal.app?


3
Якщо ви не введете одну букву, ви побачите негайно статус блокування кепки? Яке фактичне використання цієї інформації. Можливо, ви питаєте про проблему XY ?
bmike

Що саме ви намагаєтеся досягти? Існують сторонні утиліти, які можуть повідомити вам про стан модифікаційних клавіш, однак нічого власного (встановленого за замовчуванням), про яке я знаю, але це не означає, що його немає.
користувач3439894

2
Я використовую світлодіод, щоб вказати, що джерелом вводу є грецька мова. Я хочу, щоб це було вимкнено, лише якщо джерело вводу є англійською мовою, а функція "Блокування" увімкнено
Зуб

1
@Lawrence Тепер це класна настройка. Якщо ви хотіли додати це до питання - приголомшливо. Надіюсь, багато людей хотіли б знати, як ви здійснили цю модифікацію.
bmike

1
Я використовував Karabiner і busyloop / maclight від Github.
Зубник

Відповіді:


9

Існує великий код командного рядка, написаний Стефенком на Macscripter

Код Стефана дозволяє виявити cmd, опцію, управління, зсув та блокування ковпачків.

У своїй посаді він надає код і поштовий індекс для завантаження.

Ви можете завантажити або створити свій власний Xcode за допомогою фундаментального проекту.

Я просто випробував обидва способи в Ель-Капітані, і вони обидва працюють.

Код, якщо ви хочете створити свій власний 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 для вимкн


Вся заслуга належить Стефену. Я просто пам’ятав, що він розмістив цей шлях ще у2009 році. І це працює і сьогодні ..


Дякую! Як скласти це? Я спробував, gcc -o getmod getmod.cале повернувся getmod.c:4:5: error: expected expression @autoreleasepool { ^ 1 error generated.
Зуб

@Lawrence дивіться оновлену відповідь
markhunte

Я все ще отримую: `` Не визначені символи для архітектури x86_64: "_objc_autoreleasePoolPop", посилаючись на: _main в main-93f6a5.o "_objc_autoreleasePoolPush", з посиланням на: _main в main-93f6a5.o ld: символ (и) не знайдено для архітектури x86_64 clang: error: команда linker не вдалася з кодом виходу 1 (використовуйте -v для перегляду виклику) ``
Зуб

з якою ОС ви це робите
markhunte

1
Чат пропав, і я його також не можу скласти. Де ви могли її скласти, @Toothrot?
Lars Nyström

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
користувач3439894

3
@Mikey TK. Проблема з використанням IMO xsetполягає в тому, що вона змушує XQuartz.app відкриватися для неї (`xset) у терміналі. Для мене це небажана поведінка, тому що я просто хотів би утиліту CLI, яка працює як і будь-яка інша команда BSD.
користувач3439894
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.