Question

Je dois désactiver les marges automatiques conformément à la déclaration suivante du manuel de Screen sur mon Mac

  

Si votre terminal est un "vrai"   terminal à marge automatique (il ne permet pas   la dernière position à l'écran          être mis à jour sans faire défiler l'écran) envisagez d'utiliser une version   de termcap de votre terminal qui          a des marges automatiques désactivées.

Comment désactiver les marges automatiques grâce à termcap de votre terminal?

Était-ce utile?

La solution

Selon les séquences de contrôle XTerm , cette séquence devrait répondre aux demandes suivantes:

CSI ? 7 l

C’est-à-dire

printf '\033[?7l'

Le 7 est documenté sous la forme

.
        Ps = 7  -> Wraparound Mode (DECAWM).

et le dernier caractère l (L minuscule) indiquent qu'il s'agit d'une réinitialisation plutôt que d'un contrôle set . .

Pour une raison quelconque, le nom de terminfo utilisé est plus obscur: "marges automatiques". Ces fonctionnalités terminfo traitent de la fonctionnalité (voir terminfo (5) ):

   auto_right_margin             am         am        terminal has auto‐
                                                      matic margins
   enter_am_mode                 smam       SA        turn on automatic
                                                      margins
   exit_am_mode                  rmam       RA        turn off automatic
                                                      margins

Fait intéressant, la description du terminal vt100-nam dans ncurses (que personne n’utilise apparemment) initialise le terminal pour utiliser les marges d’argent automatique à l’aide de cette chaîne:

rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, 

