2009-05-01 5 views
0

ich automatische Margen aus nach der folgenden Anweisung von Bildschirmanleitung in meinem Macleider nicht möglich, automatische Margen von termcap in Mac ausschalten

Wenn Ihr Terminal ein „true“ drehen muß Terminal Auto-Marge (Erlaubt nicht die letzte Position auf dem Bildschirm aktualisiert werden, ohne den Bildschirm zu scrollen) in Betracht ziehen, eine Version der Termcap Ihres Terminals verwenden, die hat automatische Ränder ausgeschaltet.

Wie können Sie die automatischen Ränder durch die Termcap Ihres Terminals deaktivieren?

+0

Haben Sie tatsächlich irgendwelche Probleme oder sind Sie nur vorsichtig, was das 'Bildschirm'-Handbuch sagt? Ich habe keine Probleme bei der Verwendung von "Bildschirm" mit Terminal unter Verwendung der Standardeinstellungen bemerkt. Verwenden Sie die Terminal-Anwendung oder ein anderes Terminalprogramm? –

Antwort

1

nach XTerm Control Sequences, diese Sequenz sollte das tun, was gefragt wurde:

CSI ? 7 l 

das heißt,

printf '\033[?7l' 

Die als

 Ps = 7 -> Wraparound Mode (DECAWM). 

und das letzte Zeichen dokumentiert l (kleines L) bezeichnet dies als Rücksetz eher als ein Steuerung eingestellt.

