Wie kann man Xterm-Shells mit Hintergrundfarben basierend auf der topographischen Positionierung öffnen?

2758
vol7ron

Ich verwende derzeit ein Alias ​​in csh / tcsh, um Shells mit bestimmten Fensterfarben zu öffnen.
Beispiel:xterm -geometry 105x25 -font 8x13 -bc -bg #333 -fg #999 \!* &

Ich möchte, dass ein Befehl eine neue Shell mit einer Farbe öffnet, die auf der Stufe basiert, in der sich die Shell in einem Baum befindet.

Beispiel:

  1. %> xt
    Offene Schale A (weiße Farbe / schwarze Farbe) - neue Schale
  2. %> xt
    Offene Schale Aa (black bg / grey fg) - untergeordnete Schale
  3. %> xt
    Offene Schale Aaa (grün bg / gelb fg) - Enkelschale

Ich habe Bash verfügbar, benutze aber standardmäßig tcsh oder csh.
Wie bereits erwähnt, möchte ich mit einem Befehl / Alias ​​die übergeordneten und untergeordneten Shells öffnen und entscheiden, welche Farbe verwendet werden soll.

2
Wozu dient das Perl-Tag? Dennis Williamson vor 14 Jahren 1

2 Antworten auf die Frage

3
Gilles

Die meisten Shells (tcsh, bash, zsh, aber nicht csh) erhöhen die SHLVLUmgebungsvariable beim Start, sodass $SHLVLdie Verschachtelungsebene der aktuellen Shell angegeben wird. So etwas wie (für tcsh)

set xt_bg_colors=(white white black green) set xt_fg_colors=(black black gray yellow) alias xt "xterm -geometry 105x25 -font 8x13 -bc -bg $xt_bg_colors[$SHLVL] -fg $xt_fg_colors[$SHLVL] \!* &" 
2
Dennis Williamson

Ich würde eine Array-Variable mit der Liste der Farbspezifikationen erstellen (oder zwei Arrays - eines für fg und eines für bg). Wählen Sie dann in Ihrem Alias ​​eine Indexvariable aus diesem Array aus, und erhöhen Sie sie dann.

Demo:

> set array=(apple banana cherry) > @ index = 1 > @ index = ( ( $index ) % ${#array} + 1 ) ; echo $array[$index] 

Bei jeder Ausführung der letzten Zeile (die Ihren Alias ​​darstellt) wird das aktuelle Element im Array wiederholt, der Index wird erhöht, und der Index wird umgebrochen, wenn er die Länge des Arrays überschreitet.

Möglicherweise müssen Sie eine Datei verwenden, um den Index anstelle einer In-Memory-Variablen zu verfolgen.