Я пишу интерфейс командной строки для консольной программы на Linux. Я хочу иметь возможность использовать в нем такие клавиши, как стрелки. Поэтому, чтобы зафиксировать коды, я использую эту простую программу:Захват ключа HOME с помощью getchar()
int main()
{
int c = 0;
while (c != 3) { // ctrl-c
c = getchar();
printf("%d\n", c);
}
}
Выполнение этого У меня были проблемы с записью ключа HOME. На одном компьютере я получил последовательность «27 91 72», на другой я получил «27 79 72», а на третьем я получил «27 91 49 126».
Я не уверен, почему я получаю так разные коды на клавишах HOME и END (клавиши Arrows и F1-F12 дали одну и ту же последовательность на трех компьютерах).
Есть ли стандартный способ получить эти ключи или какую-то конфигурацию, которая даст мне такую же последовательность на всех машинах?
Управляющие коды, посылаемые «специальных» ключей различаются типа терминала, и, что еще хуже, они не обязательно образуют код префикса. Вы должны использовать [curses] (http://en.wikipedia.org/wiki/Curses_%28programming_library%29), чтобы управлять всем этим для вас. – Celada
Кстати, обычно 'c' никогда не будет равным' 3', потому что если использование нажимает Ctrl-C, тогда вы получите сигнал 'SIGINT'. – Celada
Это более сложный вопрос, чем вы себе представляете ... созданный код зависит от типа терминала (а текстовая консоль, терминалы xterm, gnome или kde или командная строка Windows различны в этом аспекте), а также на консольном драйвере или в настройках клавиатуры X. Текстовый терминал Linux HOWTO, http://www.tldp.org/HOWTO/Text-Terminal-HOWTO.html дает некоторые отправные точки, особенно в разделе 6 (определенно используйте и следуйте ссылкам, представленным там). Если вы хотите сделать это способом _portable_ (без большого количества кода, зависящего от типа термина), используйте библиотеку, например 'ncurses'. –