Pull to refresh

zsh :: настраиваем «правое» приглашение командной строки

Reading time 2 min
Views 8K
Ковыряясь с настройками zsh, наткнулся на весьма интересное решение для приглашения командной строки, которое размещается в этом шелле справа. Обычно туда принято помещать часы, но мне весьма приглянулась идея разместить там также нотификатор заряда батареи. В зависимости от уровня заряда, нотификатор показывается зеленым, желтым или красным цветом. Автор идеи зачем-то приплел к решению python, я все переписал на родном шелле.
Выглядит это как-то вот так:
Command line prompt, zsh

Приведенный ниже код тестировался на ubuntu, кроме цветов (%F{…}) все обязано работать на любых дистрибутивах под zsh. Итак, приступим.
Правое приглашение командной строки в zsh задается переменной среды окружения RPROMPT. Вот кусок кода, который имеет смысл разместить в ~/.zshrc (или в ~/.oh-my-zsh/themes/ВАША_ТЕМА, если вы уже знаете про oh-my-zsh):
function battery_charge {
  # Battery 0: Discharging, 94%, 03:46:34 remaining
  bat_percent=`acpi | awk -F ':' {'print $2;'} | awk -F ',' {'print $2;'} | sed -e "s/\s//" -e "s/%.*//"`

  if [ $bat_percent -lt 20 ]; then cl='%F{red}'
  elif [ $bat_percent -lt 50 ]; then cl='%F{yellow}'
  else cl='%F{green}'
  fi

  filled=${(l:`expr $bat_percent / 10`::▸:)}
  empty=${(l:`expr 10 - $bat_percent / 10`::▹:)}
  echo $cl$filled$empty'%F{default}'
}
RPROMPT='[%*] $(battery_charge)'

Алгоритм работы прост, как амеба во внебрачный период:
— получили и распарсили заряд батареи от acpi (может потребоваться установить sudo apt-get install acpi);
— определили цвет отображения (красный, если меньше 20%, желтый — до 50%, иначе — зеленый);
— нарисовали сколько нужно закрашенных треугольников, потом остаток — незакрашенными;
— вывели в правое приглашение командной строки.

Эта заметка — просто иллюстрация принципа «потрать три минуты и сделай себе жизнь навсегда удобнее». Если вы, конечно, являетесь таким же адептом консоли, как я. Я знаю, что код не вылизан до состояния «можно на выставку» — но зачем мне это?

В качестве еще одного примера — выведем справа код возврата предыдущей команды:
RPROMPT='%{$fg[red]%} ⏎ $? %{$reset_color%} '$RPROMPT
Tags:
Hubs:
+45
Comments 25
Comments Comments 25

Articles