10 votos

Compruebe si el bloqueo de mayúsculas está activado en el terminal

¿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?

3 votos

¿No se puede teclear una letra para ver inmediatamente el estado del bloqueo de mayúsculas? ¿Cuál es la utilidad real de esta información? Tal vez usted está preguntando acerca de el problema XY ?

0 votos

¿Qué quieres conseguir exactamente? Hay utilidades de terceros que te pueden decir el estado de las teclas modificadoras sin embargo nada nativo (instalado por defecto) que yo sepa, pero eso no significa que no lo haya.

2 votos

El LED indica que la fuente de entrada es griega. Quiero que se apague sólo si la fuente de entrada es el inglés y el bloqueo de mayúsculas está desactivado.

12voto

Malik hassan Puntos 16

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

El código de Stefen permite detectar para cmd, option, control, shift y caps lock.

En su post proporciona el código y un zip de descarga del mismo.

Puedes descargarlo o construir el tuyo propio en Xcode usando el proyecto foundation.

Acabo de probar ambas formas en El Capitán y ambas funcionan.

El código si quieres construir el tuyo propio 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

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

cd al mismo directorio que su archivo. Asegúrate de que la extensión es .m (.c también sirve)

Entonces corre.

gcc  -framework Carbon CheckModKeys.m -o CheckModKeys

CheckModKeys.m es su archivo.

CheckModKeys es el nombre de la aplicación que se va a emitir.

<-)


Para detectar el bloqueo de mayúsculas su comando sería algo así:

/Users/UserName/MyFolder/CheckModKeys  capslock

se devolverá un 1 o un 0.

1 para on

0 para el apagado


Todo el mérito es de Stefen. Acabo de recordar que él publicó esto en `2009. Y todavía funciona hoy

0 votos

Gracias. ¿Cómo puedo compilar esto? He intentado gcc -o getmod getmod.c pero que devolvió getmod.c:4:5: error: expected expression @autoreleasepool { ^ 1 error generated.

0 votos

@Lawrence ver respuesta actualizada

0 votos

Todavía me sale: `` Símbolos no definidos para la 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(s) para la arquitectura x86_64 clang: error: el comando del enlazador falló con el código de salida 1 (use -v para ver la invocación) ``

2voto

Mikey T.K. Puntos 1220

Si tiene XQuartz instalado y funcionando o no te importa que se lance, puedes correr: 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

0 votos

No tengo xset en El Capitan usando una cuenta de usuario por defecto en bash. ¿Es esto parte de un shell específico o algo que tienes que instalar para que el comando funcione?

0 votos

@bmike, xset forma parte de X11 que no está instalado por defecto. Puede obtenerlo aquí: XQuartz

3 votos

@Mikey T.K., El problema OMI con el uso de xset es que hace que se abra XQuartz.app para que se ejecute (`xset) en un Terminal. Para mí esto es un comportamiento no deseado ya que sólo quiero una utilidad CLI que se ejecute como cualquier otro comando BSD.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X