#! /bin/bash # *very* dirty, but this inferior excuse for a shell deserves nothing better OVER_PROMPT_CFG="/etc/over/prompt.cfg" if [ -a "$OVER_PROMPT_CFG" ]; then source "$OVER_PROMPT_CFG" fi function precmd() { EXITUS=$? RAW_DATA="$(/usr/share/over-prompt/data $OVER_PROMPT_OPTS)" if [ $EXITUS = 0 ]; then CROSS="|CYAN|\\$|NONE|" else CROSS="|RED|${EXITUS}|NONE|:|RED|\\$|NONE|" fi if [ $EUID = 0 ]; then USER_PART="|RED|\\u|NONE|" else USER_PART="|GREEN|\\u|NONE|" fi home_len=${#HOME} if [ "${PWD:0:$home_len}" = "$HOME" ]; then pwd="~${PWD:$home_len}" else pwd="$PWD" fi if [ -n "$RAW_DATA" ]; then LOGIN_PART="${RAW_DATA%:::*}" STATS_PART="[ ${RAW_DATA#*:::} " pwd_len=${#pwd} user_len=${#USER} host_len=${#HOSTNAME} win_len=${#WINDOW} STATS_PART_="$(echo ${STATS_PART}|sed 's/|[A-Z]*|//g')" stats_len=${#STATS_PART_} max_pwd_len=$((${COLUMNS}-${user_len}-${host_len}-${win_len}-${stats_len}-5)) # 1 kB of spaces... that should be enough. DIRTY, YEAH! spaces=" " padding="" if [ ${pwd_len} -gt ${max_pwd_len} ]; then pwd="<${pwd:(($pwd_len - $max_pwd_len)):$pwd_len}" elif [ ${pwd_len} -lt ${max_pwd_len} ]; then padto=$((${max_pwd_len} - ${pwd_len} + 1)) padding="${spaces:0:$padto}" fi PS1="${USER_PART}@${LOGIN_PART} ${padding}${STATS_PART}\n$CROSS " else PS1="${USER_PART}@|HOST| |CWD| [|RFLASH|data gathering error|NONE|]\n$CROSS " fi PS1="${PS1//|NONE|/\[\033[0m\]}" PS1="${PS1//|RED|/\[\033[1;31m\]}" PS1="${PS1//|RFLASH|/\[\033[5;31m\]}" PS1="${PS1//|GREEN|/\[\033[1;32m\]}" PS1="${PS1//|DARKGREEN|/\[\033[0;32m\]}" PS1="${PS1//|BLUE|/\[\033[1;34m\]}" PS1="${PS1//|YELLOW|/\[\033[1;33m\]}" PS1="${PS1//|CYAN|/\[\033[1;36m\]}" PS1="${PS1//|HOST|/$HOSTNAME}" PS1="${PS1//|TTY|/$WINDOW}" PS1="${PS1//|CWD|/$pwd}" unset -v LOGIN_PART STATS_PART pwd_len user_len host_len win_len STATS_PART_ stats_len max_pwd_len spaces padding pwd padto padding } PROMPT_COMMAND="precmd" unset OVER_PROMPT_CFG