Compruebe si las tapas se bloquean en la terminal

8

¿Hay alguna forma de consultar el sistema para saber si el bloqueo de mayúsculas está activado o desactivado desde la línea de comandos en terminal.app?

Toothrot
fuente
3
¿Escribir una letra no le mostrará de inmediato el estado del bloqueo de mayúsculas? ¿Cuál es el uso real de esta información? ¿Tal vez estás preguntando sobre el problema XY ?
bmike
¿Qué es exactamente lo que estás tratando de lograr? Hay utilidades de terceros que pueden decirle el estado de las teclas modificadoras, sin embargo, nada nativo (instalado de forma predeterminada) que yo sepa, pero eso no significa que no lo haya.
user3439894
2
Estoy usando el LED para indicar que la fuente de entrada es griega. Quiero que esté desactivado solo si la fuente de entrada es en inglés y el bloqueo de mayúsculas está desactivado.
Toothrot
1
@Lawrence Ahora que es una configuración genial. Si quisieras agregar eso a la pregunta, genial. Apuesto a que a muchas personas les encantaría saber cómo lograste esa modificación.
bmike
1
Usé Karabiner y busyloop / maclight de Github.
Toothrot

Respuestas:

9

Hay un gran código de línea de comando escrito por Stefenk en Macscripter

El código de Stefen le permite detectar cmd, opción, control, cambio y bloqueo de mayúsculas.

En su publicación, proporciona el código y un zip de descarga.

Puedes descargarlo o crear el tuyo en Xcode usando el proyecto base.

Solo probé en ambos sentidos en El Capitán y ambos funcionan.

El código si desea construir el suyo en Xcode.app es:

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

---------- (actualización ->

Si quieres compilarlo desde Terminal.app

Ponga el código en un archivo de texto plano. Acabo de usar TextEdit.app y un documento de texto sin formato.

cd al mismo directorio que su archivo. Asegúrese de que la extensión sea .m (.c también estará bien)

Entonces corre.

gcc  -framework Carbon CheckModKeys.m -o CheckModKeys

CheckModKeys.m es su archivo.

CheckModKeys es el nombre de la aplicación que se generará.

<-)


Para detectar el bloqueo de mayúsculas, su comando se vería así:

/Users/UserName/MyFolder/CheckModKeys  capslock

se devolverá un 1 o 0.

1 para el

0 para apagado


Todo el crédito va a Stefen. Acabo de recordar que publicó esto en el 2009. Y todavía funciona hoy ...

Markhunte
fuente
¡Gracias! ¿Cómo compilo esto? Lo intenté gcc -o getmod getmod.cpero eso regresó getmod.c:4:5: error: expected expression @autoreleasepool { ^ 1 error generated.
Toothrot
@Lawrence ver respuesta actualizada
markhunte
Todavía obtengo: `` Símbolos indefinidos para arquitectura x86_64: "_objc_autoreleasePoolPop", referenciado desde: _main en main-93f6a5.o "_objc_autoreleasePoolPush", referenciado desde: _main en main-93f6a5.o ld: símbolo (s) no encontrado para arquitectura x86_64 clang: error: el comando del enlazador falló con el código de salida 1 (use -v para ver la invocación) ``
Toothrot
en qué sistema operativo estás haciendo esto
markhunte
1
El chat se ha ido, y tampoco puedo compilarlo. ¿Dónde puedes compilarlo, @Toothrot?
Lars Nyström
2

Si tiene XQuartz instalado y ejecutándose o no le importa que se inicie, puede ejecutar: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
fuente
No tengo xseten El Capitan usando una cuenta de usuario predeterminada en bash. ¿Es esto parte de un shell específico o algo que tienes que instalar para que el comando funcione?
bmike
@bmike, xsetes parte de lo X11cual no está instalado por defecto. Puede obtenerlo aquí: XQuartz
user3439894
3
@Mikey TK, el problema de IMO con el uso xsetes que hace que XQuartz.app se abra para que (`xset) se ejecute en una Terminal. Para mí, este es un comportamiento no deseado, ya que solo quiero una utilidad CLI que se ejecute como cualquier otro comando BSD.
user3439894