Auf meinem lokalen Computer werden 3 node.js-Instanzen gleichzeitig ausgeführt. Jedes hat einen eigenen Bereich in einem tmux-Fenster namens "Server". Das Problem ist, dass es nicht so einfach ist herauszufinden, welcher Knoten in welchem Bereich ausgeführt wird, da die Protokolle ähnlich sind.
Was ich brauche, ist ein Titel für jedes Fenster. Wie ich erfahren habe, hat tmux selbst nicht die Funktion: Es hat nur Titel für Fenster und nicht für Fenster. Das Starten einer separaten tmux-Sitzung in jedem Bereich für jede node.js-Instanz sieht aus wie ein Overkill.
Gibt es also ein kleines Programm, das einen Befehl startet und dessen Ausgabe mit einer bestimmten Statusleiste umschließt?
Danke im Voraus
command-line
title
tmux
pane
Andrey Lushnikov
quelle
quelle
Antworten:
tmux unterstützt Titel pro Bereich, bietet jedoch keinen Speicherort pro Bereich für die Anzeige dieser Titel.
Sie können den Titel eines Fensters mit der Escape-Sequenz ESC
]2;
… ESC festlegen\
(siehe z. B. den Abschnitt Namen und Titel in der tmux- Manpage). Sie können dies von der Shell aus wie folgt tun:Der Titel jedes Fensters ist standardmäßig der Hostname des Systems. Standardmäßig wird der Titel des aktiven Fensters auf der rechten Seite der tmux- Statuszeile angezeigt (der globale Standardwert der Sitzungsvariablen
status-right
lautet"#22T" %H:%M %d-%b-%y
22 Zeichen des Titels des Fensters , der Uhrzeit und des Datums).Solange Sie damit zufrieden sind, den Titel des aktiven Fensters sehen zu können (dh bereit zu sein, die Fenster zu wechseln, um den Titel eines inaktiven Fensters anzuzeigen), können Sie mit der Standardfunktionalität auskommen. Senden Sie einfach die entsprechende Escape-Sequenz für die Titeleinstellung, bevor Sie den Hauptbefehl für jedes Fenster starten.
Wenn Sie unbedingt eine Standleitung benötigen, um Informationen pro Bereich anzuzeigen, sind verschachtelte tmux- Sitzungen möglicherweise nicht so viel (unnötiger) „Overkill“, wie Sie vielleicht zuerst denken.
Im allgemeinen Fall benötigen Sie einen vollständigen Terminal- (Re-) Emulator, der sich zwischen dem ursprünglichen Terminal und einem neuen Terminal befindet (eines mit einer Zeile weniger), um eine unverletzte Statuszeile auf einem bestimmten Terminal bereitzustellen. Eine solche (Re-) Emulation ist erforderlich, um an das innere Terminal gesendete Steuersequenzen zu übersetzen und für das ursprüngliche Terminal zu übersetzen. Um beispielsweise eine Statuszeile am unteren Rand des äußeren Terminals beizubehalten, geben Sie den Befehl ein
an das innere Terminal gesendet werden muss
wenn für übersetzt und an das äußere Terminal gesendet. Ebenso muss ein an das innere Terminal gesendeter LF werden
im äußeren Terminal.
Programme wie tmux und screen sind solche Terminal- Reemulatoren . Sicher, es gibt viele andere Funktionen, die um den Terminalemulator gewickelt sind, aber Sie würden einen großen Teil des Terminalemulationscodes benötigen, um eine zuverlässige Statuszeile bereitzustellen .
Es gibt jedoch eine leichte Lösung, solange
Wie viele Terminalemulatoren unterstützt tmux in seinen Fenstern einen Terminalsteuerungsbefehl zum Festlegen des Bildlaufbereichs. Mit diesem Befehl können Sie den Bildlaufbereich auf die oberen (oder unteren) N-1-Zeilen des Terminals beschränken und eine Art instanzidentifizierenden Text in die nicht scrollende Zeile schreiben.
Die Einschränkungen (keine Cursorbewegungsbefehle zulässig, keine Größenänderung) sind erforderlich, da das Programm, das die Ausgabe generiert (z. B. eine Node.js- Instanz), keine Ahnung hat, dass das Scrollen auf einen bestimmten Bereich beschränkt ist. Wenn das Ausgabeerzeugungsprogramm den Cursor außerhalb des Bildlaufbereichs bewegt, kann die Ausgabe verstümmelt werden. Ebenso setzt der Terminalemulator den Bildlaufbereich wahrscheinlich automatisch zurück, wenn die Größe des Terminals geändert wird (sodass die „nicht scrollende Zeile“ wahrscheinlich weggescrollt wird).
Ich habe ein Skript geschrieben, mit
tput
dem die entsprechenden Steuersequenzen generiert, in die nicht scrollende Zeile geschrieben und ein Programm ausgeführt werden, nachdem der Cursor in den Bildlaufbereich bewegt wurde:Sie könnten es so verwenden:
Das Skript sollte auch außerhalb von tmux funktionieren , solange das Terminal seine
csr
undcup
terminfo-Funktionen unterstützt und veröffentlicht .quelle
tput
, um die entsprechenden Steuersequenzen in das Argument "Zeileninhalt" aufzunehmen. Bei den meisten Terminals können Sie die Linie mit „Cyan (6) und Grün (3) auf Magenta (5)“ mit festlegenno_scroll_line top "$(tput setaf 6; tput setab 5)Node: $(tput setaf 3)foo$(tput op)" node foo.js
.setaf
setzt den Vordergrund,setab
setzt den Hintergrund,op
setzt die Standardfarben der Terminals zurück. Die Farbfunktionen können je nach Terminalemulation zwischen 0 und 7, zwischen 0 und 15, zwischen 0 und 87 und zwischen 0 und 255 liegen.Diese Funktionalität wurde tmux in diesem Commit hinzugefügt . Es ist nicht in Version 2.2, aber es sieht so aus, als ob es in 2.3 sein wird.
So aktivieren Sie es:
oder wenn Sie es vorziehen:
Um einen benutzerdefinierten Text als Statusleiste für den Fensterrand festzulegen, können Sie Folgendes verwenden:
pane-border-format
z.quelle
tmux
Sie müssen einige Befehle außerhalb ,tmux
es zu ändern. Richtig? Oder gibt es eine Sequenz, die es aktualisieren kann?pane-border-format
eine benutzerdefinierte Formatzeichenfolge festlegen, die im Bereich angezeigt werden soll (das übliche#{...}
Format). Ich habe Ihre Antwort so bearbeitet, dass sie dies enthält.Da können
tmux 2.6
Sie tun:Sie können den Titel pro Bereich in einer Statusleiste anzeigen mit:
Deaktivieren Sie die Statusleiste mit:
quelle
cd $HOME
, wird der Titel in den Wert von geändert$HOME
. (Ich sehe dies auf tmux 2.8.)set-window-option automatic-rename off
.set-option -g allow-rename off
in meiner.tmux.conf
Akte.pane-border-format
eine vom Benutzer bereitgestellte Variable verwendet (ich bin mir nicht sicher, ob es einen offiziellen Namen für diese Funktion gibt), um zu steuern, was angezeigt wird. Hier ist ein Beispiel.Ich arbeite an der Statusleiste des Fensters für tmux - ticket. Mein Entwicklungszweig finden Sie hier auf github: https://github.com/jonathanslenders/tmux
Im Moment wird bereits ein funktionierender Befehl zum Umbenennen des "Titels" hinzugefügt. Es gibt immer noch einige Fehler, und die API wird verbessert. Die Idee ist, eine Statusleiste pro Bereich zu erstellen, die eine gewisse Formatierung haben kann, wie z. B. die Sitzungsstatusleiste. Wie der Rest von tmux sollte alles skriptfähig und anpassbar werden. Wenn es fertig und stabil ist, wird es wahrscheinlich im offiziellen tmux enthalten sein.
quelle
Ich verwende tmux Version 2.3. Ich denke, der Rahmenstil wird in früheren Versionen nicht unterstützt. Das hat bei mir funktioniert:
Legen Sie für jeden Bereich den Titel fest:
Dann:
quelle
select-pane -T "my title"
tut dies. Sie können sogar eine Schlüsselbindung einrichten, sodass Sie nur den Titelbind-key T command-prompt -p "New title:" 'select-pane -T "%%"'
pane-border-status
Option auf etwas (top
oderbottom
) gesetzt ist.Ein GIF sagt mehr als tausend Worte. ( Quelle )
tmux-xpanes ist ein tmux-basierter Terminalteiler, der die Anzeige von Titeln für jeden Bereich über die neu hinzugefügte
-t
Option unterstützt.quelle
Ja, es gibt einen solchen Befehl :
tmux
. Geben Sie Ihrer Sitzung einen Namen und dieser wird in einer inneren Statusleiste angezeigt:quelle
Dies ist kurzfristig nicht hilfreich, es gibt jedoch eine Funktionsanforderung für Titel pro Fenster in tmux: http://sourceforge.net/tracker/?func=detail&aid=3495916&group_id=200378&atid=973265#
In der Zwischenzeit funktioniert das Verschachteln von tmux, wie bereits erwähnt, anständig.
quelle
TL; DR
Hängen Sie die folgenden Konfigurationen an Ihre tmux-Konfigurationsdatei an (in meinem Fall
~/.tmux.conf.local
)dann renne:
geniesse es
Vielen Dank an https://stackoverflow.com/a/37602055/5121972
quelle