터미널에 캡이 고정되어 있는지 확인


8

terminal.app의 명령 줄에서 캡 잠금이 켜져 있는지 여부를 알리기 위해 시스템을 쿼리하는 방법이 있습니까?


3
한 글자를 입력하지 않으면 즉시 캡 잠금 상태가 표시되지 않습니까? 이 정보의 실제 사용법은 무엇입니까? 아마도 당신은 XY 문제 에 대해 질문하고 있습니까?
bmike

정확히 무엇을 달성하려고합니까? 수정 자 키의 상태를 알려주는 타사 유틸리티가 있지만 기본적으로 설치되어 있지는 않지만 기본적으로 설치되어 있지는 않습니다.
user3439894

2
입력 소스가 그리스어임을 나타 내기 위해 LED를 사용하고 있습니다. 입력 소스가 영어이고 Caps Lock이 꺼져있는 경우에만 끄고 싶습니다.
Toothrot

1
@Lawrence 이제 멋진 설정입니다. 당신이 질문에 그것을 추가하고 싶다면-굉장합니다. 많은 사람들이 당신이 그 수정을 어떻게 성취했는지 알고 싶어합니다.
bmike

1
Github의 Karabiner와 busyloop / maclight를 사용했습니다.
Toothrot

답변:


9

Macscripter에 Stefenk가 작성한 훌륭한 명령 행 코드가 있습니다.

Stefen의 코드를 사용하면 cmd, 옵션, 제어, Shift 및 Caps Lock을 감지 할 수 있습니다.

그의 직책에서 그는 코드와 다운로드 zip을 제공합니다.

기초 프로젝트를 사용하여 Xcode에서 다운로드하거나 직접 빌드 할 수 있습니다.

나는 엘 캐피 탄에서 두 가지 방법을 테스트했으며 둘 다 작동합니다.

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

---------- (업데이트->

Terminal.app에서 컴파일하려면

코드를 일반 텍스트 파일에 넣습니다. 방금 TextEdit.app와 일반 텍스트 문서를 사용했습니다.

파일과 같은 디렉토리에 CD를 넣으십시오. 확장자가 .m인지 확인하십시오 (.c도 괜찮습니다)

그런 다음 실행하십시오.

gcc  -framework Carbon CheckModKeys.m -o CheckModKeys

CheckModKeys.m은 파일입니다.

CheckModKeys는 출력 될 앱의 이름입니다.

<-)


캡 잠금을 감지하려면 명령이 다음과 같습니다.

/Users/UserName/MyFolder/CheckModKeys  capslock

1 또는 0이 반환됩니다.

에 1

꺼짐 0


모든 크레딧은 Stefen으로갑니다. 나는 그가 2009 년에이 방법을 다시 게시 한 것을 기억했다. 그리고 그것은 오늘날에도 여전히 작동합니다 ..


감사! 이것을 어떻게 컴파일합니까? 나는 시도 gcc -o getmod getmod.c했지만 그 반환 getmod.c:4:5: error: expected expression @autoreleasepool { ^ 1 error generated.
Toothrot

@Lawrence 업데이트 된 답변보기
markhunte

``아키텍처 x86_64에 대한 정의되지 않은 기호 : "_objc_autoreleasePoolPop", 참조 : _main in main-93f6a5.o "_objc_autoreleasePoolPush", 참조 : _main in main-93f6a5.o ld : 아키텍처에서 찾을 수없는 기호 x86_64 clang : 오류 : 종료 코드 1에서 링커 명령이 실패했습니다 (-v를 사용하여 호출 참조) ''
Toothrot

어떤 OS를 사용하고
계십니까

1
채팅이 사라졌고 컴파일 할 수 없습니다. 컴파일 할 수있는 곳, @Toothrot?
Lars Nyström

2

당신이있는 경우 XQuartz가 실행 중 하나를 설치하거나 실행 상관하지 않습니다, 당신은 실행할 수 있습니다 :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

xsetbash의 기본 사용자 계정을 사용하는 El Capitan 에는 없습니다 . 이 부분이 특정 쉘의 일부입니까 아니면 명령이 작동하도록 설치해야합니까?
bmike

@bmike xset는 그 일부 X11가 기본적으로 설치되지 않습니다. 당신은 여기 그것을 얻을 수 있습니다 XQuartz
user3439894

3
@Mikey TK, IMO를 사용할 때의 문제 xset는 XQuartz.app가 (xset) 터미널에서 열리게한다는 것입니다. 나에게 이것은 다른 BSD 명령처럼 실행되는 CLI 유틸리티를 원하기 때문에 바람직하지 않은 동작입니다.
user3439894
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.