Como abrir shells xterm com cores de fundo baseadas no posicionamento topográfico?

2

Eu atualmente uso um alias em csh / tcsh para abrir shells com cores de janelas específicas.
Exemplo: xterm -geometry 105x25 -font 8x13 -bc -bg #333 -fg #999 \!* &

O que eu gostaria de fazer é que um comando abra um novo shell com uma cor baseada no nível em que o shell está em uma árvore.

Exemplo:

  1. % > xt
    Abra o shell A (branco bg / preto fg) - novo shell
  2. % > xt
    Abra o shell A.a (preto bg / cinza fg) - shell filho
  3. % > xt
    Abra o shell A.a.a (verde bg / amarelo fg) - shell neto

Eu tenho o bash disponível, mas eu uso tcsh ou csh por padrão.
Como dito, gostaria que um comando / alias abrisse os shells pai e filho e decidisse qual cor usar.

    
por vol7ron 28.07.2010 / 15:47

2 respostas

3

A maioria das shells (tcsh, bash, zsh, mas não csh) incrementam a variável de ambiente SHLVL quando começam, de modo que $SHLVL indica o nível de aninhamento do seu shell atual. Então faça algo como (para 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] \!* &"
    
por 30.07.2010 / 22:40
2

Eu criaria uma variável array com a lista de especificações de cores (ou duas matrizes - uma para fg e outra para bg). Em seguida, em seu alias, selecione essa matriz usando uma variável de índice e, em seguida, incremente-a.

Demo:

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

Cada vez que você executa a última linha (que representa seu alias), o item atual na matriz é ecoado, o índice é incrementado e, em seguida, o índice é agrupado se exceder o comprimento da matriz.

Você pode precisar usar um arquivo para acompanhar o índice em vez de uma variável na memória.

    
por 29.07.2010 / 01:36