Vérifiez si les bouchons se verrouillent sur la borne

8

Existe-t-il un moyen d'interroger le système pour savoir si le verrouillage des majuscules est activé ou désactivé à partir de la ligne de commande dans terminal.app?

Toothrot
la source
3
Taper une lettre ne vous montrerait-il pas immédiatement l'état du verrouillage des majuscules? Quelle est l'utilisation réelle de ces informations. Peut-être que vous posez des questions sur le problème XY ?
bmike
Qu'essayez-vous exactement d'accomplir? Il existe des utilitaires tiers qui peuvent vous indiquer l'état des touches de modification, mais rien de natif (installé par défaut) que je sache, mais cela ne signifie pas qu'il n'y en a pas.
user3439894
2
J'utilise la LED pour indiquer que la source d'entrée est grecque. Je veux qu'il soit désactivé uniquement si la source d'entrée est l'anglais et que le verrouillage des majuscules est désactivé.
Toothrot
1
@ Lawrence Maintenant, c'est une configuration sympa. Si vous vouliez ajouter cela à la question - génial. Je parie que beaucoup de gens aimeraient savoir comment vous avez accompli cette modification.
bmike
1
J'ai utilisé Karabiner et busyloop / maclight de Github.
Toothrot

Réponses:

9

Il y a un excellent code de ligne de commande écrit par Stefenk sur Macscripter

Le code de Stefen vous permet de détecter les cmd, les options, le contrôle, le décalage et le verrouillage des majuscules.

Dans son message, il fournit le code et un zip de téléchargement de celui-ci.

Vous pouvez le télécharger ou créer le vôtre dans Xcode à l'aide d'un projet de fondation.

Je viens de tester les deux sens dans El Capitan et ils fonctionnent tous les deux.

Le code si vous souhaitez créer le vôtre dans Xcode.app est:

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

---------- (mise à jour ->

Si vous souhaitez le compiler depuis Terminal.app

Mettez le code dans un fichier texte brut. Je viens d'utiliser TextEdit.app et un document en texte brut.

cd dans le même répertoire que votre fichier. Assurez-vous que l'extension est .m (.c sera également ok)

Ensuite, exécutez.

gcc  -framework Carbon CheckModKeys.m -o CheckModKeys

CheckModKeys.m est votre fichier.

CheckModKeys est le nom de l'application à sortir.

<-)


Pour détecter le verrouillage des majuscules, votre commande ressemblerait à ceci:

/Users/UserName/MyFolder/CheckModKeys  capslock

un 1 ou 0 sera retourné.

1 pour le

0 pour off


Tout le mérite revient à Stefen. Je viens de me rappeler qu'il a posté de cette façon en`2009. Et ça marche encore aujourd'hui ..

markhunte
la source
Merci! Comment puis-je compiler cela? J'ai essayé gcc -o getmod getmod.cmais cela est revenu getmod.c:4:5: error: expected expression @autoreleasepool { ^ 1 error generated.
Toothrot
@Lawrence voir la réponse mise à jour
markhunte
J'obtiens toujours: `` Symboles non définis pour l'architecture x86_64: "_objc_autoreleasePoolPop", référencé à partir de: _main dans main-93f6a5.o "_objc_autoreleasePoolPush", référencé à partir de: _main in main-93f6a5.o ld: symbole (s) introuvable pour l'architecture x86_64 clang: erreur: la commande de l'éditeur de liens a échoué avec le code de sortie 1 (utilisez -v pour voir l'invocation) ``
Toothrot
quel OS faites-vous cela
markhunte
1
Le chat a disparu et je ne peux pas non plus le compiler. Où pouvez-vous le compiler, @Toothrot?
Lars Nyström
2

Si XQuartz est installé et en cours d'exécution ou si cela ne vous dérange pas de le lancer, vous pouvez exécuter: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
la source
Je n'ai pas xsetsur El Capitan en utilisant un compte d'utilisateur par défaut dans bash. Est-ce que cela fait partie d'un shell spécifique ou quelque chose que vous devez installer pour que la commande fonctionne?
bmike
@bmike, dont une xsetpartie X11n'est pas installée par défaut. Vous pouvez l'obtenir ici: XQuartz
user3439894
3
@Mikey TK, Le problème IMO avec l'utilisation xsetest que XQuartz.app s'ouvre pour qu'il (`xset) s'exécute dans un terminal. Pour moi, c'est un comportement indésirable car je voudrais juste un utilitaire CLI qui fonctionne comme n'importe quelle autre commande BSD.
user3439894