Est-il correct de définir la variable $ TERM manuellement?

10

J'ai défini la $TERMvariable en ajoutant la ligne XTerm*termName: xterm-256colorà mon .Xresourcesfichier. Quand je l'ai fait, je ne savais pas exactement ce que cela signifiait (je suivais un guide en ligne pour changer l'apparence xterm), mais maintenant j'ai lu un peu plus et je me demande si ce que j'ai fait était mal. Plus précisément, je veux savoir qu'il y a quelque chose de mal à définir la $TERMvariable manuellement, et si c'est le cas, comment puis-je revenir sur mon erreur.

Si vous en avez besoin, je lance Fedora 20 avec xterm.

Santaru72
la source
Il s'agit d'une question de programmation générique. Cela dépend de ce que vous ferez. Si vous pouvez tenir pour acquis un environnement de bureau et l'absence de connexions à distance, cela peut être OK. Sinon, tous les cas possibles doivent être traités avec une vérification des erreurs.
41754
@uprego Pourriez-vous s'il vous plaît développer "l'absence des connexions distantes"?
Santaru72
Vous utilisez peut-être une session tmux permanente avec l'option 256 couleurs, mais si vous la joignez à partir d'une session ssh, les scénarios possibles s'élargissent trop pour être répertoriés. Chaque application aurait ou non des effets souhaitables selon la capacité de chaque programmeur. Comme le souligne @goldilocks dans sa réponse, cela ne devrait pas être dangereux, mais il y a la différence entre "ne devrait pas être" et "ne peut pas être".
41754
@uprego: En réalité, j'aurais dû dire "ne peut pas", sauf si vous considérez la sortie illisible comme "dangereuse".
goldilocks

Réponses:

7

Pour la plupart, vous ne devez pas définir TERMmanuellement. La variable est toujours définie automatiquement et il n'existe qu'un ensemble restreint de circonstances dans lesquelles la valeur par défaut est incorrecte.

La valeur de TERMdoit être référencée dans la base de données terminfo du système (ou pour quelques systèmes à l'ancienne, dans la base de données termcap ). Terminfo et Termcap mappent les types de terminaux à la description des capacités des terminaux que les applications utilisent. La valeur de TERMest le type de terminal.

La principale raison pour laquelle vous devrez parfois changer TERMest si vous vous connectez à distance, lorsque la machine locale et la machine distante ont des bases de données de terminaux différentes.

Une autre raison, liée à la précédente, est qu'il existe parfois plusieurs entrées similaires pour un terminal, avec des capacités légèrement différentes. Cela a tendance à se produire principalement lorsqu'un nouveau terminal arrive, qui est compatible avec un terminal existant, mais qui a plus de fonctionnalités. Vous avez alors le choix entre utiliser le nom traditionnel, que toutes les machines comprennent, mais qui n'annonce que les fonctionnalités traditionnelles, ou le nom plus récent, qui annonce toutes les nouvelles fonctionnalités mais que certaines machines ne comprendront pas.

Un exemple de ceci est xterm avec 16 couleurs vs xterm avec 256 couleurs. Un xterm traditionnel ne prend en charge que 16 couleurs, c'est donc ce que xtermspécifie la base de données du terminal. La modification de l' xtermentrée rendrait les utilisateurs des nouvelles versions de xterm heureux, mais romprait la configuration des utilisateurs des anciennes versions de xterm qui se connectent à distance. Passer à un nouveau nom -  xterm-256color- fournit les nouvelles fonctionnalités chaque fois qu'elles sont disponibles, mais n'est pas reconnu si vous vous connectez à distance à des machines avec une ancienne base de données de terminaux. Parce qu'il n'y a pas de solution qui puisse satisfaire tout le monde, vous avez le choix: soit conserver xtermet ne pas obtenir les 256 couleurs, ou utiliser xterm-256colorce qui ne fonctionne pas si vous vous connectez à des machines distantes qui ne le prennent pas en charge.

Laisser la valeur par défaut de xtermet définir la termNameressource sur xterm-256color(ce qui fait que la variable d'environnement TERMest définie sur la même valeur) sont donc deux choix judicieux. La définition TERMde valeurs arbitraires ne fonctionnerait pas, mais les deux xtermet ont xterm-256colorun sens.

Gilles 'SO- arrête d'être méchant'
la source
3

J'ai défini la variable $ TERM en ajoutant la ligne XTerm * termName: xterm-256color à mon fichier .Xresources.

C'est bien, tant que vous savez ce que vous avez fait; la plupart des terminaux GUI le supportent.

Vous pouvez également le définir à partir de la ligne de commande ou dans un script

export TERM=xterm-256color

Cela ne s'applique qu'à ce terminal ou aux enfants suivants.

Une valeur par défaut portable serait juste xterm, ce qui signifie une prise en charge de 16 couleurs. Si vous avez un jeu de 256 couleurs et que votre terminal ne le prend pas en charge, l'exécution d'applications TUI de 256 couleurs sera tout simplement étrange; vous le remarquerez probablement tout de suite. Mais cela ne devrait pas être dangereux.

boucle d'or
la source
Donc, le réglage XTerm*termName: xtermau lieu de XTerm*termName: xterm-256colorje devrais être bien, non?
Santaru72
Si c'est ce que vous voulez, ne définissez rien; xtermest la valeur par défaut pour xterm;) mais cela signifie 16 couleurs. Le principal point d'utilisation xterm-256colorest de dire aux applications que le terminal prend en charge 256 couleurs . Si vous ne le faites pas, ils supposeront 16 couleurs.
goldilocks