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.
# 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
esac
done
- longrun_data=("$3" $EPOCHSECONDS)
+ longrun_data=("$program" $EPOCHSECONDS)
}
longrun_precmd() {
# No previous timestamp available or disabled for this command, ignore.
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%% *}