[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Lengthy working dir (\w) breaks wrapping in a multi line coloured PS
From: |
Linda Walsh |
Subject: |
Re: Lengthy working dir (\w) breaks wrapping in a multi line coloured PS1 prompt |
Date: |
Tue, 24 Dec 2013 17:08:48 -0800 |
User-agent: |
Thunderbird |
Use something to trim your prompt usefully (or rigidly like bash prompt builtin
'\w'):
------- in your .bashrc define these:
# return a shorted path when displayed path would take up > 50% width of screen
alias int=declare\ -i _e=echo _pf=printf exp=export ret=return
exp __dpf__='local -a PF=(
"/$1/$2/$3/../\${$[$#-1]}/\${$#}"
"/$1/$2/../\${$[$#-1]}/\${$#}"
"/$1/../\${$[$#-1]}/\${$#}"
"/$1/../\${$#}"
".../\${$#}"
"..." )'
function spwd () { \
(($#)) || { _e "spwd called with null arg"; return 1; }; \
int w=COLUMNS/2 ;\
( _pf -v _p "%s" "$1" ; export IFS=/ ;\
set $_p; shift; unset IFS ;\
t="${_p#${HOME%${USER}}}" ;\
int tl=${#t} ;\
if (($#<=6 && tl<w));then ((tl<=2)) && \
{ _e -En "${_p}";return 0; } ;\
else \
eval "$__dpf__" ;\
int i pfl=${#PF[*]} ;\
for ((i=0; i<pfl; ++i)); do eval \
"_pf -v _pa %s \"${PF[i]}\"" ;\
_p="$(eval "_pf %s \"$_pa\"")" ;\
((${#_p}<w)) && break; done ;\
fi ;\
_e -En "${_p#${HOME%${USER}}}" )
}
------------------------
Then set your prompt (this one turns red for root, and sets the window title)
#specific to xterm & linux console compat emulations
read _CRST < <(tput sgr0) #Reset
read _CRed < <(tput setaf 1) #Red
read _CBLD < <(tput bold) #Bold
declare _prompt_open="" _prompt_close="" _prompt=">"
declare _disp_port=${DISPLAY/[^:]*:/}
[[ $UID -eq 0 ]] && {
_prompt_open="$_CBLD$_CRed"
_prompt="#"
_prompt_close="$_CRST"
}
PS1='\['"$_prompt_open"'\]$(spwd "$PWD" )'"$_prompt"'\['"$_prompt_close"'\] ';
if [[ -n ${REMOTEHOST:-""} ]]; then
function titlebar { \
printf "\033]1;${USER}@${HOSTNAME}:%q\007" "$(spwd "$PWD")" ;\
}
export -f titlebar
PS1='\[$(titlebar)'"$_prompt_open"'\]${HOSTNAME}:$(spwd
"$PWD")'"$_prompt"'\['"$_prompt_close"'\] '
fi
--------------------------
cd
"/tmp/a_long_directory_name/getting_even_bigger_so_that_I_can_test/this_prompt_is_working_fine_or_not"
Observe that the prompt is now displayed as:
Ishtar:.../this_prompt_is_working_fine_or_not>
Notice it doesn't take more than half the width of your screen..
It only displays host if you are logged in remotely (relies on REMOTEHOST being
set
via pam_env.dll)