X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/74a53e2864888016fbe0dfc7443801db01bd1d04..4c085f9edd6e9faec8938cc6b33f7f3175d35015:/dot/bashrc diff --git a/dot/bashrc b/dot/bashrc index 6d06f7e..f655756 100644 --- a/dot/bashrc +++ b/dot/bashrc @@ -6,13 +6,42 @@ __mdw_shell=bash ## Only do this if we haven't done it before. (Note that this guard isn't ## exported, so subshells will need to make their own arrangements.) -case ${__mdw_shellrc+t} in +case ${__mdw_bashrc+t} in t) ;; - *) __mdw_shellrc=done + *) __mdw_bashrc=t + +###-------------------------------------------------------------------------- +### Hook implementation. + +__mdw_precmd_hook= __mdw_preexec_hook= +__mdw_running=t + +__mdw_run_precmd_hook () { + __mdw_runhook __mdw_precmd_hook "$@" + __mdw_running=nil +} +__mdw_run_preexec_hook () { + case $__mdw_running in + t) ;; + nil) + __mdw_running=t; + set -- $(history 1); shift + __mdw_runhook __mdw_preexec_hook "$*" + ;; + esac +} + +PROMPT_COMMAND=__mdw_run_precmd_hook +trap __mdw_run_preexec_hook DEBUG + +###-------------------------------------------------------------------------- +### Common shell configuration. -## Fetch the common configuration. . "$HOME/.shell-rc" +###-------------------------------------------------------------------------- +### Other preliminaries. + ## If we've not run the main profile yet, we should do that first. It sets ## up things we rely on. Also, if there's a system script, we should run ## that too. @@ -22,16 +51,12 @@ __mdw_source_if_exists /etc/bashrc ## Completion. __mdw_source_if_exists /etc/bash_completion "$HOME/.bash_completion" -## Set the temporary directory again. (If we've switched users, we'll want a -## different temporary directory.) -case ${TMPDIR+t} in t) ;; *) eval $(tmpdir -b); esac - ###-------------------------------------------------------------------------- ### Prompt hacking. __mdw_set_prompt_hacks () { case "$TERM" in - linux*|screen*|xterm*|vt100*|eterm*) + linux*|screen*|xterm*|putty*|vt100*|eterm*) case "$(tput bold)" in "") bold="\[$(tput md)\]" unbold="\[$(tput me)\]" ;; *) bold="\[$(tput bold)\]" unbold="\[$(tput sgr0)\]" ;; @@ -45,18 +70,11 @@ __mdw_set_prompt_hacks () { host='\h' dir=' \w' } -__mdw_before_cmd_hack () { - set -- $(history 1); shift - __mdw_preexec "$*" -} - ## Only bother if the shell is interactive. if [ -t 0 ]; then PROMPT_DIRTRIM=5 __mdw_source_if_exists /usr/lib/git-core/git-sh-prompt __mdw_set_prompt_pieces - PROMPT_COMMAND=__mdw_precmd - PS0="\$(__mdw_before_cmd_hack)" fi ###-------------------------------------------------------------------------- @@ -76,6 +94,7 @@ shopt -s extglob if (( ${BASH_VERSINFO[0]} >= 4 )); then shopt -s globstar; fi shopt -s gnu_errfmt shopt -s histappend +set -o histexpand shopt -s histreedit shopt -u histverify shopt -s hostcomplete