J'écris donc une émulation de terminal (je sais, je devrais simplement compiler du mastic, etc.) et je suis au stade de parcourir le vttest pour m'assurer que c'est bien. Je le base sur le VT102 pour l'instant, mais j'ajouterai des fonctionnalités de terminal ultérieures telles que la couleur lorsque les bases fonctionnent correctement.
Le jeu de commandes est principalement ANSI. DEC avait son propre jeu de commandes mais a pris en charge les commandes ANSI vers 1973. Ces normes ANSI ne sont apparemment pas disponibles maintenant mais les équivalents ECMA le sont, je les ai (ECMA-48 semble le plus pertinent) mais ne répond pas à cette question pour autant que je peut voir. La plupart des séquences de commandes ANSI commencent par ESC. De nombreuses commandes commencent par l'identificateur de séquence de commandes indiqué ici en tant que CSI et représenté dans les données par 0x1c 0x5b (ESC [
) ou 0xdb si une communication 8 bits était possible. Puis a suivi une séquence identifiant la commande. Certaines commandes affectent la position du curseur, certaines l'écran, certaines provoquent une réponse à l'hôte et ainsi de suite.
Certaines commandes de terminal incluent un argument numérique. Exemple CSI 10 ; 5 H
signifie que la position du curseur est rangée 10, colonne 5. Lorsque l'argument numérique est manquant, il y a une valeur par défaut à utiliser: CSI 10 ; H
signifie que la position du curseur est rangée 10, colonne 1 car 1 est la valeur par défaut quand aucun argument n'est donné.
J'ai le manuel vt102 de vt100.net (grande ressource) et environ une douzaine de pages donnant des informations partielles sur ces séquences de commandes. Apparemment, les spécifications complètes du terminal DEC de l'Évangile ne sont jamais sorties du DEC.
Ce qui est clair, c'est que CSI C
déplacer le curseur vers la droite et que la valeur par défaut est 1.
Ce qui n'est pas clair, c'est quelle est la signification de CSI 0 C
.
Pourquoi avoir un zéro là-bas, il semblerait que la commande ne fasse rien? S'il signifie «utiliser la valeur par défaut», il aurait pu être envoyé à la place, mais la chaîne plus courte n'aurait aucun argument et compterait sur la valeur par défaut interprétée comme 1 de toute façon. Ces terminaux physiques physiques réels étaient souvent utilisés à 300 bauds et en dessous, donc le seul caractère comptait!
Je ne suis pas si avancé avec vttest que je peux simplement l'essayer dans les deux sens et voir ce qui rend tout parfait, mais je suis assez loin pour que de petites questions comme celle-ci commencent à avoir de l'importance.
la source
[
, qui peut être codé soit comme la séquence de deux caractèresESC [
, soit comme[
avec le 8ème bit. (Certains modèles ne prennent en charge queESC [
) Je ne sais pas ce quiCSI 0 C
s'est passé sur le vt102; sur xterm, il est équivalent àCSI 1 C
. Je soupçonne, mais je ne sais pas avec certitude, que 0 et l'absence de valeur sont analysés de manière identique à un moment donné (pensezatoi
). Avez-vous cherché des commentaires dans la source xterm?Réponses:
Je suis entré en contact avec Thomas Dickey (invisible-island.net) qui maintient xterm et vttest - il a expliqué que
CSI 0 C
est le même que celuiCSI 1 C
ouCSI C
dans xterm.Pour tous ceux qui recherchent plus d'informations sur la programmation des terminaux, je recommande fortement de vérifier la source xterm qu'il héberge - en particulier le ctlseqs.txt à l'intérieur de xterm, qui ressemble beaucoup à la véritable référence de séquences de contrôle de terminal que j'ai recherchée.
la source
Pourquoi la compatibilité du code dur pour un type de terminal spécifique alors que vous avez déjà une base de données mappant la fonctionnalité à des séquences de code spécifiques pour de nombreux terminaux différents? (la base de données terminfo se trouve généralement dans / usr / share et est incluse dans la plupart des distributions ncurses). Toute ressource sur les malédictions devrait expliquer la façon dont ces fonctions sont étiquetées.
Notez que les fichiers terminfo sont généralement compilés (en utilisant tic) donc vous devrez peut-être creuser un peu pour trouver les fichiers source terminfo.
Voir aussi http://tldp.org/HOWTO/Text-Terminal-HOWTO.html#toc16 (il y a un lien dans leur vers un référentiel de fichiers terminfo.src)
la source