diff options
Diffstat (limited to 'portable-prompt.sh')
-rw-r--r-- | portable-prompt.sh | 273 |
1 files changed, 273 insertions, 0 deletions
diff --git a/portable-prompt.sh b/portable-prompt.sh new file mode 100644 index 0000000..bcc2385 --- /dev/null +++ b/portable-prompt.sh @@ -0,0 +1,273 @@ +#set -x +#alias local=typeset +# don't activate for bash or zsh for now +#[ -n "$BASH_VERSION" ] || [ -n "$ZSH_VERSION" ] && return + +# If not running interactively, don't do anything +#[ -z "$PS1" ] && return +setopt PROMPT_SUBST + +if [ "$$" = "1" ]; then + echo "Whoah?! I'm init!" + PREFIX="${PREFIX}[I AM INIT] " +fi + +SHNAME=$(. whatshell) + +SERIAL='' +if [ -r /proc/self/fd/0 ]; then + TTY_FULL=$(LANG=C readlink /proc/self/fd/0 2>/dev/null || LANG=C realpath /proc/self/fd/0) +else + TTY_FULL=$(tty) +fi +TTY=${TTY_FULL#/dev/} +export TTY + +case "$TTY_FULL" in + /dev/ttyS*) + SERIAL=1 + ;; +esac + + +prompt_helper(){ + # display return code in prompt + RET=$? + if [ $RET = 0 ]; then + RET= + else + RET="[$RET]" + fi + + if [ "$CHECKWINSIZE" ]; then + set -- $(stty size) + export LINES=$1 + export COLUMNS=$2 + #echo "$COLUMNS x $LINES" + fi + # workaround for updating terminal size when connecting via serial port + if [ "$SERIAL" ]; then + local rows + local cols + IFS='[;' read -p $'\033\033[r\033[999;999H\033[6n\033' -d R -s _ rows cols + if [ "x$rows $cols" != "x$LINES $COLUMNS" ]; then + stty rows "$rows" cols "$cols" + fi + fi + + if [ "$RPROMPT" ]; then + #local RP1=${RPROMPT@P} + #local RP2=${RP1//$'\1'+([!$'\2'])$'\2'/} + local RP1=$RPROMPT + local RP2=$RPROMPT + printf "\0337\033[$((COLUMNS - ${#RP2} + 1 ))G%s\0338" "$RP1" > /dev/tty + fi +#printf "%s" "$PS1" > /dev/tty + + case "$TERM" in + (xterm*|rxvt*|vt102|screen) + pretty_title "$SHNAME";; + esac + return 0 +} + +set_title(){ + #set -x + printf "\033]0;%s\a" "${*-}" > /dev/tty +} + +pretty_title(){ + local extra=${*-} + + local user= + if [ "$EUID" -ne 0 ]; then + user="/${USER}" + fi + local host=${DISPLAYHOST-$HOSTNAME} + local tty="(${COLUMNS}x${LINES} ${TTY})" + local pwd + case $PWD in + $HOME*) + pwd="~${PWD#$HOME}" + ;; + *) + pwd=$PWD + ;; + esac + PWEXT=$pwd + + #local pwd=${PWD/$HOME/~} + + if [ -n "$extra" ]; then + extra=" <$extra>" + fi + + set_title "$host$user:$extra $pwd $tty" +} + +blackterm(){ + setfg ffffff + setbg 000000 + tango + color dark +} +whiteterm(){ + setfg 000000 + setbg ffffff + tango + color light +} +grayterm(){ + setfg bebebe + setbg 333333 + tango + color dark +} + +setcolors(){ + local i=0 + #printf "\033]4;" + #for arg; do + # printf "%s;#%s" "$i" "$arg" + # ((++i)) + #done + #printf "\a" + #i=0 + for arg; do + printf "\033]P%x%s\a" "$i" "$arg" + printf "\033]4;%s;#%s\a" "$i" "$arg" + ((++i)) + done +} + +tango(){ + setcolors \ + 1e1e1e \ + cc0000 \ + 4e9a06 \ + c4a000 \ + 3464a4 \ + 75507b \ + 0b939b \ + d3d7cf \ + 555753 \ + ef2929 \ + 8ae234 \ + fce94f \ + 729fcf \ + ad7fa8 \ + 00f5e9 \ + eeeeec +} + +setopt(){ + printf "\033]%s;#%s\a" "$1" "$2" +} + +setfg(){ + setopt 10 "$1" + setopt 12 "$1" + setopt 13 "$1" + setopt 17 "$1" + printf "\033]Pg%s\a" "$1" +} + +setbg(){ + setopt 11 "$1" + setopt 14 "$1" + printf "\033]Ph%s\a" "$1" +} + +preexec(){ +#set -x + if [ "$SHOW_COMMAND" ]; then + local command + if [ -n "$BASH_COMMAND" ]; then + command=$BASH_COMMAND + elif [ -n "$ZSH_VERSION" ]; then + command=$1 + else + eval 'command=${.sh.command}' + #echo XXX $command + fi +#echo "FOOOBAR $command" + #local short=${command:0:50} + local short + eval 'short=${command:0:50}' + pretty_title "$short" + case "$TERM" in screen) + printf "\033%.20s\033\\" "$short" + esac + fi +} + +LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:'; +export LS_COLORS + +set -o emacs +#alias grep='grep --color=auto' +#alias grpe='grep --color=auto' +#alias gerp='grep --color=auto' +#alias ls='ls -F --color=auto' +alias ls='ls -F' +alias sc='du -schx -- *|sort -h' +alias vi='vim "+sy on" "+colo elflord" "+se nu" "+se ai" "+se si" "+se hls"' + +: "${EUID:=$(id -u)}" +CSI=$(printf '\033[') +if [ -n "$YASH_VERSION$BASH_VERSION" ]; then + START="\[" + SC="$START$CSI" + END="\]" + EC="m$END" +else + SC="$CSI" + EC="m" + START= + END= +fi + +RED="${SC}1;31$EC" +GREEN="${SC}1;32$EC" +BLUE="${SC}1;34$EC" +DBLUE="${SC}34$EC" +STD="${SC}$EC" + +STD="${SC}0;41$EC" +PREFIX=$STD +printf '%s' "$STD${CSI}J" + +: "${HOSTNAME:=$(hostname)}" +DISPLAYHOST=${HOSTNAME%%.*} + +CHECKWINSIZE=1 +SHOW_COMMAND=1 + +if [ "$EUID" = 0 ]; then + UCOLOR=$RED + SYMBOL='#' +else + UCOLOR=$GREEN + SYMBOL='$' +fi + +case "$TERM" in +dumb) + PS1="${DISPLAYHOST}.\w$SYMBOL " + ;; +*) + RPROMPT= + RPROMPT="$(basename $SHELL)" + PS1="$PREFIX${UCOLOR}${DISPLAYHOST}${STD}.${BLUE}$START\$(prompt_helper;printf %s \"\$PWEXT\$RET\")$END${STD}$SYMBOL " + #PS1="$PREFIX${UCOLOR}${DISPLAYHOST}${STD}.${BLUE}\$(prompt_helper)\$PWEXT\$RET${STD}$SYMBOL " + ;; +esac + + +echo "siprof" + +# LASTARG: save and restore the value of $_ +#if [ -z "$ZSH_VERSION" ]; then +# trap 'LASTARG="$_";$PREEXEC_COMMAND;: $LASTARG' DEBUG +#fi +#PREEXEC_COMMAND="preexec" |