Quelle est la différence entre cursor_up (cuu1) et key_up (kcuu1) dans terminfo (5)?

En terminfo (5):

Variable Ssortingng Capname TCapCode Description --------------------------------------------------------------- cursor_up cuu1 up up one line key_up kcuu1 ku up-arrow key 

J’ai essayé avec tput et ils produisent la même sortie:

 [STEP 102] # tput cuu1 | hd -C 00000000 1b 5b 41 |.[A| 00000003 [STEP 103] # tput kcuu1 | hd -C 00000000 1b 5b 41 |.[A| 00000003 [STEP 104] # 

Dans une description terminfo, les noms commençant par k dénotent les clés , tandis que les autres noms sont utilisés pour les capacités autres que les clés. Pour la plupart des clés, il n’y a pas de relation évidente entre les clés et une séquence d’échappement existante, mais les touches de curseur sont l’exception.

Qu’elles soient identiques ou non dépend de la description du terminal. Pour TERM=linux , ils se trouvent être les mêmes, cependant une description de terminal peut être écrite pour la console Linux où ils ne le sont pas .

La distinction est de savoir si le terminal est initialisé en mode application ou laissé en mode normal (par défaut / mise sous tension). En mode application, les touches du curseur enverraient Escape O comme préfixe plutôt que Escape [ .

Un peu plus de la moitié (54%) des descriptions de terminal dans la firebase database ncurses utilisent le mode application , ce qui signifie que cuu1 est le plus souvent différent de kcuu1 .

Il y a une autre bizarrerie à prendre en compte: pour d’autres mouvements du curseur, tels que cud1 , la description du terminal peut indiquer \n , tandis que la touche du curseur-bas n’enverrait pas ce caractère (voir iTerm par exemple).

Lectures complémentaires:

  • Les touches du curseur ne fonctionnent pas

cursor_up est la séquence de contrôle envoyée par l’hôte au terminal pour déplacer le curseur sur une ligne.

key_up est la séquence de contrôle envoyée par le terminal à l’hôte lorsque vous appuyez sur la touche fléchée vers le haut.

Dans les terminaux basés sur VT100 (qui incluent tous les émulateurs de terminaux modernes), ces séquences sont identiques. Cependant, certains matériels terminaux plus anciens peuvent avoir utilisé des séquences différentes dans ces deux rôles, de sorte que terminfo les garde séparés.