summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorbalou <balou@tilde.institute>2022-07-07 19:25:33 +0000
committerbalou <balou@tilde.institute>2022-07-07 19:25:33 +0000
commit91b34a0077e57be5c46637f12d441d40ada2673e (patch)
treebf3e53b8fa620d8181d189ec8e6ce12d9eae6908
downloadportable-prompt-91b34a0077e57be5c46637f12d441d40ada2673e.tar.gz
first commit
-rw-r--r--portable-prompt.sh273
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"