X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=zsh%2Frc;h=bb11dd714444ca001058e8a02cdb05867ddc3d4a;hb=a0e89499b7a01724b8a2806805d8432e30e4aace;hp=c3fd79fc9544cdd7b1fb493ef8c318cf9eff64dc;hpb=b6ec7a5cd9626062f51f88437b7b4ee4323e85a2;p=config%2Fdotfiles.git diff --git a/zsh/rc b/zsh/rc index c3fd79f..bb11dd7 100644 --- a/zsh/rc +++ b/zsh/rc @@ -18,10 +18,37 @@ source_debug ". ~/.zsh/rc" + +# HELPER FUNCTIONS + +# Return the name of the program which is called in the foreground with `fg`. +# $1 is the name of the program (optional). If it's not 'fg' or 'fg *' it's +# returned unchanged. +resolve_fg_to_resumed_job_name() { + # $REPLY is used by convention for scalars ($reply for arrays) to return + # values from functions. unset it here to prevent problems when REPLY is + # bound to an integer or similar. Thanks to Mikachu in #zsh on Freenode + # (2012-09-27 17:14 CEST) for this hint. + unset REPLY + + # Replace fg with the resumed job name. + if [[ $1 == fg ]]; then + REPLY="${jobtexts[%+]}" + elif [[ $1 == fg\ * ]]; then + REPLY="${jobtexts[${1#fg }]}" + # Normal program, return as is. + else + REPLY="$1" + fi +} + + # MISCELLANEOUS SETTINGS -# Be paranoid, new files are readable/writable by me only. -umask 077 +# Be paranoid, new files are readable/writable by me only, but not as root. +if [[ $UID -ne 0 ]]; then + umask 077 +fi # Disable beeps. setopt nobeep @@ -270,10 +297,17 @@ longrun_data=() # Display runtime in seconds for long running programs (> 60 seconds) and send # a bell to notify me. longrun_preexec() { + local program="$3" + + # Handle fg. + local REPLY + resolve_fg_to_resumed_job_name "$program" + program="$REPLY" + # Don't track the time for certain (possible) long running processes which # need no automatic notification. for ignore in elinks man mutt vim; do - case $3 in + case $program in $ignore | $ignore\ *) longrun_data=() return @@ -281,7 +315,7 @@ longrun_preexec() { esac done - longrun_data=("$3" $EPOCHSECONDS) + longrun_data=("$program" $EPOCHSECONDS) } longrun_precmd() { # No previous timestamp available or disabled for this command, ignore. @@ -398,12 +432,10 @@ if [[ $TERM == screen* || $TERM == xterm* || $TERM == rxvt* ]]; then program_sudo=yes fi - # Replace fg with the resumed job name. - if [[ $program_name == fg ]]; then - program_name=${jobtexts[%+]} - elif [[ $program_name == fg\ * ]]; then - program_name=${jobtexts[${program_name#fg }]} - fi + # Handle fg. + local REPLY + resolve_fg_to_resumed_job_name "$program_name" + program_name="$REPLY" # Remove all arguments from the program name. program_name=${program_name%% *}