X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/049cd0157dcb6204cc0f90b7c54dd1b10de34566..b0b75b94c5001562a4ce985361476185885acd9b:/dot/shell-rc diff --git a/dot/shell-rc b/dot/shell-rc index aad0918..51abd6e 100644 --- a/dot/shell-rc +++ b/dot/shell-rc @@ -15,9 +15,54 @@ __mdw_source_if_exists () { } ###-------------------------------------------------------------------------- +### Hooks. + +__mdw_addhook () { + local hk=$1 fn=$2 t + + eval t=\${$hk+t} + case $t in t) ;; *) echo >&2 "unknown hook \`$hk'"; return 2; esac + + eval t=\$$hk + case " $t " in + *" $fn "*) ;; + *) eval "$hk=\${$hk:+\$$hk }\$fn" ;; + esac +} + +__mdw_delhook () { + local hk=$1 fn=$2 t l r + + eval t=\${$hk+t} + case $t in t) ;; *) echo >&2 "unknown hook \`$hk'"; return 2; esac + + eval t=\" \$$hk \" + case $t in + *" $fn "*) + l=${t%% $fn*} r=${t##*$fn } + l=${l# } r=${r% } + eval "$hk=\$l\${l:+ }\$r" + ;; + esac +} + +__mdw_setrc () { return $1; } + +__mdw_runhook () { + local hk=$1 saverc=$? t i; shift + + eval t=\${$hk+t} + case $t in t) ;; *) echo >&2 "unknown hook \`$hk'"; return 2; esac + + eval t=\$$hk + for i in $t; do __mdw_setrc $saverc; "$i" "$@"; done +} + +###-------------------------------------------------------------------------- ### Prompt machinery. -__mdw_set_prompt_hacks () { host=$(hostname); dir=""; } +__mdw_host=$(hostname) +__mdw_set_prompt_hacks () { host=$__mdw_host; dir=""; } __mdw_set_prompt_pieces () { local hqual @@ -64,7 +109,7 @@ __mdw_set_prompt_pieces () { ## If this is an schroot environment or some other interesting augmented ## environment then point this out. hqual="$hqual${SCHROOT_CHROOT_NAME+/$SCHROOT_CHROOT_NAME}" - hqual="$hqual${MDW_BUILDENV+/$MDW_BUILDENV}" + hqual="$hqual${CROSS_BUILDENV+/$CROSS_BUILDENV}" ## Put together the main pieces. __mdw_prompt_left="$nl$bold$left$sec_l$u$host$hqual$sec_r$dir" @@ -101,18 +146,27 @@ __mdw_set_prompt () { esac } -__mdw_precmd () { - __mdw_set_prompt - case ${STY+t} in - t) printf "k%s\\" "$__mdw_shell" ;; - esac -} +__mdw_xterm_precmd () { printf >/dev/tty "]2;%s@%s:%s – %s\\" "$USER" "$__mdw_host" "$PWD" "$__mdw_shell"; } +__mdw_xterm_preexec () { printf >/dev/tty "]2;%s@%s:%s – %s\\" "$USER" "$__mdw_host" "$PWD" "$1"; } + +__mdw_screen_precmd () { printf >/dev/tty "k%s\\" "$__mdw_shell"; } +__mdw_screen_preexec () { printf >/dev/tty "k%s\\" "$1"; } -__mdw_preexec () { - case ${STY+t} in - t) printf "k%s\\" "$1" ;; +if [ -t 0 ]; then + case ${STY+t},${__mdw_precmd_hook+t},${__mdw_preexec_hook+t},${TERM} in + ,t,t,xterm*) + __mdw_addhook __mdw_precmd_hook __mdw_xterm_precmd + __mdw_addhook __mdw_preexec_hook __mdw_xterm_preexec + ;; + t,t,t,*) + __mdw_addhook __mdw_precmd_hook __mdw_screen_precmd + __mdw_addhook __mdw_preexec_hook __mdw_screen_preexec + ;; esac -} + case ${__mdw_precmd_hook+t} in + t) __mdw_addhook __mdw_precmd_hook __mdw_set_prompt ;; + esac +fi ###-------------------------------------------------------------------------- ### Some handy aliases. @@ -133,6 +187,8 @@ alias e="$EDITOR" alias svn="svnwrap svn" alias @="ssh" alias make="nice make" +alias cross-run="nice cross-run" +alias gdb="gdb -q" ###-------------------------------------------------------------------------- ### Colour output.