done
}
+###--------------------------------------------------------------------------
+### 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.
esac
}
-__mdw_precmd () {
- __mdw_set_prompt
- case ${STY+t} in
- t) printf "\ek%s\e\\" "$__mdw_shell" ;;
- esac
-}
+__mdw_screen_precmd () { printf "\ek%s\e\\" "$__mdw_shell"; }
+__mdw_screen_preexec () { printf "\ek%s\e\\" "$1"; }
-__mdw_preexec () {
- case ${STY+t} in
- t) printf "\ek%s\e\\" "$1" ;;
+if [ -t 0 ]; then
+ case ${STY+t},${__mdw_precmd_hook+t},${__mdw_preexec_hook+t} in
+ 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.