2017-01-23 7 views
0

Ich schreibe ein Programm, das Termcaps verwendet und ich muss wissen, welche Art von Terminal ich verwende.
Ich bin mir bewusst, ich kann Variable über getenv("TERM"), aber ich kann mein Programm mit "$ env -i ./myprog" starten und TERM wird nicht festgelegt.Darf ich TERM-Umgebungsvariable sicher setzen?

Also wie kann ich feststellen, welche Terminalart muss ich verwenden?
Darf ich in meiner Anwendung sicher Variable auf xterm/xterm-256color setzen?
Wird es Probleme mit der Portabilität geben?
Gibt es eine Methode, um dies sicher zu tun (Termtyp)?
Ich habe viele Handbücher (getty - getttab - tty - ttys) und Beiträge gepostet, aber ich kann keine Lösung finden.

Ich mache mir auch Sorgen, denn wenn ich eine Shell (wie zsh oder tcsh) starte, habe ich Probleme mit einigen Schlüsseln.

Zum Beispiel startet zsh wie so:
$env -i zsh
verursachen Probleme mit Pfeilen und alle Schlüssel, was impliziert, termcaps (auch Ctr-d).
Stattdessen bash und tcsh wird normal auf vielen Schlüsseln, aber nicht alle verhalten.

+1

Das TERM-Variable existiert genau den Endgerätetyp zu bestimmen, verwendet werden, Es gibt kaum eine andere Möglichkeit, den Terminaltyp zu erraten und TERM zu setzen. Sie können den Benutzer ein Terminal auswählen lassen, wenn es nicht festgelegt ist, oder versuchen, standardmäßig auf 'vt100' zu setzen, da dies häufig verwendet wird. – Ctx

+0

Ich versuche, eine portabler als mögliche Anwendung zu bekommen, also ich denke, wenn ich vt100 als Standard festlegen möchte, kann ich eines Tages ein Problem mit der Portabilität haben? – LotoLo

+0

Nein, es funktioniert einfach nicht wie erwartet, wenn die verwendete Terminalemulation mit vt100 inkompatibel ist. Der portable Weg ist: Verlassen Sie sich auf die Einstellung der Umgebungsvariablen TERM; wenn es nicht gesetzt ist, muss der Benutzer seine Umgebung reparieren – Ctx

Antwort

0

Es ist (etwas) sicher, TERM=vt100 als Standard (Ctx's Vorschlag) zu setzen, da die meisten Terminal-Emulatoren so eingestellt sind, dass sie emulieren. Ich würde Ihnen jedoch empfehlen, in diesem Fall eine Warnung auszudrucken.

1

Wenn Sie tatsächlich termcap (und nicht eine minimale Implementierung wie busybox) verwenden, verwenden Sie wahrscheinlich ein System, das tset bereitstellt, das dem Benutzer eine Standardoption für bietet, die geändert werden kann.

Etwas wie folgt aus:

eval `tset -s vt100` 

in der Shell-Initialisierung funktionieren würde.

Eigentlich tset ist nicht auf Termcap-Systeme beschränkt, aber dort hat es angefangen.

Weiterführende Literatur:

Verwandte Themen