keep undistract-me around
This commit is contained in:
parent
1bd83bfec3
commit
f40f06d597
3 changed files with 295 additions and 0 deletions
108
bin/long-running.bash
Normal file
108
bin/long-running.bash
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
# Copyright (c) 2008-2012 undistract-me developers. See LICENSE for details.
|
||||
#
|
||||
# Source this, and then run notify_when_long_running_commands_finish_install
|
||||
#
|
||||
# Relies on http://www.twistedmatrix.com/users/glyph/preexec.bash.txt
|
||||
|
||||
# Generate a notification for any command that takes longer than this amount
|
||||
# of seconds to return to the shell. e.g. if LONG_RUNNING_COMMAND_TIMEOUT=10,
|
||||
# then 'sleep 11' will always generate a notification.
|
||||
|
||||
# Default timeout is 10 seconds.
|
||||
if [ -z "$LONG_RUNNING_COMMAND_TIMEOUT" ]; then
|
||||
LONG_RUNNING_COMMAND_TIMEOUT=10
|
||||
fi
|
||||
|
||||
# The pre-exec hook functionality is in a separate branch.
|
||||
if [ -z "$LONG_RUNNING_PREEXEC_LOCATION" ]; then
|
||||
LONG_RUNNING_PREEXEC_LOCATION=$HOME/bin/preexec.bash
|
||||
fi
|
||||
|
||||
if [ -f "$LONG_RUNNING_PREEXEC_LOCATION" ]; then
|
||||
. $LONG_RUNNING_PREEXEC_LOCATION
|
||||
else
|
||||
echo "Could not find preexec.bash"
|
||||
fi
|
||||
|
||||
|
||||
function notify_when_long_running_commands_finish_install() {
|
||||
|
||||
function active_window_id () {
|
||||
if [[ -n $DISPLAY ]] ; then
|
||||
set - $(xprop -root _NET_ACTIVE_WINDOW)
|
||||
echo $5
|
||||
return
|
||||
fi
|
||||
echo nowindowid
|
||||
}
|
||||
|
||||
function sec_to_human () {
|
||||
local H=''
|
||||
local M=''
|
||||
local S=''
|
||||
|
||||
local h=$(($1 / 3600))
|
||||
[ $h -gt 0 ] && H="${h} hour" && [ $h -gt 1 ] && H="${H}s"
|
||||
|
||||
local m=$((($1 / 60) % 60))
|
||||
[ $m -gt 0 ] && M=" ${m} min" && [ $m -gt 1 ] && M="${M}s"
|
||||
|
||||
local s=$(($1 % 60))
|
||||
[ $s -gt 0 ] && S=" ${s} sec" && [ $s -gt 1 ] && S="${S}s"
|
||||
|
||||
echo $H$M$S
|
||||
}
|
||||
|
||||
function precmd () {
|
||||
|
||||
if [[ -n "$__udm_last_command_started" ]]; then
|
||||
local now current_window
|
||||
|
||||
printf -v now "%(%s)T" -1
|
||||
current_window=$(active_window_id)
|
||||
if [[ $current_window != $__udm_last_window ]] ||
|
||||
[[ $current_window == "nowindowid" ]] ; then
|
||||
local time_taken=$(( $now - $__udm_last_command_started ))
|
||||
local time_taken_human=$(sec_to_human $time_taken)
|
||||
local appname=$(basename "${__udm_last_command%% *}")
|
||||
if [[ $time_taken -gt $LONG_RUNNING_COMMAND_TIMEOUT ]] &&
|
||||
[[ -n $DISPLAY ]] &&
|
||||
[[ ! " $LONG_RUNNING_IGNORE_LIST " == *" $appname "* ]] ; then
|
||||
local icon=dialog-information
|
||||
local urgency=low
|
||||
if [[ $__preexec_exit_status != 0 ]]; then
|
||||
icon=dialog-error
|
||||
urgency=normal
|
||||
fi
|
||||
notify=$(command -v notify-send)
|
||||
if [ -x "$notify" ]; then
|
||||
$notify \
|
||||
-i $icon \
|
||||
-u $urgency \
|
||||
"Long command completed" \
|
||||
"\"$__udm_last_command\" took $time_taken_human"
|
||||
else
|
||||
echo -ne "\a"
|
||||
fi
|
||||
fi
|
||||
if [[ -n $LONG_RUNNING_COMMAND_CUSTOM_TIMEOUT ]] &&
|
||||
[[ -n $LONG_RUNNING_COMMAND_CUSTOM ]] &&
|
||||
[[ $time_taken -gt $LONG_RUNNING_COMMAND_CUSTOM_TIMEOUT ]] ; then
|
||||
# put in brackets to make it quiet
|
||||
export __preexec_exit_status
|
||||
( $LONG_RUNNING_COMMAND_CUSTOM \
|
||||
"\"$__udm_last_command\" took $time_taken_human" & )
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function preexec () {
|
||||
# use __udm to avoid global name conflicts
|
||||
__udm_last_command_started=$(printf "%(%s)T\n" -1)
|
||||
__udm_last_command=$(echo "$1")
|
||||
__udm_last_window=$(active_window_id)
|
||||
}
|
||||
|
||||
preexec_install
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue