Verifique se as tampas estão travadas no terminal


8

Existe uma maneira de consultar o sistema para saber se o caps lock está ativado ou desativado na linha de comando no terminal.app?


3
Digitar uma letra não mostraria imediatamente o status do caps lock? Qual é o uso real dessas informações. Talvez você esteja perguntando sobre o problema XY ?
bmike

O que exatamente você está tentando realizar? Existem utilitários de terceiros que podem informar o estado das chaves modificadoras, mas nada nativo (instalado por padrão) que eu saiba, mas isso não significa que não exista.
user3439894

2
Estou usando o LED para indicar que a fonte de entrada é grega. Quero que seja desativado apenas se a fonte de entrada for em inglês e o caps lock estiver desativado.
21415 Toothrot

11
@ Lawrence Agora essa é uma configuração legal. Se você quiser adicionar isso à pergunta - incrível. Aposto que muitas pessoas gostariam de saber como você realizou essa modificação.
bmike

11
Usei o Karabiner e o busyloop / maclight do Github.
Toothrot 14/10/2015

Respostas:


9

Existe um ótimo código de linha de comando escrito por Stefenk no Macscripter

O código de Stefen permite detectar cmd, opção, controle, mudança e caps lock.

Em seu post, ele fornece o código e um zip para download.

Você pode fazer o download ou criar o seu próprio no Xcode usando o projeto de fundação.

Acabei de testar os dois lados em El Capitan e os dois funcionam.

O código se você deseja criar o seu próprio no 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;
}

---------- (atualização ->

Se você deseja compilá-lo no Terminal.app

Coloque o código em um arquivo de texto sem formatação. Eu apenas usei TextEdit.app e um documento de texto sem formatação.

cd para o mesmo diretório que o seu arquivo. Verifique se a extensão é .m (.c também ficará ok)

Então corra.

gcc  -framework Carbon CheckModKeys.m -o CheckModKeys

CheckModKeys.m é o seu arquivo.

CheckModKeys é o nome do aplicativo a ser produzido.

<-)


Para detectar caps lock, seu comando seria semelhante a:

/Users/UserName/MyFolder/CheckModKeys  capslock

um 1 ou 0 será retornado.

1 para em

0 para desligado


Todo o crédito é para Stefen. Acabei de me lembrar que ele postou desta maneira em2009. E ainda funciona hoje ..


Obrigado! Como faço para compilar isso? Eu tentei gcc -o getmod getmod.c, mas que retornou getmod.c:4:5: error: expected expression @autoreleasepool { ^ 1 error generated.
Toothrot

@Lawrence ver resposta atualizada
markhunte 14/10

Eu ainda recebo: `` Símbolos indefinidos para a arquitetura x86_64: "_objc_autoreleasePoolPop", mencionado em: _main em main-93f6a5.o "_objc_autoreleasePoolPush", mencionado em: _main em main-93f6a5.o ld: symbol (s) não encontrado (s) para arquitetura x86_64 clang: error: o comando do vinculador falhou com o código de saída 1 (use -v para ver a invocação) ``
Toothrot

em que sistema operacional você está fazendo isso #
markhunte 16/10/2015

11
O bate-papo acabou e eu também não posso compilá-lo. Onde você pode compilá-lo, @Toothrot?
Lars Nyström

2

Se você possui o XQuartz instalado e está executando ou não se importa com o lançamento, é possível executar: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

Eu não tenho xsetno El Capitan usando uma conta de usuário padrão no bash. Isso faz parte de um shell específico ou algo que você precisa instalar para que o comando funcione?
bmike

@bmike, xsetfaz parte do X11qual não está instalado por padrão. Você pode obtê-lo aqui: XQuartz
user3439894

3
@ Mikey TK, O problema do IMO com o uso xseté que ele faz com que o XQuartz.app seja aberto (xset) para ser executado em um Terminal. Para mim, esse é um comportamento indesejável, pois eu gostaria apenas de um utilitário CLI que seja executado como qualquer outro comando BSD.
user3439894
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.