2012-09-28 20 views
9

Angenommen, ich habe ein Emacs-Fenster (d. H. Eine Unterteilung dessen, was Emacs einen Frame nennt), der einen M-x ansi-term-Puffer (z. B. zsh) ausführt, der ~500 Pixel breit ist. Ich führe dann mehrere Shell-Befehle aus und die Ausgabe wird umgebrochen, um in diese 500 Pixel zu passen.Resizing-Terminal in Emacs

Sagen Sie, dass ich jetzt dieses Fenster oder Puffer breiter mache (z. B. 1000 Pixel), vielleicht weil ich andere Fenster im Rahmen kille, um meinem ansi-term Fenster mehr Platz zu geben.

Gibt es eine Möglichkeit, ältere Ausgabe in meinem ansi-term Fenster zu verkleinern, um die neue Fenstergröße zu nutzen? (d. h. Zeilen breiter machen und sie entsprechend der neuen Fenstergröße umbrechen)?

+0

Mm .. Ich würde Nein sagen. Probieren Sie M-x Shell, es verhält sich wie Sie beschrieben, ich habe es gerade versucht. – yPhil

Antwort

4

Nein, normalerweise nicht, weil das Programm, das die Ausgabe erzeugte (möglicherweise formatiert), sich an die Breite des Displays anpasst, das zum Zeitpunkt des Drucks in Kraft war, und nicht mehr läuft, wenn Sie die Größe ändern.

Wenn es jedoch immer noch läuft, wird es die Option erhalten, die Größe selbst zu ändern (a SIGWINCH). Sie könnten dies mit z.B. der links/elinks Browser. Dies ist der wirkliche "Anwendungsfall" für den ANSI-Terminal-Modus: Programme, die "Curses" oder ähnliche Systeme verwenden, um den Cursor zu bewegen.

Wie @ user2491 darauf hingewiesen, shell-mode verarbeitet Text-basierte (stream-basierte) Ausgabe mit Word-Wrapping, mit dem Nachteil, nicht in der Lage sein "curses" -Programme auszuführen. Es ist entworfen, um Ihre Sitzung ein bisschen mehr wie eine Textdatei und weniger wie ein "echtes Terminal" zu behandeln.

+0

Danke! Würde es Ihnen etwas ausmachen, mehr darüber zu erfahren, wie ich 'SIGWINCH' verwenden kann, um die Größe des Fensters, in dem ich" ansi-term "in Emacs laufen habe, zu ändern? (Ich habe immer noch das Terminal läuft). –

+0

Das ist die Verantwortung des laufenden Programms. Das Terminalprogramm selbst (z. B. bash) wird sich im Allgemeinen nicht um solche Dinge kümmern, sondern z.B. 'mplayer',' alpine', 'links' haben Handler dafür. Wenn Sie wörtlich meinen, wie man mit SIGWINCH in Ihren eigenen Programmen umgeht, würde ich empfehlen, eine höhere Bibliothek wie 'ncurses' zu verwenden, aber Sie könnten auch z. diese Antwort: http://stackoverflow.com/a/3472019/475150 – BRFennPocock

+0

Nicht sicher, dass ich folge. Ich habe 'M-x ansi-term' (z. B.' zsh') in einem meiner Fenster ausgeführt. Du hast gesagt, dass, wenn das Terminal noch läuft, es immer noch Hoffnung gibt, dass ich den Text automatisch mit 'SIGWINCH' umschreiben lasse. Was genau ist "SIGWINCH"? Kann ich ein Signal von Emacs an das Puffer-Terminal senden, um den Text neu zu schreiben? –