Open Source im professionellen Einsatz
Linux-Magazin 06/2013
© mreco99, 123rf.com

© mreco99, 123rf.com

Perl-Skript steuert Tmux-Konfiguration

Magische Fenster

Statt die Fenster einer Entwicklungsumgebung stets aufs Neue manuell zurechtzuzupfen, lässt Perl-Meister Michael Schilli den Terminal-Multiplexer Tmux nur seine Konfigurationsdateien restaurieren.

848

Wer keine Entwicklungsumgebung wie Eclipse zum Programmieren nutzt, sondern viel auf der Kommandozeile eines Terminalfensters tippt, dem ist »screen« bestimmt nicht fremd. Das betagte Terminal-Utility stellt unter anderem sicher, dass nach Netzwerkproblemen der Initiator einer abgebrochenen SSH-Session genau dort problemlos fortsetzen kann, wo er aufgehört hatte zu tippen. Dabei stellt »screen« sich zwischen Anwender und im Terminal ablaufende Applikationen und gaukelt diesen aufmerksame User vor, auch wenn die schon längst ins Wochenende abgezischt sind.

Bekanntlich ist die Unix-Welt in den vergangenen 20 Jahren nicht stehen geblieben, und so hat sich das vergleichsweise junge Projekt Tmux [2] angeschickt »screen« zu verbessern und abzulösen. Wie »screen« bietet Tmux dem User mehrere Sessions, die wiederum aus so genannten Windows bestehen, was im Screen-Jargon keine Desktopfenster, sondern im gleichen Terminalfenster umschaltbare Textoberflächen sind. Mit Tastatur-Shortcuts unterteilt Tmux diese Fenster bei Bedarf noch weiter in vertikal oder horizontal angeordnete Panes (Fensterscheibe), die alle gleichzeitig sichtbar sind ( Abbildung 1 ).

Tmux läuft auf allen gängigen Plattformen. Wer also mal auf einem Linux-Desktop und unterwegs auf einem Macbook arbeitet, findet in beiden Umgebungen die gleichen Windows und Panes vor.

Abbildung 1: Zwei tmux-Kommandos teilen das Window erst in zwei horizontale Panes und die rechte Pane anschließend in zwei vertikale.

Online PLUS

In einem Screencast demonstriert Michael Schilli das Beispiel: http://www.linux-magazin.de/plus/2013/06

Server und Client

Ein automatisch gestarteter Tmux-Server behält den Überblick über aktive Sessions, der User kann sie per Kommandozeile fernsteuern. Das »tmux« -Kommando legt neue Sessions an oder zerstört sie wieder, fügt Fenster hinzu oder löscht sie und baut Panes ein und aus, vergrößert oder verkleinert sie. Für Entwicklungsumgebungen mit mehreren Windows und Panes bietet es sich an, die mühevolle Konfiguration im Sourcecode-Repository zu speichern und bei Bedarf mit einem einzigen Kommando anzuzeigen.

Tmux kann in den Panes auch Applikationen starten, den Lieblingseditor beispielsweise, der gleich eine Projektdatei lädt. Eine andere Pane startet vielleicht schon die Testsuite und eine dritte zeigt mit »tail« das Ende einer Logdatei an.

Anpassen erwünscht

Ein frisch installiertes Tmux wartet mit seltsamen Tastaturkombinationen auf. Um in einer Tmux-Session nicht die laufende Applikation wie den Editor anzusteuern, sondern den zwischengeschalteten Terminal-Multiplexer, tippt der User das so genannte Prefix. Eine jungfräuliche Tmux-Installation hat dafür [Ctrl] + [B] eingestellt, eine Tastenkombination, die bei häufigen Gebrauch nicht nur Sehnenscheidenentzündungen provoziert, sondern in Vi auch ein gängiges und damit geblocktes Kommando ist.

Glücklicherweise erlaubt Tmux alles umstellen, und so stöpselt jeder Realo sofort nach der Installation seine eigene ».tmux.conf« -Datei zusammen, meine ist auf [3] dokumentiert. Sie beruht letztlich nur auf allgemeinen Empfehlungen, etwa das Prefix »screen« -kompatibel auf [Ctrl] + [A] zu stellen und den Rest auf »vim« -ähnliche Kombinationen: [H] =links, [J] = abwärts, [K] =aufwärts, [L] =rechts. Damit brauche ich zum Wechseln zwischen den Panes keine Emacs-ähnlichen Textkommandos anzugeben, sondern springe mit Prefix , [H] zum Beispiel in die Pane linker Hand.

