Periksa apakah caps lock terkunci di terminal

8

Apakah ada cara untuk menanyakan sistem untuk mengetahui apakah caps lock aktif atau tidak aktif dari baris perintah di terminal.app?

Toothrot
sumber
3
Tidakkah mengetik satu huruf menunjukkan status cap lock kepada Anda dengan segera? Apa sebenarnya penggunaan informasi ini. Mungkin Anda bertanya tentang masalah XY ?
bmike
Apa yang sebenarnya ingin Anda capai? Ada utilitas pihak ketiga yang dapat memberi tahu Anda keadaan tombol pengubah namun tidak ada yang asli (diinstal secara default) yang saya ketahui, tetapi itu tidak berarti tidak ada.
user3439894
2
Saya menggunakan LED untuk menunjukkan bahwa sumber input adalah bahasa Yunani. Saya ingin dimatikan hanya jika sumber input adalah bahasa Inggris dan caps lock tidak aktif.
Toothrot
1
@ Hukum Sekarang itu pengaturan yang keren. Jika Anda ingin menambahkan itu ke pertanyaan - luar biasa. Saya yakin banyak orang akan senang mengetahui bagaimana Anda menyelesaikan modifikasi itu.
bmike
1
Saya menggunakan Karabiner dan busyloop / maclight dari Github.
Toothrot

Jawaban:

9

Ada kode baris perintah hebat yang ditulis oleh Stefenk di Macscripter

Kode Stefen memungkinkan Anda mendeteksi cmd, opsi, kontrol, shift, dan caps lock.

Dalam postingannya ia menyediakan kode dan zip unduhannya.

Anda dapat mengunduhnya atau membuat sendiri di Xcode menggunakan proyek dasar.

Saya baru saja menguji kedua cara di El Capitan dan keduanya bekerja.

Kode jika Anda ingin membuat sendiri di Xcode.app adalah:

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

---------- (perbarui ->

Jika Anda ingin mengompilasinya dari Terminal.app

Masukkan kode ke dalam file teks biasa. Saya baru saja menggunakan TextEdit.app dan dokumen teks biasa.

cd ke direktori yang sama dengan file Anda. Pastikan ekstensi tersebut .m (.c juga akan baik-baik saja)

Lalu lari.

gcc  -framework Carbon CheckModKeys.m -o CheckModKeys

CheckModKeys.m adalah file Anda.

CheckModKeys adalah nama aplikasi yang akan dikeluarkan.

<-)


Untuk mendeteksi caps lock, perintah Anda akan terlihat seperti:

/Users/UserName/MyFolder/CheckModKeys  capslock

1 atau 0 akan dikembalikan.

1 untuk on

0 untuk off


Semua kredit jatuh ke tangan Stefen. Saya baru ingat dia memposting ini kembali pada tahun 2009. Dan masih berfungsi hari ini ..

markhunte
sumber
Terima kasih! Bagaimana saya mengkompilasi ini? Saya mencoba gcc -o getmod getmod.ctetapi itu kembali getmod.c:4:5: error: expected expression @autoreleasepool { ^ 1 error generated.
Toothrot
@ Hukum lihat jawaban yang diperbarui
markhunte
Saya masih mendapatkan: `` Simbol yang tidak terdefinisi untuk arsitektur x86_64: "_objc_autoreleasePoolPop", dirujuk dari: _main di main-93f6a5.o "_objc_autoreleasePoolPush", dirujuk dari: _main di main-93f6a5.o ld: simbol (s) tidak ditemukan: arsitektur (s) tidak ditemukan: arsitektur x86_64 clang: error: perintah linker gagal dengan kode keluar 1 (gunakan -v untuk melihat doa) ``
Toothrot
OS apa yang kamu lakukan ini
markhunte
1
Obrolan hilang, dan saya juga tidak bisa mengompilasinya. Di mana Anda bisa mengompilasinya, @Toothrot?
Lars Nyström
2

Jika Anda menginstal XQuartz dan menjalankan atau tidak keberatan meluncurkannya, Anda dapat menjalankan: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
sumber
Saya tidak punya xsetdi El Capitan menggunakan akun pengguna default di bash. Apakah ini bagian dari shell tertentu atau sesuatu yang harus Anda instal agar perintahnya berfungsi?
bmike
@bmike, xsetadalah bagian X11yang tidak diinstal secara default. Anda bisa mendapatkannya di sini: XQuartz
user3439894
3
@ Mike TK, Masalah IMO dengan menggunakan xsetitu menyebabkan XQuartz.app untuk membukanya (`xset) berjalan di Terminal. Bagi saya ini adalah perilaku yang tidak diinginkan karena saya hanya ingin utilitas CLI yang berjalan seperti perintah BSD lainnya.
user3439894