Wie öffnet man xterm-Shells mit Hintergrundfarben basierend auf der topografischen Positionierung?

2

Ich verwende derzeit einen 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 Ebene basiert, in der sich die Shell in einem Baum befindet.

Beispiel:

  1. %> xt
    Öffne Shell A (weiß bg / schwarz fg) - neue Shell
  2. %> xt
    Open Shell Aa (schwarz bg / grau fg) - Kinderschale
  3. %> xt
    Open Shell Aaa (grünes BG / gelbes BG) - Enkelkind-Shell

Ich habe Bash zur Verfügung, aber ich benutze standardmäßig tcsh oder csh.
Wie bereits erwähnt, möchte ich, dass ein Befehl / Alias ​​die über- und untergeordneten Shells öffnet und festlegt, welche Farbe verwendet werden soll.

vol7ron
quelle
1
Wofür ist das Perl-Tag?
Dennis Williamson

Antworten:

3

Die meisten Shells (tcsh, bash, zsh, aber nicht csh) erhöhen die SHLVLUmgebungsvariable, wenn sie gestartet werden, sodass $SHLVLdie Verschachtelungsebene Ihrer aktuellen Shell angegeben wird. Also mach 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] \!* &"
Gilles
quelle
2

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 ​​mithilfe einer Indexvariablen aus diesem Array aus und erhöhen Sie es dann.

Demo:

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

Jedes Mal, wenn Sie die letzte Zeile (die Ihren Alias ​​darstellt) ausführen, wird das aktuelle Element im Array als Echo ausgegeben, der Index wird inkrementiert und der Index wird umgebrochen, wenn er die Länge des Arrays überschreitet.

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

Dennis Williamson
quelle