2011-02-10 1 views
1

J'écris une application console qui devrait fonctionner dans des collecteurs de données compatibles VT. Après avoir essayé quelques émulateurs, j'ai trouvé qu'ils avaient un comportement standard différent. Mon problème est que la plupart des émulateurs ont un tampon de données local et l'envoient au serveur quand j'appuie sur retour. Cela me permet d'éditer le texte d'entrée.Terminal VT - Désactiver l'édition locale et l'écho

Cette fonctionnalité n'est pas bonne pour moi parce que l'utilisateur pourrait gâcher la disposition de l'écran. Quels sont les codes d'échappement pour désactiver l'écho local des caractères (laissez le serveur les renvoyer), et pour que le terminal envoie des données immédiatement au serveur sans attendre la touche RETURN?

Merci

Répondre

4

La fonction de mise en mémoire tampon des données est appelée localement Canonisation. Pour le désactiver (ainsi que l'écho) faire:

#include <string.h> /* for memcpy() */ 
#include <termios.h> 

struct termios term_stored; 
struct termios term_new; 
tcgetattr(0,&term_old); 
memcpy(&term_new,&term_stored,sizeof(struct termios)); 
term_new.c_lflag &= ~(ECHO|ICANON); /* disable echo and canonization */ 
tcsetattr(0,TCSANOW,&term_new); 

/* your code */ 

tcsetattr(0,TCSANOW,&term_stored); /* restore the original state */ 

Ou, pensez à utiliser libedit, ncurses ou readline.