Überprüfen Sie, ob die Kappen im Terminal einrasten

8

Gibt es eine Möglichkeit, das System abzufragen, um festzustellen, ob die Feststelltaste in der Befehlszeile in terminal.app aktiviert oder deaktiviert ist?

Zahnrot
quelle
3
Würde die Eingabe eines Buchstabens nicht sofort den Status der Feststelltaste anzeigen? Was ist die tatsächliche Verwendung dieser Informationen. Vielleicht fragen Sie nach dem XY-Problem ?
bmike
Was genau versuchst du zu erreichen? Es gibt Dienstprogramme von Drittanbietern, die Ihnen den Status der Modifikatortasten mitteilen können, jedoch nichts, was mir bekannt ist (standardmäßig installiert), aber das bedeutet nicht, dass dies nicht der Fall ist.
user3439894
2
Ich benutze die LED, um anzuzeigen, dass die Eingangsquelle Griechisch ist. Ich möchte, dass es nur ausgeschaltet ist, wenn die Eingangsquelle Englisch ist und die Feststelltaste ausgeschaltet ist.
Zahnrot
1
@ Lawrence Nun, das ist ein cooles Setup. Wenn Sie das der Frage hinzufügen wollten - großartig. Ich wette, viele Leute würden gerne wissen, wie Sie diese Modifikation durchgeführt haben.
bmike
1
Ich habe Karabiner und Busyloop / Maclight von Github verwendet.
Zahnrot

Antworten:

9

Es gibt einen großartigen Befehlszeilencode, der von Stefenk auf Macscripter geschrieben wurde

Mit dem Code von Stefen können Sie cmd, Option, Steuerung, Verschiebung und Feststelltaste erkennen.

In seinem Beitrag stellt er den Code und eine Download-Zip davon zur Verfügung.

Sie können es entweder herunterladen oder mit dem Foundation-Projekt in Xcode erstellen.

Ich habe gerade beide Wege in El Capitan getestet und beide funktionieren.

Der Code, wenn Sie Ihren eigenen in Xcode.app erstellen möchten, lautet:

#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;
}

---------- (Update ->

Wenn Sie es aus Terminal.app kompilieren möchten

Fügen Sie den Code in eine Nur-Text-Datei ein. Ich habe gerade TextEdit.app und ein einfaches Textdokument verwendet.

CD in dasselbe Verzeichnis wie Ihre Datei. Stellen Sie sicher, dass die Erweiterung .m ist (.c ist auch in Ordnung)

Dann renne.

gcc  -framework Carbon CheckModKeys.m -o CheckModKeys

CheckModKeys.m ist Ihre Datei.

CheckModKeys ist der Name der App, die ausgegeben werden soll.

<-)


Um eine Feststelltaste zu erkennen, würde Ihr Befehl ungefähr so ​​aussehen:

/Users/UserName/MyFolder/CheckModKeys  capslock

Eine 1 oder 0 wird zurückgegeben.

1 für auf

0 für aus


Alle Kredite gehen an Stefen. Ich habe mich nur daran erinnert, dass er diesen Weg bereits 2009 gepostet hat. Und es funktioniert noch heute ..

markhunte
quelle
Vielen Dank! Wie kompiliere ich das? Ich habe es versucht, gcc -o getmod getmod.caber das kehrte zurück getmod.c:4:5: error: expected expression @autoreleasepool { ^ 1 error generated.
Toothrot
@ Lawrence siehe aktualisierte Antwort
Markhunte
Ich erhalte immer noch: `` Undefinierte Symbole für Architektur x86_64: "_objc_autoreleasePoolPop", referenziert von: _main in main-93f6a5.o "_objc_autoreleasePoolPush", referenziert von: _main in main-93f6a5.o ld: Symbol (e) für Architektur nicht gefunden x86_64 clang: Fehler: Linker-Befehl mit Exit-Code 1 fehlgeschlagen (verwenden Sie -v, um den Aufruf
anzuzeigen
was OS tun Sie das auf
markhunte
1
Der Chat ist weg und ich kann ihn auch nicht kompilieren. Wo können Sie es kompilieren, @Toothrot?
Lars Nyström
2

Wenn Sie XQuartz installiert haben und entweder ausgeführt werden oder es Ihnen nichts ausmacht, es zu starten, können Sie Folgendes ausführen: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
Mikey TK
quelle
Ich habe xsetauf El Capitan kein Standardbenutzerkonto in Bash. Ist dieser Teil einer bestimmten Shell oder etwas, das Sie installieren müssen, damit der Befehl funktioniert?
bmike
@bmike, xsetist ein Teil X11davon ist nicht standardmäßig installiert. Sie können es hier bekommen: XQuartz
user3439894
3
@ Mikey TK, Das Problem, das IMO bei der Verwendung hat, xsetist, dass XQuartz.app geöffnet wird, damit es (`xset) in einem Terminal ausgeführt wird. Für mich ist dies ein unerwünschtes Verhalten, da ich nur ein CLI-Dienstprogramm möchte, das wie jeder andere BSD-Befehl ausgeführt wird.
user3439894