ターミナルでキャップがロックされているかどうかを確認します


8

capsロックがオンかオフかをterminal.appのコマンドラインからシステムに問い合わせる方法はありますか?


3
1文字を入力しても、Caps Lockのステータスがすぐに表示されませんか?この情報の実際の用途は何ですか。おそらくあなたはXY問題について尋ねてますか?
bmike

正確に何を達成しようとしていますか?修飾キーの状態を通知できるサードパーティのユーティリティがありますが、私が知っているネイティブ(デフォルトでインストールされたもの)は何もありませんが、存在しないわけではありません。
user3439894

2
入力ソースがギリシャであることを示すためにLEDを使用しています。入力ソースが英語で、Caps Lockがオフになっている場合にのみオフにしたい。
歯腐は、2015年

1
@Lawrenceさて、これはクールなセットアップです。それを質問に追加したい場合-素晴らしい。多くの人が、あなたがその変更をどのように達成したかを知りたいと思うでしょう。
bmike

1
カラビナとGithubのbusyloop / maclightを使用しました。
Toothrot

回答:


9

MacscripterのStefenkによって書かれた素晴らしいコマンドラインコードがあります。

Stefenのコードを使用すると、cmd、option、control、shift、およびcaps lockを検出できます。

彼の投稿では、コードとそのダウンロード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に送られます。2009年に彼がこの方法で投稿したことを覚えています。そして、それは今日でも機能します。


ありがとう!これをどのようにコンパイルしますか?私は試しましたgcc -o getmod getmod.cが、それが戻ってきました getmod.c:4:5: error: expected expression @autoreleasepool { ^ 1 error generated.
Toothrot

@Lawrence更新された回答を参照
markhunte 2015年

まだ取得しています: ``アーキテクチャx86_64の未定義のシンボル: "_objc_autoreleasePoolPop"、参照先:_main in main-93f6a5.o "_objc_autoreleasePoolPush"、参照先:_main in main-93f6a5.o ld:アーキテクチャのシンボルが見つかりませんx86_64 clang:エラー:リンカーコマンドが終了コード1(呼び出しを表示するには-vを使用)で失敗しました ``
Toothrot

どのOSでこれを実行していますか
markhunte '16年

1
チャットはなくなり、コンパイルもできません。あなたがそれをコンパイルできる場所、@ Toothrot?
LarsNyström2017

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でbashのデフォルトのユーザーアカウントを使用していません。これは特定のシェルの一部ですか、それともコマンドを機能させるためにインストールする必要があるものですか?
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.