Как открыть xterm-оболочки с фоновыми цветами на основе топографического позиционирования?

2450
vol7ron

В настоящее время я использую псевдоним в csh / tcsh для открытия оболочек с определенными цветами окон.
Пример:xterm -geometry 105x25 -font 8x13 -bc -bg #333 -fg #999 \!* &

Я хотел бы, чтобы одна команда открыла новую оболочку с цветом в зависимости от уровня оболочки в дереве.

Пример:

  1. %> xt
    Открытая оболочка A (белая бг / черная фг) - новая оболочка
  2. %> xt
    Открытая оболочка Aa (черный bg / grey fg) - дочерняя оболочка
  3. %> xt
    Открытая оболочка Aaa (зеленый фон / желтый фг) - оболочка внука

У меня есть bash, но по умолчанию я использую tcsh или csh.
Как уже говорилось, я хотел бы, чтобы одна команда / псевдоним открывала родительские и дочерние оболочки и решала, какой цвет использовать.

2
Для чего нужен тег perl? Dennis Williamson 14 лет назад 1

2 ответа на вопрос

3
Gilles

Большинство оболочек (tcsh, bash, zsh, но не csh) увеличивают SHLVLпеременную среды при запуске, что $SHLVLуказывает на уровень вложенности текущей оболочки. Так что делай что-то вроде (для 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

Я бы создал переменную-массив со списком спецификаций цвета (или двумя массивами - один для fg и один для bg). Затем в своем псевдониме выберите из этого массива переменную индекса, а затем увеличьте ее.

Демо-версия:

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

Каждый раз, когда вы выполняете последнюю строку (которая представляет ваш псевдоним), текущий элемент в массиве отображается, индекс увеличивается, а затем индекс оборачивается, если он превышает длину массива.

Возможно, вам придется использовать файл для отслеживания индекса вместо переменной в памяти.

Похожие вопросы