( \ E [? 7h le définit) et affirme que le terminal n'utilise pas les marges automatiques en annulant am . Il possède également les fonctionnalités terminfo rmam et smam . Donc, vous pouvez le faire pour prouver que cela fonctionne:

tput rmam
stty columns 999
ps -efwwwwwl

et (pour l'utilisateur ordinaire) voir la liste ps bien tronquée par rapport à la marge droite de la fenêtre du terminal.

Les autres variantes vt220-nam et vt320-nam semblent correctes ...

En passant, pour Mac , vous utiliseriez les noms terminfo tels que rmcup plutôt que le termcap RA , car OSX utilise le paramètre tput (terminfo) de ncurses plutôt que la variante BSD.

Lectures supplémentaires:

Parfois, des personnes vous interrogent sur la suppression des liens automatiques car elles supposent que les terminaux peuvent effectuer un panoramique / défilement vers la gauche / la droite pour afficher les informations qui ne sont pas renvoyées à une nouvelle ligne. Les terminaux effectuant cette opération sont rares et le terminal OSX n’est pas un de ces ceux-là . Il se comporte comme un sous-ensemble de xterm, qui émule lui-même la série de terminaux DEC vt52 / vt100 / vt220 / etc. Dans cette question, OP est inquiet / confus à propos de ce paragraphe du manuel de écran :

  

Si votre terminal est un "vrai" terminal à marge automatique (il ne permet pas    dernière position à l'écran à mettre à jour sans faire défiler l'écran)   envisager d'utiliser une version de termcap de votre terminal qui a automatique   les marges sont désactivées. Cela garantira une mise à jour précise et optimale de   l'écran en toutes circonstances. De nos jours, la plupart des terminaux ont la "magie".   marges (marges automatiques plus dernière colonne utilisable). C'est le VT100   type de style et parfaitement adapté à l'écran. Si tout ce que vous avez est un   " true " L’écran du terminal à marge automatique se contente de l’utiliser, mais   la mise à jour d'un caractère placé à la dernière position à l'écran ne peut pas   possible jusqu'à ce que l'écran défile ou que le personnage soit déplacé dans un   position de sécurité d'une autre manière. Ce délai peut être raccourci en utilisant un   terminal avec capacité d'insertion de caractère.

Cette dernière position à l'écran fait référence au coin inférieur droit du terminal. Dans le cas normal, si votre curseur est dans le coin inférieur droit et que vous imprimez un caractère, vous vous attendez à ce que l'affichage défile d'une ligne vers le haut et affiche le caractère sur la ligne suivante. De plus, (les terminaux pouvant être implémentés de différentes manières), certains peuvent défiler vers le haut lorsque vous imprimez un caractère à la dernière position . Le VT100 ne fait pas cela. Dans ce cas, non seulement il ne fait pas défiler l'écran vers le haut, mais il ignore les caractères non imprimables lorsque se trouve sur , dans la marge (voir la FAQ xterm Cette description du wrapping est étrange, en dire plus? ). Un indicateur terminfo xenl est défini pour indiquer le moment où le terminal applique ce comportement spécial. Environ un tiers des descriptions de terminaux de la base de données de terminaux ont cet indicateur. Bien que la plupart d'entre eux concernent des terminaux que vous ne rencontrerez probablement jamais, gardez à l'esprit que les conseils de la page de manuel ont été écrits à une époque où ces autres terminaux étaient aussi susceptibles de se retrouver qu'un sosie VT100. L’historique des modifications de l’écran au début est médiocre, mais le texte en était à sa deuxième publication sur Usenet en 1992. La publication initiale en 1987 disait quelque chose de similaire:

  

Écran   n'écrit jamais dans la dernière position de l'écran, à moins que le booléen   Une fonctionnalité LP est trouvée dans l'entrée termcap du terminal.   Habituellement,    écran   ne peut pas prédire si un terminal particulier défile ou non   un caractère est écrit dans la dernière colonne de la dernière ligne;    LP indique qu'il est prudent d'écrire dans cette position.   Notez que la fonctionnalité LP est indépendante de am .   marges); pour certains terminaux, tels que le VT100, il est raisonnable   définir am ainsi que LP dans l'entrée de termcap correspondante   (le VT100 ne déplace pas le curseur lorsqu'un caractère est écrit en   la dernière colonne de chaque ligne).

Le dernier libellé reflète le fait que le système terminfo était répandu et que le nom LP n'était pas le nom de fin de chaîne choisi pour correspondre à < code> xenl ( xn ).

Le but de tout cela est que screen tente de convertir des programmes écrivant sur différents types de terminaux et de les faire apparaître comme un type de terminal & # 8212; ce qui signifie qu'il essaie de mettre du texte sur l'écran du terminal dans tous les emplacements. Le coin inférieur droit pose problème car certains terminaux défilaient vers le haut, gâchant ainsi toute tentative d’écriture. Pour contourner le problème, certains terminaux offraient une alternative:

  • utilisant un mode différent (insérer),
  • placez le curseur sur à côté de la dernière position de l'écran,
  • écrivez des caractères à remplir, poussant un caractère à la dernière position et
  • désactiver le mode insertion une fois que c'est fait (sinon, une nuisance).

Environ les deux tiers des descriptions de la base de données de terminaux ont la capacité d'effectuer ce mode d'insertion ( smir ). Ce n’était toujours pas parfait, mais il valait certainement la peine d’être mentionné en 1992. Environ un quart d’entre eux ont mis en œuvre une fonctionnalité similaire similaire ich1 . Certains implémentent les deux (et vi pourrait être déconcerté par ceux-ci, en essayant de faire les deux méthodes).

Les sosies VT100 fournissent un troisième moyen d'écrire cette dernière position; screen recherche et utilise tout ce qui se trouve là-bas.

Autres conseils

La plupart des émulateurs de terminal, y compris le terminal par défaut mac, ne sont pas des "vrais terminaux à marge automatique". dans le sens discuté ici - ils émulent un terminal de la série vt100, qui avait "intelligent". enrouler autour. Vous pouvez vérifier en exécutant cat et en tapant jusqu'à la fin de la dernière ligne - après avoir tapé le dernier caractère, le curseur reste à la fin de la ligne (soulignant le caractère que vous venez de taper) jusqu'à ce que vous tapiez un autre personnage.

La seule conséquence d'un 'terminal à marge automatique réelle' est qu'un caractère ne peut pas être affiché dans le coin inférieur droit (bien que certains programmes puissent contourner ce problème en déplaçant un caractère avec ich / ich1 )

Si je vous ai bien compris, vous souhaitez définir la fonctionnalité autowrap sur NO à l'aide de la base de données terminfo. Si tel est le cas, je pense que vous pouvez utiliser le drapeau -nam pour le désactiver - quelque chose comme vt100-nam devrait le faire. Vous pouvez également vérifier en consultant les pages de manuel de terminfo.

Si cela résout votre question, marquez-le. (^_^) Sinon ... eh bien, commentez en arrière et je vérifierai encore pour vous. À la vôtre!

Mise à jour: il existe également un raccourci qui peut s’appliquer à vous pour activer ou désactiver l’enveloppement. Consultez la feuille de raccourci ici. . Et des informations supplémentaires pour Screen peuvent être trouvées ici (recherche de wrap). Vous pouvez également vérifier ici sur l'utilisation de setterm (section 17.14 Paramètres du terminal). Consultez également ici des exemples de modification des paramètres.

Bonne chance encore. (^ _ ^)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top