Manipulation de caractères avec des malédictions
Vous pouvez ajouter des caractères à une fenêtre de malédiction à l'aide d'un clavier ou d'une application de malédiction. Cette section explique comment ajouter, supprimer ou modifier des caractères qui apparaissent dans une fenêtre de malédiction.
Taille de caractère
Certains jeux de caractères définissent des caractères à plusieurs colonnes qui occupent plus d'une position de colonne lorsqu'ils sont affichés à l'écran.
L'écriture d'un caractère dont la largeur est supérieure à la largeur de la fenêtre de destination génère une erreur.
Ajout de caractères à l'image écran
La bibliothèque curses fournit un certain nombre de sous-routines qui écrivent des modifications de texte dans une fenêtre et marquent la zone à mettre à jour lors du prochain appel à la sous-routine wrefresh .
Sous-routines waddch
Les sous-routines waddch remplacent le caractère à l'emplacement du curseur logique en cours par un caractère spécifié. Après l'écrasement, le curseur logique est déplacé d'un espace vers la droite. Si les sous-routines waddch sont appelées à la marge de droite, elles ajoutent également un caractère de retour à la ligne automatique. De plus, si vous appelez l'une de ces sous-routines au bas d'une zone de défilement et que la sous-routine scrollok est activée, la région est défilée sur une ligne. Par exemple, si vous avez ajouté une nouvelle ligne à la ligne inférieure d'une fenêtre, la fenêtre fait défiler une ligne vers le haut.
| Sous-routine | Descriptif |
|---|---|
| Macro addch | Ajoute un caractère à stdscr |
| Macro mvaddch | Déplace un caractère à l'emplacement spécifié avant de l'ajouter à stdscr |
| Macro mvwaddch | Déplace un caractère vers l'emplacement spécifié avant de l'ajouter à la fenêtre définie par l'utilisateur |
| Sous-routine waddch | Ajoute un caractère à la fenêtre définie par l'utilisateur |
A l'aide des familles de sous-routines winch et waddch , vous pouvez copier des attributs de texte et de vidéo d'un endroit à un autre. A l'aide de la famille de sous-routines winch , vous pouvez extraire un caractère et ses attributs vidéo. Vous pouvez ensuite utiliser l'une des sous-routines waddch pour ajouter le caractère et ses attributs à un autre emplacement.
Vous pouvez également utiliser les sous-routines waddch pour ajouter des caractères de contrôle à une fenêtre. Les caractères de contrôle sont tracés dans la notation ^ X.
Caractères uniques de non-contrôle de sortie
L'utilisation des sous-routines wechochar peut générer un gain de performances significatif en cas de sortie de caractères de contrôle uniques. Ces sous-routines sont fonctionnellement équivalentes à un appel à la sous-routine waddchr correspondante, suivie de la sous-routine wrefresh correspondante. Les sous-routines wechochar incluent la sous-routine wechochar , la macro echochar et la sous-routine pechochar .
Certains jeux de caractères peuvent contenir des caractères sans espacement. (Les caractères non espacés sont ceux, autres que' \ 0' pour lequel la sous-routine wcwidth renvoie une largeur de zéro.) L'application peut écrire des caractères sans espacement dans une fenêtre. Chaque caractère non-espacement d'une fenêtre est associé à un caractère d'espacement et modifie ce caractère. Les caractères sans espacement dans une fenêtre ne peuvent pas être traités séparément. Un caractère non-espacement est implicitement adressé chaque fois qu'une opération Curses affecte le caractère d'espacement auquel le caractère non-espacement est associé.
Les caractères sans espacement ne prennent pas en charge les attributs. Pour les interfaces qui utilisent des caractères et des attributs larges, les attributs sont ignorés si le caractère large est un caractère sans espacement. Les caractères à plusieurs colonnes comportent un ensemble unique d'attributs pour toutes les colonnes. L'association de caractères sans espacement avec des caractères d'espacement peut être contrôlée par l'application à l'aide des interfaces de caractères larges. Les fonctions de chaîne de caractères larges fournissent une association dépendante du jeu de codes.
Les effets typiques d'un caractère sans espacement associé à un caractère d'espacement appelé csont les suivants:
- Le caractère non-espacement peut modifier l'apparence de c. (Par exemple, il peut y avoir des caractères sans espacement qui ajoutent des signes diacritiques aux caractères. Cependant, il peut également y avoir des caractères d'espacement avec des signes diacritiques intégrés.)
- Les caractères sans espacement peuvent relier c au caractère suivant c. Des exemples de cette utilisation sont la formation de ligatures et la conversion de caractères en formes d'affichage composées, de mots ou d'idéogrammes.
Les implémentations peuvent limiter le nombre de caractères sans espacement qui peuvent être associés à un caractère d'espacement, à condition que la limite soit d'au moins 5.
Caractères complexes
Un caractère complexe est un ensemble de caractères associés, qui peut inclure un caractère d'espacement et peut également inclure tout caractère non-espacement qui lui est associé. Un caractère complexe d'espacement est un caractère complexe qui comprend un caractère d'espacement et tout caractère non-espacement qui lui est associé. Un exemple de jeu de codes comportant des caractères complexes est ISO/IEC 10646-1:1993.
Un caractère complexe peut être écrit à l'écran. Si le caractère complexe n'inclut pas de caractère d'espacement, tous les caractères non-espacement sont associés au caractère complexe d'espacement qui existe à la position d'écran indiquée. Lorsque l'application lit les informations à partir de l'écran, elle obtient des caractères complexes d'espacement.
Le type de données cchar_t représente un caractère complexe et son rendu. Lorsqu'un cchar_t représente un caractère complexe sans espacement (c'est-à-dire lorsqu'il n'y a pas de caractère d'espacement dans le caractère complexe), son rendu n'est pas utilisé. Lorsqu'il est écrit à l'écran, il utilise le rendu spécifié par le caractère d'espacement déjà affiché.
Un objet de type cchar_t peut être initialisé à l'aide de la sous-routine setchar et son contenu peut être extrait à l'aide de la sous-routine getchar . Le comportement des fonctions qui prennent une valeur cchar_t qui n'a pas été initialisée de cette manière est obtenu à partir d'une fonction curses qui a un argument de sortie cchar_t.
Caractères spéciaux
Certaines fonctions traitent les caractères spéciaux. Dans les fonctions qui ne déplacent pas le curseur en fonction des informations placées dans la fenêtre, ces caractères spéciaux ne sont utilisés qu'à l'intérieur d'une chaîne afin d'affecter le positionnement des caractères suivants. Le déplacement du curseur indiqué ci-dessous ne persiste pas dans le curseur visible au-delà de la fin de l'opération. Dans les fonctions qui ne déplacent pas le curseur, ces caractères spéciaux peuvent être utilisés pour affecter le positionnement des caractères suivants et pour obtenir le déplacement du curseur physique.
| Caractère | Descriptif |
|---|---|
| Retour arrière | A moins que le curseur ne se trouve déjà dans la colonne 0, le retour arrière déplace le curseur d'une colonne vers le début de la ligne en cours et tous les caractères après le retour arrière sont ajoutés ou insérés à partir de cette dernière. |
| Retour chariot | A moins que le curseur ne soit déjà dans la colonne 0, le retour chariot déplace le curseur au début de la ligne en cours. Tous les caractères après le retour chariot sont ajoutés ou insérés à partir de là. |
| Nouvelle ligne | Dans une opération d'ajout, les curses ajoutent le caractère d'arrière-plan dans des colonnes successives jusqu'à atteindre la fin de la ligne. Le défilement se produit et tous les caractères après le caractère de retour à la ligne sont ajoutés, en commençant par le début de la nouvelle ligne. Dans une opération d'insertion, une nouvelle ligne efface le reste de la ligne en cours avec le caractère d'arrière-plan (c'est-à-dire une sous-routine wclrtoeol ) et déplace le curseur au début d'une nouvelle ligne. Lorsque le défilement est activé, l'avance du curseur sur une nouvelle ligne peut entraîner le défilement. Tous les caractères après le caractère de retour à la ligne sont insérés au début de la nouvelle ligne. La fonction filter peut empêcher ce traitement. |
| Onglet | Les caractères de tabulation dans le texte déplacent les caractères suivants vers l'arrêt de tabulation horizontal suivant. Par défaut, les tabulations se trouvent dans les colonnes 0, 8, 16, etc. Dans une opération d'insertion ou d'ajout, effectue une opération d'insertion ou d'ajout, respectivement, du caractère d'arrière-plan dans des colonnes successives jusqu'à atteindre l'arrêt de tabulation suivant. S'il n'y a plus d'arrêts de tabulation dans la ligne en cours, le retour à la ligne et le défilement se produisent. |
Caractères de contrôle
Les fonctions de malédiction qui effectuent un traitement des caractères spéciaux convertissent conceptuellement les caractères de contrôle en (' ^') suivi d'un deuxième caractère (qui est une lettre majuscule si elle est alphabétique) et d'écrire cette chaîne dans la fenêtre à la place du caractère de contrôle. Les fonctions qui extraient du texte de la fenêtre n'extraient pas le caractère de contrôle d'origine.
Graphiques de ligne:
Vous pouvez utiliser les variables suivantes pour ajouter des caractères de dessin de ligne à l'écran avec la sous-routine waddch . Lorsqu'elle est définie pour le terminal, le bit A_ALTCHARSET de la variable est activé. Sinon, le caractère par défaut répertorié dans le tableau suivant est stocké dans la variable.
| Nom de la variable | Caractère par défaut | Description du glyphe |
|---|---|---|
| ACS_ULCORNER | + | coin supérieur gauche |
| ACS_LLCORNER | + | coin inférieur gauche |
| ACS_URCORNER | + | coin supérieur droit |
| ACS_LRCORNER | + | coin inférieur droit |
| ACS_RTEE | + | Tee de droite |
| ACS_LTEE | + | Tee gauche |
| ACS_BTEE | + | Tee inférieure |
| ACS_TTEE | + | Tee supérieure |
| ACS_HLINE | — | ligne horizontale |
| ACS_VLINE | | | ligne verticale |
| ACS_PLUS | + | Plus |
| ACS_S1 | - | analyser la ligne 1 |
| ACS_S9 | _ | numériser la ligne 9 |
| ACS_LOSANGE | + | Diamond |
| ACS_XX_ENCODE_CASE_ONE chambre | : | damier (pointillé) |
| DEGRÉ_ACS | , | symbole de degré |
| ACS_PLMINUS | # | plus / moins |
| ACS_POINT | o | puce |
| ACS_FLECHE | < | flèche pointant vers la gauche |
| ACS_RARROW | > | flèche pointant vers la droite |
| ACS_LIGNE | v | flèche pointant vers le bas |
| ACS_UARROW | ^ | flèche pointant vers le haut |
| ACS_BOARD | # | tableau des carrés |
| ACS_LANTERN | # | symbole de lanterne |
| BLOC_ACS | # | bloc carré plein |
Sous-routines waddstr
| Sous-routine | Descriptif |
|---|---|
| Macro addstr | Ajoute une chaîne de caractères à stdscr |
| Macro mvaddstr | Déplace le curseur logique à un emplacement spécifié avant d'ajouter une chaîne de caractères à stdscr |
| Sous-routine waddstr | Ajoute une chaîne de caractères à une fenêtre définie par l'utilisateur |
| Macro wmvaddstr | Déplace le curseur logique à un emplacement spécifié avant d'ajouter une chaîne de caractères à une fenêtre définie par l'utilisateur |
Sous-routines winsch
Les sous-routines winsch insèrent un caractère spécifié avant le caractère en cours dans une fenêtre. Tous les caractères situés à droite du caractère inséré sont déplacés d'un espace vers la droite. Par conséquent, le caractère le plus à droite de la ligne peut être perdu. Les positions des curseurs logiques et physiques ne changent pas après le déplacement. Les sous-routines winsch incluent les éléments suivants:
| Sous-routine | Descriptif |
|---|---|
| Macro insch | Insère un caractère dans stdscr |
| Macro mvinsch | Déplace le curseur logique à un emplacement spécifié dans stdscr avant d'insérer un caractère |
| Macro mvwinsch | Déplace le curseur logique à un emplacement spécifié dans une fenêtre définie par l'utilisateur avant d'insérer un caractère |
| Sous-routine winsch | Insère un caractère dans une fenêtre définie par l'utilisateur |
Sous-routines winsertln
Les sous-routines winsertln insèrent une ligne vide au-dessus de la ligne en cours dans une fenêtre. La sous-routine insertln insère une ligne dans stdscr. La ligne inférieure de la fenêtre est perdue. La sous-routine winsertln effectue la même action dans une fenêtre définie par l'utilisateur.
Sous-routines wprintw
Les sous-routines wprintw remplacent une série de caractères (commençant par le caractère en cours) par une sortie formatée. Le format est identique à celui de la commande printf . La famille printw est constituée des éléments suivants:
| Sous-routine | Descriptif |
|---|---|
| Macro mvprintw | Déplace le curseur logique à un emplacement spécifié dans stdscr avant de remplacer les caractères |
| Macro mvwprintw | Déplace le curseur logique à un emplacement spécifié dans une fenêtre définie par l'utilisateur avant de remplacer des caractères |
| Macro printw | Remplace une série de caractères dans stdscr |
| Sous-routine wprintw | Remplace une série de caractères dans une fenêtre définie par l'utilisateur |
Les sous-routines wprintw appellent la sous-routine waddch pour remplacer les caractères.
macro unctrl
La macro unctrl renvoie une représentation imprimable du caractère de contrôle spécifié, affiché dans la notation ^ X. La macro unctrl renvoie les caractères d'impression tels qu'ils sont.
Activation du défilement du texte
| Sous-routine | Descriptif |
|---|---|
| idlok | Permet aux malédictions d'utiliser la fonction d'insertion/suppression de ligne matérielle |
| scrollok | Active le défilement d'une fenêtre lorsque le curseur est déplacé du bord droit de la dernière ligne d'une fenêtre |
| setscrreg ou wsetscrreg | Définit une zone de défilement de logiciel dans une fenêtre |
Le défilement se produit lorsqu'un programme ou un utilisateur déplace un curseur hors du bord inférieur d'une fenêtre. Pour que le défilement ait lieu, vous devez d'abord utiliser la sous-routine scrollok afin d'activer le défilement pour une fenêtre. Une fenêtre est défilée si le défilement est activé et si l'une des situations suivantes se produit:
- Le curseur est déplacé du bord d'une fenêtre.
- Un caractère de retour à la ligne apparaît sur la dernière ligne.
- Un caractère est inséré à la dernière position de la dernière ligne.
Lorsqu'une fenêtre est défilée, les malédictions mettent à jour à la fois la fenêtre et l'affichage. Toutefois, pour obtenir l'effet de défilement physique sur le terminal, vous devez appeler la sous-routine idlok avec le paramètre Flag défini sur TRUE.
Si le défilement est désactivé, le curseur reste sur la ligne inférieure à l'emplacement où le caractère a été entré.
Lorsque le défilement est activé pour une fenêtre, vous pouvez utiliser les sous-routines setscrreg pour créer une zone de défilement de logiciel à l'intérieur de la fenêtre. Vous transmettez les valeurs des sous-routines setscrreg pour la ligne supérieure et la ligne inférieure de la région. Si setscrreg est activé pour la région et que le défilement est activé pour la fenêtre, toute tentative de déplacement hors de la ligne inférieure spécifiée fait défiler toutes les lignes de la région d'une ligne vers le haut. Vous pouvez utiliser la macro setscrreg pour définir une région de défilement dans stdscr. Sinon, vous utilisez la sous-routine wsetscrreg pour définir des régions de défilement dans des fenêtres définies par l'utilisateur.
Suppression de caractères
Vous pouvez supprimer du texte en le remplaçant par des espaces ou en supprimant des caractères d'un tableau de caractères et en faisant glisser le reste des caractères de la ligne un espace vers la gauche.
Sous-routines werase
La macro effacer copie l'espace vide à chaque position de la valeur stdscr. La sous-routine werase place un espace vide à chaque position d'une fenêtre définie par l'utilisateur. Pour supprimer un caractère unique dans une fenêtre, utilisez la sous-routine wdelch .
Sous-routines wclear
| Sous-routine | Descriptif |
|---|---|
| clearou wclear | Efface l'écran et définit un indicateur d'effacement pour la prochaine actualisation. |
| clearok | Détermine si curses efface une fenêtre lors du prochain appel à la sous-routine refresh ou wrefresh . |
Les sous-routines wclear sont similaires aux sous-routines werase . Cependant, en plus de placer un espace vide à chaque position d'une fenêtre, les sous-routines wclear appellent également la sous-routine wclearok . En conséquence, l'écran est effacé lors du prochain appel à la sous-routine wrefresh .
La famille de sous-routines wclear contient la sous-routine wclear , la macro clear et la sous-routine clearok . La macro clear met un blanc à chaque position dans stdscr.
Sous-routines wclrtoeol
La macro clrtoeol fonctionne dans stdscr, tandis que la sous-routine wclrtoeol effectue la même action dans une fenêtre définie par l'utilisateur.
Sous-routines wclrtobot
La macro clrtobot fonctionne dans stdscr, tandis que la macro wclrtobot effectue la même action dans une fenêtre définie par l'utilisateur.
Sous-routines wdelch
| Sous-routine | Descriptif |
|---|---|
| Macro delch | Supprime le caractère en cours de stdscr |
| Macro mvdelch | Déplace le curseur logique avant de supprimer un caractère de stdscr |
| Macro mvwdelch | Déplace le curseur logique avant de supprimer un caractère d'une fenêtre définie par l'utilisateur |
| Sous-routine wdelch | Supprime le caractère en cours dans une fenêtre définie par l'utilisateur |
Les sous-routines wdelch suppriment le caractère en cours et déplacent tous les caractères à droite du caractère en cours sur la ligne en cours d'une position à gauche. Le dernier caractère de la ligne est rempli avec un blanc. La famille de sous-routines delch comprend les sous-routines et macros suivantes:
Sous-routines wdeleteln
Les sous-routines deleteln suppriment la ligne en cours et déplacent toutes les lignes sous la ligne en cours d'une ligne vers le haut. Cette action efface la ligne inférieure de la fenêtre.
Obtention de caractères
Votre programme peut extraire des caractères à partir du clavier ou de l'écran. Les sous-routines wgetch extraient des caractères du clavier. Les sous-routines winch extraient des caractères de l'affichage.
Sous-routines wgetch
Les sous-routines wgetch lisent les caractères à partir du clavier connecté au terminal associé à la fenêtre. Avant d'obtenir un caractère, ces sous-routines appellent les sous-routines wrefresh si quelque chose dans la fenêtre a changé: par exemple, si le curseur a été déplacé ou si le texte a changé.
La famille de sous-routines wgetch se compose des éléments suivants:
| Sous-routine | Descriptif |
|---|---|
| Macro getch | Extrait un caractère de stdscr |
| Macro mvgetch | Déplace le curseur avant d'obtenir un caractère du stdscr |
| Macro mvwgetch | Déplace le curseur avant d'obtenir un caractère à partir d'une fenêtre définie par l'utilisateur |
| Sous-routine wgetch | Extrait un caractère d'une fenêtre définie par l'utilisateur |
Pour placer un caractère précédemment obtenu par un appel à la sous-routine wgetch dans la file d'attente d'entrée, utilisez la sous-routine ungetch . Le caractère est extrait par l'appel suivant à la sous-routine wgetch .
Modes de terminal
La sortie des sous-routines wgetch est, en partie, déterminée par le mode du terminal. La liste suivante décrit l'action des sous-routines wgetch dans chaque type de mode terminal:
| Sous-routine | Descriptif |
|---|---|
| Mode DELAY | Arrête la lecture jusqu'à ce que le système transmette le texte via le programme. Si le mode CBREAK est également défini, le programme s'arrête après un caractère. Si le mode CBREAK n'est pas défini (mode NOCBREAK), la sous-routine wgetch arrête la lecture après le premier caractère de retour à la ligne. Si ECHO est défini, le caractère est également répercuté dans la fenêtre. |
| Mode HALF-DELAY | Arrête la lecture jusqu'à ce qu'un caractère soit saisi ou qu'un délai d'attente spécifié soit atteint. Si le mode ECHO est défini, le caractère est également renvoyé à la fenêtre. |
| Mode NODELAY | Renvoie la valeur ERR si aucune entrée n'est en attente. |
Touches de fonction
Les touches de fonction sont définies dans le fichier curses.h . Les touches de fonction peuvent être renvoyées par la sous-routine wgetch si le bloc de touches est activé. Un terminal peut ne pas prendre en charge toutes les touches de fonction. Pour voir si un terminal prend en charge une clé particulière, vérifiez sa définition de base de données terminfo .
Obtention des touches de fonction
Si votre programme active le clavier avec la sous-routine clavier et que l'utilisateur appuie sur une touche de fonction, le jeton de cette touche de fonction est renvoyé à la place des caractères bruts. Le fichier /usr/include/curses.h définit les touches de fonction possibles. Chaque instruction de définition commence par un préfixe KEY_ et les clés sont définies comme des entiers commençant par la valeur 03510.
Si un caractère reçu peut être le début d'une touche de fonction (par exemple, un caractère d'échappement), curses définit un temporisateur (structure de type timeval définie dans /usr/include/sys/time.h). Si le reste de la séquence n'est pas reçu avant l'expiration du délai, le caractère est transmis. Sinon, la valeur de la touche de fonction est renvoyée. Pour cette raison, une fois qu'un utilisateur a appuyé sur la touche Echap, il y a un délai avant que l'échappement ne soit renvoyé au programme. Evitez d'utiliser la clé Esc si possible lorsque vous appelez une sous-routine à un seul caractère telle que la sous-routine wgetch . Ce temporisateur peut être remplacé ou étendu à l'aide de la variable d'environnement ESCDELAY .
La variable d'environnement ESCDELAY définit la durée d'attente avant l'expiration et le traitement de la touche ESC comme caractère d'échappement au lieu de la combiner avec d'autres caractères de la mémoire tampon pour créer une séquence de touches. La valeur ESCDELAY est mesurée en cinquièmes de milliseconde. Si la valeur de la variable ESCDELAY est 0, le système compose immédiatement la réponse Escape sans attendre plus d'informations de la mémoire tampon. Vous pouvez choisir une valeur comprise entre 0 et 99 999. Le paramètre par défaut de la variable ESCDELAY est 500 (1/10th d'une seconde).
Pour empêcher la sous-routine wgetch de définir un temporisateur, appelez la sous-routine notimeout . Si notimeout est défini sur TRUE, curses ne fait pas la distinction entre les touches de fonction et les caractères lors de l'extraction des données.
sous-routine keyname
La sous-routine keyname renvoie un pointeur vers une chaîne de caractères contenant un nom symbolique pour l'argument Key . L'argument Key peut être n'importe quelle clé renvoyée par les sous-routines wgetch, getch, mvgetchou mvwgetch .
Sous-routines de treuil
Les sous-routines winch extraient le caractère à la position actuelle. Si des attributs sont définis pour la position, les valeurs d'attribut sont associées à la valeur renvoyée. Vous pouvez utiliser les sous-routines winch pour extraire uniquement le caractère ou ses attributs. Pour ce faire, utilisez les constantes prédéfinies A_CHARTEXT et A_ATTRIBUTES avec l'opérateur logique & (perluète). Ces constantes sont définies dans le fichier curses.h . Les sous-routines winch sont les suivantes:
| Sous-routine | Descriptif |
|---|---|
| Macro inch | Extrait le caractère en cours de stdscr |
| Macro mvinch | Déplace le curseur logique avant d'appeler la sous-routine inch sur le stdscr |
| Macro mvwinch | Déplace le curseur logique avant d'appeler la sous-routine winch dans la fenêtre définie par l'utilisateur |
| Sous-routine winch | Extrait le caractère en cours d'une fenêtre définie par l'utilisateur |
Sous-routines wscanw
Les sous-routines wscanw lisent les données de type caractères, les interprètent conformément à une spécification de conversion et stockent les résultats convertis en mémoire. Les sous-routines wscanw utilisent les sous-routines wgetstr pour lire les données de type caractères. Les sous-routines wscanw sont les suivantes:
| Sous-routine | Descriptif |
|---|---|
| Macro mvscanw | Déplace le curseur logique avant de scanner le stdscr |
| Macro mvwscanw | Déplace le curseur logique dans la fenêtre définie par l'utilisateur avant l'analyse |
| Macro scanw | Analyse le stdscr |
| Sous-routine wscanw | Analyse une fenêtre définie par l'utilisateur |