Aus irgendeinem Grund ist der Name der Termini mehr unklar: "automatische Ränder".Diese term Funktionen befassen sich mit der Funktion (siehe 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 

Interessanterweise ist die vt100-nam Terminal Beschreibung in ncurses (was anscheinend niemand verwendet) initialisiert, das Terminal zu Verwendung automargins Ränder mit dieser Zeichenfolge:

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

(die \E[?7h setzt es), und behauptet, dass das Endgerät nicht automatisch Ränder nicht verwendet durch am Cancelling. Es hat auch die terminfo Fähigkeiten rmam und smam. So könnte man dies tun, um zu beweisen, dass es funktioniert:

tput rmam 
stty columns 999 
ps -efwwwwwl 

und (für den normalen Benutzer) sieht die ps schön gegen den rechten Rand des Terminalfensters abgeschnitten auflistet.

Die anderen Varianten VT220-nam und VT320-nam erscheinen korrekt ...

By the way, für Mac, würden Sie die term Namen wie rmcup statt der Termcap verwendenRA, weil OSX ncurses 'tput (terminfo) anstelle der BSD-Variante verwendet.

Weiterführende Literatur:

Gelegentlich jemand fragt nach automargins unterdrücken, weil sie annehmen, dass Endgeräte/pan blättern Sie nach links/rechts, um die Informationen zu zeigen, welches nicht in eine neue Zeile eingepackt wurde. Terminals, die dies tun, sind selten, und OSX-Terminal ist keiner der diese. Es verhält sich wie eine Untermenge von xterm, die selbst die Reihe der DEC-Terminals vt52/vt100/vt220/etc emuliert. In diese Frage ist OP betroffen/verwirrt über diesen Absatz aus dem screen Handbuch:

Wenn Ihr Terminal ein „true“ auto-Marge Terminal ist (es ist nicht die letzte Position auf dem Bildschirm aktualisiert werden, ohne den Bildschirm scrollen) in Betracht ziehen, eine Version des Termcap des Terminals zu verwenden, die automatische Ränder ausgeschaltet hat. Dies gewährleistet eine genaue und optimale Aktualisierung von der Bildschirm unter allen Umständen. Die meisten Terminals haben heutzutage "magische" Ränder (automatische Ränder plus verwendbare letzte Spalte). Dies ist der VT100 Style-Typ und perfekt für den Bildschirm geeignet. Wenn alles, was Sie haben, ist ein "True" Auto-Margin-Terminal-Bildschirm Inhalt sein wird, es zu verwenden, aber Aktualisieren eines Zeichens in die letzte Position auf dem Bildschirm kann nicht möglich sein, bis der Bildschirm scrollt oder das Zeichen ist in eine andere Position in eine sichere Position bewegt.Diese Verzögerung kann durch Verwendung eines Terminals mit Insert-Zeichen-Fähigkeit verkürzt werden.

Das letzten Position auf dem Bildschirm an der unteren rechten Ecke des Terminals bezieht. Wenn sich der Cursor in der unteren rechten Ecke befindet und Sie ein Zeichen drucken, würden Sie im Normalfall erwarten, dass die Anzeige um eine Zeile nach oben scrollt und das Zeichen in der nächsten Zeile angezeigt wird. Auch (weil Terminals auf verschiedene Arten implementiert werden können), können einige nach oben scrollen, wenn Sie ein Zeichen in der letzten Position drucken. Das VT100 tut dies nicht. Es scrollt nicht nur in diesem Fall nach oben, sondern es ignoriert nicht-druckbare Zeichen, während auf der Rand (siehe Xterm FAQ That description of wrapping is odd, say more?). Es gibt ein terminfo-Flag xenl, das eingestellt wird, um anzuzeigen, wenn das Terminal dieses spezielle Verhalten ausführt. Etwa ein Drittel der Terminalbeschreibungen in der Terminal-Datenbank hat dieses Flag. Während die meisten von ihnen für Terminals sind, die Sie wahrscheinlich nie finden werden, denken Sie daran, dass der Ratschlag in der Manualseite in eine Ära zurückgeschrieben wurde, in der diese anderen Terminals genauso wahrscheinlich wie ein VT100-Lookike waren. Der frühe Wechsel vergangener Bildschirm ist schlecht, aber der Text war in 1992 auf Usenet zweiten Posting-Bildschirm Der erste Eintrag im Jahr 1987 sagte etwas ähnliches:

Bildschirm nie in der letzten Position der schreibt Bildschirm, es sei denn, die boolesche Fähigkeit LP ist im Termcap-Eintrag des Terminals gefunden. Bildschirm kann nicht vorhersagen, ob ein bestimmter Terminal scrollt, wenn ein Zeichen in die letzte Spalte der letzten Zeile geschrieben wird; LP zeigt an, dass es sicher ist, in dieser Position zu schreiben. beachte, dass die LP Fähigkeit unabhängig von am (automatischen Rand) ist; für bestimmte Endgeräte, wie beispielsweise die VT100, ist es angemessenen am sowie LP in dem entsprechenden Termcap Eintrag (die VT100 nicht bewegt den Cursor zu setzen, wenn ein Zeichen in die letzte Spalte von jedem geschrieben Linie).

Die spätere Formulierung die Tatsache widerspiegelt, dass das terminfo System war weit verbreitet, und den Namen LP nicht Termcap Name für entsprechende mit xenl (es ist xn) gewählt.

Der Punkt, der all dies ist, dass screen Versuche zwischen den Programmen zu konvertieren, um verschiedene Terminal-Typen zu schreiben und sie alle wie eine Art von Terminal — erscheinen, was bedeutet, dass es sich um Text auf dem Endgerät des Display in alle die setzen versucht, Standorte. Die untere rechte Ecke ist ein Problem, weil einige Terminals nach oben scrollen würden, was den Versuch vereitelt, dort zu schreiben.Als Abhilfe bereitgestellt einige Endgeräte eine Alternative:

  • einen anderen Modus (Einsatz),
  • den Cursor auf dem vorletzten Position gebracht des Displays,
  • Schreib Zeichen zu füllen , Drücken ein Zeichen in die letzte Position, und
  • schalten Sie den Einfügemodus einmal aus (sonst ein Ärgernis).

Etwa zwei Drittel der Beschreibungen in der Terminal-Datenbank haben die Fähigkeit, diesen Insert-Modus (smir) zu tun. Das war noch nicht perfekt, aber es war sicherlich erwähnenswert im Jahr 1992. Etwa ein Viertel implementieren ein ähnliches ähnliches Merkmal ich1. Einige implementieren beide (und vi könnte durch diese, durch den Versuch, beide Methoden zu tun, verwirrt werden).

VT100-Lookalikes bieten eine dritte Möglichkeit, diese letzte Position zu schreiben; screen überprüft und verwendet, was auch immer da ist.

+0

Die Bildschirm-Manpage spricht über (das Fehlen von) VT100-Stil "xenl", wenn es um "echte Auto-Margin-Terminals" spricht, könnte es sich lohnen, Ihre Antwort hinzuzufügen. – Random832

0

Wenn ich Sie richtig verstehe, möchten Sie die AutoWrap-Funktion mit der terminfo-Datenbank auf NO setzen. Wenn dem so ist, glaube ich, dass Sie das Flag -nam verwenden können, um es auszuschalten - so etwas wie vt100-nam sollte es tun. Sie können auch überprüfen, indem Sie auf die man-Seiten für terminfo schauen.

Wenn dies Ihre Frage löst, markieren Sie diese. (^_^) Wenn nicht ... nun komm zurück und ich überprüfe noch einmal nach dir. Prost!

Update: Es gibt auch eine Verknüpfung, die für Sie gelten kann, um den Wrap ein- und auszuschalten. Schauen Sie sich das Shortcut-Sheet here an. Und zusätzliche Informationen für Bildschirm finden Sie here (Suche nach Wrap). Sie können auch überprüfen, here wie Sie Setterm verwenden (Abschnitt 17.14 Ändern der Terminal-Einstellungen). Überprüfen Sie auch here für Beispiele zum Ändern von Einstellungen.

Viel Glück wieder. (^_^)

+0

Yay! Es freut mich, dass ich helfen konnte. War das die Information, nach der Sie gesucht haben? (^_^) –

+0

@Kevin: Danke für Ihre Hilfe! Die Info hat mich davon überzeugt, dass ich Mac's Standard-Terminal nicht über die Grenzen verbessern konnte. Schließlich bin ich zu iTerm gewechselt, das seinen Bildschirm sehr oft aktualisieren kann. –

+0

@Masi: Hey kein Problem, ich bin froh, dass ich helfen konnte! Viel Glück! (^_^) –

2

Die meisten Terminalemulatoren, einschließlich des Mac-Standardterminals, sind keine "echten Auto-Margin-Terminals" in dem hier diskutierten Sinne - sie emulieren ein Terminal der vt100-Serie, das einen "intelligenten" Wraparound hatte. Sie können dies überprüfen, indem Sie cat ausführen und bis zum Ende der letzten Zeile tippen - nachdem Sie das letzte Zeichen eingegeben haben, bleibt der Cursor am Ende der Zeile (markiert das gerade eingegebene Zeichen), bis Sie ein anderes Zeichen eingeben.

Die einzige Konsequenz eines 'True Auto-Margin Terminal' ist, dass ein Zeichen nicht in der unteren rechten Ecke angezeigt werden kann (obwohl einige Programme das umgehen können, indem sie ein Zeichen mit /ich1 verschieben)

+0

Es wäre wirklich toll, eine .gif-Animation über das Ereignis zu erhalten. - Ich bin jetzt in Debian 8.5, also sollte ich es testen können. –

+1

@Masi Sie können auch 'tack' installieren und führen Sie den Test für die' xenl' Fähigkeit, die den Typ der automatischen Marge überprüft. – Random832

+0

Können Sie den Workflow hier zeigen, was Sie meinen, bitte. –