2

Linux でコンソール プログラムのコマンド ライン インターフェイスを作成しています。その中で矢印のようなキーを使えるようにしたいです。コードをキャプチャするために、次の単純なプログラムを使用しています。

int main()
{
    int c = 0;
    while (c != 3) { // ctrl-c
        c = getchar();
        printf("%d\n", c);
    }
}

これを行うと、HOME キーの取得に問題がありました。あるコンピューターではシーケンス「27 91 72」が得られ、別のコンピューターでは「27 79 72」が得られ、3 番目のコンピューターでは「27 91 49 126」が得られました。

HOME キーと END キーで異なるコードを取得する理由がわかりません (矢印キーと F1 ~ F12 キーは、3 台のコンピューターで同じシーケンスを示しました)。

このキーを取得する標準的な方法、またはすべてのマシンで同じシーケンスを提供する何らかの構成はありますか?

4

1 に答える 1

6

curses フレームワークを使用できます。

curses を使用すると、特別なキーを押しやすく静かになります。しかし欠点は、リンク時に curses ライブラリ全体を取り込む必要があり (gcc -lcurses などを使用)、初期化された curses 画面内ですべての curses 関数を使用する必要があることです。

#include <stdio.h>
#include <curses.h>

int main()
{
    int c = 0;
    initscr();
    keypad(stdscr, 1);
    c = getch();
    endwin();
    printf("0x%04x\n", c);
    printf("0x%04x\n", KEY_HOME);
}

これにより、標準画面 (stdscr) が初期化され、キーパッドが有効になり、getch() を使用してキーが押され、stdscr が再び閉じられて tty モードが復元されます。

has_key() 関数を使用して、現在の端末で特殊キーがサポートされているかどうかを確認することもできます。

それは簡単な方法です..

于 2013-03-11T16:27:20.537 に答える