2013-03-12 3 views
1

Так что я хочу, когда пользователь нажимает кнопку «вверх», я хочу немедленно отобразить команду, а не показать^[[AI уже знает, как идентифицировать вверх и вниз с клавиатуры, и я знаю termios может быть решением, но, исходя из java-фона, я не совсем знаю, как это сделать. Ncurses не вариант, из-за определенных ограничений. Если можете, пожалуйста, помогите.Имитация поведения оболочки как такового

Что я ожидаю случиться, когда пользователь нажимает на кнопку, я хочу, чтобы сразу сделать Printf на той же строке

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
int main() 
{ 

    char input[100]; 
    char *history[5]; 
    int currentHistory=0; 
    int historyCount=5; 
    history[0]="hi"; 
    history[1]="bye"; 
    history[2]="computer"; 
    history[3]="science"; 
    history[4]="Yo"; 


    while(input[0]!='Q') 
    { 
     if(input[0]==LEFT_ARROW; 
    } 


} 

ответ

4

Вы найдете эту функциональность, и многое другое, в операторах GNU readline или BSD editline. Они предлагают практически ту же функциональность, однако библиотека readline GNU находится под лицензией GPL, а editline - под лицензией BSD.

+0

Это обычное задание класса, я знаю, что я сделал это для класса лет назад. Часто использование дополнительных библиотек не рекомендуется, потому что в этих библиотеках содержатся уроки, которые учат, и обучение тому, как управлять автомобилем, совершенно иное, чем изучение того, как его построить. –

+0

@ EdwinBuck FWIW, я дал ваш ответ +1 по этой причине. Я делаю минимальные предположения: все, что он сказал, это то, что он хочет определенного поведения. Если ему нужно его реализовать, источники в обеих библиотеках могут оказаться полезными (хотя они не простые библиотеки). Если ему просто нужна поддержка истории, использование одной из этих библиотек позволит сэкономить массу работы. – sfstewman

+0

Спасибо, и да, эти библиотеки действительно экономят массу работы, также как и ncurses (что, как сказал Ричард, нельзя использовать). –

1

Непонятно, хотите ли вы лучше обработать ваш вход или улучшить работу с терминалом.

Если вы хотите обработать ввод лучше, я предлагаю обернуть перекодирование символов в функцию, которая возвращает целое число, которое определено для каждого «обработанного» ключа. Таким образом, ваш вход выглядит как

int char = readChar(input); 
if (char == KEY_UP_ARROW) { 
    ... 
} 

где readChar обнаруживает, если первый ключ побег, а затем «заглядывает», чтобы увидеть, если имеется дополнительная информация (различать самостоятельный побег и клавиш со стрелками) ,

Если вы намерены обрабатывать экранную сторону вещей лучше, и ваше намерение состоит в том, чтобы управлять терминалом с помощью собственного программного обеспечения для обработки терминала, вам необходимо ссылаться на ссылку терминала VT100 (при условии, что ваш xterm эмулирует VT100 (что многие делать)). The VT100 codes are described here.

Обратите внимание, что операционная система выполняет некоторую дополнительную обработку на входе (для комбинирования комбинаций клавиш, упрощения программ для разграничения между настройками клавиатуры без ключа и т. Д.), Поэтому вы можете отключить эту обработку в терминале, поставив терминал в другой «режим». Типичные режимы включают «приготовленные» и «сырые», где «raw» предоставляет вам коды клавиш, которые не объединены для простоты.

Смежные вопросы