Open Source im professionellen Einsatz

© 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.

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.)

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook