ตรวจสอบว่าแคปล็อคในเทอร์มินัล


8

มีวิธีการสอบถามระบบเพื่อบอกหรือไม่ว่า Caps Lock เปิดหรือปิดจากบรรทัดคำสั่งใน terminal.app?


3
จะไม่พิมพ์ตัวอักษรหนึ่งตัวแสดงสถานะตัวพิมพ์ใหญ่ให้คุณทันที การใช้ข้อมูลนี้เป็นอย่างไร บางทีคุณถามเกี่ยวกับปัญหาที่เกิดขึ้น XY ?
bmike

คุณพยายามทำอะไรให้สำเร็จ มียูทิลิตี้ของบุคคลที่สามที่สามารถบอกคุณถึงสถานะของคีย์ตัวปรับแต่งได้ แต่ไม่มีสิ่งใดในเนทีฟ (ติดตั้งตามค่าเริ่มต้น) ที่ฉันรู้จัก แต่นั่นไม่ได้หมายความว่าไม่มี
user3439894

2
ฉันใช้ LED เพื่อระบุว่าแหล่งอินพุตเป็นภาษากรีก ฉันต้องการให้ปิดเฉพาะเมื่อแหล่งอินพุตเป็นภาษาอังกฤษและปิดตัวล็อคแคป
Toothrot

1
@ ลอเรนซ์ตอนนี้มันเป็นเซ็ตสุดยอด หากคุณต้องการที่จะเพิ่มคำถาม - ยอดเยี่ยม ฉันพนันได้เลยว่าผู้คนจำนวนมากชอบที่จะรู้ว่าคุณประสบความสำเร็จในการปรับเปลี่ยนอย่างไร
bmike

1
ฉันใช้ Karabiner และ busyloop / maclight จาก Github
Toothrot

คำตอบ:


9

มีรหัสบรรทัดคำสั่งที่ดีเขียนโดยStefenk บน Macscripter

รหัสของ Stefen ช่วยให้คุณตรวจจับ cmd, ตัวเลือก, ควบคุม, เปลี่ยนและล็อคแคป

ในโพสต์ของเขาเขาให้รหัสและ zip ดาวน์โหลดของมัน

คุณสามารถดาวน์โหลดหรือสร้าง Xcode ของคุณเองโดยใช้โปรเจคพื้นฐาน

ฉันเพิ่งทดสอบทั้งสองวิธีใน El Capitan และพวกเขาทั้งสองทำงาน

รหัสถ้าคุณต้องการสร้างของคุณเองใน 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 ฉันเพิ่งจำได้ว่าเขาโพสต์ด้วยวิธีนี้ในปีพ. ศ. 2552 และมันก็ยังใช้ได้วันนี้ ..


ขอบคุณ! ฉันจะรวบรวมสิ่งนี้ได้อย่างไร ฉันลองแล้วgcc -o getmod getmod.cแต่กลับ getmod.c:4:5: error: expected expression @autoreleasepool { ^ 1 error generated.
Toothrot

@Lawrence ดูคำตอบที่ปรับปรุงแล้ว
markhunte

ฉันยังได้รับ: `` สัญลักษณ์ที่ไม่ได้กำหนดสำหรับสถาปัตยกรรม x86_64: "_objc_autoreleasePoolPop", อ้างอิงจาก: _main ใน main-93f6a5.o "_objc_autoreleasePoolPush", อ้างอิงจาก: _main ใน main-93f6a5.o ld: พบสัญลักษณ์ x86_64 เสียงดังกราว: ข้อผิดพลาด: คำสั่ง linker ล้มเหลวด้วยรหัสออก 1 (ใช้ -v เพื่อดูการเรียกใช้) ``
Toothrot

คุณทำอะไรกับระบบปฏิบัติการนี้อยู่
markhunte

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

ฉันไม่มีxsetEl Capitan โดยใช้บัญชีผู้ใช้เริ่มต้นในการทุบตี เป็นส่วนหนึ่งของเชลล์เฉพาะหรือสิ่งที่คุณต้องติดตั้งเพื่อให้คำสั่งทำงานหรือไม่
bmike

@bmike xsetเป็นส่วนหนึ่งX11ที่ไม่ได้ติดตั้งโดยค่าเริ่มต้น คุณสามารถรับได้ที่นี่: XQuartz
user3439894

3
@ Mikey TK, ปัญหา IMO ที่มีการใช้xsetคือมันทำให้ XQuartz.app เปิดเพื่อให้มัน (`xset) ทำงานในเทอร์มินัล สำหรับฉันนี่เป็นพฤติกรรมที่ไม่พึงประสงค์เพราะฉันต้องการยูทิลิตี้ CLI ที่ทำงานเหมือนคำสั่ง BSD อื่น ๆ
user3439894
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.