table of contents
curs_inopts(3X) | curs_inopts(3X) |
NOM¶
cbreak, nocbreak, echo, noecho, halfdelay, intrflush, keypad, meta, nodelay, notimeout, raw, noraw, noqiflush, qiflush, timeout, wtimeout, typeahead - options en entrée de curses
SYNOPSIS¶
#include <curses.h>
int cbreak(void);
int nocbreak(void);
int echo(void);
int noecho(void);
int halfdelay(int tenths);
int intrflush(WINDOW *win, bool bf);
int keypad(WINDOW *win, bool bf);
int meta(WINDOW *win, bool bf);
int nodelay(WINDOW *win, bool bf);
int raw(void);
int noraw(void);
void noqiflush(void);
void qiflush(void);
int notimeout(WINDOW *win, bool bf);
void timeout(int delay);
void wtimeout(WINDOW *win, int delay);
int typeahead(int fd);
DESCRIPTION¶
Normalement, le pilote tty met en tampon les caractères saisis avant qu'une nouvelle ligne ou un retour chariot soient saisis. La routine cbreak désactive la mise en tampons de lignes et écrase/tue le traitement des caractères (les caractères d'interruption et de contrôle du flux ne sont pas affectés), rendant les caractères saisis par l'utilisateur disponibles immédiatement au programme. La routine nocbreak remet le terminal en mode normal.
Initialement le terminal peut ou peut ne pas être en mode cbreak, étant donné que le mode est hérité ; dès lors, un programme peut appeler cbreak ou nocbreak explicitement. La plupart des programmes interactifs utilisant curses mettent en place le mode cbreak. Notez que cbreak passe avant raw. [Reportez-vous à curs_getch(3X) pour des informations sur les interactions de ces routines avec echo et noecho.]
Les routines echo et noecho contrôlent si les caractères saisis par l'utilisateur sont affichés par getch quand ils sont saisis. L'affichage par le pilote tty est toujours désactivé, mais initialement getch est en mode echo, alors les caractères saisis sont affichés. Les auteurs de la plupart des programmes préfèrent faire leur propre affichage dans une aire contrôlée de l'écran, ou ne rien afficher du tout, alors ils désactivent l'affichage en appelant noecho. [Reportez-vous à curs_getch(3X) pour plus d'informations sur les interactions de ces routines avec cbreak et nocbreak.]
La routine halfdelay est utilisée pour le mode half-delay, qui est similaire au mode cbreak en ce que les caractères saisis par l'utilisateur sont immédiatement disponibles pour le programme. Malgré cela, après avoir bloqué tenths dizaines de secondes, ERR est retourné si rien n'a été saisi. La valeur de tenths doit être un nombre compris entre 1 et 255. Utilisez nocbreak pour quitter le mode half-delay.
Si l'option intrflush est activée, (bf est TRUE), quand une touche d'interruption est appuyée sur le clavier (interruption, stopper, quitter), toute la sortie dans la file d'attente du pilote tty sera affichée, donnant un effet de réponse plus rapide à l'interruption, mais donnant à curses une mauvaise idée de ce qui est à l'écran. En désactivant (bf est FALSE), l'option protège de cet affichage. Par défaut l'option est héritée des options du pilote tty. L'argument de la fenêtre est ignoré.
L'option keypad active le pavé numérique du terminal de l'utilisateur. Si activée (bf est TRUE), l'utilisateur peut presser une touche de fonction (comme une flèche) et wgetch retourne une simple valeur représentant la touche, comme KEY_LEFT. Si désactivée (bf est FALSE), curses ne traite pas les touches de fonction spécialement et le programme doit interpréter les séquences lui-même. Si le pavé numérique du terminal peut être activé (fait pour transmettre) ou non (fait pour travailler localement), activer cette option peut activer le pavé numérique du terminal quand wgetch est appelé. La valeur par défaut est false.
Initialement, que le terminal retourne 7 ou 8 bits significatifs en entrée, cela dépend du mode de contrôle du pilote tty [reportez-vous à termio(7)]. Pour forcer 8 bits à être retournés, invoquez meta(win, TRUE) ; c'est équivalent, sous POSIX, à mettre le flag CS8 au terminal. Pour forcer 7 bits à être retournés, invoquez meta(win, FALSE) ; c'est équivalent, sous POSIX, à mettre le flag CS7 au terminal. L'argument de fenêtre win, est toujours ignoré. Si les capacités terminfo smm (meta_on) et rmm (meta_off) sont définies pour le terminal, smm est envoyé au terminal quand meta(win, TRUE) est appelé et rmm est envoyé quand meta(win, FALSE) est appelé.
L'option nodelay fait de getch un appel non bloquant. Si aucune entrée n'est prête, getch retourne ERR. Si désactivée (bf est FALSE), getch attend qu'une touche soit pressée.
Lors de l'interprétation d'une séquence en entrée précédée d'Echap, wgetch met en place un décompte lors de l'attente du caractère suivant. Si notimeout(win, TRUE) est appelé, alors wgetch ne met pas en place de décompte. Le but de ce décompte est de différencier les séquences reçues d'une touche de fonction et celles saisies par l'utilisateur.
Les routines raw et noraw placent le terminal à l'intérieur ou à l'extérieur d'un tableau. Ce mode est similaire au mode cbreak, en ce que les caractères saisis sont passés immédiatement à travers le programme de l'utilisateur. Les différences sont que dans ce mode raw, les caractères de contrôle interruption, quitter, suspendre et de flux sont tous passés sans être interprétés, au lieu de générer un signal. L'action de la touche BREAK dépend d'autres bits situés dans le pilote tty et ne sont pas gérés par curses.
Quand la routine noqiflush est utilisée, l'affichage normal de la queue en entrée et en sortie associé aux caractères INTR, QUIT et SUSP ne sera pas effectué [reportez-vous à termio(7)]. Quand qiflush est appelé, les queues seront affichées quand ces caractères de contrôles seront lus. Vous pouvez vouloir appeler noqiflush() dans une requête de signal si vous voulez que la sortie continue comme si l'interruption n'avait pas eu lieu, après que la requête se ferme.
Les routines timeout et wtimeout mettent en place la lecture bloquante ou non bloquante pour une fenêtre donnée. Si delai est négatif, la lecture bloquante sera utilisée (par exemple, attendre indéfiniment l'entrée. Si delai est zéro alors la lecture non bloquante sera utilisée (par exemple, la lecture retourne ERR si aucune entrée n'est en attente). Si delai est positif, alors la lecture se bloque pour delai millisecondes, et retourne ERR si rien n'est en entrée à ce moment. Dans ce cas, ces routines fournissent la même fonctionnalité que nodelay, avec la capacité supplémentaire de bloquer pour seulement delai millisecondes (quand delai est positif).
La librairie curses fait une « optimisation de la saisie précoce » en regardant la saisie précoce périodiquement lors de la mise à jour de l'écran. Si du texte en entrée est trouvé, et qu'il vient d'un tty, la mise à jour actuelle est arrêtée avant que refresh ou doupdate ne soit appelé de nouveau. Cela permet une réponse plus rapide aux commandes saisies en avance. Normalement le FICHIER pointeur en entrée passé à newterm, ou stdin dans le cas ou initscr est utilisé, sera utilisé pour faire cette vérification de la saisie précoce. La routine typeahead spécifie que le descripteur de fichier fd doit être utilisé pour chercher la saisie précoce à la place. Si fd est -1, alors la vérification de saisie précoce n'est pas effectuée.
VALEUR EN RETOUR¶
Toutes les routines retournant un entier retournent ERR en cas d'échec et OK (SVr4 ne spécifie qu'une "valeur entière autre que ERR") en cas de succès, si rien d'autre n'est noté dans les descriptions de routine précédentes.
PROBABILITɶ
Ces fonctions sont décrites dans les Curses XSI standard, Version 4.
Les librairies ncurses obéissent au standard XPG4 et à la pratique historique des implémentations curses AT&T, en ce que le bit echo est effacé quand curses initialise l'état du terminal. Les curses BSD diffèrent légèrement : elles laissent le bit echo lors de l'initialisation, mais l'appel au raw de BSD a comme effet de le désactiver. Pour une meilleure portabilité, mettez echo ou noecho en place juste après l'initialisation, même si votre programme reste en développement.
NOTES¶
Notez que echo, noecho, halfdelay, intrflush, meta, nodelay, notimeout, noqiflush, qiflush, timeout, et wtimeout peuvent être macros.
Les appels à noraw et nocbreak suivent la pratique historique en ce qu'ils tendent à restaurer le mode normal depuis les modes raw et cbreak respectivement. Mixer les appels raw/noraw et cbreak/nocbreak entraînent des états de contrôle du pilote tty qui sont durs à prédire ou à comprendre ; ce n'est pas recommandé.
TRADUCTION¶
Ce document est une traduction, réalisée par Simon DEPIETS le 1 novembre 2004. L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : LANGUAGE=en man mergelib. N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans de cette page de manuel.
VOIR AUSSI¶
curses(3X), curs_getch(3X), curs_initscr(3X), termio(7)