Angepasste Shortcuts bringen natürlich gewisse Nachteile mit sich, etwa dass jeder einen anderen Tmux-Dialekt versteht und in fremden Umgebungen hilflos zappelt wie eine Käfer auf dem Rücken. Jederzeit versteht Tmux aber ausgeschriebene Kommandos, die es mit der Tastenkombination Prefix , [:] (Prefix gefolgt von einem Doppelpunkt) auf der Statuszeile entgegennimmt.

Die gleichen Kommandos akzeptiert »tmux« auf der Kommandozeile, sodass zusammengezimmerte Skripte, die eine Fenstergruppe aufsetzen, global gültig sind. So schickt das Perl-Skript in Listing 1 in Zeile 19 den Befehl »tmux kill-session« mit dem Namen der Session ( »log4perl« ) los, falls der User es mit der Option »-k« aufgerufen hat. Der Befehl nimmt Verbindung zum Tmux-Server auf (falls dieser läuft), fragt nach der Session und lässt sie zusammenfalten.

Listing 1

tmux-setup

01 #!/usr/local/bin/perl -w
02 use strict;
03 use Sysadm::Install qw( tap cd );
04 use Log::Log4perl qw(:easy);
05 use Getopt::Std;
06 sub tmux; # declare as function
07
08 my($home)   = glob "~";
09 my $session = "log4perl";
10
11 getopts "vk", \my %opts;
12
13 my $loglevel = $INFO;
14 $loglevel = $DEBUG if $opts{ v };
15
16 Log::Log4perl->easy_init( $loglevel );
17
18 if( $opts{ k } ) {
19   tmux "kill-session", "-t", $session;
20   exit 0;
21 }
22
23 tmux "source", "$home/.tmux.conf";
24
25 if( 0 == tmux "has-session",
26               "-t", $session ) {
27   DEBUG "Session $session already exists";
28 } else {
29   DEBUG "Creating session $session";
30   tmux "new-session", "-s", $session,
31         "-d";
32   tmux "split-window", "-h";
33   tmux "split-window", "-v";
34   tmux "send-keys", "-t", "$session:0.0",
35   "vim -p `find . -name '*.pm' | head -2`",
36     "C-m";
37   tmux "send-keys", "-t", "$session:0.1",
38        "perl Makefile.PL; make test", "C-m";
39   tmux "send-keys", "-t", "$session:0.2",
40        "vim t/*.t", "C-m";
41 }
42
43 tmux "attach", "-t", $session;
44
45 ###########################################
46 sub tmux {
47 ###########################################
48   my( $stdout, $stderr, $rc ) =
49      tap "tmux", @_;
50
51   return $rc;
52 }

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 3 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Video: Tmux 0.6 als Alternative zu GNU Screen

    Dieses Video demonstriert das Programm Tmux, den Terminal-Multiplexer, der nun in Version 0.6 verfügbar ist. Wie GNU Screen erlaubt des Programm, in einem Terminal mehrere Programm laufen zu lassen.

  • Tmux 2.0

    Der Terminal-Multiplexer Tmux erreicht Version 2.0. Die Entwickler haben einige Kommandos ausrangiert, aber auch ein paar neue ergänzt.

  • Tmux 1.7 mit vielen Verbesserungen

    Der Terminal-Multiplexer Tmux ist in Version 1.7 mit Bugfixes und neuen Optionen erhältlich.

  • Der Screencast zum Perl-Snapshot Linux-Magazin 06/2013

    Statt die Fenster einer Entwicklungsumgebung stets aufs Neue manuell zurechtzuzupfen, lässt Perl-Meister Michael Schilli den Terminal-Multiplexer Tmux nur seine Konfigurationsdateien restaurieren.

  • Tooltipps

    Themen: Python interaktiv skripten, SSH-Sitzungen parallelisieren, Bash-Debugging leicht gemacht, Die nächste Pine-Generation, Fetchmail-Alternative für Soho-Netze, Terminal-Multiplexer

comments powered by Disqus